AOC 2024
Mix.install([
{:kino_aoc, "~> 0.1"}
])
Day 1
{:ok, puzzle_input} =
KinoAOC.download_puzzle("2024", "1", System.fetch_env!("LB_AOC_SESSION"))
defmodule Day01 do
def final_distance(input) do
{left_list, right_list} =
input
|> parse()
|> Enum.unzip()
left_sorted = Enum.sort(left_list)
right_sorted = Enum.sort(right_list)
Enum.reduce(Enum.zip(left_sorted, right_sorted), 0, fn {l, r}, acc ->
acc + abs(l - r)
end)
end
def part2(input) do
all = parse(input)
{first, second} = Enum.unzip(all)
frequencies = Enum.frequencies(second)
first
|> Enum.map(fn n ->
n * Map.get(frequencies, n, 0)
end)
|> Enum.sum
end
defp parse(input) do
input
|> String.split("\n", trim: true)
|> Enum.map(fn line ->
line
|> String.split()
|> Enum.map(&String.to_integer/1)
|> List.to_tuple()
end)
end
end