Day 6
Mix.install([
{:kino, "~> 0.6.2"}
])
Input
input = Kino.Input.textarea("Please dump your inputs")
Part 1
fish = Kino.Input.read(input) |> String.split(",", trim: true) |> Enum.map(&String.to_integer/1)
defmodule Lantern do
def cycle(fish) do
aged =
for x <- 1..8 do
{x - 1, Map.get(fish, x, 0)}
end
|> Enum.into(%{})
Map.update(aged, 6, 0, &(&1 + Map.get(fish, 0, 0)))
|> Map.put(8, Map.get(fish, 0, 0))
end
end
fishmap =
Enum.reduce(0..7, %{}, fn num, acc ->
Map.put(acc, num, Enum.count(fish, &(&1 == num)))
end)
|> Enum.into(%{})
Enum.reduce(0..256, fishmap, fn x, fish ->
IO.puts("Day #{x}, #{Enum.sum(Map.values(fish))} fish")
Lantern.cycle(fish)
end)