最近地鐵上沒啥事,玩了玩 24 遊戲。遊戲定義很簡單,四個100以內整數,通過三次四則運算,結果等於24。
忙中偷閒用 js 開發寫了一個暴力破解的方法。代碼貼一下。
<html>
<body>
<script>
function calculation(a, b, c, d){
//符號整理
var charsAll = [];
var chars = ['+', '-', '*', '/'];
for(var i1 = 0 ; i1 < 4 ; i1 ++){
for(var i2 = 0 ; i2 < 4 ; i2 ++){
for(var i3 = 0 ; i3 < 4 ; i3 ++){
charsAll.push(chars[i1] + ' ' + chars[i2] + ' ' + chars[i3]);
}
}
}
var numAll = [];
var num = [];
num.push(a);
num.push(b);
num.push(c);
num.push(d);
//數字整理
for(var i1 = 0 ; i1 < 4 ; i1 ++){
for(var i2 = 0 ; i2 < 4 ; i2 ++){
if(i1 == i2){
continue;
}
for(var i3 = 0 ; i3 < 4 ; i3 ++){
if(i1 == i3 || i2 == i3){
continue;
}
for(var i4 = 0 ; i4 < 4 ; i4 ++){
if(i1 == i4 || i2 == i4 || i3 == i4){
continue;
}
numAll.push(num[i1] + ' ' + num[i2] + ' ' + num[i3] + ' ' + num[i4]);
}
}
}
}
var resultsAll = [];
//整理數字和符號,形成計算式
for(var i = 0 ; i < numAll.length ; i ++){
for(var j = 0 ; j < charsAll.length ; j ++){
var numArr = numAll[i].split(' ');
var charArr = charsAll[j].split(' ');
var cal = '(' + numArr[0] + charArr[0] + numArr[1] + ')';
var res = eval(cal);
if(res < 0 || res % 1 != 0){
continue;
}
var str = cal;
cal = '(' + res + charArr[1] + numArr[2] + ')';
var res = eval(cal);
if(res < 0 || res % 1 != 0){
continue;
}
str = '(' + str + charArr[1] + numArr[2] + ')';
cal = res + charArr[2] + numArr[3];
res = eval(cal);
if(res == 24){
str = str + charArr[2] + numArr[3];;
resultsAll.push(str);
}
}
}
var size = resultsAll.length;
var allStr = size + '\n';
for(var i = 0 ; i < size ; i ++){
allStr += resultsAll[i] + '\n';
}
alert(allStr);
}
function begin(){
calculation(
document.getElementById("a").value,
document.getElementById("b").value,
document.getElementById("c").value,
document.getElementById("d").value
);
}
</script>
<input id="a" /><br />
<input id="b" /><br />
<input id="c" /><br />
<input id="d" /><br />
<input type="button" onclick="begin()" value="BEGIN" />
</body>
</html>