Powered by AppSignal & Oban Pro

Advent of Code 2015 Day 19 Part 1

2015_day19_part1.livemd

Advent of Code 2015 Day 19 Part 1

Mix.install([
  {:kino_aoc, "~> 0.1"}
])

Get Inputs

{:ok, puzzle_input} =
  KinoAOC.download_puzzle("2015", "19", System.fetch_env!("LB_SESSION"))

My answer

molecules = "HOH"
replacements = [{"H", "HO"}, {"H", "OH"}, {"O", "HH"}]
replacements
|> Enum.map(fn {src, dst} ->
  0..(String.length(molecules) - 1)
  |> Enum.map(fn index ->
    replaced =
      molecules
      |> String.slice(index, String.length(molecules) - index)
      |> String.replace(src, dst, global: false)
    
    String.slice(molecules, 0, index) <> replaced
  end)
  |> Enum.filter(&(&1 != molecules))
  |> Enum.uniq()
end)
|> Enum.concat()
|> Enum.uniq()
rows = String.split(puzzle_input, "\n")
[molecules | replacements] = Enum.reverse(rows)

replacements =
  replacements
  |> Enum.filter(&(&1 != ""))
  |> Enum.map(fn row ->
    [src, dst] = String.split(row, " => ")
    {src, dst}
  end)

{molecules, replacements}
replacements
|> Enum.map(fn {src, dst} ->
  0..(String.length(molecules) - 1)
  |> Enum.map(fn index ->
    replaced =
      molecules
      |> String.slice(index, String.length(molecules) - index)
      |> String.replace(src, dst, global: false)
    
    String.slice(molecules, 0, index) <> replaced
  end)
  |> Enum.filter(&(&1 != molecules))
  |> Enum.uniq()
end)
|> Enum.concat()
|> Enum.uniq()
|> length()