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)