This commit is contained in:
2021-12-05 07:03:33 +01:00
parent 2af544717c
commit 594bc3f198
2 changed files with 551 additions and 0 deletions

51
src/day_5.jl Normal file
View File

@@ -0,0 +1,51 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
using Pipe: @pipe
function parse_line(input)
c = match(r"(\d+),(\d+) -> (\d+),(\d+)", input).captures
return parse.(Int, c)
end
function p1(input::Vector{String})
board = Dict{Tuple{Int64, Int64}, Int64}()
for l in input
p = parse_line(l)
if p[1] == p[3] || p[2] == p[4]
xstep = p[1] > p[3] ? -1 : 1
ystep = p[2] > p[4] ? -1 : 1
for x in p[1]:xstep:p[3]
for y in p[2]:ystep:p[4]
(x,y) in keys(board) ? (board[(x,y)] += 1) : (board[(x,y)] = 1)
end
end
end
end
return count(>=(2), values(board))
end
function p2(input::Vector{String})
board = Dict{Tuple{Int64, Int64}, Int64}()
for l in input
p = parse_line(l)
if p[1] == p[3] || p[2] == p[4]
xstep = p[1] > p[3] ? -1 : 1
ystep = p[2] > p[4] ? -1 : 1
for x in p[1]:xstep:p[3]
for y in p[2]:ystep:p[4]
(x,y) in keys(board) ? (board[(x,y)] += 1) : (board[(x,y)] = 1)
end
end
elseif abs(p[1] - p[3]) == abs(p[2] - p[4])
xstep = p[1] > p[3] ? -1 : 1
ystep = p[2] > p[4] ? -1 : 1
for(x,y) in zip(p[1]:xstep:p[3], p[2]:ystep:p[4])
(x,y) in keys(board) ? (board[(x,y)] += 1) : (board[(x,y)] = 1)
end
end
end
return count(>=(2), values(board))
end
@aoc(2021, 5)