From 336dc780c8d2b84ddd2cdf13ceb7d4a4c2a4231f Mon Sep 17 00:00:00 2001 From: Shanti Chellaram Date: Sat, 3 Dec 2022 15:39:35 +0900 Subject: [PATCH] Day 3-1 --- day3.erl | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 day3.erl diff --git a/day3.erl b/day3.erl new file mode 100644 index 0000000..81fffac --- /dev/null +++ b/day3.erl @@ -0,0 +1,22 @@ +-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. +