summary refs log tree commit diff stats
path: root/solutions/day3.fs
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