summary refs log blame commit diff stats
path: root/solutions/day4.fs
blob: 82b523c13b1df8d28fe5b35816a43ea0d7a5e31e (plain) (tree)
1
2
3
4
5
6
7
8
9


                                   
 



                 
 










                                                                                                          
 

                                                                                                                                            
 
                                                          
 




                                                                           
 
                                                         
module Solutions.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