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)