35 algorithm poker playing-cards
有谁知道评估7张扑克牌手的快速算法?比一组7中的每21张5张牌组合更加有效率的东西.
干杯,
皮特
Sub*_*box 30
我用JavaScript写了一个.核心评估方法仅使用位操作,因此非常快.考虑到这一点,看21种组合仍然非常快.我们需要更深入的唯一一次是何时出现平局.当发生这种情况时,我们需要查看更多详细信息,以确定哪一张牌实际上是最好的.这是我提出的解决方案:
hands=["4 of a Kind", "Straight Flush", "Straight", "Flush", "High Card",
"1 Pair", "2 Pair", "Royal Flush", "3 of a Kind", "Full House" ];
var A=14, K=13, Q=12, J=11, _ = { "?":1, "?":2, "?":4, "?":8 };
//Calculates the Rank of a 5 card Poker hand using bit manipulations.
function rankPokerHand(cs,ss) {
var v, i, o, s = 1<<cs[0]|1<<cs[1]|1<<cs[2]|1<<cs[3]|1<<cs[4];
for (i=-1, v=o=0; i<5; i++, o=Math.pow(2,cs[i]*4)) {v += o*((v/o&15)+1);}
v = v % 15 - ((s/(s&-s) == 31) || (s == 0x403c) ? 3 : 1);
v -= (ss[0] == (ss[1]|ss[2]|ss[3]|ss[4])) * ((s == 0x7c00) ? -5 : 1);
document.write("Hand: "+hands[v]+((s == 0x403c)?" (Ace low)":"")+"<br/>");
}
//Royal Flush
rankPokerHand( [ 10, J, Q, K, A], [ _["?"], _["?"], _["?"], _["?"], _["?"] ] );
Run Code Online (Sandbox Code Playgroud)
Gre*_*ray 12
该网站列出了一堆扑克手评估库,并提供了有关每个库的一些细节.他们中的大多数是5张牌,但至少有一张牌为7张牌,名为The Snezee7 Evaluator.此外,该网站还提供了用于快速分析扑克牌的不同技术和算法的概述.
我在一些不同的扑克项目中使用了Pokers Rule C#Port of Pokersource Evaluator,并认为它是一个优秀的图书馆.你可以使用许多聪明的技巧来制作真正快速的手动评估器,但是编写代码需要做很多工作,我强烈建议使用现有的库.
很高兴你问:)是的,这是一个全新的解决方案,可能只是门票:
代码:http://code.google.com/p/specialkpokereval/
博客:http://specialk-coding.blogspot.com/2010/04/texas-holdem-7-card-evaluator_23.html
通过iTunes Store可以为iPhone/iPod Touch提供此评估器的商业级演变.它被称为" 扑克王牌 ".
有关链接的各种解决方案的完美摘要可在James Devlin的博客" Coding The Wheel "中找到.
尚未讨论过的一位评估员是Klaatu.
祝好运!
我开发了一种用于 7 张牌手评估的算法,而无需迭代所有 21 种组合。
基本上,它将 7 张牌分为两类:同花和非同花。如果是同花顺,则很容易在包含 8192 个条目的表中查找该值。如果它不是刷新,它将使用动态编程技术运行散列函数,然后在 49205 个条目的散列表中查找值。
如果您有兴趣,请查看我在 github 上的工作。
https://github.com/HenryRlee/PokerHandEvaluator