Advent 2024 - Day 1
Mix.install([
{:kino, "~> 0.14.2"}
])
Setup
input = Kino.Input.textarea("Please paste your input file")
{left_list, right_list} =
input
|> Kino.Input.read()
|> String.split("\n")
|> Enum.map(fn line ->
[l, r] = line
|> String.split(" ")
|> Enum.map(&(String.to_integer(String.trim(&1))))
{l,r}
end)
|> Enum.unzip()
{left_list, right_list}
Part 1
Enum.zip(Enum.sort(left_list), Enum.sort(right_list))
|> Enum.map(fn {l, r} ->
abs(l - r)
end)
|> Enum.sum()
Part 2
right_list
|> Enum.group_by(&(&1))
|> Enum.map(fn {k, v} ->
{k, Enum.count(v)}
end)
|> Map.new()
|> IO.inspect(charlists: :as_lists)
right_counts = right_list
|> Enum.group_by(&(&1))
|> Enum.map(fn {k, v} ->
{k, Enum.count(v)}
end)
|> Map.new()
for n <- left_list do
n * Map.get(right_counts, n, 0)
end
|> Enum.sum()