diff options
-rw-r--r-- | day20.fsx | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/day20.fsx b/day20.fsx new file mode 100644 index 0000000..595a1eb --- /dev/null +++ b/day20.fsx @@ -0,0 +1,27 @@ +open System.IO + +let lines = File.ReadAllLines "day20.txt" + |> Array.map (fun x -> x.Split "-") + |> Array.map (fun x -> (int64 x[0], int64 x[1])) + |> Array.sortBy fst + |> List.ofArray + +let rec minIP blocked inputs= + match inputs with + | (lo, hi)::rest -> + if lo > blocked + 1L then blocked + 1L + else minIP (max blocked hi) rest + | _ -> 0L + +let getAllowed blockedRanges = + let rec mergeRanges n ranges = seq { + match ranges with + | [] -> yield (n,4294967295L) + | (lo,hi)::tail -> + if n < lo then yield (n,lo-1L) + yield! mergeRanges (max n (hi+1L)) tail + } + mergeRanges 0L blockedRanges + +minIP 0L lines |> printfn "%A" +getAllowed lines |> Seq.sumBy (fun (lo, hi) -> hi - lo + 1L) |> printfn "%d" \ No newline at end of file |