Advertisement
Guest User

Untitled

a guest
Apr 26th, 2015
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env node
  2.  
  3. "use strict";
  4.  
  5. var level = 5;
  6.  
  7. // FUNCTIONS
  8. Array.prototype.rand = function (){
  9.     return this[Math.floor(Math.random() * this.length)];
  10. };
  11.  
  12. function rand(min, max){
  13.     return Math.floor(Math.random() * (max-min+1))+min;
  14. }
  15.  
  16. function randOperator(exceptOne){
  17.     var operators = ["+", "-", "*", "/"];
  18.     if (exceptOne) {
  19.         operators.splice(operators.indexOf(exceptOne), 1);
  20.     }
  21.     return operators.rand();
  22. }
  23.  
  24. function getResult(arr){
  25.     return eval(arr.slice(0, arr.length).join(''));
  26. }
  27.  
  28. var operators = [],
  29.     expressionMask = '',
  30.     expressionMaskArray = [];
  31.  
  32. // GENERATE OPERATORS
  33. for (var i = 0; i < level-1; i++) {
  34.     var operator = randOperator();
  35.     operators.push(operator);
  36. }
  37.  
  38. // GENERATE BRACKETS
  39. for (var i = 0; i < operators.length; i++) {
  40.     var operator = operators[i],
  41.         next = operators[i+1] || operator;
  42.  
  43.     if (operator != next) {
  44.         expressionMask += '(';
  45.     }
  46.  
  47.     expressionMask += operator;
  48.  
  49.     if (operator != next) {
  50.         expressionMask += ')';
  51.     }
  52. }
  53. expressionMask = expressionMask.replace(/\)\(/g, '');
  54.  
  55. // ADD PALCEHOLDERS FOR NUMBERS
  56. if (expressionMask.substr(0, 1) != '(' && expressionMask.substr(0, 1) != ')') {
  57.     expressionMask = '1'+expressionMask;
  58. }
  59. if (expressionMask.substr(-1) != '(' && expressionMask.substr(-1) != ')') {
  60.     expressionMask += '1';
  61. }
  62.  
  63. expressionMask = expressionMask.replace(/(\(|\))/g, function (bracket){
  64.     return bracket == '('
  65.         ? '(1'
  66.         : '1)';
  67. });
  68.  
  69. var doubleSymbolsMask = /[^0-9)(]{2}/g;
  70. while (doubleSymbolsMask.test(expressionMask)) {
  71.     expressionMask = expressionMask.replace(doubleSymbolsMask, function (doubleSymbols){
  72.         return doubleSymbols.substr(0, 1)+'1'+doubleSymbols.substr(1);
  73.     });
  74. }
  75.  
  76. // REPLACE PLACEHOLDERS WITH RAND NUMBERS
  77. expressionMaskArray = expressionMask.split('');
  78. for (var i = 0; i < expressionMaskArray.length; i++) {
  79.     if (expressionMaskArray[i] > 0) {
  80.         expressionMaskArray[i] = rand(1, 100);
  81.     }
  82. }
  83.  
  84. // CHANGES WHILE RESULT IS NOT VALID
  85. var result = getResult(expressionMaskArray),
  86.     randChar,
  87.     randIndex,
  88.     replaceTo;
  89. while (result <= 0 || result % 1 !== 0) {
  90.     randIndex = rand(0, expressionMaskArray.length-1);
  91.     randChar = expressionMaskArray[randIndex];
  92.  
  93.     if (['(', ')', ''].indexOf(randChar) != -1) continue;
  94.  
  95.     replaceTo = randChar > 0
  96.         ? rand(1, 100)
  97.         : randOperator(randChar);
  98.  
  99.     expressionMaskArray[randIndex] = replaceTo;
  100.  
  101.     result = getResult(expressionMaskArray);
  102. }
  103.  
  104. console.log(expressionMaskArray.join(''), '=', eval(expressionMaskArray.join('')));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement