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

Advent of Code 2024 - Day 1

day01.livemd

Advent of Code 2024 - Day 1

Mix.install([
  {:kino_aoc, "~> 0.1"},
])

Section

{:ok, puzzle_input} =
  KinoAOC.download_puzzle("2024", "1", System.fetch_env!("LB_AOC_SESSON_2024"))
defmodule Day01 do
  def parse(input) do
    input
    |> String.split("\n", trim: true)
    |> Enum.map(fn line ->
      [left, right] = String.split(line)
      {String.to_integer(left), String.to_integer(right)}
    end)
    |> Enum.unzip()
  end

  def part1({left, right}) do
    Enum.zip(Enum.sort(left), Enum.sort(right))
    |> Enum.map(fn {a, b} -> abs(a - b) end)
    |> Enum.sum()
  end

  def part2({left, right}) do
    left
    |> Enum.map(fn number ->
      number * Enum.count(right, & &1 == number)
    end)
    |> Enum.sum()
  end
end
Day01.parse(puzzle_input) |> Day01.part1()
Day01.parse(puzzle_input) |> Day01.part2()