Day 1
Mix.install([:kino])
Get input
input =
Kino.Input.textarea("Paste input here",
default: """
3 4
4 3
2 5
1 3
3 9
3 3
"""
)
parsed_input = input
|> Kino.Input.read()
|> String.split("\n", trim: true)
|> Stream.map(fn line ->
line
|> String.split(~r"\s", trim: true)
|> Stream.map(&Integer.parse/1)
|> Stream.map(fn {i, ""} -> i end)
|> Enum.into([])
end)
processed_input =
parsed_input
|> Enum.zip_with(&Function.identity/1)
|> Enum.map(&Enum.sort/1)
Part 1
processed_input
|> Enum.zip()
|> Enum.map(fn {a, b} -> abs(a - b) end)
|> Enum.sum()
Part 2
freqs = processed_input |> Enum.at(1) |> Enum.frequencies()
processed_input
|> Enum.at(0)
|> Enum.map(fn n -> n * Map.get(freqs, n, 0) end)
|> Enum.sum()