diff options
Diffstat (limited to 'solutions/day4.fs')
-rw-r--r-- | solutions/day4.fs | 56 |
1 files changed, 27 insertions, 29 deletions
diff --git a/solutions/day4.fs b/solutions/day4.fs index beb0515..82b523c 100644 --- a/solutions/day4.fs +++ b/solutions/day4.fs @@ -1,35 +1,33 @@ -namespace Solutions +module Solutions.Day4 +open System.IO +open System.Text.RegularExpressions -module Day4 = - open System.IO - open System.Text.RegularExpressions +type range = { + startID: int; + endID: int +} - 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 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 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 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 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 +let part2 () = ranges |> Seq.filter overlaps |> Seq.length \ No newline at end of file |