Sha256: 6a5ef488430e036b238464dfbf2444799128a817f2abd8cda3f2832a0178e3b0

Contents?: true

Size: 1.61 KB

Versions: 255

Compression:

Stored size: 1.61 KB

Contents

'use strict';

exports.WordProblem   = WordProblem;
exports.ArgumentError = ArgumentError;

var BINARY_OPERATORS = {
  'plus':          function(l, r) { return l + r; },
  'minus':         function(l, r) { return l - r; },
  'multiplied by': function(l, r) { return l * r; },
  'divided by':    function(l, r) { return l / r; }
};

function operators() {
  return Object.keys(BINARY_OPERATORS);
}

function pattern() {
  var expression = '';
  var operations = ' (' + operators().join('|') + ') ';

  expression += '(?:what is ([-+]?[\\d]+)';
  expression += operations;
  expression += '([-+]?[\\d]+)(?:';
  expression += operations;
  expression += '([-+]?[\\d]+))?)';

  return new RegExp(expression, 'i');
}

function WordProblem(question) {
  this.question = question || '';
  this.matches  = this.question.match(pattern());
}

WordProblem.prototype.tooComplicated = function() {
  return this.matches === null;
};

WordProblem.prototype.answer = function() {
  if (this.tooComplicated()) {
    throw new ArgumentError('I don\'t understand the question');
  }
  return this.evaluate();
};

WordProblem.prototype.evaluate = function() {
  var out = 0;
  var m   = this.matches;

  if (m[1] !== undefined && m[2] !== undefined && m[3] !== undefined) {
    out = this.operate(m[2], m[1], m[3]);
  }

  if (m[4] !== undefined && m[5] !== undefined) {
    out = this.operate(m[4], out, m[5]);
  }

  return out;
};

WordProblem.prototype.operate = function(operation, l, r) {
  var fn = BINARY_OPERATORS[operation] || function() { return 0; };
  return fn(Number(l), Number(r));
};

function ArgumentError() {}
ArgumentError.prototype = new Error();

Version data entries

255 entries across 255 versions & 1 rubygems

Version Path
trackler-2.2.1.37 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.36 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.35 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.34 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.33 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.32 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.31 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.30 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.29 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.28 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.27 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.26 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.25 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.24 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.23 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.22 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.21 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.20 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.19 tracks/javascript/exercises/wordy/example.js
trackler-2.2.1.18 tracks/javascript/exercises/wordy/example.js