我一直在考虑如何在Python中快速评估扑克牌手。我突然想到一个加速处理的方法是将所有卡面和花色表示为质数并将它们相乘以表示这些牌手。如下:
class PokerCard:
faces = '23456789TJQKA'
suits = 'cdhs'
facePrimes = [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 53, 59, 61]
suitPrimes = [2, 3, 5, 7]
并且
def HashVal(self):
return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit]
这将为每个手牌分配一个数字值,通过模运算可以告诉我手中有多少个国王或红心。例如,任何具有五张或更多草花的手牌都可以被2^5整除;任何具有四个国王的手牌都可以被59 ^ 4整除,等等。问题在于,像AcAdAhAsKdKhKs这样的七张手牌的哈希值约为62.7万亿,需要使用超过32位才能在内部表示。有没有一种方法可以在Python中存储这样的大数,使我可以对其执行算术操作?
collections.Counter
会更简单。 - Stef