Day 6
Section
initial = for i <- 0..8, into: %{}, do: {i, 0}
counts =
File.read!("day6.txt")
|> String.trim()
|> String.split(",")
|> Enum.map(&String.to_integer/1)
|> Enum.frequencies()
|> Map.merge(initial, fn _, a, _ -> a end)
defmodule Day6 do
def next(%{0 => next} = population) do
1..8
|> Map.new(&{&1 - 1, population[&1]})
|> Map.merge(%{6 => next, 8 => next}, fn _, v1, v2 -> v1 + v2 end)
end
end
{:module, Day6, <<70, 79, 82, 49, 0, 0, 7, ...>>, {:next, 1}}
Task 1
1..80
|> Enum.reduce(counts, fn _, acc -> Day6.next(acc) end)
|> Map.values()
|> Enum.sum()
343441
Task 2
1..256
|> Enum.reduce(counts, fn _, acc -> Day6.next(acc) end)
|> Map.values()
|> Enum.sum()
1569108373832