Advertisement
Guest User

Untitled

a guest
May 27th, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. var Type = {
  2. "STANDALONE": 0,
  3. "TEN": 1,
  4. "MULTIPLE": 2
  5. };
  6.  
  7. var standalones = {
  8. "zero": 0,
  9. "one": 1,
  10. "two": 2,
  11. "three": 3,
  12. "four": 4,
  13. "five": 5,
  14. "six": 6,
  15. "seven": 7,
  16. "eight": 8,
  17. "nine": 9,
  18. "ten": 10,
  19. "eleven": 11,
  20. "twelve": 12,
  21. "thirteen": 13,
  22. "fourteen": 14,
  23. "fifteen": 15,
  24. "sixteen": 16,
  25. "seventeen": 17,
  26. "eighteen": 18,
  27. "nineteen": 19
  28. };
  29.  
  30. var tens = {
  31. "twenty": 20,
  32. "thirty": 30,
  33. "forty": 40,
  34. "fifty": 50,
  35. "sixty": 60,
  36. "seventy": 70,
  37. "eighty": 80,
  38. "ninety": 90
  39. }
  40.  
  41. var multiples = {
  42. "hundred": 100,
  43. "thousand": 1000,
  44. "million": 1000000,
  45. "billion": 1000000000
  46. };
  47.  
  48. var test = 'forty five million eight hundred thirty one thousand';
  49.  
  50. var textToInt = function(txt) {
  51. var mult = 1;
  52. var pieces = txt.split(' ');
  53. if (pieces.length > 0 && pieces[0] == 'negative')
  54. {
  55. mult = -1;
  56. pieces.splice(0, 1);
  57. }
  58. var tokens = []
  59. for (var i = 0; i < pieces.length; i++)
  60. {
  61. var type = -1, p = pieces[i];
  62. if (standalones[p] != undefined)
  63. {
  64. type = Type.STANDALONE;
  65. } else if (tens[p] != undefined) {
  66. type = Type.TEN;
  67. } else if (multiples[p] != undefined) {
  68. type = Type.MULTIPLE;
  69. } else {
  70. throw 'Invalid number';
  71. }
  72. tokens.push(type);
  73. }
  74. var number = 0;
  75. var s = 0;
  76. for (var i = 0; i < pieces.length; i++)
  77. {
  78. var p = pieces[i];
  79. switch (tokens[i])
  80. {
  81. case Type.STANDALONE:
  82. s += standalones[p];
  83. break;
  84. case Type.TEN:
  85. s += tens[p];
  86. break;
  87. case Type.MULTIPLE:
  88. var add = true;
  89. var m = multiples[p];
  90. for (var j = i+1; j < pieces.length; j++)
  91. {
  92. if (tokens[j] == Type.MULTIPLE && multiples[pieces[j]] > m)
  93. {
  94. add = false;
  95. break;
  96. }
  97. }
  98. if (add)
  99. {
  100. number += s * m;
  101. s = 0;
  102. } else {
  103. s *= m;
  104. }
  105. break;
  106. }
  107. }
  108. number += s;
  109. return number * mult;
  110. };
  111.  
  112. var intToText = function(num)
  113. {
  114. txt = '';
  115. if (num < 0)
  116. {
  117. txt = 'negative ';
  118. num = num * -1;
  119. }
  120. return txt + intToTextHelper(Math.floor(num));
  121. };
  122.  
  123. var intToTextHelper = function(num)
  124. {
  125. if (num < 20)
  126. {
  127. for (var s in standalones)
  128. {
  129. if (standalones[s] == num)
  130. {
  131. return s;
  132. }
  133. }
  134. }
  135.  
  136. if (num < 100)
  137. {
  138. var r = num % 10, z;
  139. num -= r;
  140. for (var t in tens)
  141. {
  142. if (tens[t] == num)
  143. {
  144. return t + (((z = intToTextHelper(r)) != 'zero') ? ' ' + z : '');
  145. }
  146. }
  147. }
  148.  
  149. var prev = 1, prev_txt = '';
  150. for (var m in multiples)
  151. {
  152. if (Math.floor(num / multiples[m]) == 0)
  153. {
  154. break;
  155. }
  156. prev = multiples[m]; prev_txt = m;
  157. }
  158. var divisor = Math.floor(num / prev);
  159. var remainder = num % prev, z;
  160. return intToTextHelper(divisor) + ' ' + prev_txt + (((z = intToTextHelper(remainder)) != 'zero') ? ' ' + z : '');
  161. };
  162.  
  163. var operators = [
  164. 'plus',
  165. 'minus',
  166. 'times',
  167. 'divided by'
  168. ];
  169.  
  170. var parseSentence = function(sentence)
  171. {
  172. sentence = sentence.toLowerCase();
  173. var op = 'none', index;
  174. for (var i = 0; i < operators.length; i++)
  175. {
  176. if ((index = sentence.indexOf(operators[i])) != -1)
  177. {
  178. op = operators[i];
  179. break;
  180. }
  181. }
  182. if (op == 'none') { return 'no operation.'; }
  183. var left = textToInt(sentence.substring(0, index-1)),
  184. right = textToInt(sentence.substring(index + op.length + 1));
  185. var res;
  186. switch (op)
  187. {
  188. case 'plus':
  189. res = left + right;
  190. break;
  191. case 'minus':
  192. res = left - right;
  193. break;
  194. case 'times':
  195. res = left * right;
  196. break;
  197. case 'divided by':
  198. res = left / right;
  199. break;
  200. default:
  201. throw 'what';
  202. }
  203. return intToText(res);
  204. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement