Cut Off Trees for Golf Event LeetCode solution in JavaScript

1
var cutOffTree = function (forest) {
2
const trees = forest
3
.flat()
4
.filter((x) => x && x !== 1)
5
.sort((a, b) => b - a);
6
let currPos = [0, 0],
7
totalDist = 0;
8

9
while (trees.length) {
10
const grid = [...forest.map((row) => [...row])];
11
const res = getDist(currPos, trees.pop(), grid);
12
if (res == null) return -1;
13
const [pos, dist] = res;
14
currPos = pos;
15
totalDist += dist;
16
}
17
return totalDist;
18

19
function getDist(start, target, grid) {
20
const dir = [
21
[1, 0],
22
[-1, 0],
23
[0, 1],
24
[0, -1],
25
];
26
let queue = [start],
27
dist = 0;
28

29
while (queue.length) {
30
const next = [];
31

32
for (let [r, c] of queue) {
33
if (grid[r][c] === target) return [[r, c], dist];
34
if (!grid[r][c]) continue;
35

36
for (let [x, y] of dir) {
37
x += r;
38
y += c;
39
if (
40
x >= 0 &&
41
x < grid.length &&
42
y >= 0 &&
43
y < grid[0].length &&
44
grid[x][y]
45
)
46
next.push([x, y]);
47
}
48
grid[r][c] = 0;
49
}
50
dist++;
51
queue = next;
52
}
53
return null;
54
}
55
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0