Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env node
- "use strict";
- var level = 5;
- // FUNCTIONS
- Array.prototype.rand = function (){
- return this[Math.floor(Math.random() * this.length)];
- };
- function rand(min, max){
- return Math.floor(Math.random() * (max-min+1))+min;
- }
- function randOperator(exceptOne){
- var operators = ["+", "-", "*", "/"];
- if (exceptOne) {
- operators.splice(operators.indexOf(exceptOne), 1);
- }
- return operators.rand();
- }
- function getResult(arr){
- return eval(arr.slice(0, arr.length).join(''));
- }
- var operators = [],
- expressionMask = '',
- expressionMaskArray = [];
- // GENERATE OPERATORS
- for (var i = 0; i < level-1; i++) {
- var operator = randOperator();
- operators.push(operator);
- }
- // GENERATE BRACKETS
- for (var i = 0; i < operators.length; i++) {
- var operator = operators[i],
- next = operators[i+1] || operator;
- if (operator != next) {
- expressionMask += '(';
- }
- expressionMask += operator;
- if (operator != next) {
- expressionMask += ')';
- }
- }
- expressionMask = expressionMask.replace(/\)\(/g, '');
- // ADD PALCEHOLDERS FOR NUMBERS
- if (expressionMask.substr(0, 1) != '(' && expressionMask.substr(0, 1) != ')') {
- expressionMask = '1'+expressionMask;
- }
- if (expressionMask.substr(-1) != '(' && expressionMask.substr(-1) != ')') {
- expressionMask += '1';
- }
- expressionMask = expressionMask.replace(/(\(|\))/g, function (bracket){
- return bracket == '('
- ? '(1'
- : '1)';
- });
- var doubleSymbolsMask = /[^0-9)(]{2}/g;
- while (doubleSymbolsMask.test(expressionMask)) {
- expressionMask = expressionMask.replace(doubleSymbolsMask, function (doubleSymbols){
- return doubleSymbols.substr(0, 1)+'1'+doubleSymbols.substr(1);
- });
- }
- // REPLACE PLACEHOLDERS WITH RAND NUMBERS
- expressionMaskArray = expressionMask.split('');
- for (var i = 0; i < expressionMaskArray.length; i++) {
- if (expressionMaskArray[i] > 0) {
- expressionMaskArray[i] = rand(1, 100);
- }
- }
- // CHANGES WHILE RESULT IS NOT VALID
- var result = getResult(expressionMaskArray),
- randChar,
- randIndex,
- replaceTo;
- while (result <= 0 || result % 1 !== 0) {
- randIndex = rand(0, expressionMaskArray.length-1);
- randChar = expressionMaskArray[randIndex];
- if (['(', ')', ''].indexOf(randChar) != -1) continue;
- replaceTo = randChar > 0
- ? rand(1, 100)
- : randOperator(randChar);
- expressionMaskArray[randIndex] = replaceTo;
- result = getResult(expressionMaskArray);
- }
- console.log(expressionMaskArray.join(''), '=', eval(expressionMaskArray.join('')));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement