javascriptmapscodewarrior

Javascript Maze Runner on Codewars error


I've working my way through codewars, and I've come across mazerunner (https://www.codewars.com/kata/maze-runner/train/javascript) I've been stumped for about 2 days!

function mazeRunner(maze, directions) {

//find start value  

var x = 0; //x position of the start point
var y = 0; //y position of the start point

for (var j = 0 ; j < maze.length ; j++){
if (maze[j].indexOf(2) != -1){
  x = j;
  y = maze[j].indexOf(2)
}
      } // end of starting position forloop

console.log(x + ', ' + y)


  for (var turn = 0 ; turn < directions.length ; turn++){


if (directions[turn] == "N"){
 x -= 1;
}
if (directions[turn] == "S"){
 x += 1;
}
if (directions[turn] == "E"){
 y += 1;
}
if (directions[turn] == "W"){
 y -= 1;
}

 if (maze[x][y] === 1){
 return 'Dead';
 }else if (maze[x][y] === 3){
 return 'Finish';
 }

if (maze[x] === undefined || maze[y] === undefined){
return 'Dead';
}

}

return 'Lost';

}

When I run this, it works on most of the scenarios, however on the last one I get the following error

TypeError: Cannot read property '3' of undefined
at mazeRunner
at /home/codewarrior/index.js:87:19
at /home/codewarrior/index.js:155:5
at Object.handleError

Any help would be appreciated! I'm pulling my hair out over this one!


Solution

  • The problem of your solution is that after the move, you just check the value of maze[x][y]

    In the test that fails, maze[x] will be at some point undefined (moves south for a while). I guess at that same point y would be 3, hence the error Cannot read property '3' of undefined

    To avoid that, you should move up the code where you test for undefined, before trying to access the coordinates:

    // move this as first check
    if (maze[x] === undefined || maze[y] === undefined){
      return 'Dead';
    }