Highway 发表于 2014-2-27 12:34:04

关于24点游戏 ,这里坦白交代一下

本帖最后由 Highway 于 2014-2-27 14:14 编辑

今天看到@gbdashen 朋友的小游戏帖,不禁想起多年前我写的一些东西。那时候还在西西河科技版当版主,用Java写了个程序来测试JDK 1.5多线程功能上是否比以前的版本有提升,和河里的各位程序员们一同切磋探讨。后来还还对比C#的多线程的scalability写了些东西,时间长了,都已经有些模糊了。

【原创】一个游戏引发的无血案 [ Highway ]

【原创】用计算机求解一个儿时的游戏 [ Highway ]

今天在公司,用手机登陆到家里的服务器,居然找到了以前的JAR文件,然后想办法偷运到公司里,悄悄运行了一下,给出了gbdashen朋友提出的那些问题的答案。

小时候的游戏我们只用加减乘除,因为那时候我们不会别的。其实应该是所有Binary Operator都应该可以使用的。也就是说一个算符要求两个算子为输入,然后产生一个结果,只要是这样就可用。Unary and ternary的算符不符合规则,不能使用。比如SIN(), ABS(), Floor()这些就不和规则。

为了口算能够检查结果,我的程序里加入了乘方和取余数两个不算太复杂的算符,所以解决方案更多一些。

这个小程序能对付自由定义的游戏,比如5张扑克拼80点,6张扑克拼250等等等等,比较Generic。但是有一个问题我没有完成,那就是最后结果相似答案筛选的步骤。

比如说吧,@苏双 同学出的四张牌:4, 7, 8, 10,我的答案呼噜噜一大堆,从算机角度看是不一样的,但我们人一看就知道好多算法是一回事。这个我也懒的去弄了。

Solution is: (10*8)%(7*4)
Solution is: ((8*7)%10)*4
Solution is: ((7%4)%10)*8
Solution is: ((10%7)%4)*8
Solution is: (8*10)%(4*7)
Solution is: 10+((8*7)/4)
Solution is: (8/(4/7))+10
Solution is: 8*((7-4)%10)
Solution is: ((7*10)%8)*4
Solution is: 10+((7*8)/4)
Solution is: 8*((7%4)%10)
Solution is: 8*((10%7)%4)
Solution is: ((10*7)%8)*4
Solution is: 10+(8/(4/7))
Solution is: ((7%10)-4)*8
Solution is: 4*((8*7)%10)
Solution is: 8*(7%(4%10))
Solution is: 10+(7/(4/8))
Solution is: (7%4)*(8%10)
Solution is: 8*(7-(4%10))
Solution is: 8*((10-7)%4)
Solution is: ((8/4)*7)+10
Solution is: (7%(4%10))*8
Solution is: ((7*8)%10)*4
Solution is: (7*(8/4))+10
Solution is: ((8*7)/4)+10
Solution is: (10*8)%(4*7)
Solution is: ((7%10)%4)*8
Solution is: (8*10)%(7*4)
Solution is: 4*((7*8)%10)
Solution is: 10+(8*(7/4))
Solution is: 10+(7*(8/4))
Solution is: ((7/4)*8)+10
Solution is: (8*(7/4))+10
Solution is: (7/(4/8))+10
Solution is: (8%10)*(7%4)
Solution is: ((7-4)%10)*8
Solution is: ((10-7)%4)*8
Solution is: (8%10)*(7-4)
Solution is: ((7*8)/4)+10
Solution is: 8*((7%10)-4)
Solution is: 10+((7/4)*8)
Solution is: 4*((7*10)%8)
Solution is: 8*((7%10)%4)
Solution is: 10+((8/4)*7)
Solution is: (7-4)*(8%10)
Solution is: (7-(4%10))*8
Solution is: 4*((10*7)%8)

另外,我的算法是“穷尽法”,7张以下扑克牌游戏还能从容应对。如果再多几张,那么计算量巨大,计算机也都吃不消了。这种算法显然还是非常粗糙的。

Highway 发表于 2014-2-27 22:46:41

如果4张扑克玩24点,那么理论上牌型组合有28561,忽略花色拿走重复的话就只有1820种了,其中无解的有458种,将近1/4。

如果玩12点,那么无解情况会少很多, 15点,16点也都比24强。No solution combinations for 12 are: 285
No solution combinations for 13 are: 406
No solution combinations for 14 are: 371
No solution combinations for 15 are: 380
No solution combinations for 16 are: 396
No solution combinations for 17 are: 580
No solution combinations for 18 are: 423
No solution combinations for 19 are: 623
No solution combinations for 20 are: 448
No solution combinations for 21 are: 566
No solution combinations for 22 are: 576
No solution combinations for 23 are: 712
No solution combinations for 24 are: 458
No solution combinations for 25 are: 746
No solution combinations for 26 are: 657
No solution combinations for 27 are: 684
No solution combinations for 28 are: 649
No solution combinations for 29 are: 878
No solution combinations for 30 are: 627
No solution combinations for 31 are: 930
No solution combinations for 32 are: 714
No solution combinations for 33 are: 785
No solution combinations for 34 are: 928
No solution combinations for 35 are: 801
页: [1]
查看完整版本: 关于24点游戏 ,这里坦白交代一下