Algorithm 找到最好的牌来完成部分扑克手牌

Algorithm 找到最好的牌来完成部分扑克手牌,algorithm,language-agnostic,poker,Algorithm,Language Agnostic,Poker,我试图为以下问题找到一个有效的解决方案: 术语: 排名:1-13,其中11=杰克,12=女王,13=国王 套装:H=红桃,C=梅花,D=钻石,S=黑桃 “WishCard”:可以根据玩家的意愿穿戴任何等级/套装的卡,无需重复卡牌 给定2到7张牌,其中至少0到7张被定义为“WishCard”,玩家在特定时间可能拥有的最佳牌组合是什么 Examples: Stage: Pre-Flop Hand[4C,*] -> Hand[4C,4H] | Pair Stage: Flop Hand[4C,

我试图为以下问题找到一个有效的解决方案:

术语:

排名:1-13,其中11=杰克,12=女王,13=国王

套装:H=红桃,C=梅花,D=钻石,S=黑桃

“WishCard”:可以根据玩家的意愿穿戴任何等级/套装的卡,无需重复卡牌

给定2到7张牌,其中至少0到7张被定义为“WishCard”,玩家在特定时间可能拥有的最佳牌组合是什么

Examples:
Stage: Pre-Flop
Hand[4C,*] -> Hand[4C,4H] | Pair

Stage: Flop
Hand[4C,*], Shared[*,10H,5C] -> Hand[4C,10C], Shared[10D,10H,5C] | 10 Three of a kind

Stage: Turn
Hand[4C,*], Shared[*,10H,5C,1S] -> Hand[4C,1C], Shared[1D,10H,5C,1S] | Ace Three of a kind

Stage: River
Hand[4C,*], Shared[*,10H,5C,1S,6C] -> Hand[4C,8C], Shared[7C,10H,5C,1S,6C] | 4C-8C Straight Flush

我觉得这将是一个永远的残酷的强迫。有没有更快的方法来计算呢?

这取决于你所说的“暴力强迫”。但它是混乱的,因为有很多可能性和很多逻辑

我将把它预处理成数据结构,然后编写测试特定类型手的函数。然后,只要使用脑海中出现的任何技巧,从最好的到最坏的寻找每一种

预处理的一个例子是构建卡片类型/计数的散列。例如,在轮到你的时候:

{4: 1, 10: 1, 4: 1, 5: 1, 1: 1, 14: 1, "*": 2}
现在事实上,
“*”
出现了2x,这意味着我们需要另外2个才能得到4个同类,或者1个才能得到3个同类,或者什么也得不到才能得到2个同类。无需分析这些
“*”
会变成哪些确切的卡片。现在,您可以为4个同类、全屋、3个同类、2对和1对构建测试

对于直道,您可以在序列中运行,跟踪最后看到的
5张
卡的数量。如果你在
*
s的数量上有任何不足,你就有一个直选

对于冲水,每次冲水时,您将返回双手

对于直齐,您将分析直齐手


然后你只需要选择高牌。

这取决于你所说的“暴力强迫”。但它是混乱的,因为有很多可能性和很多逻辑

我将把它预处理成数据结构,然后编写测试特定类型手的函数。然后,只要使用脑海中出现的任何技巧,从最好的到最坏的寻找每一种

预处理的一个例子是构建卡片类型/计数的散列。例如,在轮到你的时候:

{4: 1, 10: 1, 4: 1, 5: 1, 1: 1, 14: 1, "*": 2}
现在事实上,
“*”
出现了2x,这意味着我们需要另外2个才能得到4个同类,或者1个才能得到3个同类,或者什么也得不到才能得到2个同类。无需分析这些
“*”
会变成哪些确切的卡片。现在,您可以为4个同类、全屋、3个同类、2对和1对构建测试

对于直道,您可以在序列中运行,跟踪最后看到的
5张
卡的数量。如果你在
*
s的数量上有任何不足,你就有一个直选

对于冲水,每次冲水时,您将返回双手

对于直齐,您将分析直齐手


然后你只需要选择高分。

有趣的方法,我将尝试实施它并让你知道它是否正确地涵盖了所有案例有趣的方法,我将尝试实施它并让你知道它是否正确地涵盖了所有案例