首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在2+2扑克牌牌手评估器上,如何从传递给它的7张牌中获得最好的5张牌组合?

在2+2扑克牌牌手评估器上,如何从传递给它的7张牌中获得最好的5张牌组合?
EN

Stack Overflow用户
提问于 2012-03-30 07:46:22
回答 4查看 7.2K关注 0票数 7

是否可以从等效值中提取该信息?

我知道等效值越高越好。类别和排名也可以从等效值中提取。但是有没有办法从你传给它的7张牌中找出最好的5张牌组合呢?

Twoplustwo是最快的扑克手评估器(每秒评估14000-1500万手)。你把你的7张牌给它,它就会吐出一个等价值。值越高,卡片效果越好。

下面是关于两个插件的一个很好的总结: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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-05 00:36:05

(免责声明:我正在开发一个扑克软件,其中包括手部评估)

,你把你的7张牌给它,它就会吐出一个等价值。

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

现在回答你的问题:

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

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

您可以使用该强度来简化“七项中最好的五项”的计算。

你也可以使用其他库,直接给你五张最好的牌(而不仅仅是它们的强度),或者你也可以用实力自己找到五张最好的牌。

我只举几个例子。

  • 你知道你已经客满了(也就是“船”),那么你知道你正在寻找三张具有相同等级的牌,然后是最好的一对(如果有两对,但你肯定会找到至少一对,因为评估者告诉你你有一艘船)。
  • 你知道你有一条直线:从最好的一张开始,找到五张紧跟其后的牌(注意特殊的轮子情况)。

你也可以更喜欢直道:你可以取每一条可能的直道的强度,并将评估者给你的强度与这些比较。如果它匹配,比方说,十高的直线,那么简单地寻找任何T,9,8,7和6牌(不管花色)。

  • 你知道你有"no

  • “:简单地选择你的五高牌。

只有几个不同的级别..。例如,它们可能是:

代码语言:javascript
复制
NO_PAIR
ONE_PAIR
TWO_PAIRS
SET
STRAIGHT
FLUSH
FULL_HOUSE
FOUR_OF_A_KIND
STRAIGHT_FLUSH

(当然,您可以创建中间的“轮直”和“轮直齐平”和“皇家齐平”情况,如果您愿意,等等)。

一旦你知道你的手是哪种类型的手(感谢你正在使用的快速求值器),只需切换到一段代码,它将为这只特定的手找到七个中最好的五个。

我认为这是一个很好的方法,因为您可以利用超快的计算器,然后它会极大地简化您的逻辑。

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

代码语言:javascript
复制
HIGHEST_NO_PAIR_HAND = ultraFastEvaluator( "As Kd Qh Jc 9d 5s 2c" );

HIGHEST_FULL_HOUSE = ultraFastEvaluator( "As Ac Ad Kh Ks 8s 2h" );

当然,我并不提倡在这里使用字符串。这只是个例子。

然后,对于每一张牌,你可以找到实际的五个最好的:

  • 使用fast evaluator
  • is it <= HIGHEST_NO_PAIR_HAND?
    • yes:拿下五张最高的牌
    • no: is it <= HIGHEST_ONE_PAIR_HAND?是:拿最高的一对+最高的三张牌否:是<= HIGHEST_TWO_PAIRS_HAND吗?
      • etc.

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

请注意,不一定有一种方法可以做到“七个中的五个最好”。例如,在Kc Kd Kd Qh Qs 2c板上使用As Ac时,"As Ac Kc Kd Qh“和"As Ac Kc Kd Qs”都是“五个最好的”(最后一套皇后西装无关紧要)。

票数 7
EN

Stack Overflow用户

发布于 2012-03-30 17:08:17

不,不可能提取这些信息。查找表只包含等价值,这些值被分解为手类型和等级;不保留任何其他信息。

如果您需要每秒评估数百万手牌并获得每一手牌的获胜牌,而不仅仅是排名,那么您将需要使用不同的评估器。如果你只需要提取获胜的牌很少,你可以使用这个计算器,并在必要时求助于较慢的方法来找到最好的5张牌。

票数 4
EN

Stack Overflow用户

发布于 2013-05-07 13:09:31

老帖子,但我会试一试。如果你使用表查找(例如,上面提到的7卡阵列,也就是Ray Wotton方法),用你的目标信息在相同的槽位置构造第二个表。例如:我在167,452号槽中找到了eval,现在我将在167,452号槽中的另一个数组中找到我的5张牌。

一张牌可以用6位来表示--2位表示花色,4位表示等级。30位将给你整个5张牌。也许不是那么简单,但这是一般的想法。我在不久前做的一些事情中使用了这种精确的技术。

或者,您可以传入所有7选5牌组合(我相信其中有21张),并找出与原始eval匹配的组合。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9935212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档