java程序 扑克牌概率_java – 最简单的扑克牌评估算法

这是一个非常简短但完整的基于直方图的5卡扑克评分函数在Python(2.x)。如果转换为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'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值