-module(day3). -export([solve/1]). solve(InputData) -> Rucksacks = binary:split(InputData, <<$\n>>, [trim_all, global]), {lists:foldl(fun asdf/2, 0, Rucksacks), none}. asdf(Rucksack, TotalPriority) -> CompartmentSize = byte_size(Rucksack) div 2, <> = Rucksack, [DupeLetter] = maps:keys(sets:intersection(tally(Compartment1), tally(Compartment2))), priority(DupeLetter) + TotalPriority. tally(Compartment) -> tally(Compartment, #{}). tally(<<>>, Set) -> Set; tally(<>, Set) when is_map_key(Item, Set) -> tally(Rest, Set); tally(<>, Set) -> tally(Rest, Set#{Item => []}). priority(Item) when Item >= $a andalso Item =< $z -> Item - $a + 1; priority(Item) when Item >= $A andalso Item =< $Z -> Item - $A + 27.