Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Advent of code day 00

2021/livebooks/day-07.livemd

Advent of code day 00

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:")

Setup

numbers =
  example
  |> Kino.Input.read()
  |> String.split(",", trim: true)
  |> Enum.map(&String.to_integer/1)

{min, max} = Enum.min_max(numbers)

Part 01

min..max
|> Enum.map(fn position ->
  Enum.reduce(numbers, 0, fn el, total_fuel ->
    abs(position - el)
    |> Kernel.+(total_fuel)
  end)
end)
|> Enum.min()

Part 02

min..max
|> Enum.map(fn position ->
  Enum.reduce(numbers, 0, fn el, total_fuel ->
    diff = abs(position - el)
    div(diff * (diff + 1), 2) + total_fuel
  end)
end)
|> Enum.min()