Rozważałem szybką ocenę rąk pokerowych w Pythonie. Przyszło mi do głowy, że jednym ze sposobów na przyspieszenie tego procesu byłoby przedstawienie wszystkich twarzy i kolorów kart jako liczb pierwszych i pomnożenie ich razem, aby przedstawić ręce. Odrobina:
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]
I
def HashVal(self):
return PokerCard.facePrimes[self.cardFace] * PokerCard.suitPrimes[self.cardSuit]
To dałoby każdemu rozdaniu wartość liczbową, która dzięki modulo mogłaby mi powiedzieć, ilu królów jest w rozdaniu lub ile kier. Na przykład dowolne rozdanie zawierające pięć lub więcej trefli podzieliłoby się równo przez 2 ^ 5; każda ręka z czterema królami podzieliłaby się równo przez 59 ^ 4 itd.
Problem polega na tym, że układ z siedmioma kartami, taki jak AcAdAhAsKdKhKs, ma wartość skrótu wynoszącą około 62,7 biliardów, co wymagałoby znacznie więcej niż 32 bity do wewnętrznej reprezentacji. Czy jest sposób na przechowywanie tak dużych liczb w Pythonie, które pozwolą mi wykonywać na nim operacje arytmetyczne?