solve day 11

This commit is contained in:
Huanzo 2021-12-11 07:03:27 +01:00
parent 7789002a2e
commit 21ebe11abb
2 changed files with 88 additions and 0 deletions

10
data/day_11.txt Normal file
View File

@ -0,0 +1,10 @@
4781623888
1784156114
3265645122
4371551414
3377154886
7882314455
6421348681
7175424287
5488242184
2448568261

78
src/day_11.jl Normal file
View File

@ -0,0 +1,78 @@
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
import .Aoc: @aoc
using Pipe: @pipe
using Combinatorics
function step(map, copy, x, y)
level = copy[x][y] = map[x][y] + 1
if level == 10
global flahes = flashes + 1
for (x,y) in zip([-1,0,1,-1,1,-1,0,1], [1,1,1,0,0,-1,-1,-1])
if x in 1:length(map) && y in 1:length(map[1])
step(map, copy, x, y)
end
end
end
end
function solve(input, part)
map = [ parse.(Int, collect(l)) for l in input ]
elements = length(map) * length(map[1])
sum = 0
step = 0
while true
step += 1
flash = []
flashed = []
for x in 1:length(map)
for y in 1:length(map[1])
map[x][y] += 1
if map[x][y] > 9
push!(flash, [x,y])
push!(flashed, [x,y])
end
end
end
while length(flash) != 0
x, y = pop!(flash)
for (i,j) in zip([-1,0,1,-1,1,-1,0,1], [1,1,1,0,0,-1,-1,-1])
nx = x + i
ny = y + j
if nx in 1:length(map) && ny in 1:length(map[1])
map[nx][ny] += 1
if map[nx][ny] > 9 && [nx, ny] flashed
push!(flash, [nx,ny])
push!(flashed, [nx,ny])
end
end
end
end
for (x,y) in flashed
map[x][y] = 0
end
sum += length(flashed)
if part == 1 && step == 100
break
end
if part == 2 && length(unique(flashed)) == elements
return step
end
end
return sum
end
function p1(input::Vector{String})
solve(input, 1)
end
function p2(input::Vector{String})
solve(input, 2)
end
@aoc(2021, 11)