<< 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);