aoc2024/day01.livemd

842 B

Day01

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

Run Me

Run in Livebook

Input

input = Kino.Input.textarea("Input")

Parse Input

input = 
  input 
  |> Kino.Input.read
  |> String.split("\n")
  |> Enum.map(fn l -> String.split(l, "   ") end)
  |> List.foldl([[],[]], fn [x, y], [xa, ya] -> 
    [[String.to_integer(x)| xa], [String.to_integer(y)| ya]] 
  end)

Part One

input
|> Enum.map(&Enum.sort/1)
|> Enum.zip
|> Enum.map(fn {x,y} -> abs(x - y) end)
|> Enum.sum

Part Two

[x, y] = input

f = Enum.frequencies(y)

Enum.map(x, fn xx -> xx * (f[xx] || 0) end)
|> Enum.sum