gpt4 book ai didi

java - 最简单的扑克手评估算法

转载 作者:IT老高 更新时间:2023-10-28 20:37:02 30 4
gpt4 key购买 nike

我正在考虑Java 中的扑克手(5 张牌)评估。现在我正在寻找简单和清晰,而不是性能和效率。我可能可以编写一个“幼稚”的算法,但它需要大量代码。

我还看到了一些扑克评估库,它们使用散列和按位运算,但它们看起来相当复杂。

什么是扑克牌评估“最干净和最简单”的算法?

最佳答案

这是一个非常简短但完整的基于直方图的 Python (2.x) 中的 5 张扑克计分函数。如果转换成 Java,它会变得相当长。

def poker(hands):
scores = [(i, score(hand.split())) for i, hand in enumerate(hands)]
winner = sorted(scores , key=lambda x:x[1])[-1][0]
return hands[winner]

def score(hand):
ranks = '23456789TJQKA'
rcounts = {ranks.find(r): ''.join(hand).count(r) for r, _ in hand}.items()
score, ranks = zip(*sorted((cnt, rank) for rank, cnt in rcounts)[::-1])
if len(score) == 5:
if ranks[0:2] == (12, 3): #adjust if 5 high straight
ranks = (3, 2, 1, 0, -1)
straight = ranks[0] - ranks[4] == 4
flush = len({suit for _, suit in hand}) == 1
'''no pair, straight, flush, or straight flush'''
score = ([1, (3,1,1,1)], [(3,1,1,2), (5,)])[flush][straight]
return score, ranks

>>> poker(['8C TS KC 9H 4S', '7D 2S 5D 3S AC', '8C AD 8D AC 9C', '7C 5H 8D TD KS'])
'8C AD 8D AC 9C'

关于java - 最简单的扑克手评估算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10363927/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com