Eu estive considerando uma avaliação rápida das mãos de poker em Python. Ocorreu-me que uma maneira de acelerar o processo seria representar todos os rostos e naipes de cartas como números primos e multiplicá-los para representar as mãos. Para whit:
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]
E
def HashVal(self):
return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit]
Isso daria a cada mão um valor numérico que, através do módulo, poderia me dizer quantos reis existem na mão ou quantos corações. Por exemplo, qualquer mão com cinco ou mais tacos dividiria uniformemente por 2 ^ 5; qualquer mão com quatro reis se dividiria uniformemente por 59 ^ 4, etc.
O problema é que uma mão de sete cartas como AcAdAhAsKdKhKs tem um valor de hash de aproximadamente 62,7 quadrilhões, o que levaria consideravelmente mais de 32 bits para representar internamente. Existe uma maneira de armazenar números tão grandes em Python que me permita executar operações aritméticas nele?