He estado considerando la evaluación rápida de manos de póker en Python. Se me ocurrió que una forma de acelerar el proceso sería representar todas las caras y palos de las cartas como números primos y multiplicarlos para representar las manos. A 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]
Y
def HashVal(self):
return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit]
Esto le daría a cada mano un valor numérico que, a través del módulo, podría decirme cuántos reyes hay en la mano o cuántos corazones. Por ejemplo, cualquier mano con cinco o más clubes se dividiría en partes iguales por 2 ^ 5; cualquier mano con cuatro reyes se dividiría en partes iguales por 59 ^ 4, etc.
El problema es que una mano de siete cartas como AcAdAhAsKdKhKs tiene un valor hash de aproximadamente 62.7 billones, lo que tomaría considerablemente más de 32 bits para representar internamente. ¿Hay alguna manera de almacenar números tan grandes en Python que me permitan realizar operaciones aritméticas en él?