Ho preso in considerazione una rapida valutazione della mano di poker in Python. Mi è venuto in mente che un modo per accelerare il processo sarebbe quello di rappresentare tutte le facce e semi delle carte come numeri primi e moltiplicarli insieme per rappresentare le mani. Per Pentecoste:
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]
Ciò darebbe ad ogni mano un valore numerico che, attraverso il modulo, potrebbe dirmi quanti re ci sono nella mano o quanti cuori. Ad esempio, ogni mano con cinque o più fiori dentro si dividerebbe uniformemente per 2 ^ 5; qualsiasi mano con quattro re si dividerebbe uniformemente per 59 ^ 4, ecc.
Il problema è che una mano di sette carte come AcAdAhAsKdKhKs ha un valore di hash di circa 62,7 quadrilioni, che richiederebbe considerevolmente più di 32 bit per rappresentare internamente. C'è un modo per memorizzare numeri così grandi in Python che mi permetterà di eseguire operazioni aritmetiche su di esso?