Day 6
Deps & preparation
Mix.install([
{:kino, "~> 0.4.0"}
])
input = Kino.Input.textarea("Please paste your input file:")
Input
start_state =
Kino.Input.read(input)
|> String.split([","], trim: true)
|> Enum.map(&String.to_integer/1)
|> Enum.frequencies()
Part 1
Enum.reduce(1..80, start_state, fn _, state ->
state
|> Enum.reduce(%{}, fn
{0, c}, curr_state ->
curr_state |> Map.update(6, c, &(c + &1)) |> Map.update(8, c, &(c + &1))
{age, c}, curr_state ->
curr_state |> Map.update(age - 1, c, &(c + &1))
end)
end)
|> Map.values()
|> Enum.sum()
Part 2
Enum.reduce(1..256, start_state, fn _, state ->
state
|> Enum.reduce(%{}, fn
{0, c}, curr_state ->
curr_state |> Map.update(6, c, &(c + &1)) |> Map.update(8, c, &(c + &1))
{age, c}, curr_state ->
curr_state |> Map.update(age - 1, c, &(c + &1))
end)
end)
|> Map.values()
|> Enum.sum()