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