<< Back to main
Node.js Path Finding
function findX(m) {
let row = Math.round(m.length / 2) - 1;
let col = Math.round(m[row].length / 2) - 1;
let selected = m[row][col];
if (!m[row] || !m[row][col]) return null;
while (selected !== "X") {
const [direction, ...stepsCol] = selected.split("");
const steps = stepsCol.join("");
m[row][col] = "V";
switch (direction) {
case "N":
row -= parseInt(steps);
break;
case "S":
row += parseInt(steps);
break;
case "E":
col += parseInt(steps);
break;
case "W":
col -= parseInt(steps);
break;
}
if (!m[row] || !m[row][col] || m[row][col] === "V") return null;
selected = m[row][col];
}
return { row, col };
}
Usage
const map = [
[
"N3",
"E5",
"E1",
"E2",
"N2",
"S5",
"E5",
"S4",
"E1",
"S6",
"E3",
"E3",
"W5",
"N2",
"E4",
"W4",
"W5",
"N2",
"N5",
],
[
"X",
"W1",
"S1",
"W1",
"N5",
"E1",
"W3",
"S4",
"W1",
"N1",
"S2",
"E6",
"S1",
"S3",
"S1",
"E6",
"E2",
"N6",
"W3",
],
[
"W5",
"W6",
"W5",
"E1",
"W6",
"S2",
"E2",
"N5",
"W1",
"E4",
"N3",
"N2",
"W2",
"E6",
"S5",
"E5",
"N5",
"E5",
"W1",
],
[
"S1",
"N1",
"N5",
"S4",
"X",
"S3",
"E8",
"E4",
"N1",
"W3",
"S2",
"S5",
"W2",
"S1",
"W10",
"E4",
"N2",
"W5",
"W3",
],
[
"E5",
"N4",
"W4",
"S3",
"N4",
"E6",
"W2",
"N6",
"N1",
"N1",
"S3",
"E5",
"W5",
"N5",
"N1",
"S2",
"S1",
"S1",
"N2",
],
[
"N6",
"E3",
"N2",
"N6",
"N2",
"E1",
"N1",
"N4",
"S5",
"N1",
"N3",
"N3",
"N3",
"S2",
"W1",
"S6",
"S5",
"W3",
"E3",
],
[
"S1",
"W6",
"S2",
"N3",
"E4",
"W3",
"W3",
"S2",
"E2",
"E5",
"E5",
"N4",
"W3",
"W4",
"N1",
"E2",
"S5",
"N6",
"S3",
],
[
"N2",
"W2",
"N4",
"E2",
"N5",
"N4",
"E2",
"E3",
"X",
"E6",
"N1",
"N1",
"S6",
"X",
"E2",
"N3",
"E3",
"S3",
"N2",
],
[
"W1",
"W4",
"W5",
"S1",
"N3",
"N5",
"E2",
"W1",
"N2",
"E3",
"E6",
"W2",
"E2",
"W4",
"E1",
"S1",
"W2",
"N3",
"S5",
],
];
findX(map);