about summary refs log tree commit diff
path: root/day5.exs
diff options
context:
space:
mode:
Diffstat (limited to 'day5.exs')
-rw-r--r--day5.exs47
1 files changed, 47 insertions, 0 deletions
diff --git a/day5.exs b/day5.exs
new file mode 100644
index 0000000..120f185
--- /dev/null
+++ b/day5.exs
@@ -0,0 +1,47 @@
+defmodule Day5 do
+  def input() do
+    File.stream!("input/day5.in")
+    |> Stream.map(&String.trim/1)
+    |> Enum.at(0)
+  end
+
+  def part1() do
+    input()
+    |> String.graphemes()
+    |> react()
+    |> Enum.count()
+  end
+
+  def part2() do
+    for(n <- ?a..?z, do: <<n::utf8>>)
+    |> Enum.map(fn c ->
+      input()
+      |> String.replace(c, "")
+      |> String.replace(String.upcase(c), "")
+      |> String.graphemes()
+      |> react()
+    end)
+    |> Enum.min_by(&Enum.count/1)
+    |> Enum.count()
+  end
+
+  def react(polymer) do
+    Enum.reduce(polymer, [], fn
+      x, [] ->
+        [x]
+
+      x, [y] ->
+        [x, y]
+
+      x, [y | ys] ->
+        if x != y && String.downcase(x) == String.downcase(y) do
+          ys
+        else
+          [x, y | ys]
+        end
+    end)
+  end
+end
+
+IO.puts(Day5.part1())
+IO.puts(Day5.part2())