1
var gridIllumination = function (n, lamps, queries) {13
const lampCoord = new Map();19
// First, illuminate the lamps20
for (let [r, c] of lamps) {21
if (lampCoord.has(`${r}-${c}`)) continue;22
lampCoord.set(`${r}-${c}`);23
rowHash[r] = rowHash[r] + 1 || 1;24
colHash[c] = colHash[c] + 1 || 1;25
leftDiag[r + c] = leftDiag[r + c] + 1 || 1;26
rightDiag[c - r] = rightDiag[c - r] + 1 || 1;29
// Second, query the lamps31
for (let [row, col] of queries) query(row, col);34
function query(row, col) {38
leftDiag[row + col] ||42
// Check 8 adjacent cells43
for (let [r, c] of directions) {46
if (newR < 0 || newC < 0 || newR >= n || newC >= n) continue;47
// If the coordinate is a lamp, un-illuminate the lamp48
if (lampCoord.has(`${newR}-${newC}`)) {51
leftDiag[newR + newC]--,52
rightDiag[newC - newR]--;53
lampCoord.delete(`${newR}-${newC}`);56
} else output.push(0);