Skip to content

Instantly share code, notes, and snippets.

@ayhansipahi
Last active August 29, 2015 14:20
Show Gist options
  • Save ayhansipahi/077f7193d75ff0f3ba5b to your computer and use it in GitHub Desktop.
Save ayhansipahi/077f7193d75ff0f3ba5b to your computer and use it in GitHub Desktop.
Solution for Mars Rovers
function MarsRover(x, y) {
max_x = x;
max_y = y;
rovers = [];
var _checkLanding = function() {
r = rovers[0];
if (r && (r.x > max_x || r.x < 0 || r.y > max_y || r.y < 0)) {
console.log("Rover couldn't land.");
rovers.shift();
return false;
}
};
var _crashTest = function() {
r = rovers[0];
if (r && (r.x > max_x || r.x < 0 || r.y > max_y || r.y < 0)) {
console.log("Rover crashed Jim.");
return false;
}
};
var _move = function() {
r = rovers[0];
switch (r.v) {
case "N":
r.y++
break;
case "E":
r.x++
break;
case "S":
r.y--
break;
case "W":
r.x--
break;
}
_crashTest();
};
var _turnLeft = function() {
r = rovers[0];
switch (r.v) {
case "N":
r.v = "W";
break;
case "E":
r.v = "N";
break;
case "S":
r.v = "E";
break;
case "W":
r.v = "S";
break;
}
};
var _turnRight = function() {
r = rovers[0];
switch (r.v) {
case "N":
r.v = "E";
break;
case "E":
r.v = "S";
break;
case "S":
r.v = "W";
break;
case "W":
r.v = "N";
break;
}
};
this.addRover = function(x, y, v) {
rovers.unshift({
x: x,
y: y,
v: v
});
_checkLanding();
};
this.sendCommand = function(commandstring) {
cs = new String(commandstring);
for (var i = 0; i < cs.length; i++) {
switch (cs[i]) {
case "L":
_turnLeft();
break;
case "R":
_turnRight();
break;
case "M":
_move();
break;
}
};
};
this.getFinalPositions = function() {
for (var i = rovers.length - 1; i >= 0; i--) {
r = rovers[i];
console.log(r.x, r.y, r.v);
};
}
}
var marsRover = new MarsRover(5, 5);
marsRover.addRover(1, 2, 'N');
marsRover.sendCommand('LMLMLMLMM');
marsRover.addRover(3, 3, 'E');
marsRover.sendCommand('MMRMMRMRRM');
marsRover.getFinalPositions();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment