Simplify a bit
authorUmmon <greg.burri@gmail.com>
Thu, 7 Dec 2017 11:45:51 +0000 (12:45 +0100)
committerUmmon <greg.burri@gmail.com>
Thu, 7 Dec 2017 11:45:51 +0000 (12:45 +0100)
AdventOfCode2017/Day7.fs

index 2fe6ae0..459f563 100644 (file)
@@ -22,17 +22,17 @@ let parseInput (lines : string list) : Input =
     )
 
 let buildTower (input : Input) : Tower =
-    let rootTowers = Dictionary<string, Tower> ()
+    let towers = Dictionary<string, Tower> ()
 
     for tower, _ in input do
-        rootTowers.Add (tower.Name, tower)
+        towers.Add (tower.Name, tower)
 
     for tower, towersAbove in input do
         for towerAbove in towersAbove do
-            tower.Above.Add rootTowers.[towerAbove]
-            rootTowers.Remove towerAbove |> ignore
+            tower.Above.Add towers.[towerAbove]
+            towers.Remove towerAbove |> ignore
 
-    rootTowers.First().Value
+    towers.First().Value
 
 // Returns the tower and its corrected weight.
 let rec findUnbalanced (tower : Tower) : (Tower * int) option =
@@ -40,5 +40,7 @@ let rec findUnbalanced (tower : Tower) : (Tower * int) option =
         tower.Weight + (tower.Above |> Seq.map weight |> Seq.sum)
 
     match tower.Above |> List.ofSeq |> List.groupBy weight |> List.sortBy (snd >> List.length) with
-    | [ w1, [ unbalanced ]; w2, _ ] -> findUnbalanced unbalanced |> Option.orElse (Some (unbalanced, unbalanced.Weight + w2 - w1))
-    | _ -> tower.Above |> Seq.tryPick findUnbalanced
+    | [ w1, [ unbalanced ]; w2, _ ] ->
+        findUnbalanced unbalanced |> Option.orElse (Some (unbalanced, unbalanced.Weight + w2 - w1))
+    | _ ->
+        None
\ No newline at end of file