https://leetcode.com/problems/path-crossing/
Estoy trabajando en este problema de leetcode y creo que estoy cerca, pero no puedo entender por qué no funciona. En mi declaración IF, no parece que esté incrementando. Entonces, una vez que pasa por el ciclo nuevamente, simplemente devuelve verdadero y sale del ciclo. Una vez que esto funcione, tengo la intención de convertirlo en un solo condicional para que no sea tan largo, pero quiero que funcione primero, jaja. ¿Alguna idea?
var isPathCrossing = function (path) { const points = {}; const directions = path.split('').map((d) => { return d; }); let x = 0; let y = 0; let i = 0; while (i <= directions.length) { const coordinate = `${x}, ${y}`; if (directions[i] == 'N') { y++; if (!Object.values(points).includes(coordinate)) { points[i] = coordinate; i++; } else { return true; } } if (directions[i] == 'W') { x--; if (!Object.values(points).includes(coordinate)) { points[i] = coordinate; i++; } else { return true; } } if (directions[i] == 'S') { y--; if (!Object.values(points).includes(coordinate)) { points[i] = coordinate; i++; } else { return true; } } if (directions[i] == 'E') { x++; if (!Object.values(points).includes(coordinate)) { points[i] = coordinate; i++; } else { return true; } } } return false; }; console.log(isPathCrossing('NNNNN')); console.log(isPathCrossing('NES')); console.log(isPathCrossing('NESWNEENW'));(i <= directions.length) refactorizado a (i < directions.length) , ya que no querría atravesar más de longitud.{ '0': '0, 1', '1': '1, 1', '2': '1, 0', '3': '0, 0' } generado para la entrada "NESWW". Usar un conjunto sería más apropiado. (Comentado junto con su implementación). var isPathCrossing = function (path) { // const points = new Set(); const points = {}; const directions = path.split('').map((d) => { return d; }); let x = 0; let y = 0; let i = 0; const initCoord = `${x}, ${y}`; points[-1] = initCoord; // points.add(initCoord); while (i < directions.length) { if (directions[i] == 'N') { y++; } else if (directions[i] == 'W') { x--; } else if (directions[i] == 'S') { y--; } else if (directions[i] == 'E') { x++; } const coordinate = `${x}, ${y}`; // console.log(coordinate); // console.log(points); if (!Object.values(points).includes(coordinate)) { points[i] = coordinate; i++; } else { return true; } // if (!points.has(coordinate)) { // points.add(coordinate); // i++; // } else { // return true; // } } return false; };