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

Advent of code 2024 day 1

aoc2024day1.livemd

Advent of code 2024 day 1

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

Part 1

https://adventofcode.com/2024/day/1

input = Kino.Input.textarea("Please give me input:")
lines =
  Kino.Input.read(input)
  |> String.split("\n", trim: true)
  |> Enum.map(&String.split(&1))

group1_location_ids =
  Enum.map(lines, fn [first | _] -> String.to_integer(first) end) |> Enum.sort()

length(group1_location_ids)
group2_location_ids =
  Enum.map(lines, fn [_, second] -> String.to_integer(second) end) |> Enum.sort()

Enum.zip([group1_location_ids, group2_location_ids])
|> Enum.map(fn {first, second} -> abs(first - second) end)
|> Enum.sum()

Part 2

group2_location_ids_frequency =
  Enum.map(lines, fn [_, second] -> String.to_integer(second) end)
  |> Enum.frequencies()

Enum.reduce(group1_location_ids, 0, fn location_id, acc ->
  acc + (group2_location_ids_frequency[location_id] || 0) * location_id
end)