aboutsummaryrefslogtreecommitdiff
path: root/racket/aoc2021/day-06/day-06.ex
diff options
context:
space:
mode:
Diffstat (limited to 'racket/aoc2021/day-06/day-06.ex')
-rw-r--r--racket/aoc2021/day-06/day-06.ex35
1 files changed, 35 insertions, 0 deletions
diff --git a/racket/aoc2021/day-06/day-06.ex b/racket/aoc2021/day-06/day-06.ex
new file mode 100644
index 0000000..efe10e4
--- /dev/null
+++ b/racket/aoc2021/day-06/day-06.ex
@@ -0,0 +1,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()