aboutsummaryrefslogtreecommitdiff
path: root/aoc2021/day-06/day-06.ex
blob: efe10e44f9b49ad9a92fdd623d4c5321a684e814 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
defmodule Day06 do
  def next_day(state) do
    with one_day_older <- Enum.into(state, %{}, fn {k, v} -> {k - 1, v} end),
         {n, s} <- Map.pop(one_day_older, -1, 0) do
      Map.update(s, 6, n, &(&1 + n))
      |> Map.put(8, n)
    end
  end
end

school =
  with {:ok, data} <- File.read("input.txt") do
    data
    |> String.trim()
    |> String.split(",")
    |> Enum.map(&String.to_integer/1)
  end

starting_state = Enum.frequencies(school)

Enum.reduce(
  Enum.to_list(1..80),
  starting_state,
  fn _, acc -> Day06.next_day(acc) end
)
|> Enum.reduce(0, fn {_, v}, acc -> v + acc end)
|> IO.inspect()

Enum.reduce(
  Enum.to_list(1..256),
  starting_state,
  fn _, acc -> Day06.next_day(acc) end
)
|> Enum.reduce(0, fn {_, v}, acc -> v + acc end)
|> IO.inspect()