about summary refs log blame commit diff
path: root/day5.exs
blob: 120f185cf5f27cdc9fe4ec0c997014f95e341b18 (plain) (tree)














































                                                                
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())