24游戏 js 暴力破解

最近地铁上没啥事,玩了玩 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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值