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

Day 02

2024/day_02.livemd

Day 02

Mix.install([:kino_aoc])

Kino.configure(inspect: [charlists: :as_lists])

Input

{:ok, puzzle_input} =
  KinoAOC.download_puzzle("2024", "2", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
parsed = puzzle_input
  |> String.split("\n")
  |> Enum.map(fn x ->
    Enum.map(String.split(x, " "), &String.to_integer/1)
  end)

Part 1

parsed
|> Enum.count(fn x -> 
  diffs = Enum.chunk_every(x, 2, 1, :discard)
  |> Enum.map(fn [y, z] -> y - z end)
  
  Enum.all?(diffs, fn d -> d in 1..3 end) or Enum.all?(diffs, fn d -> -d in 1..3 end)
end)

Part 2

get_diffs = fn x ->
  x
  |> Enum.chunk_every(2, 1, :discard)
  |> Enum.map(fn [l, r] -> l - r end)
end

parsed
|> Enum.count(fn x -> 
  diffs = [get_diffs.(x) | Enum.map(1..length(x), fn y -> 
    x |> List.delete_at(y - 1) |> get_diffs.()
    end)]
  
  Enum.any?(diffs, fn y -> 
      Enum.all?(y, fn d -> d in 1..3 end) or Enum.all?(y, fn d -> -d in 1..3 end)
    end)
end)