mirror of
https://github.com/shlomif/PySolFC.git
synced 2025-04-22 03:04:09 -04:00
extract more code to pysol_cards
This commit is contained in:
parent
c5864cc0f6
commit
91ef2ca74e
2 changed files with 14 additions and 51 deletions
|
@ -26,10 +26,12 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
import pysol_cards
|
import pysol_cards
|
||||||
assert getattr(pysol_cards, 'VERSION', (0, 0, 0)) >= (0, 8, 7), (
|
import pysol_cards.random
|
||||||
|
assert getattr(pysol_cards, 'VERSION', (0, 0, 0)) >= (0, 8, 11), (
|
||||||
"Newer version of https://pypi.org/project/pysol-cards is required.")
|
"Newer version of https://pypi.org/project/pysol-cards is required.")
|
||||||
from pysol_cards.random_base import RandomBase # noqa: I100
|
from pysol_cards.random_base import RandomBase # noqa: I100
|
||||||
from pysol_cards.random import MTRandom, match_ms_deal_prefix # noqa: I100
|
from pysol_cards.random import \
|
||||||
|
MTRandom, match_ms_deal_prefix # noqa: I100
|
||||||
|
|
||||||
|
|
||||||
# ************************************************************************
|
# ************************************************************************
|
||||||
|
@ -56,14 +58,7 @@ from pysol_cards.random import MTRandom, match_ms_deal_prefix # noqa: I100
|
||||||
# ************************************************************************
|
# ************************************************************************
|
||||||
|
|
||||||
|
|
||||||
class MFXRandom(RandomBase):
|
class MFXRandom(pysol_cards.random.PysolRandom):
|
||||||
|
|
||||||
def __init__(self, seed=None):
|
|
||||||
RandomBase.__init__(self)
|
|
||||||
if seed is None:
|
|
||||||
seed = self._getRandomSeed()
|
|
||||||
self.initial_seed = self.setSeed(seed)
|
|
||||||
self.origin = self.ORIGIN_UNKNOWN
|
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
self.seed = self.initial_seed
|
self.seed = self.initial_seed
|
||||||
|
@ -71,13 +66,6 @@ class MFXRandom(RandomBase):
|
||||||
def getSeed(self):
|
def getSeed(self):
|
||||||
return self.seed
|
return self.seed
|
||||||
|
|
||||||
def setSeed(self, seed):
|
|
||||||
seed = int(seed)
|
|
||||||
if not (0 <= seed <= self.MAX_SEED):
|
|
||||||
raise ValueError("seed out of range")
|
|
||||||
self.seed = seed
|
|
||||||
return seed
|
|
||||||
|
|
||||||
def getstate(self):
|
def getstate(self):
|
||||||
return self.seed
|
return self.seed
|
||||||
|
|
||||||
|
@ -103,7 +91,7 @@ class MFXRandom(RandomBase):
|
||||||
# * p. 106 (line 26) & p. 108
|
# * p. 106 (line 26) & p. 108
|
||||||
# ************************************************************************
|
# ************************************************************************
|
||||||
|
|
||||||
class LCRandom64(MFXRandom):
|
class LCRandom64(MFXRandom, pysol_cards.random.LCRandom64):
|
||||||
|
|
||||||
def random(self):
|
def random(self):
|
||||||
self.seed = (self.seed*int('6364136223846793005') + 1) & self.MAX_SEED
|
self.seed = (self.seed*int('6364136223846793005') + 1) & self.MAX_SEED
|
||||||
|
@ -115,7 +103,7 @@ CUSTOM_BIT = (1 << 999)
|
||||||
|
|
||||||
|
|
||||||
class CustomRandom(RandomBase):
|
class CustomRandom(RandomBase):
|
||||||
def __init__(self):
|
def __init__(self, seed=None):
|
||||||
self.initial_seed = self.seed = MS_LONG_BIT | CUSTOM_BIT
|
self.initial_seed = self.seed = MS_LONG_BIT | CUSTOM_BIT
|
||||||
self.origin = self.ORIGIN_UNKNOWN
|
self.origin = self.ORIGIN_UNKNOWN
|
||||||
self.setSeedAsStr('Custom')
|
self.setSeedAsStr('Custom')
|
||||||
|
@ -139,7 +127,7 @@ class CustomRandom(RandomBase):
|
||||||
# ************************************************************************
|
# ************************************************************************
|
||||||
|
|
||||||
|
|
||||||
class LCRandom31(MFXRandom):
|
class LCRandom31(pysol_cards.random.LCRandom31, MFXRandom):
|
||||||
MAX_SEED = int('0x1ffffffff', 0) # 33 bits
|
MAX_SEED = int('0x1ffffffff', 0) # 33 bits
|
||||||
|
|
||||||
def increaseSeed(self, seed):
|
def increaseSeed(self, seed):
|
||||||
|
@ -154,35 +142,6 @@ class LCRandom31(MFXRandom):
|
||||||
return "%05d" % int(seed)
|
return "%05d" % int(seed)
|
||||||
return seed
|
return seed
|
||||||
|
|
||||||
def setSeed(self, seed):
|
|
||||||
seed = int(seed)
|
|
||||||
self.seed = seed
|
|
||||||
if not (0 <= seed <= self.MAX_SEED):
|
|
||||||
raise ValueError("seed out of range")
|
|
||||||
self.seedx = (seed if (seed < int('0x100000000', 0)) else
|
|
||||||
(seed - int('0x100000000', 0)))
|
|
||||||
return seed
|
|
||||||
|
|
||||||
def _rando(self):
|
|
||||||
self.seedx = (self.seedx*214013 + 2531011) & self.MAX_SEED
|
|
||||||
return ((self.seedx >> 16) & 0x7fff)
|
|
||||||
|
|
||||||
def _randp(self):
|
|
||||||
self.seedx = (self.seedx*214013 + 2531011) & self.MAX_SEED
|
|
||||||
return ((self.seedx >> 16) & 0xffff)
|
|
||||||
|
|
||||||
def randint(self, a, b):
|
|
||||||
if self.seed < 0x100000000:
|
|
||||||
ret = self._rando()
|
|
||||||
ret = (ret if (self.seed < 0x80000000) else (ret | 0x8000))
|
|
||||||
else:
|
|
||||||
ret = self._randp() + 1
|
|
||||||
|
|
||||||
return a + (ret % (b+1-a))
|
|
||||||
|
|
||||||
def reset(self):
|
|
||||||
self.setSeed(self.seed)
|
|
||||||
|
|
||||||
|
|
||||||
# select
|
# select
|
||||||
# PysolRandom = LCRandom64
|
# PysolRandom = LCRandom64
|
||||||
|
@ -204,7 +163,10 @@ def constructRandom(s):
|
||||||
seed = m
|
seed = m
|
||||||
if 0 <= seed <= LCRandom31.MAX_SEED:
|
if 0 <= seed <= LCRandom31.MAX_SEED:
|
||||||
ret = LCRandom31(seed)
|
ret = LCRandom31(seed)
|
||||||
ret.setSeedAsStr(s)
|
assert ret.seed
|
||||||
|
assert ret.seedx
|
||||||
|
assert ret.initial_seed
|
||||||
|
# ret.setSeedAsStr(s)
|
||||||
return ret
|
return ret
|
||||||
else:
|
else:
|
||||||
raise ValueError("ms seed out of range")
|
raise ValueError("ms seed out of range")
|
||||||
|
@ -216,7 +178,7 @@ def constructRandom(s):
|
||||||
seed = int(s)
|
seed = int(s)
|
||||||
if 0 <= seed < 32000:
|
if 0 <= seed < 32000:
|
||||||
return LCRandom31(seed)
|
return LCRandom31(seed)
|
||||||
return PysolRandom(seed)
|
return MTRandom(seed)
|
||||||
|
|
||||||
|
|
||||||
def random__str2long(s):
|
def random__str2long(s):
|
||||||
|
|
|
@ -123,6 +123,7 @@ KC JS 9H 4S 7S AD
|
||||||
''', 'PySolFC deal No. 123456')
|
''', 'PySolFC deal No. 123456')
|
||||||
|
|
||||||
rand = constructRandom('ms3000000000')
|
rand = constructRandom('ms3000000000')
|
||||||
|
self.assertEqual(rand.getSeedAsStr(), 'ms3000000000')
|
||||||
game = Game("freecell", 3000000000, RandomBase.DEALS_MS)
|
game = Game("freecell", 3000000000, RandomBase.DEALS_MS)
|
||||||
# TEST
|
# TEST
|
||||||
self._cmp_board(game.calc_layout_string(ren), '''8D TS JS TD JH JD JC
|
self._cmp_board(game.calc_layout_string(ren), '''8D TS JS TD JH JD JC
|
||||||
|
|
Loading…
Add table
Reference in a new issue