在Two Plus Two扑克牌评估员中,你如何从传递给它的7个牌中得到最好的5张牌组合?

ian*_*ian 7 algorithm poker

是否有可能从等价值中提取该信息?

我知道等价值越高越好.也可以从等价值中提取类别和等级.但有没有办法找出你传递给它的7个最好的5张牌组合?

Twoplustwo是最快的扑克手评估员(每秒评估1400-1500手).你给它7张牌​​,然后吐出手等值.值越高,卡就越好.

以下是twoplustwo的一个很好的总结:http://www.codingthewheel.com/archives/poker-hand-evaluator-roundup#2p2

上面链接的缓存版本:http://web.archive.org/web/20130116102452/http: //www.codingthewheel.com/archives/poker-hand-evaluator-roundup

Tac*_*der 7

(免责声明:我正在研究一种扑克软件,其中包括手工评估)

你给它7张牌​​,然后吐出手等值.

有几个评估人员这样做,如果我没有弄错,他们中的一些人每秒计算超过一亿手(!).这些评估器基本上可以在一个巨大的数组中进行7次数组查找,只需要几个周期(尽管有缓存未命中)来评估一只手.我不认为14-15百万/秒是最接近最快的.如果我没有弄错的话,CactusKev的评估员要快10倍.

现在回答你的问题:

你如何从传递给它的7个中获得最好的5张牌组合?

好吧它没有告诉你,一旦掌握了手的力量,它就会变得非常容易:你不需要重新发明轮子.

您可以使用强度来简化"最佳五分之五"计算.

可以使用其他图书馆,直接给你五张最好的牌(而不仅仅是他们的力量),或者你可以用自己的力量找到最好的五张牌.

我只举几个例子......

  • 你知道你有一个完整的房子(又名 "船"),然后你知道你正在寻找三张具有相同等级然后最好的一对的牌(如果有两对,但你肯定会找到至少有一个,因为评估员告诉你你有一条船).

  • 你知道你有一个直的:从最好的一个开始找到五张相互跟随的牌(小心特殊的轮箱情况).

    你也可以在直道上获得更多的动力:你可以利用每一个可能的直线,并比较评估者给你的力量.如果它匹配,例如,一个十高的直线,那么只需寻找任何T,9,8,7和6卡(无论套装).

  • 你知道你有"没有配对":只需拿你发现的五张最高牌

  • 等等

只有几个不同的等级...他们可能是,例如:

NO_PAIR
ONE_PAIR
TWO_PAIRS
SET
STRAIGHT
FLUSH
FULL_HOUSE
FOUR_OF_A_KIND
STRAIGHT_FLUSH
Run Code Online (Sandbox Code Playgroud)

(你当然可以创建中间的"轮直"和"轮冲直"和"皇家同花"案例,如果你想,等等)

一旦你知道你的手牌是什么类型(感谢你使用的快速评估器),只需切换到一段代码,找到该特定手牌的七个中最好的一个.

我认为这是一个很好的方法,因为你利用超快的评估器,然后大大简化你的逻辑.

在启动时,您需要计算一次强度,例如通过计算:

HIGHEST_NO_PAIR_HAND = ultraFastEvaluator( "As Kd Qh Jc 9d 5s 2c" );

HIGHEST_FULL_HOUSE = ultraFastEvaluator( "As Ac Ad Kh Ks 8s 2h" );
Run Code Online (Sandbox Code Playgroud)

我当然不主张在这里使用字符串.这只是一个例子......

那么你可以为每只手找到最好的五个:

  • 使用快速评估程序计算强度
  • 是<= HIGHEST_NO_PAIR_HAND?
    • 是的:拿五张最高牌
    • 不:是<= HIGHEST_ONE_PAIR_HAND?是的:拿最高一对+最高三张牌否:它是<= HIGHEST_TWO_PAIRS_HAND?
      • 等等

因此,在我看来,你可以重用一个直接找到七个中最好的API或完全重写自己的API,但如果你使用快速评估器的结果然后简化你的逻辑,它会更快.

编辑指出,没有一种方法可以做到"七个中最好的五个".例如,在Kc Kd Qh Qs 2c板上的As Ac,"As Ac Kc Kd Qh"和"As Ac Kc Kd Qs"都是"五个最佳"(最后一个女王的套装并不重要).