diff options
author | Brian Chu <brianmchu42@gmail.com> | 2022-12-02 21:46:23 -0800 |
---|---|---|
committer | Brian Chu <brianmchu42@gmail.com> | 2022-12-02 21:46:23 -0800 |
commit | 778f61bc932c96c4860d69c80ef002d86b22073c (patch) | |
tree | 61984ae4e1719eb40ddec5c331e2e8f42dfb9fb7 /solutions | |
parent | 91645b267eec14b2d80da55f3df53a6e88cb011c (diff) | |
download | AdventOfCode2022-778f61bc932c96c4860d69c80ef002d86b22073c.tar.gz |
solution for day 3
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 |