Powered by AppSignal & Oban Pro

Day 01

2022/day-01.livemd

Day 01

Mix.install([
  {:kino, "~> 0.7.0"}
])

example_input =
  Kino.Input.textarea("example input:")
  |> Kino.render()

real_input = Kino.Input.textarea("real input:")

Common

parse = fn input ->
  input
  |> Kino.Input.read()
  |> String.split("\n")
  |> Enum.chunk_while(
    [],
    fn
      "", acc -> {:cont, Enum.sum(acc), []}
      value, acc -> {:cont, [String.to_integer(value) | acc]}
    end,
    &{:cont, Enum.sum(&1), &1}
  )
end

Part 1

real_input
|> parse.()
|> Enum.max()

Part 2

real_input
|> parse.()
|> Enum.sort(:desc)
|> Enum.take(3)
|> Enum.sum()