Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var Type = {
- "STANDALONE": 0,
- "TEN": 1,
- "MULTIPLE": 2
- };
- var standalones = {
- "zero": 0,
- "one": 1,
- "two": 2,
- "three": 3,
- "four": 4,
- "five": 5,
- "six": 6,
- "seven": 7,
- "eight": 8,
- "nine": 9,
- "ten": 10,
- "eleven": 11,
- "twelve": 12,
- "thirteen": 13,
- "fourteen": 14,
- "fifteen": 15,
- "sixteen": 16,
- "seventeen": 17,
- "eighteen": 18,
- "nineteen": 19
- };
- var tens = {
- "twenty": 20,
- "thirty": 30,
- "forty": 40,
- "fifty": 50,
- "sixty": 60,
- "seventy": 70,
- "eighty": 80,
- "ninety": 90
- }
- var multiples = {
- "hundred": 100,
- "thousand": 1000,
- "million": 1000000,
- "billion": 1000000000
- };
- var test = 'forty five million eight hundred thirty one thousand';
- var textToInt = function(txt) {
- var mult = 1;
- var pieces = txt.split(' ');
- if (pieces.length > 0 && pieces[0] == 'negative')
- {
- mult = -1;
- pieces.splice(0, 1);
- }
- var tokens = []
- for (var i = 0; i < pieces.length; i++)
- {
- var type = -1, p = pieces[i];
- if (standalones[p] != undefined)
- {
- type = Type.STANDALONE;
- } else if (tens[p] != undefined) {
- type = Type.TEN;
- } else if (multiples[p] != undefined) {
- type = Type.MULTIPLE;
- } else {
- throw 'Invalid number';
- }
- tokens.push(type);
- }
- var number = 0;
- var s = 0;
- for (var i = 0; i < pieces.length; i++)
- {
- var p = pieces[i];
- switch (tokens[i])
- {
- case Type.STANDALONE:
- s += standalones[p];
- break;
- case Type.TEN:
- s += tens[p];
- break;
- case Type.MULTIPLE:
- var add = true;
- var m = multiples[p];
- for (var j = i+1; j < pieces.length; j++)
- {
- if (tokens[j] == Type.MULTIPLE && multiples[pieces[j]] > m)
- {
- add = false;
- break;
- }
- }
- if (add)
- {
- number += s * m;
- s = 0;
- } else {
- s *= m;
- }
- break;
- }
- }
- number += s;
- return number * mult;
- };
- var intToText = function(num)
- {
- txt = '';
- if (num < 0)
- {
- txt = 'negative ';
- num = num * -1;
- }
- return txt + intToTextHelper(Math.floor(num));
- };
- var intToTextHelper = function(num)
- {
- if (num < 20)
- {
- for (var s in standalones)
- {
- if (standalones[s] == num)
- {
- return s;
- }
- }
- }
- if (num < 100)
- {
- var r = num % 10, z;
- num -= r;
- for (var t in tens)
- {
- if (tens[t] == num)
- {
- return t + (((z = intToTextHelper(r)) != 'zero') ? ' ' + z : '');
- }
- }
- }
- var prev = 1, prev_txt = '';
- for (var m in multiples)
- {
- if (Math.floor(num / multiples[m]) == 0)
- {
- break;
- }
- prev = multiples[m]; prev_txt = m;
- }
- var divisor = Math.floor(num / prev);
- var remainder = num % prev, z;
- return intToTextHelper(divisor) + ' ' + prev_txt + (((z = intToTextHelper(remainder)) != 'zero') ? ' ' + z : '');
- };
- var operators = [
- 'plus',
- 'minus',
- 'times',
- 'divided by'
- ];
- var parseSentence = function(sentence)
- {
- sentence = sentence.toLowerCase();
- var op = 'none', index;
- for (var i = 0; i < operators.length; i++)
- {
- if ((index = sentence.indexOf(operators[i])) != -1)
- {
- op = operators[i];
- break;
- }
- }
- if (op == 'none') { return 'no operation.'; }
- var left = textToInt(sentence.substring(0, index-1)),
- right = textToInt(sentence.substring(index + op.length + 1));
- var res;
- switch (op)
- {
- case 'plus':
- res = left + right;
- break;
- case 'minus':
- res = left - right;
- break;
- case 'times':
- res = left * right;
- break;
- case 'divided by':
- res = left / right;
- break;
- default:
- throw 'what';
- }
- return intToText(res);
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement