Day 2
There should be a much much better way to solve part 2, but I’m too tired.
file:test/Day02Spec.jl
using AOC2024.Day02: safe_report, tolerant_safe_report
let input = [
7 6 4 2 1;
1 2 7 8 9;
9 7 6 2 1;
1 3 2 4 5;
8 6 4 4 1;
1 3 6 7 9]
@test safe_report.(eachrow(input)) |> sum == 2
@test tolerant_safe_report.(eachrow(input)) |> sum == 4
end
file:src/Day02.jl
module Day02
using ..Monads
using ..Parsing
function safe_report(v::AbstractVector{Int})
check(d) = all((1 .<= d) .&& (d .<= 3))
= v[2:end] .- v[1:end-1]
d check(d) || check(.-d)
end
function tolerant_safe_report(v::AbstractVector{Int})
safe_report(v) && return true
for i in 1:length(v)
= deleteat!(copy(v), i)
w safe_report(w) && return true
end
return false
end
read_input(io::IO) =
read(io, String) |> parse(many(
token(many(token(integer_p, match_p(r" *"))), match_p("\n"))
|> result
))
function main(io::IO)
= read_input(io)
input = sum(safe_report.(input))
part1 = sum(tolerant_safe_report.(input))
part2 return part1, part2
end
end