Files
aoc2024-elixir/lib/aoc2024/day_01.ex
T
Aurélien Geron adfaafec83 Initial release
2024-12-06 19:44:29 +13:00

42 lines
880 B
Elixir

defmodule Aoc2024.Day01 do
def parse(input) do
numbers =
input
|> String.split("\n", trim: true)
|> Enum.map(fn line ->
line
|> String.split(~r/\s+/)
|> Enum.map(fn int_str ->
case int_str |> Integer.parse() do
{int, ""} -> int
_ -> raise "Invalid integer #{int_str}"
end
end)
end)
numbers
|> Enum.map(&List.to_tuple/1)
|> Enum.unzip()
end
def part1({col0, col1}) do
sorted_col0 = col0 |> Enum.sort()
sorted_col1 = col1 |> Enum.sort()
Enum.zip(sorted_col0, sorted_col1)
|> Enum.map(fn {val0, val1} ->
abs(val0 - val1)
end)
|> Enum.sum()
end
def part2({col0, col1}) do
col0
|> Enum.map(fn val0 ->
count = Enum.count(col1, fn val1 -> val0 == val1 end)
count * val0
end)
|> Enum.sum()
end
end