Sha256: dd66548fb7786a2ad3820c1bb69beaaa2c9b1b186feeb01ae0bfd08345f60898

Contents?: true

Size: 1.83 KB

Versions: 102

Compression:

Stored size: 1.83 KB

Contents

'use strict';

var Robot = function () {
  this.coordinates = [0, 0];
  this.bearing = 'north';
};

Robot.prototype.at = function (xcoord, ycoord) {
  this.coordinates = [xcoord, ycoord];
};

Robot.prototype.orient = function (direction) {
  this.bearing = direction;
  return 'The robot is pointed ' + direction;
};

Robot.prototype.advance = function () {

  if (this.bearing === 'north') {
    this.coordinates[1] += 1;
  } else if (this.bearing === 'south') {
    this.coordinates[1] -= 1;
  } else if (this.bearing === 'east') {
    this.coordinates[0] += 1;
  } else if (this.bearing === 'west') {
    this.coordinates[0] -= 1;
  }
};

Robot.prototype.turnLeft = function () {

  if (this.bearing === 'north') {
    this.orient('west');
  } else if (this.bearing === 'south') {
    this.orient('east');
  } else if (this.bearing === 'east') {
    this.orient('north');
  } else if (this.bearing === 'west') {
    this.orient('south');
  }
};

Robot.prototype.turnRight = function () {

  if (this.bearing === 'north') {
    this.orient('east');
  } else if (this.bearing === 'south') {
    this.orient('west');
  } else if (this.bearing === 'east') {
    this.orient('south');
  } else if (this.bearing === 'west') {
    this.orient('north');
  }
};

Robot.prototype.instructions = function (s) {
  var result = [];
  s.split('').forEach(function (character) {
    if (character === 'L') {
      result.push('turnLeft');
    } else if (character === 'R') {
      result.push('turnRight');
    } else if (character === 'A') {
      result.push('advance');
    }
  });
  return result;
};

Robot.prototype.place = function (args) {
  this.coordinates = [args.x, args.y];
  this.bearing = args.direction;
};

Robot.prototype.evaluate = function (s) {
  this.instructions(s).forEach(function (instruction) {
    this[instruction]();
  }, this);
};

module.exports = Robot;

Version data entries

102 entries across 102 versions & 1 rubygems

Version Path
trackler-2.0.8.1 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.7.0 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.44 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.43 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.42 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.41 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.40 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.39 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.38 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.37 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.36 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.35 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.34 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.33 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.32 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.31 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.30 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.29 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.28 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.0.6.27 tracks/javascript/exercises/robot-simulator/example.js