about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBen Harris <ben@tilde.team>2018-12-02 03:24:52 -0500
committerBen Harris <ben@tilde.team>2018-12-02 03:24:52 -0500
commitddcb1277614b912a48ed3be751fba6802fafb55b (patch)
tree6048f4011d8a069722d7ed585dedb1bed25d8203
parentb3c1536aa9795c6a9f4c927fb34d57d181fd2c9e (diff)
day 2
-rw-r--r--day2.exs40
-rw-r--r--day2.in250
2 files changed, 290 insertions, 0 deletions
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