From: Ummon Date: Thu, 7 Dec 2017 09:22:01 +0000 (+0100) Subject: A bit less verbose X-Git-Url: https://git.euphorik.ch/?a=commitdiff_plain;h=465a8f21d65b320024a984103aa5f2bdbd595e77;p=advent_of_code_2017.git A bit less verbose --- diff --git a/AdventOfCode2017/Day7.fs b/AdventOfCode2017/Day7.fs index 1dd4728..e04f4ba 100644 --- a/AdventOfCode2017/Day7.fs +++ b/AdventOfCode2017/Day7.fs @@ -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)