diff --git a/day2.exs b/day2.exs new file mode 100644 index 0000000..620ba5a --- /dev/null +++ b/day2.exs @@ -0,0 +1,40 @@ +defmodule Day2 do + def get_lines() do + File.stream!("day2.in") + |> Stream.map(&String.trim/1) + end + + def find_subcount(count) do + get_lines() + |> Enum.reduce(0, fn x, acc -> + if x + |> String.graphemes() + |> Enum.sort() + |> Enum.uniq() + |> Enum.any?(fn y -> + Enum.count(String.graphemes(x), &(&1 == y)) == count + end) do + acc + 1 + else + acc + end + end) + end + + def find_common_chars() do + get_lines() + |> Enum.reduce(%MapSet{}, fn x, acc -> + x + |> String.graphemes() + |> Enum.with_index() + |> Enum.reduce(acc, fn {_c, i}, seen -> + pair = {i, String.slice(x, 0, i) <> String.slice(x, (i + 1)..-1)} + if MapSet.member?(seen, pair), do: IO.puts(elem(pair, 1)) + MapSet.put(seen, pair) + end) + end) + end +end + +IO.puts(Day2.find_subcount(2) * Day2.find_subcount(3)) +Day2.find_common_chars() diff --git a/day2.in b/day2.in new file mode 100644 index 0000000..65ade4b --- /dev/null +++ b/day2.in @@ -0,0 +1,250 @@ +cvfueihajytpmrdkgsxfqplbxn +cbzueihajytnmrdkgtxfqplbwn +cvzucihajytomrdkgstfqplqwn +cvzueilajytomrdkgsxfqwnbwn +cvzueihajytomrdkgsgwqphbwn +wuzuerhajytomrdkgsxfqplbwn +cyzueifajybomrdkgsxfqplbwn +cvzueihajxtomrdkgpxfqplmwn +ivzfevhajytomrdkgsxfqplbwn +cvzueihajytomrdlgsxfqphbbn +uvzueihajjtomrdkgsxfqpobwn +cvzupihajytomrdkgsxfqplpwe +cvzueihajyvomrdkgsxfqplbrl +cczueihajytomrdkgsnfqpxbwn +cvzueigajytdmrdkgsxyqplbwn +cvzujihljytomrdkgsxuqplbwn +cvzueisajytomrddgsxkqplbwn +cvzneihajytomrdkgsgaqplbwn +cvzueihajytomrdkgsinmplbwn +cveueihajyromrdkgsxfqplown +cypueihajytotrdkgzxfqplbwn +cvzuoihajytomvdqgsxfqplbwn +cvzuekhejytwmrdkgsxfqplbwn +cvzseihajytomrdkgsxfqgmbwn +cvfuhihajytomrdkgsxfqplbwi +cvzueihujxtomrdkgsufqplbwn +cvzueihdjytomrdogsxfqplbwh +cvzueihdjyfohrdkgsxfqplbwn +cvtudihajytolrdkgsxfqplbwn +cvzueihajytymrdkgshzqplbwn +cvzuebhajytomxdkgsxfqplbwt +cvzulihajyxomrdkgsbfqplbwn +cvzueihajywomrdkgsxfqplbts +cvzueihajytouodkdsxfqplbwn +cvzueihajytomgdkgqxfqklbwn +cvzubihajytomvdkgsxfqplmwn +cvhueihajyyocrdkgsxfqplbwn +zvzueihajytourdkgsxflplbwn +cvzbeihajytomadkgsxfoplbwn +cvzueihajytomrdkgnxfqplbsl +cvfueihajftkmrdkgsxfqplbwn +cvzuexhajytomryugsxfqplbwn +cvzueihajytomsckgsxfqalbwn +cvzuexhajytomrdkbsxfqpluwn +cvzueihajytbmrtkgsxwqplbwn +cvzueihajytomrdigsxfqqlbsn +cvzweihajytomydkgsxfmplbwn +bvzteihajytimrdkgsxfqplbwn +cvzueihajytpmrdkgsxfcpbbwn +cvzueigsjltomrdkgsxfqplbwn +cvzueihajytomrikgsxfopldwn +cvzueihajstomrdkgsxfqplgon +cvzueimajytomrnkxsxfqplbwn +cvzleihagatomrdkgsxfqplbwn +cvbueihajotomrdkgsxfqjlbwn +cvzueihajytomrdkgsxfqppnvn +hvzueihajytomrdkghxfkplbwn +cvzueigajytxmrdkgsxfqplbjn +cvzueihaaxtokrdkgsxfqplbwn +cvzueihajyeomrdkgujfqplbwn +cvzueiwajpoomrdkgsxfqplbwn +cvzieidtjytomrdkgsxfqplbwn +cvzueihalytomrakbsxfqplbwn +wtzueihajytomrdkgsxfqplbwq +cvzuelhaiytomrdkgsxfqplcwn +cvzueihajytomrdkgsxfqslswd +cvzueihajytomrykgssfqplbon +cvzueihfjytovrdegsxfqplbwn +cvzueihajytomldqgsxfqplbwy +cvzleihjjytomrtkgsxfqplbwn +cvzueihaldtomrdtgsxfqplbwn +cvzueihajytzmrdkgsxfeplqwn +cvzueihrjytomddkgsxfqpgbwn +cyzulihajytokrdkgsxfqplbwn +cvsueihajytoordfgsxfqplbwn +fvzueyhajytomrdkgaxfqplbwn +cczueihajytobrdkgsefqplbwn +cvzueihajytomcdrgscfqplbwn +cvzuexhajyvomrdkgssfqplbwn +cvzsmihajyiomrdkgsxfqplbwn +cvzzeihajttomrdkgsxzqplbwn +cvzseihajytomrdkgsxfqpebvn +cvzueihajgthmrdkgsbfqplbwn +ruzueihajytomrdkgsxfqphbwn +cvzueihajytofrdkgsnfrplbwn +cvzuetdajytojrdkgsxfqplbwn +fvzueihajytomrdkghxfqpobwn +cvzueihsjytomrdkgsxfqglbxn +cvzueihajytowrdkgsxfqpsbun +cvzteihaiytomrdkfsxfqplbwn +cvzueihajytkmrdkrsxfqplvwn +cvzueihajyoomrdkasxfqjlbwn +lvzurihajytkmrdkgsxfqplbwn +cvzueihajyyomrdagsxfqelbwn +cvfueihajytomrdkgsxfqplbbx +cvwueihajytommdkgkxfqplbwn +cvzucicajytomrdkgsxcqplbwn +dvzueihahytgmrdkgsxfqplbwn +cvzuechajytomrdkgsxfqelwwn +cvzuekhajytomrdkgsxknplbwn +cvtueihajytomphkgsxfqplbwn +cvzueihabytnzrdkgsxfqplbwn +cvzusihajytomrdkgfxfqplban +cvfueihajytomcdfgsxfqplbwn +mvzueihapytomrdkgsxfdplbwn +cvzueihajytomhdkgsxmqppbwn +jvsueihajytomrdkgsxfqplbln +cvzujihajybomrdkgsxtqplbwn +cvzuekhawytomrdkgsxfqplbwc +svzueihanytomrdogsxfqplbwn +cvzujihajytodrdkgslfqplbwn +cvgdeihajytorrdkgsxfqplbwn +cvzbeihajytoprdkgsxfqplbyn +cvzueihkyytomjdkgsxfqplbwn +cvzuelhojytomrdkgsxfqjlbwn +evzueihajytimrdkgsxfqpsbwn +cvzueihajydomrdkjsxfqplbjn +ovzteihajytosrdkgsxfqplbwn +cvzueihajyaomrdzgsxfqplbgn +cvzuewhajmtomrdkgsufqplbwn +cvzueihajqtomhukgsxfqplbwn +cvzueihajytomzqkgsxfqplbwk +cazuewhakytomrdkgsxfqplbwn +clzueihatytomrdkgzxfqplbwn +dvzueihajytomqdkgsxfqpnbwn +cvzueidajdtomrdkgsxtqplbwn +cvzueihabytowrdkgsxoqplbwn +cvzujihwjytomrdkgsxeqplbwn +cvtuedhajytomrdkgsxfqplbbn +cvzueihajcgomrdkgsxfqplswn +cvzuephajyiomrdngsxfqplbwn +cvzueihajythmqdkgsxfqplbwf +cvzueitajytomrdkgsxfepvbwn +cvzueihajytomydkgsxfqplvwb +dvzueshajytomrddgsxfqplbwn +cvzueihajytomrdkgvxfqpwben +cvzueihajytomrdkgvxfpplwwn +cvzuefhajftomrdkgsxfqrlbwn +cvzueihajytpmrvkgsxfqplbcn +cvzueihajytohrdkgsxfqxnbwn +cvzueihajytomrdposxfqulbwn +cozueihajytomrpkgsxfqrlbwn +cvzuuihaxytomrdkgsxfqplbtn +cvzueihajytomrbzgsxyqplbwn +cveueihajyxoqrdkgsxfqplbwn +cvzueihajytomrkkgsxfqptbrn +cvzuezhajatomrdkssxfqplbwn +cpzueihajytomrdkgsxfhplbwo +lviueihajytomrekgsxfqplbwn +cvzueihwjytomrdkusxfyplbwn +cvzgeihajytomwdkgsxfrplbwn +cvzsejhzjytomrdkgsxfqplbwn +cvzuuihajytomrdkgsxfqdlbwz +cvzjeihajytomrdugsxftplbwn +cvzueihaxytomrrkgsxfmplbwn +cvzueihajgtomrdhgsxfqplwwn +cvzulihajytomedkgsxfqplewn +cvzueivajytomrdkmsxfqplbwc +cvzuervajytomrdkgsxfwplbwn +cvzuemhcjytomrdkgslfqplbwn +cvzyerhauytomrdkgsxfqplbwn +cvzueihaoytomrdkgsyfqplewn +cvzueihanytomrdkgsafkplbwn +cvzueihajvtomrdugsxfqpcbwn +chzueihajytamrdxgsxfqplbwn +cvzueihalytomrdsgsxfqplbln +cvzueihajytoyaykgsxfqplbwn +tlzueihajyeomrdkgsxfqplbwn +cvpueihajytbmrdkgsxfxplbwn +cvzueihajytomjdkgsxuqplkwn +cvzueihajygomrdkgkxfqplbwg +cvzueihajhtomrdkgbxsqplbwn +cvzurihajytomrdkgsafqplbwx +cdzuezhajytomrdkgsxrqplbwn +cvbueihajytotrwkgsxfqplbwn +cwzkeihajytomrdkgsxfqplbwh +cvzheihajytolrikgsxfqplbwn +cozuevhajytomrdkgkxfqplbwn +chzueihajytomrjkgsxfqulbwn +cvzueihkjyromrdkgsxvqplbwn +cvzveihajytomrdkgsxpqplnwn +cvzueihajytoirdkgsxfqihbwn +cvoueihajytomrdkgsxfqpdawn +pvzueihajytomrdkgnxfqplbfn +cvzueihakytomxdkgssfqplbwn +cvzueivajytomrdbgsxaqplbwn +cvzueihajytokrdkgszrqplbwn +cvzuevhajytomrdkgsxgqplbwi +cvzueihajylomrdkgsxflplbpn +hvzueihajytomvdkgsxfqplgwn +cvzleihajytymrrkgsxfqplbwn +crzueieajytomrdkgsxfqplbon +cszueihajytomrdlgqxfqplbwn +cvzueihacytomrdkgsxfjblbwn +cvzreihajytomrdkgsxfqplzun +cvzurihajytomrdkgsxiqplawn +uvzueihajyhovrdkgsxfqplbwn +cvzueihajyqodrdkgssfqplbwn +cvzwiihrjytomrdkgsxfqplbwn +cqzueihajytomrdkgjxfqplban +cvmueihajytoordkgsxfqplbyn +cypueihajytomrdkgzxfqplbwn +cvzueihajykomrdkgsmfqplbtn +cvzueidajytimrdkgsxfqpdbwn +cvzheihajytomrdkgsxfqpfewn +dvzueihajytumrdzgsxfqplbwn +cvzueixajytomrdkgsvfqplgwn +cvzuevhzjyzomrdkgsxfqplbwn +cvyeeihajytomrdkgsxnqplbwn +cvzueihajytomrdkggtpqplbwn +cvzceiyajytomrdkgexfqplbwn +cvzuelhajyyomrdkzsxfqplbwn +cvzhzihajygomrdkgsxfqplbwn +cvzueihwjytomrdkgsgfqplbrn +cvzsevhajytomrdkgqxfqplbwn +cvzueiuajytomrdkgsxfppebwn +nvzueihajytemrdkgsxwqplbwn +cvzueihajytocgdkgsxfqvlbwn +cczusihajytomrdkgsxfqplbpn +cmzueihajytomrdkbsxwqplbwn +cvzumfdajytomrdkgsxfqplbwn +cvzueihcjytomrdkgsxfqplbkl +cvzueihajytomawknsxfqplbwn +kvzueihijytomrdkgsxdqplbwn +cdzutihajytomrdkgsxfkplbwn +cvzufihadylomrdkgsxfqplbwn +cvzueihajytomrgkxsxfqphbwn +cvzuewhajyzomrdkgsxfqelbwn +cvzueihajytomrdkgqxfqelbwc +cvzueshajyoomrdkgsxfqflbwn +cvzueihajyromrekgixfqplbwn +chzugihajytomrdkgsxfqplawn +cvzueihajytomrdkgsxfhpmbwy +cvzueihacytodxdkgsxfqplbwn +cvzurihajytourdkgsdfqplbwn +cvzzeihmjytomrddgsxfqplbwn +cvzucyhajygomrdkgsxfqplbwn +ckzueihzjytomrdkgsxwqplbwn +cvlueihajmtozrdkgsxfqplbwn +cvzkeihajytomrdkgsxfqclbwc +cvzueihajytomrdkgsxgdplbwa +cvzueihyjytoxrdkgcxfqplbwn +cvzueizavytomfdkgsxfqplbwn +cvzueihajwtosrdkgsxfqllbwn +cvzueihajytomrdaksxfqpllwn +cvzuuihojytombdkgsxfqplbwn +cvzuiibajytpmrdkgsxfqplbwn +cvzueihajyuomydkgsxfqplzwn +cvzueihajytimrmkgsxfqplfwn +cvzueihajytomrdkgzxfqpljwo