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

Day 01

2024/day_01.livemd

Day 01

Mix.install([:kino_aoc])

Kino.configure(inspect: [charlists: :as_lists])

Input

{:ok, puzzle_input} =
  KinoAOC.download_puzzle("2024", "1", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
parsed = 
  puzzle_input
    |> String.trim()
    |> String.split("\n")
    |> Enum.reduce([[], []], fn pair, [lg, rg] -> 
      [l, r] = String.split(pair, " ", trim: true)
      [[String.to_integer(l) | lg], [String.to_integer(r) | rg]]
    end)

Part 1

parsed
  |> Enum.map(&Enum.sort/1)
  |> Enum.zip_reduce(0, fn [f, s], acc -> :erlang.abs(f - s) + acc end)

Part 2

[l, r] = parsed
freqs = Enum.frequencies(r)

Enum.reduce(l, 0, fn x, acc -> 
  acc + (x * (freqs[x] || 0))
end)