From d47a200ff9bef16b5d0a6258dc0e963b44db366d Mon Sep 17 00:00:00 2001 From: Brian Chu Date: Sat, 3 Dec 2022 21:44:55 -0800 Subject: solution for day 4 --- solutions/day4.fs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 solutions/day4.fs (limited to 'solutions') diff --git a/solutions/day4.fs b/solutions/day4.fs new file mode 100644 index 0000000..beb0515 --- /dev/null +++ b/solutions/day4.fs @@ -0,0 +1,35 @@ +namespace Solutions + +module Day4 = + open System.IO + open System.Text.RegularExpressions + + type range = { + startID: int; + endID: int + } + + let getRanges input = + let matches = Regex.Matches(input, "(\d+)-(\d+),(\d+)-(\d+)") + |> Seq.head + |> fun x -> x.Groups + |> Seq.map (fun x -> x.Value) + |> List.ofSeq + |> List.tail + assert (Seq.length matches = 4) + {startID = int matches[0]; endID = int matches[1]}, {startID = int matches[2]; endID = int matches[3]} + + let ranges = File.ReadLines("inputs/day4.txt") |> Seq.map getRanges + + let contains (rangeA, rangeB) = + (rangeA.startID <= rangeB.startID && rangeA.endID >= rangeB.endID) || (rangeA.startID >= rangeB.startID && rangeA.endID <= rangeB.endID) + + let part1 () = ranges |> Seq.filter contains |> Seq.length + + let overlaps (rangeA, rangeB) = + (rangeA.startID >= rangeB.startID && rangeA.startID <= rangeB.endID) || + (rangeA.endID >= rangeB.startID && rangeA.endID <= rangeB.endID) || + (rangeB.startID >= rangeA.startID && rangeB.startID <= rangeA.endID) || + (rangeB.endID >= rangeA.startID && rangeB.endID <= rangeA.endID) + + let part2 () = ranges |> Seq.filter overlaps |> Seq.length \ No newline at end of file -- cgit 1.4.1-2-gfad0