export class InvalidDirectionError extends Error {
constructor() {
super('Invalid direction');
}
}
export class Robot {
constructor() {
this.bearing = 'north';
this.coordinates = [0, 0];
}
orient(direction) {
const directions = ['north', 'east', 'south', 'west'];
if (!directions.includes(direction)) throw new InvalidDirectionError();
this.bearing = direction;
}
turnRight() {
const map = { north: 'east', east: 'south', south: 'west', west: 'north' };
this.bearing = map[this.bearing];
}
turnLeft() {
const map = { north: 'west', west: 'south', south: 'east', east: 'north' };
this.bearing = map[this.bearing];
}
advance() {
if (this.bearing === 'north') this.coordinates[1]++;
if (this.bearing === 'south') this.coordinates[1]--;
if (this.bearing === 'east') this.coordinates[0]++;
if (this.bearing === 'west') this.coordinates[0]--;
}
execute(instructions) {
[...instructions].forEach(instruction => {
if (instruction === 'L') this.turnLeft();
if (instruction === 'R') this.turnRight();
if (instruction === 'A') this.advance();
});
}
}