48 lines
1.7 KiB
JavaScript
48 lines
1.7 KiB
JavaScript
String.prototype.replaceAll = function(patt,repl) { var that = this;
|
|
that = that.replace(patt,repl);
|
|
if (that.search(patt) != -1) {
|
|
that = that.replaceAll(patt,repl);
|
|
}
|
|
return that;
|
|
};
|
|
|
|
function validChars(input) { var regInvalidChar = /[^\d\+\*\/\s-\(\)]/;
|
|
return input.search(regInvalidChar) == -1;
|
|
}
|
|
|
|
function validNums(str, nums) {
|
|
var arr, l;
|
|
arr = str.replaceAll(/[^\d\s]/," ").replaceAll(" "," ").trim().split(" ").sort();
|
|
l = arr.length;
|
|
|
|
while(l--) { arr[l] = Number(arr[l]); }
|
|
|
|
return _.isEqual(arr,nums.sort());
|
|
}
|
|
|
|
function validEval(input) { try { eval(input); } catch (e) { return false; };
|
|
return true;
|
|
}
|
|
|
|
var input;
|
|
|
|
while(true){ var numbers = [];
|
|
var i = 4;
|
|
while(i--) { numbers.push(Math.floor(Math.random()*8+1));
|
|
}
|
|
|
|
input = prompt("Your numbers are:\n"
|
|
+ numbers.join(" ")
|
|
+ "\nEnter expression. (use only + - * / and parens).\n"
|
|
+ "'x' to exit."
|
|
);
|
|
|
|
if (input === 'x') break;
|
|
|
|
!validChars(input) ? alert("Invalid chars used, try again. Use only:\n + - * / ( )")
|
|
: !validNums(input,numbers) ? alert("Wrong numbers used, try again.")
|
|
: !validEval(input) ? alert("Could not evaluate input, try again.")
|
|
: eval(input) != 24 ? alert("Wrong answer:" + eval(input) + "\nTry again.")
|
|
: alert(input + "== 24. Congrats!!")
|
|
;
|
|
}
|