blob: 1f0f78f1ffc67eb7d3797e1a720f4634ec08180a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
module Day04
open System.IO
open FParsec
open Common
let parseLine =
let prange = pint32 .>> pstring "-" .>>. pint32
let ppair = prange .>> pstring "," .>>. prange .>> eof
Util.parse ppair
let fullyOverlap ((a, b), (c, d)) =
(a <= c && d <= b) || (c <= a && b <= d)
let overlapAtAll ((a, b), (c, d)) = a <= d && b >= c
let solution predicate =
Seq.map parseLine >> Util.countWhere predicate
let test = File.ReadLines "test.txt"
assert (solution fullyOverlap test = 2)
assert (solution overlapAtAll test = 4)
let input = File.ReadAllLines "input.txt"
printfn "%d" <| solution fullyOverlap input
printfn "%d" <| solution overlapAtAll input
|