RosettaCodeData/Task/24-game/JavaScript/24-game.js
2013-04-10 14:23:37 -07:00

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!!")
;
}