35 lines
823 B
JavaScript
35 lines
823 B
JavaScript
function day11(input, part2) {
|
|
let grid = Grid.fromStr(input).mapMut((e) => ({ energy: +e, flashed: false }))
|
|
|
|
let steps = 0
|
|
let flashes = 0
|
|
let totalFlashes = 0
|
|
|
|
while (part2 ? flashes != grid.width * grid.height : steps < 100) {
|
|
flashes = 0
|
|
|
|
grid.forEach(function flash(e, pt, g) {
|
|
e.energy++
|
|
|
|
if (!e.flashed && e.energy > 9) {
|
|
e.flashed = true
|
|
flashes++
|
|
|
|
g.getAllNeighborsThat(pt, (e) => !e.flashed).forEach((pt) => flash(g.get(pt), pt, g))
|
|
}
|
|
})
|
|
|
|
grid.forEach((e) => {
|
|
if (e.flashed) {
|
|
e.energy = 0
|
|
e.flashed = false
|
|
}
|
|
})
|
|
|
|
steps++
|
|
totalFlashes += flashes
|
|
}
|
|
|
|
return part2 ? steps : totalFlashes
|
|
}
|