J'ai envisagé une évaluation rapide des mains de poker en Python. Il m'est apparu qu'une façon d'accélérer le processus serait de représenter toutes les faces et combinaisons de cartes sous forme de nombres premiers et de les multiplier ensemble pour représenter les mains. Pour Pentecôte:
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]
ET
def HashVal(self):
return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit]
Cela donnerait à chaque main une valeur numérique qui, via modulo, pourrait me dire combien de rois sont dans la main ou combien de cœurs. Par exemple, n'importe quelle main avec cinq clubs ou plus se diviserait également par 2 ^ 5; n'importe quelle main avec quatre rois se diviserait également par 59 ^ 4, etc.
Le problème est qu'une main à sept cartes comme AcAdAhAsKdKhKs a une valeur de hachage d'environ 62,7 quadrillions, ce qui prendrait considérablement plus de 32 bits à représenter en interne. Existe-t-il un moyen de stocker de si grands nombres en Python qui me permettra d'effectuer des opérations arithmétiques dessus?