Skip to content

Commit 2a860b5

Browse files
authored
Create 1001-grid-illumination.js
1 parent 90036df commit 2a860b5

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

1001-grid-illumination.js

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/**
2+
* @param {number} N
3+
* @param {number[][]} lamps
4+
* @param {number[][]} queries
5+
* @return {number[]}
6+
*/
7+
const gridIllumination = function (N, lamps, queries) {
8+
const rowMap = new Map()
9+
const colMap = new Map()
10+
const hillMap = new Map()
11+
const daleMap = new Map()
12+
const litMap = new Map()
13+
const direction = [
14+
[0, 0],
15+
[0, 1],
16+
[1, 0],
17+
[-1, 0],
18+
[0, -1],
19+
[-1, -1],
20+
[1, 1],
21+
]
22+
//map what areas are lit
23+
for (let [x, y] of lamps) {
24+
insert(rowMap, x)
25+
insert(colMap, y)
26+
insert(hillMap, x + y)
27+
insert(daleMap, x - y)
28+
litMap.set(N * x + y, true)
29+
}
30+
const result = new Array(queries.length).fill(0)
31+
let count = 0
32+
for (let [x, y] of queries) {
33+
if (
34+
rowMap.get(x) > 0 ||
35+
colMap.get(y) > 0 ||
36+
hillMap.get(x + y) > 0 ||
37+
daleMap.get(x - y) > 0
38+
) {
39+
result[count] = 1
40+
}
41+
for (let [i, j] of direction) {
42+
let newX = x + i
43+
let newY = y + j
44+
if (litMap.has(N * newX + newY)) {
45+
decrease(rowMap, newX)
46+
decrease(colMap, newY)
47+
decrease(hillMap, newX + newY)
48+
decrease(daleMap, N * newX + newY)
49+
litMap.delete(N * newX + newY)
50+
}
51+
}
52+
count++
53+
}
54+
return result
55+
}
56+
const insert = (map, value) => {
57+
if (map.has(value)) {
58+
map.set(value, map.get(value) + 1)
59+
} else {
60+
map.set(value, 1)
61+
}
62+
}
63+
const decrease = (map, value) => {
64+
if (map.has(value)) {
65+
map.set(value, map.get(value) - 1)
66+
}
67+
}

0 commit comments

Comments
 (0)