Sha256: 95a9225a074f35a26f43f11c3b5299f5222568094b66904f2709339fded55093

Contents?: true

Size: 1.8 KB

Versions: 54

Compression:

Stored size: 1.8 KB

Contents

'use strict';

var VALID_DIRECTIONS = ['north', 'east', 'south', 'west'];
var INSTRUCTION_KEYS = {
  A: 'advance',
  L: 'turnLeft',
  R: 'turnRight'
};

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

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

Robot.prototype.orient = function (direction) {
  if (VALID_DIRECTIONS.indexOf(direction) === -1) {
    throw new Error('Invalid Robot Bearing');
  }

  this.bearing = direction;
};

Robot.prototype.advance = function () {
  switch (this.bearing) {
  case 'north':
    this.coordinates[1]++;
    break;
  case 'east':
    this.coordinates[0]++;
    break;
  case 'south':
    this.coordinates[1]--;
    break;
  case 'west':
    this.coordinates[0]--;
    break;
  default:
    break;
  }
};

Robot.prototype.turnLeft = function () {
  var directionPosition = VALID_DIRECTIONS.indexOf(this.bearing);

  if (directionPosition > 0) {
    this.orient(VALID_DIRECTIONS[--directionPosition]);
  } else {
    this.orient(VALID_DIRECTIONS[VALID_DIRECTIONS.length - 1]);
  }
};

Robot.prototype.turnRight = function () {
  var directionPosition = VALID_DIRECTIONS.indexOf(this.bearing);

  if (directionPosition < (VALID_DIRECTIONS.length - 1)) {
    this.orient(VALID_DIRECTIONS[++directionPosition]);
  } else {
    this.orient(VALID_DIRECTIONS[0]);
  }
};

Robot.prototype.instructions = function (instructionKeys) {
  return instructionKeys.split('')
    .map(function (key) {
      return INSTRUCTION_KEYS[key];
    });
};

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

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

module.exports = Robot;

Version data entries

54 entries across 54 versions & 1 rubygems

Version Path
trackler-2.2.1.139 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.138 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.137 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.136 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.135 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.134 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.133 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.132 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.131 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.130 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.129 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.128 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.127 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.126 tracks/javascript/exercises/robot-simulator/example.js