diff options
Diffstat (limited to 'solutions')
-rw-r--r-- | solutions/day3.fs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/solutions/day3.fs b/solutions/day3.fs new file mode 100644 index 0000000..cebfde5 --- /dev/null +++ b/solutions/day3.fs @@ -0,0 +1,26 @@ +namespace Solutions + +module Day3 = + open System.IO + + let lines = File.ReadLines("inputs/day3.txt") + let rucksacks = lines + |> Seq.map (fun x -> (Set.ofSeq x[0..x.Length / 2 - 1], Set.ofSeq x[x.Length/2..x.Length])) + let groups = lines + |> Seq.map Set.ofSeq + |> Seq.splitInto (Seq.length lines / 3) + + let prioritize ch = + match ch with + | x when 'a' <= x && x <= 'z' -> int x - int 'a' + 1 + | x when 'A' <= x && x <= 'Z' -> int x - int 'A' + 27 + | _ -> 0 + + // extract the single element from the set with maxElement + let part1 () = rucksacks + |> Seq.map ((fun (x, y) -> Set.intersect x y |> Set.maxElement) >> prioritize) + |> Seq.sum + + let part2 () = groups + |> Seq.map (Set.intersectMany >> Set.maxElement >> prioritize) + |> Seq.sum \ No newline at end of file |