是否可以从等效值中提取该信息?
我知道等效值越高越好。类别和排名也可以从等效值中提取。但是有没有办法从你传给它的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
发布于 2012-04-05 00:36:05
(免责声明:我正在开发一个扑克软件,其中包括手部评估)
,你把你的7张牌给它,它就会吐出一个等价值。
有几个计算器在这样做,如果我没有弄错的话,他们中的一些人每秒计算超过一亿手(!)。这些计算器基本上归结为在一个巨大的数组中进行7次数组查找,并且只需要几个周期(尽管缓存未命中)就可以评估一只手。我不认为14-1500万/秒是最快的。如果我没记错的话,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(当然,您可以创建中间的“轮直”和“轮直齐平”和“皇家齐平”情况,如果您愿意,等等)。
一旦你知道你的手是哪种类型的手(感谢你正在使用的快速求值器),只需切换到一段代码,它将为这只特定的手找到七个中最好的五个。
我认为这是一个很好的方法,因为您可以利用超快的计算器,然后它会极大地简化您的逻辑。
在启动时,你需要计算一次强度,例如通过计算:
HIGHEST_NO_PAIR_HAND = ultraFastEvaluator( "As Kd Qh Jc 9d 5s 2c" );
HIGHEST_FULL_HOUSE = ultraFastEvaluator( "As Ac Ad Kh Ks 8s 2h" );当然,我并不提倡在这里使用字符串。这只是个例子。
然后,对于每一张牌,你可以找到实际的五个最好的:
因此,在我看来,你可以重用一个API,它可以直接找到七个中最好的五个,或者完全重写你自己的API,但是如果你使用快速求值器的结果来简化你的逻辑,它会更快。
请注意,不一定有一种方法可以做到“七个中的五个最好”。例如,在Kc Kd Kd Qh Qs 2c板上使用As Ac时,"As Ac Kc Kd Qh“和"As Ac Kc Kd Qs”都是“五个最好的”(最后一套皇后西装无关紧要)。
发布于 2012-03-30 17:08:17
不,不可能提取这些信息。查找表只包含等价值,这些值被分解为手类型和等级;不保留任何其他信息。
如果您需要每秒评估数百万手牌并获得每一手牌的获胜牌,而不仅仅是排名,那么您将需要使用不同的评估器。如果你只需要提取获胜的牌很少,你可以使用这个计算器,并在必要时求助于较慢的方法来找到最好的5张牌。
发布于 2013-05-07 13:09:31
老帖子,但我会试一试。如果你使用表查找(例如,上面提到的7卡阵列,也就是Ray Wotton方法),用你的目标信息在相同的槽位置构造第二个表。例如:我在167,452号槽中找到了eval,现在我将在167,452号槽中的另一个数组中找到我的5张牌。
一张牌可以用6位来表示--2位表示花色,4位表示等级。30位将给你整个5张牌。也许不是那么简单,但这是一般的想法。我在不久前做的一些事情中使用了这种精确的技术。
或者,您可以传入所有7选5牌组合(我相信其中有21张),并找出与原始eval匹配的组合。
https://stackoverflow.com/questions/9935212
复制相似问题