summary refs log blame commit diff stats
path: root/solutions/day3.fs
blob: 541a0b4e31617807533ce2c4ff1ea7ba1d8503a9 (plain) (tree)
1
2
3

                     
 




















                                                                                                           
module Solutions.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