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