Day 1
Mix.install([
{:kino, "~> 0.7.0"}
])
Section
input = Kino.Input.textarea("input")
top = Kino.Input.number("top")
input
|> Kino.Input.read()
|> String.split("\n")
|> Enum.chunk_by(&(&1 == ""))
|> Enum.reject(&(&1 == [""]))
|> Enum.map(fn list -> list |> Enum.map(&String.to_integer/1) |> Enum.sum() end)
|> Enum.sort(&>=/2)
|> Enum.take(top |> Kino.Input.read())
|> Enum.sum()
# Top 1
input
|> Kino.Input.read()
|> String.split("\n")
|> Enum.reduce(%{max: 0}, fn
"", %{max: max, latest: latest} when latest > max -> %{max: latest, latest: 0}
"", result -> %{result | latest: 0}
number, result -> Map.update(result, :latest, 0, &(&1 + String.to_integer(number)))
end)
|> Map.get(:max)
# Top 3
input
|> Kino.Input.read()
|> String.split("\n")
|> Enum.reduce(%{total: 0, acc: []}, fn
"", %{total: total, acc: acc} -> %{total: 0, acc: [total | acc]}
number, result -> Map.update(result, :total, 0, &(&1 + String.to_integer(number)))
end)
|> Map.get(:acc)
|> Enum.sort(&>=/2)
|> Enum.take(3)
|> Enum.sum()