summary refs log tree commit diff stats
path: root/solutions/day4.fs
diff options
context:
space:
mode:
Diffstat (limited to 'solutions/day4.fs')
-rw-r--r--solutions/day4.fs56
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