diff options
Diffstat (limited to 'day5.exs')
-rw-r--r-- | day5.exs | 47 |
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()) |