Я розглядав питання швидкої оцінки покеру в 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, який дозволить мені виконувати арифметичні операції на ньому?