Powered by AppSignal & Oban Pro

Day 6

2021/day06.livemd

Day 6

Section

initial = for i <- 0..8, into: %{}, do: {i, 0}

counts =
  File.read!("day6.txt")
  |> String.trim()
  |> String.split(",")
  |> Enum.map(&amp;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(&amp;{&amp;1 - 1, population[&amp;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