A bit less verbose
authorUmmon <greg.burri@gmail.com>
Thu, 7 Dec 2017 09:22:01 +0000 (10:22 +0100)
committerUmmon <greg.burri@gmail.com>
Thu, 7 Dec 2017 09:22:01 +0000 (10:22 +0100)
AdventOfCode2017/Day7.fs

index 1dd4728..e04f4ba 100644 (file)
@@ -44,13 +44,12 @@ let rec findUnbalanced (tower : Tower) : (Tower * int) option =
     let rec weight tower =
         tower.Weight + (tower.Above |> Seq.map weight |> Seq.sum)
 
-    let towersByWeight = tower.Above |> Seq.groupBy weight |> Seq.sortBy (snd >> Seq.length)
+    let towersByWeight = tower.Above |> Seq.groupBy weight |> Seq.sortBy (snd >> Seq.length) |> List.ofSeq
 
-    if towersByWeight |> Seq.length > 1 then
-        let unbalanced = towersByWeight |> Seq.item 0
-        let others = towersByWeight |> Seq.item 1
+    match towersByWeight with
+    | unbalanced :: others :: [] ->
         let delta = fst others - fst unbalanced
         let unbalanced' = unbalanced |> snd |> Seq.head
         findUnbalanced unbalanced' |> Option.orElse (Some (unbalanced', unbalanced'.Weight + delta))
-    else
+    | _ ->
         tower.Above |> Seq.tryPick (fun t -> findUnbalanced t)