const fs = require("fs") const input = fs.readFileSync("input.txt", "utf-8", err => { err && console.error(err) }).split("\n").filter(line => line).map(line => line.split("").map(digit => parseInt(digit))) let flashed, flashCount = 0 for (let i = 0;; i++){ flashed = Array(input.length).fill().map(arr => Array(input.length).fill(false)) for (let x = 0; x < input.length; x++){ for (let y = 0; y < input[x].length; y++){ incAndFlash(x, y) } } flashCount += flashed.flat().filter(flash => flash).length if (i === 99){ console.log(flashCount) } const all = input.flat() if (all.length === all.filter(num => num === 0).length){ console.log(i + 1) break } } function incAndFlash(x, y){ if (flashed[y][x]) return input[y][x]++ if (input[y][x] > 9){ input[y][x] = 0 flashed[y][x] = true for (let ny = y - 1; ny <= y + 1; ny++){ for (let nx = x - 1; nx <= x + 1; nx++){ if (x === nx && y === ny) continue if (ny < 0 || nx < 0 || ny > input.length - 1 || nx > input[0].length - 1) continue incAndFlash(nx, ny) } } } }