Sha256: 4ad470ac22de1a2ff390b9b9d5dff8c5a3a44a9117d77c1badd32825e787aaab

Contents?: true

Size: 1.98 KB

Versions: 99

Compression:

Stored size: 1.98 KB

Contents

var Robot = (function () {
  '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;
    };
  };

  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);
  };

  return Robot
})()

module.exports = Robot;

Version data entries

99 entries across 99 versions & 1 rubygems

Version Path
trackler-2.2.0.4 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.0.3 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.0.2 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.0.1 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.2.0.0 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.55 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.54 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.53 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.52 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.51 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.50 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.49 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.48 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.47 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.46 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.45 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.44 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.43 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.42 tracks/javascript/exercises/robot-simulator/example.js
trackler-2.1.0.41 tracks/javascript/exercises/robot-simulator/example.js