From 50beae2167a705f694e4da4fa1ff63cfb1b2b16b Mon Sep 17 00:00:00 2001 From: Brian Chu Date: Sat, 8 Jan 2022 12:00:10 -0800 Subject: solution for day 20 --- day20.fsx | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 day20.fsx 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 -- cgit 1.4.1-2-gfad0