Powered by AppSignal & Oban Pro

Advent of code day 01

2021/livebooks/day-01.livemd

Advent of code day 01

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

Setup input

example = Kino.Input.textarea("Please paste your input example:")
input = Kino.Input.textarea("Please paste your real input:")

Part 01

input
|> Kino.Input.read()
|> String.split("\n", trim: true)
|> Enum.map(&String.to_integer/1)
|> Enum.reduce(%{prev: false, inc_total: 0}, fn el, acc ->
  if acc.prev != false and el > acc.prev,
    do: %{acc | inc_total: acc.inc_total + 1, prev: el},
    else: %{acc | prev: el}
end)

Part 02

input
|> Kino.Input.read()
|> String.split("\n", trim: true)
|> Enum.map(&String.to_integer/1)
|> Enum.chunk_every(3, 1, :discard)
|> Enum.map(&Enum.sum/1)
|> Enum.reduce(%{prev: false, inc_total: 0}, fn el, acc ->
  if acc.prev != false and el > acc.prev,
    do: %{acc | inc_total: acc.inc_total + 1, prev: el},
    else: %{acc | prev: el}
end)