24 Poker Game is an easy and fun math games. 4 cards (exclude the kings) are randomly picked. And the player who solves the equation to 24 first wins. For example, if the 4 cards are 10, 10 and 5 5. The formula to 24 is: (5 * 5) - (10 / 10).
I have made an online 24 Poker game and an API is provided using PHP.
The online 24 Poker Game: https://helloacm.com/24/
You can find the source code below. The algorithm used is just bruteforce.
API (Application Programming Interface)
https://helloacm.com/api/24/?a=10&b=10&c=5&d=5
It will return JSON-encoded data:
{"errorCode":0,"cnt":1,"result":["(5 * 5) - (10 \/ 10)"]}
If $_GET parameter s is not specified, this API will use the $_POST variable s instead.
curl -X POST https://helloacm.com/api/24/ -d "a=1" -d "b=1" -d "c=2" -d "d=3"
老小的时候就玩这个 24点扑克游戏. 说来很简单 就是随机抽取4张扑克牌(除掉大小王), 然后需要以最快的速度用这4张牌 加减乘除 来得到 24的一个算式. 这需要脑子运算快, 是个很好的脑力训练.
周末闲来无事, 刚好那天在电视上看到 花样少年 里明星也在玩. 于是就很快的写了这么一个程序. 当然提供免费 API 地址是 https://helloacm.com/api/24/
原理和代码
代码在 英文网页上: https://helloacm.com/24/原理很简单, 就是暴力搜索. 才4个整数. 而且几种运算符而已. 注意加入了 pow 函数也就是可以有 a 的 b 次方. 整体来说4个数字只有两种方式. 就是 2个一组 即 (a, b), (c, d) 或者 ((a, b), c), d). 代码是用PHP实现的, 因为要提供API, 而且PHP里的数组很好用. 可以将值做为索引 (key). 这样就可以通过 array_key_exists(“=24”, $try1) 这样的方式来判断是否有结果为 24的算法.
最关键的可以通过 array_values(array_unique($rr)); 来去掉一些明显的重复. 关键代码如下:
// 返回 两数 A, B 可能的值数组 (value, how) 键值对.
function tryA($a, $b, $aa, $bb) {
$a = str_replace("=", "", $a);
$b = str_replace("=", "", $b);
$r = array();
$r["=" . ($a + $b)] = "$aa + $bb";
$r["=" . ($a - $b)] = "$aa - $bb";
$r["=" . ($a * $b)] = "$aa * $bb";
$r["=" . ($b - $a)] = "$bb - $aa";
$r["=" . pow($a, $b)] = "pow($aa, $bb)";
$r["=" . pow($b, $a)] = "pow($bb, $aa)";
if ($a != 0) $r["=" . ($b / $a)] = "$bb / $aa";
if ($b != 0) $r["=" . ($a / $b)] = "$aa / $bb";
return $r;
}
计算机最厉害的就是重复的工作. 这点搜索对计算来说是小 case. 而且能把几乎所有的可能搜索出来(不排除程序可能有漏掉的)
该功能集成到公众号里 (欢迎关注 公众号 justyyuk)
Originally published at https://steemit.com Thank you for reading my post, feel free to FOLLOW and Upvote @justyy which motivates me to create more quality posts.
原创首发于 https://steemit.com 非常感谢阅读, 欢迎FOLLOW和Upvote @justyy 能激励我创作更多更好的内容.
近期热贴 Recent Popular Posts
- Software Engineer Interview Question - How Many Ways from A to C via B? 软件工程师面试技巧之 从A到B再到C有多少种方法?
- Software Engineer Interview Question - Dynamic Programming - Integer Break 软件工程师面试技巧之 动态规化 - 整数拆分
- How to Claim BCC? BTC Hard-Fork via C program (Linux) 小白教程: 怎么领取 BCC (Bitcoin Cash) ?
- I wrote a Chinese Chess Program 软件分享: 智慧中国象棋 (Chinese Chess)
- Planning Cards – Agile Poker Game! 敏捷开发扑克游戏
- Software Engineer Interview Question - How to Check Valid Sudoku in C/C++? 软件工程师面试技巧之 如何检查数独的有效性
- Google Interview Question – Print Message - 去年 Google 的面试题 - 打印消息
- Software Engineer Interview Tips - Using Hashtable to Reduce Runtime Complexity 软件工程师面试技巧之 使用哈希表降复杂度
- Technology-driven or Business-model-driven? 技术优先还是商业模式优先 – 献给在30多岁还在写代码的朋友们
- 记录那些值得回忆的精彩瞬间