aboutsummaryrefslogtreecommitdiff
path: root/2021/day-06/day-06.ex
diff options
context:
space:
mode:
authorHJ <thechairman@thechairman.info>2021-12-09 18:05:04 -0500
committerHJ <thechairman@thechairman.info>2021-12-09 18:05:04 -0500
commit527bc4762f9c66c9244f0ac1fbee6357478ac9ef (patch)
treeecd3ffc97de5aab201699f93aab1e0417ac3d25d /2021/day-06/day-06.ex
downloadgleam_aoc-527bc4762f9c66c9244f0ac1fbee6357478ac9ef.tar.gz
gleam_aoc-527bc4762f9c66c9244f0ac1fbee6357478ac9ef.zip
putting all my solutions together in 1 repository
Diffstat (limited to '2021/day-06/day-06.ex')
-rw-r--r--2021/day-06/day-06.ex35
1 files changed, 35 insertions, 0 deletions
diff --git a/2021/day-06/day-06.ex b/2021/day-06/day-06.ex
new file mode 100644
index 0000000..efe10e4
--- /dev/null
+++ b/2021/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()