Day 2
This commit is contained in:
parent
aedc078ad7
commit
ebecba063e
|
@ -0,0 +1,76 @@
|
|||
defmodule Day2 do
|
||||
def count_characters(id) do
|
||||
id
|
||||
|> String.graphemes()
|
||||
|> Enum.reduce(%{}, fn c, acc ->
|
||||
Map.update(acc, c, 1, &(&1 + 1))
|
||||
end)
|
||||
end
|
||||
|
||||
def checksum(list) do
|
||||
characters = Enum.map(list, &count_characters/1)
|
||||
two = Enum.count(characters, any_char_count(2))
|
||||
three = Enum.count(characters, any_char_count(3))
|
||||
two * three
|
||||
end
|
||||
|
||||
defp any_char_count(n) do
|
||||
fn map ->
|
||||
map
|
||||
|> Enum.to_list()
|
||||
|> Enum.any?(fn {_c, count} -> count == n end)
|
||||
end
|
||||
end
|
||||
|
||||
def diff(a, b) do
|
||||
a = String.graphemes(a)
|
||||
b = String.graphemes(b)
|
||||
Enum.zip(a, b)
|
||||
|> Enum.reduce({0, ""}, fn {a, b}, {diff_count, common} ->
|
||||
cond do
|
||||
a == b ->
|
||||
{diff_count, common <> a}
|
||||
true ->
|
||||
{diff_count + 1, common}
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
def match(id, list) do
|
||||
Enum.reduce_while(list, nil, fn other_id, _acc ->
|
||||
case diff(id, other_id) do
|
||||
{1, common} -> {:halt, common}
|
||||
_ -> {:cont, nil}
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
def correct_boxes(list) do
|
||||
list
|
||||
|> Enum.reduce_while(nil, fn id, _acc ->
|
||||
case match(id, list) do
|
||||
nil -> {:cont, nil}
|
||||
common -> {:halt, common}
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
def except(list, except) do
|
||||
Enum.reject(list, fn el -> el == except end)
|
||||
end
|
||||
|
||||
defp parse_input() do
|
||||
File.read!("lib/day2/input.txt")
|
||||
|> String.split("\n")
|
||||
end
|
||||
|
||||
def part1() do
|
||||
parse_input()
|
||||
|> checksum()
|
||||
end
|
||||
|
||||
def part2() do
|
||||
parse_input()
|
||||
|> correct_boxes()
|
||||
end
|
||||
end
|
|
@ -0,0 +1,250 @@
|
|||
bpacnmelhhzpygfsjoxtvkwuor
|
||||
biacnmelnizqygfsjoctvkwudr
|
||||
bpaccmllhizyygfsjoxtvkwudr
|
||||
rpacnmelhizqsufsjoxtvkwudr
|
||||
bfacnmelhizqygfsjoxtvwwudp
|
||||
bpacnmelhizqynfsjodtvkyudr
|
||||
bpafnmelhizqpgfsjjxtvkwudr
|
||||
bpackmelhizcygfsjoxtvkwudo
|
||||
bmacnmilhizqygfsjoltvkwudr
|
||||
bpafnmelhizuygfsjoxtvkwsdr
|
||||
boacnmylhizqygfsjoxtvxwudr
|
||||
bpbcjmelhizqygfsjoxtgkwudr
|
||||
bpacnmglhizqygfsjixtlkwudr
|
||||
bpacnmclhizqygfsjoxtvkwtqr
|
||||
bpacnmelhczqygtsjoptvkwudr
|
||||
bpacnmelhizqywfsaoxtvkbudr
|
||||
apacnmelhizqygcsjoxtvkwhdr
|
||||
bpacnmelrizqygfsbpxtvkwudr
|
||||
tpkcnmelpizqygfsjoxtvkwudr
|
||||
bpacnmelhizqlgfsjobtmkwudr
|
||||
npacnmelhizqygffjoxtvkwudf
|
||||
bpacnmeehqzqygqsjoxtvkwudr
|
||||
bpecnmelhizqigfsjvxtvkwudr
|
||||
bpacnmelhizqysfsjoxtvkdfdr
|
||||
bpacnfelhkzqygfsjoxtvkwfdr
|
||||
bpacnbelvizqygfsjoxthkwudr
|
||||
bpacnoelhizqygfejoxtvkwudn
|
||||
bpacnmelhizqygfzpkxtvkwudr
|
||||
bpahnmelhizqyufsjoxmvkwudr
|
||||
bpacnmelhizqygfsnoxtvkwmmr
|
||||
bpacnmelhizqygfsjoatvkludf
|
||||
bpacnmylhizqygfsjlxtvksudr
|
||||
bpacnmekhpzqygysjoxtvkwudr
|
||||
bpacnselhizqogfswoxtvkwudr
|
||||
bpacnmelhizqprfsjoxwvkwudr
|
||||
bpatnmelhinqygfsjoctvkwudr
|
||||
bpacnqelhqzqygfsxoxtvkwudr
|
||||
bpabnmelhiyqygfsjoxtykwudr
|
||||
bpacnivlhizqygfsjoxtviwudr
|
||||
bpkcnmylhizqygfsjoxtvkwcdr
|
||||
bpafnmflhizqygtsjoxtvkwudr
|
||||
bpachmelhizqygfsjixtvkwudg
|
||||
bpacymelhizqygfsjoxtykwuar
|
||||
bpacnkelhizqdgfsjoxtskwudr
|
||||
bpacnmezhizqggbsjoxtvkwudr
|
||||
bpacnmqlhizqygrsjoxzvkwudr
|
||||
bpaczmelhizqyhfsjoxfvkwudr
|
||||
bdacnmelhyzqygusjoxtvkwudr
|
||||
bpacbmelhizqywfsjostvkwudr
|
||||
bpacnmelhihzygfstoxtvkwudr
|
||||
bpactmelhizqygfsjcxtvkwydr
|
||||
bkacnmethizqytfsjoxtvkwudr
|
||||
bpacnmalhizqydfskoxtvkwudr
|
||||
spacnmelbizqygfsjoxdvkwudr
|
||||
lpalnmelhizoygfsjoxtvkwudr
|
||||
bpacjmeghizqygfsjoxtviwudr
|
||||
bpacnmeqhizxygfsjoxgvkwudr
|
||||
bpacnmelhizqygosjoxtvkkuhr
|
||||
bpacnmelhiznbxfsjoxtvkwudr
|
||||
bgacnmelhizqygfsjbxivkwudr
|
||||
bpacnmelhizqygfjjowtvswudr
|
||||
bpacnmelhizqygfsjovtgkmudr
|
||||
bpacnmelcmzqygfspoxtvkwudr
|
||||
bpvcnmelhizqyvfcjoxtvkwudr
|
||||
bpacnmeahizqjgfsjoxtvkwukr
|
||||
bpacnoelwizqygfsjoxtvkaudr
|
||||
xpacnmelhizqygfsjoxdvkwedr
|
||||
mpacnmelqizqygfsjoxtvkwudx
|
||||
bppcnmelhizqygfsjfxtvkhudr
|
||||
bpacnmclhizqyhfsjaxtvkwudr
|
||||
opacsmelhizqygfsjmxtvkwudr
|
||||
bpafnmelhizqjgfsjoxtvkrudr
|
||||
bpdcnmilhizqygfsjoxtvkludr
|
||||
bpainmelhizqygfsjtntvkwudr
|
||||
bradnmelhizqygfsjextvkwudr
|
||||
bpacnmelhizqygfmsoxtvkwudg
|
||||
bpacneelhizqygvrjoxtvkwudr
|
||||
bpacnpelhizqygfsjoxyvkwudf
|
||||
bpacnmelhizqygfsqoqtvkwodr
|
||||
bpacnmelhizjyghsjoxcvkwudr
|
||||
bpacnmelmibqygfsjoxtvnwudr
|
||||
jpacnmelaizqygfwjoxtvkwudr
|
||||
zpachmelhizqygfsjsxtvkwudr
|
||||
bpacnmelfizqykfsjomtvkwudr
|
||||
bpacnmllwizqygfsjoxtvkwusr
|
||||
bpaynmelhizqygfsjoxtvowcdr
|
||||
jpacnmqlhizqygfsjoxtvknudr
|
||||
bpacxmelhizqyffsjoxtvkwugr
|
||||
apawnmelhizqygfsjtxtvkwudr
|
||||
mpacnmelhitqigfsjoxtvkwudr
|
||||
bpacnmelhhzqygfsjoxtvkyzdr
|
||||
gpacnmelhizqynfsjoxtvkwudm
|
||||
bnacnkelhizqygfsjoxtpkwudr
|
||||
bpacnmelfizqygfsumxtvkwudr
|
||||
bpacnmelhisqygfsjohtvowudr
|
||||
bpacnmelhimqygxsjoxtvkwudn
|
||||
bpscnmeliizqygfsjoxtvkwunr
|
||||
qpacnmelhizqycfsjoxtvkwndr
|
||||
bpacnmelhijqygfsjohtvkyudr
|
||||
bpacnmelhizqykfsjkxtvknudr
|
||||
bpacnqilhizqygfsjoxtvkoudr
|
||||
bpacnmelhizqzgmsjoxtvkwurr
|
||||
bpdcnmelhizqygfsjoutukwudr
|
||||
bpecnmeghizqygfsjoxgvkwudr
|
||||
bpicnmelhizqygfrjoxtvlwudr
|
||||
bpacnmelhizfygfsroxtvkwodr
|
||||
buacnmelhizqygjsjoxtvkvudr
|
||||
bpacnmelhixqykfsjoxtvrwudr
|
||||
bpacnmelhizqygvejcxtvkwudr
|
||||
bpacnmjlhizqylfsjoxtvkwuor
|
||||
qpacnmelhizqygfsjoxfdkwudr
|
||||
bpfcnmemhizqygfsjoxtvknudr
|
||||
bpacnmelhizqoffsjqxtvkwudr
|
||||
hpacnielhiqqygfsjoxtvkwudr
|
||||
gpacnmelhizqygfsewxtvkwudr
|
||||
bpacnmellizqylxsjoxtvkwudr
|
||||
bpacnmenhizqymfsjoxtvkmudr
|
||||
bpacnfelhizqygcsjoltvkwudr
|
||||
bpacnmelhqqqygfsjoxtvkuudr
|
||||
bplgnmelhiqqygfsjoxtvkwudr
|
||||
bpacnzelhizqygfgjoxtvnwudr
|
||||
bpacnmelhizqygfsjoktvknunr
|
||||
bpacnmdlhioqygfnjoxtvkwudr
|
||||
epacnmelwizqyjfsjoxtvkwudr
|
||||
bpacxmelhazfygfsjoxtvkwudr
|
||||
bpacnmejhezqygfsjoxtskwudr
|
||||
bpacnqelhihqyzfsjoxtvkwudr
|
||||
bpacnbelhizqyrfsjoxtvkmudr
|
||||
bpacnmelhizqygfsjoxtylwzdr
|
||||
bpacnmelwizqygfsjodtvkhudr
|
||||
bpacnnelhizqygfsjoxtwkwadr
|
||||
bpacimelhizqygfsnoxtvkwuor
|
||||
bpacnmelhizqyaasjoxtlkwudr
|
||||
bpacnmelhizqyeffjoxtvkwuds
|
||||
bpacnmenhizqygxscoxtvkwudr
|
||||
bpacnmelhidqygfsjowtskwudr
|
||||
bpacnmeliizqygfsjoxhvkwucr
|
||||
bpacimelhizqygfsjoxtvktuwr
|
||||
bpainmelhhzqygfsjzxtvkwudr
|
||||
bpacamelhizqygfsjogtvkwbdr
|
||||
bpccnmelgizqygfsjoxtykwudr
|
||||
bpacnmelhizwegfsjoxtvkwadr
|
||||
bpackmelhbzqygqsjoxtvkwudr
|
||||
bpacymeihizqyffsjoxtvkwudr
|
||||
bpacnielhczqygfsjoxtvkwudk
|
||||
bpacnmejhizqygffjoxjvkwudr
|
||||
ppacnmelhizqygfsjoxtigwudr
|
||||
bpjcnmolhizqygfsjoxtvkwndr
|
||||
bpacnmelcizqygrsjoxtakwudr
|
||||
cpawnmelhizqygfsjoxmvkwudr
|
||||
bwacnmelhizqygesjoxtakwudr
|
||||
bpacnmelhizqygfsjexsvkwddr
|
||||
bpaunmelhiuqygfsjoxtvkwtdr
|
||||
bpacnmellimqygfsjextvkwudr
|
||||
bpacnmerhizqygfsaoxvvkwudr
|
||||
bpacnmglhizqygfsjixtukwudr
|
||||
ppacnmelhizqygfsjoxtvkdudp
|
||||
bpacnmedhizqygukjoxtvkwudr
|
||||
bpccnmelhizqngfsjoxtvkwadr
|
||||
bgacnmeldizqygfscoxtvkwudr
|
||||
bpacngelhizsygfsjoxtvkwkdr
|
||||
bpacnpelhizqygfsjoxctkwudr
|
||||
bpacnmylhizqygfcjoxtvkwmdr
|
||||
npacnmelhizqygfsjoxtwkwuds
|
||||
bpaxnmelhizqydfsjoxyvkwudr
|
||||
bpacnhelhizjygfsjoxtvkmudr
|
||||
bpacnkelhczqygfnjoxtvkwudr
|
||||
bfacnmelhizrygfsjoxtvkwodr
|
||||
bpycnmelhizqygfofoxtvkwudr
|
||||
qpacpselhizqygfsjoxtvkwudr
|
||||
bpvcnmelhezqygfsjoxttkwudr
|
||||
bpacnmwlhizqygfijoxtmkwudr
|
||||
bsacnmelhikqygfsjoxttkwudr
|
||||
bpccnxelhizqyafsjoxtvkwudr
|
||||
bpacnmelhizqygfswhxtvewudr
|
||||
vpacnmzlhizqygfsvoxtvkwudr
|
||||
bpacnmelhihqygfsjoxtvkqurr
|
||||
bpacnmelhixqygazjoxtvkwudr
|
||||
bpavnmelhizqygfsjozpvkwudr
|
||||
bpacnmclhizuygfsjoxmvkwudr
|
||||
bpacnmelhizryufsjoxtkkwudr
|
||||
bpacnmelhtzqygfsjobtvkwufr
|
||||
bpacnmelhizqmlfsjoxtvkwudq
|
||||
bpaaneelhizqygfsjlxtvkwudr
|
||||
bpacnmelhxzqygfsjoxthkwuhr
|
||||
bpacnmeshizqygfcjoxtvkwude
|
||||
bpacnzqlhizqygfsxoxtvkwudr
|
||||
bgaanmelhizqycfsjoxtvkwudr
|
||||
bpacnmexhizqygfsroxtvkwudn
|
||||
bpmmnmelhizqygfajoxtvkwudr
|
||||
bpacnmelhizqylfsjoxtckwhdr
|
||||
bpicnmelhizqyrfsjoxtvkwudi
|
||||
zpacnmelhizvycfsjoxtvkwudr
|
||||
bpamnmkllizqygfsjoxtvkwudr
|
||||
bpacnmelhrzqyrfsjoxgvkwudr
|
||||
bpadnmelhczqygfsjoxtlkwudr
|
||||
bpacrmelhizqygrsjoxtvkiudr
|
||||
lpacnmelhizqygfsjoxtgkwxdr
|
||||
fpacnmalhiuqygfsjoxtvkwudr
|
||||
bpacnmelhizqygfsjixtvfwcdr
|
||||
bpccnmelhxzqygfkjoxtvkwudr
|
||||
bpacnmepaizqygfsjoctvkwudr
|
||||
tpacnmelhivqygfsxoxtvkwudr
|
||||
kpacnfelhitqygfsjoxtvkwudr
|
||||
baacnzelhizqygfsjoxtvkwudx
|
||||
bcycnmeghizqygfsjoxtvkwudr
|
||||
wpacotelhizqygfsjoxtvkwudr
|
||||
bpacnmsshizqygrsjoxtvkwudr
|
||||
blacnmelhizqygfsjoxtykwvdr
|
||||
bkacnmelhizqygfsjoxuvkludr
|
||||
bpacnmelhizaugfsjoxtvhwudr
|
||||
fpavnmelhizqygfsgoxtvkwudr
|
||||
bpachmelnizqygfsjextvkwudr
|
||||
bpacnmelhizqpgfsjoxtvkwldu
|
||||
bpacnmelhizqygfsloftvywudr
|
||||
bpacntelhvzqygfejoxtvkwudr
|
||||
bpacnmeldizqygfsjmxtvkdudr
|
||||
byacnmelhizqygfsjsxtvkwudh
|
||||
bpacnmellizqygssxoxtvkwudr
|
||||
bpacnmelhizqygfsjootvknuir
|
||||
bpacnmelhitqjgfsjoxivkwudr
|
||||
bpacnmelhazaygfsjoxtvfwudr
|
||||
bpacnzenhizqygfsjzxtvkwudr
|
||||
bpacnmelhizqypfsdoxtvkwuar
|
||||
bpannmelhizqygnsjoxtvkwndr
|
||||
bracnmeldizsygfsjoxtvkwudr
|
||||
bpacnmelhizwygfsjugtvkwudr
|
||||
bpatnmelhizqygfsjoytvkwulr
|
||||
upacnmelhizqygfsjurtvkwudr
|
||||
bpaenmezhizqygfsjostvkwudr
|
||||
bpacnmelhizpygfsjodhvkwudr
|
||||
bpacnmelhizqygfsjogtvkguwr
|
||||
bpacnmelhisqygfsjoxtpkuudr
|
||||
bxacnmelhizqygfsjdxtvkfudr
|
||||
bpacnmelhizqygfsjohqvkwudu
|
||||
bzacnmtlhizqygfsjoxsvkwudr
|
||||
bpacnmplhixrygfsjoxtvkwudr
|
||||
bpacnmelhizqhgfsjomtvkwudg
|
||||
bpacnmezhizqygfsjxxtykwudr
|
||||
bpacnmwlhizqygfujoxtzkwudr
|
||||
tpacnmelhizqygfsjoxkvpwudr
|
||||
bpawsmenhizqygfsjoxtvkwudr
|
||||
bpacnmelhizqtgfsjoxttkwuqr
|
||||
bpkcbmelhizqygfsjoxtvkwucr
|
||||
bpacfmekhizqygfsjoxtvkwuds
|
||||
bpacnmethizqynfajoxtvkwudr
|
||||
bpocnmclhizqygfsjoxtvkwukr
|
||||
zpacnmwlhizqygfsjoxzvkwudr
|
||||
bpacpoelhqzqygfsjoxtvkwudr
|
||||
bpacnlelhizqyzfsjoxtvkwukr
|
|
@ -0,0 +1,29 @@
|
|||
defmodule Day2Test do
|
||||
use ExUnit.Case
|
||||
doctest Day2
|
||||
|
||||
test "count characters" do
|
||||
assert Day2.count_characters("abcdef") == %{"a" => 1, "b" => 1, "c" => 1, "d" => 1, "e" => 1, "f" => 1}
|
||||
assert Day2.count_characters("bababc") == %{"a" => 2, "b" => 3, "c" => 1}
|
||||
assert Day2.count_characters("abbcde") == %{"a" => 1, "b" => 2, "c" => 1, "d" => 1, "e" => 1}
|
||||
end
|
||||
|
||||
test "checksum list" do
|
||||
list = ["abcdef", "bababc", "abbcde", "abcccd", "aabcdd", "abcdee", "ababab"]
|
||||
assert Day2.checksum(list) == 12
|
||||
end
|
||||
|
||||
test "diff" do
|
||||
assert Day2.diff("fghij", "fguij") == {1, "fgij"}
|
||||
end
|
||||
|
||||
test "match" do
|
||||
list = ["abcde", "fghij", "klmno", "pqrst", "fguij", "axcye", "wvxyz"]
|
||||
assert Day2.match("fghij", list) == "fgij"
|
||||
end
|
||||
|
||||
test "correct boxes" do
|
||||
list = ["abcde", "fghij", "klmno", "pqrst", "fguij", "axcye", "wvxyz"]
|
||||
assert Day2.correct_boxes(list) == "fgij"
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue