Powered by AppSignal & Oban Pro

Advent 2024 - Day 3

day3.livemd

Advent 2024 - Day 3

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

Setup

input = Kino.Input.textarea("Please paste your input file")
instructions = input |> Kino.Input.read()

Part 1

validate = fn instructions ->
  Regex.scan(~r/mul\((?<a>\d*),(?<b>\d*)\)/, instructions)
  |> Enum.map(fn [_match, a, b] ->
    String.to_integer(a) * String.to_integer(b)
  end)
  |> Enum.sum()
end

validate.(instructions)

Part 2

String.split("do()#{instructions}", "don't()")
|> Enum.map(fn instructions ->
  [_ignore | rest] = String.split(instructions, "do()")
  rest |> Enum.join()
end)
|> Enum.join()
|> then(fn instructions ->
  validate.(instructions)
end)