Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Day 1

day_1.livemd

Day 1

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

Section

locs = Kino.Input.textarea("location IDs")
loc_ids =
  locs
  |> Kino.Input.read()
  |> String.split("\n")
  |> Stream.map(fn pair ->
    pair
    |> String.split("   ")
    |> Enum.map(&String.to_integer/1)
  end)
  |> Stream.zip()
  |> Stream.map(&Tuple.to_list/1)
  |> Enum.map(&Enum.sort/1)

Part 1

loc_ids
|> Enum.zip_with(fn [l, r] -> abs(l - r) end)
|> Enum.sum()

Part 2

[left, right] = loc_ids

freqs = Enum.frequencies(right)

left
|> Enum.map(fn i -> i * Map.get(freqs, i, 0) end)
|> Enum.sum()