Powered by AppSignal & Oban Pro

Advent of Code 2023 Day 1 Part 2

2023_day1_part2.livemd

Advent of Code 2023 Day 1 Part 2

Mix.install([
  {:kino_aoc, "~> 0.1"}
])

Get Inputs

{:ok, puzzle_input} =
  KinoAOC.download_puzzle("2023", "1", System.fetch_env!("LB_SESSION"))

My answer

digits_map = %{
  "one" => "o1e",
  "two" => "t2o",
  "three" => "t3e",
  "four" => "f4r",
  "five" => "f5e",
  "six" => "s6x",
  "seven" => "s7n",
  "eight" => "e8t",
  "nine" => "n9e"
}

puzzle_input
|> String.split("\n")
|> Enum.map(fn line ->
  digits =
    digits_map
    |> Enum.reduce(line, fn {word, num}, acc ->
      String.replace(acc, word, num)
    end)
    |> then(&Regex.scan(~r/[0-9]/, &1))

  first = digits |> hd() |> hd()
  last = digits |> Enum.reverse() |> hd() |> hd()
  String.to_integer(first <> last)
end)
|> Enum.sum()