7 Card Poker Hand Evaluator

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)

解释这里
演示

  • 这段代码中有一个错误-如果您有一个A牌作为低牌(例如A♣2♦3♦4♠5♥6♦K♥),那么它会错误地选择* lower *。在此示例中,6♦高直线应该是最好的。这是因为它给Ace额外的重量,但在这种情况下这样做是错误的,因为它不是高直线,而是低直线。参见https://imgur.com/a/e9wGR (4认同)

Gre*_*ray 12

该网站列出了一堆扑克手评估库,并提供了有关每个的一些细节.他们中的大多数是5张牌,但至少有一张牌为7张牌,名为The Snezee7 Evaluator.此外,该网站还提供了用于快速分析扑克牌的不同技术和算法的概述.

我在一些不同的扑克项目中使用了Pokers Rule C#Port of Pokersource Evaluator,并认为它是一个优秀的图书馆.你可以使用许多聪明的技巧来制作真正快速的手动评估器,但是编写代码需要做很多工作,我强烈建议使用现有的库.

  • 它确实......但这就是你如何得到一个快速的手评估器(大量的预计算).Two Plus Two评估者使用类似的方法使用123 MB查找表评估7张牌.对于5张牌,查找表要小得多. (2认同)

SK9*_*SK9 8

很高兴你问:)是的,这是一个全新的解决方案,可能只是门票:

代码: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.

祝好运!


Hen*_*Lee 5

我开发了一种用于 7 张牌手评估的算法,而无需迭代所有 21 种组合。

基本上,它将 7 张牌分为两类:同花和非同花。如果是同花顺,则很容易在包含 8192 个条目的表中查找该值。如果它不是刷新,它将使用动态编程技术运行散列函数,然后在 49205 个条目的散列表中查找值。

如果您有兴趣,请查看我在 github 上的工作。

https://github.com/HenryRlee/PokerHandEvaluator