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.180 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.179 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.178 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.177 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.176 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.175 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.174 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.173 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.172 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.171 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.170 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.169 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.167 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.166 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.165 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.164 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.163 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.162 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.161 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.1.160 tracks/javascript/exercises/robot-simulator/example.js