Day 6
Input
Mix.install([
{:kino, github: "livebook-dev/kino"}
])
textarea = Kino.Input.textarea("Input:")
Common
defmodule Common do
def parse_input(raw_input) do
raw_input
|> String.split(",", trim: true)
|> Enum.map(&String.to_integer/1)
end
def iterate(frequencies, 0) do
frequencies
|> Map.values()
|> Enum.sum()
end
def iterate(frequencies, days_left) do
zeros_count = frequencies[0] || 0
frequencies =
Enum.reduce(0..7, frequencies, fn time, frequencies ->
Map.put(frequencies, time, frequencies[time + 1] || 0)
end)
frequencies =
frequencies
|> Map.put(8, zeros_count)
|> Map.update(6, zeros_count, &(&1 + zeros_count))
iterate(frequencies, days_left - 1)
end
end
raw_input = Kino.Input.read(textarea)
input = Common.parse_input(raw_input)
Part 1
defmodule Part1 do
def run(input) do
input
|> Enum.frequencies()
|> Common.iterate(80)
end
end
Part1.run(input)
Part 2
defmodule Part2 do
def run(input) do
input
|> Enum.frequencies()
|> Common.iterate(256)
end
end
Part2.run(input)