|
|
@ -4,9 +4,18 @@ |
|
|
|
|
|
|
|
|
solve(InputData) -> |
|
|
solve(InputData) -> |
|
|
Rucksacks = binary:split(InputData, <<$\n>>, [trim_all, global]), |
|
|
Rucksacks = binary:split(InputData, <<$\n>>, [trim_all, global]), |
|
|
{lists:foldl(fun asdf/2, 0, Rucksacks), none}. |
|
|
|
|
|
|
|
|
{lists:foldl(fun part1/2, 0, Rucksacks), part2(Rucksacks)}. |
|
|
|
|
|
|
|
|
asdf(Rucksack, TotalPriority) -> |
|
|
|
|
|
|
|
|
part2([]) -> 0; |
|
|
|
|
|
part2([Ruck1, Ruck2, Ruck3 | Rest]) -> |
|
|
|
|
|
[Badge] = maps:keys( |
|
|
|
|
|
sets:intersection( |
|
|
|
|
|
sets:intersection(tally(Ruck1), tally(Ruck2)), |
|
|
|
|
|
tally(Ruck3) |
|
|
|
|
|
)), |
|
|
|
|
|
priority(Badge) + part2(Rest). |
|
|
|
|
|
|
|
|
|
|
|
part1(Rucksack, TotalPriority) -> |
|
|
CompartmentSize = byte_size(Rucksack) div 2, |
|
|
CompartmentSize = byte_size(Rucksack) div 2, |
|
|
<<Compartment1:CompartmentSize/binary, Compartment2:CompartmentSize/binary>> = Rucksack, |
|
|
<<Compartment1:CompartmentSize/binary, Compartment2:CompartmentSize/binary>> = Rucksack, |
|
|
[DupeLetter] = maps:keys(sets:intersection(tally(Compartment1), tally(Compartment2))), |
|
|
[DupeLetter] = maps:keys(sets:intersection(tally(Compartment1), tally(Compartment2))), |
|
|
|