blob: cebfde556421a74231cbb899a763aa8462c45937 (
plain) (
blame)
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
|
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
|