def __init__(self, argv): parser = argparse.ArgumentParser( prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--game', type=str, default='freecell', help='The Solitaire variant') parser.add_argument('--ms', action='store_true', default=True, help='MS/FC-Pro Deals') parser.add_argument('idxs', nargs='*', default=['seq', '1', '1000000'], help='indexes') args = parser.parse_args(argv[1:]) # Sanitize, see: # https://stackoverflow.com/questions/6803505 self.game_variant = args.game self.which_deals = (RandomBase.DEALS_MS if args.ms else RandomBase.DEALS_PYSOLFC) self.rend = CardRenderer(True) self.idxs = args.idxs self.game = Game(self.game_variant, 1, self.which_deals, 13)
def test_24(blurb): game = Game("freecell", 24, RandomBase.DEALS_PYSOLFC) got_s = game.calc_layout_string(ren) self.assertEqual(got_s, '''4C 2C 9C 8C QS 4S 2H 5H QH 3C AC 3H 4H QD QC 9S 6H 9H 3S KS 3D 5D 2S JC 5C JH 6D AS 2D KD TH TC TD 8D 7H JS KH TS KC 7C AH 5S 6S AD 8H JD 7S 6C 7D 4D 8S 9D ''', blurb)
class GenMulti: """docstring for GenMulti""" def __init__(self, argv): parser = argparse.ArgumentParser( prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--game', type=str, default='freecell', help='The Solitaire variant') parser.add_argument('--ms', action='store_true', default=True, help='MS/FC-Pro Deals') parser.add_argument('idxs', nargs='*', default=['seq', '1', '1000000'], help='indexes') args = parser.parse_args(argv[1:]) # Sanitize, see: # https://stackoverflow.com/questions/6803505 self.game_variant = args.game self.which_deals = (RandomBase.DEALS_MS if args.ms else RandomBase.DEALS_PYSOLFC) self.rend = CardRenderer(True) self.idxs = args.idxs self.game = Game(self.game_variant, 1, self.which_deals, 13) def _out_deal(self, deal): board_s = self.game.calc_deal_string(deal, self.rend) sys.stdout.write(board_s) obj = self.obj if obj.solve_board(board_s) == 0: move = obj.get_next_move() while move: print([ord(move.s[x]) for x in range(4)]) move = obj.get_next_move() obj.recycle() def run(self): """docstring for run""" idxs = self.idxs obj = FC_Solve() obj.input_cmd_line(['-l', 'lg']) obj.limit_iterations(100000) self.obj = obj while len(idxs): i = idxs.pop(0) if i == 'seq': start = int(idxs.pop(0)) end = int(idxs.pop(0)) for deal in range(start, end + 1): self._out_deal(deal) elif i == 'slurp': for line in open(idxs.pop(0), 'rt'): self._out_deal(int(line)) else: self._out_deal(int(i)) return 0
def make_pysol_board__main(args): print_ts = False which_deals = RandomBase.DEALS_PYSOL max_rank = 13 while args[1][0] == '-': a = args[1] if a == "-t": print_ts = True args.pop(1) elif (a == "--max-rank"): args.pop(1) max_rank = int(args.pop(1)) elif (a == "--pysolfc") or (a == "-F"): which_deals = RandomBase.DEALS_PYSOLFC args.pop(1) elif (a == "--ms") or (a == "-M"): which_deals = RandomBase.DEALS_MS args.pop(1) else: raise ValueError("Unknown flag " + a + "!") game_num = int(args[1]) which_game = args[2] if len(args) >= 3 else "freecell" Game(which_game, game_num, which_deals, max_rank).print_layout(CardRenderer(print_ts))
def make_pysol_board__main(args): obj = SingleDealArgsParser(args) g = Game(obj.which_game, obj.game_num, obj.which_deals, obj.max_rank) g.deal() getattr(g, g.game_class)() renderer = JsonRenderer(obj.print_ts) je = json.JSONEncoder(sort_keys=True) json_obj = {} json_obj["tableau piles"] = [ renderer.render_l(x) for x in g.board.columns.cols] try: talon = renderer.render_l(g.board.talon) json_obj["stock"] = talon except AttributeError: pass print(je.encode(json_obj))
def make_pysol_board__main(args): print_ts = False which_deals = RandomBase.DEALS_PYSOL max_rank = 13 print_ts = False while args[1][0] == '-': a = args[1] if a == "-t": # print_ts = True args.pop(1) elif (a == "--max-rank"): args.pop(1) max_rank = int(args.pop(1)) elif (a == "--pysolfc") or (a == "-F"): which_deals = RandomBase.DEALS_PYSOLFC args.pop(1) elif (a == "--ms") or (a == "-M"): which_deals = RandomBase.DEALS_MS args.pop(1) else: raise ValueError("Unknown flag " + a + "!") game_num = int(args[1]) which_game = args[2] if len(args) >= 3 else "freecell" g = Game(which_game, game_num, which_deals, max_rank) g.deal() getattr(g, g.game_class)() renderer = JsonRenderer(print_ts) je = json.JSONEncoder(sort_keys=True) json_obj = {} json_obj["tableau piles"] = [ renderer.render_l(x) for x in g.board.columns.cols] try: talon = renderer.render_l(g.board.talon) json_obj["stock"] = talon except AttributeError: pass print(je.encode(json_obj))
def __init__(self, argv): parser = argparse.ArgumentParser( prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--dir', type=str, required=True, help='output dir') parser.add_argument('--game', type=str, default='freecell', help='The Solitaire variant') parser.add_argument('--ms', action='store_true', help='MS/FC-Pro Deals') parser.add_argument('--prefix', type=str, required=True, help='filename prefix') parser.add_argument('--suffix', type=str, required=True, help='filename suffix') parser.add_argument('idxs', nargs='+', default=[], help='indexes') args = parser.parse_args(argv[1:]) self.dir_ = args.dir # Sanitize, see: # https://stackoverflow.com/questions/6803505 self.pre = os.path.basename(args.prefix) self.suf = os.path.basename(args.suffix) self.game_variant = args.game self.which_deals = (RandomBase.DEALS_MS if args.ms else RandomBase.DEALS_PYSOLFC) self.rend = CardRenderer(True) self.idxs = args.idxs self.game = Game(self.game_variant, 1, self.which_deals, 13)
def test_bhs(): """Sample pytest test function with the pytest fixture as an argument. """ import black_hole_solver solver = black_hole_solver.BlackHoleSolver() assert solver import pysol_cards.cards from pysol_cards.deal_game import Game from pysol_cards.random_base import RandomBase deal_idx = 5 solver.read_board( board=Game('black_hole', deal_idx, RandomBase.DEALS_MS).calc_deal_string( deal_idx, pysol_cards.cards.CardRenderer(print_ts=True)), game_type='black_hole', place_queens_on_kings=True, wrap_ranks=True, ) assert solver.resume_solution() == 0
def test_limit_iters(): import black_hole_solver solver = black_hole_solver.BlackHoleSolver() assert solver import pysol_cards.cards from pysol_cards.deal_game import Game from pysol_cards.random_base import RandomBase for deal_idx in [5, 4]: solver.read_board( board=Game('black_hole', deal_idx, RandomBase.DEALS_MS).calc_deal_string( deal_idx, pysol_cards.cards.CardRenderer(print_ts=True)), game_type='black_hole', place_queens_on_kings=True, wrap_ranks=True, ) solver.limit_iterations(200 * 1000) assert solver.resume_solution() == 0 assert solver.get_num_times() > 0 assert solver.get_num_states_in_collection() > 0 move = solver.get_next_move() assert 0 <= move.get_column_idx() < 17 solver.recycle()
def test_main(self): def test_24(blurb): game = Game("freecell", 24, RandomBase.DEALS_PYSOLFC) got_s = game.calc_layout_string(ren) self.assertEqual( got_s, '''4C 2C 9C 8C QS 4S 2H 5H QH 3C AC 3H 4H QD QC 9S 6H 9H 3S KS 3D 5D 2S JC 5C JH 6D AS 2D KD TH TC TD 8D 7H JS KH TS KC 7C AH 5S 6S AD 8H JD 7S 6C 7D 4D 8S 9D ''', blurb) # TEST test_24('Deal 24') game = Game("freecell", 123456, RandomBase.DEALS_MS) # TEST got_s = game.calc_layout_string(ren) self.assertEqual( got_s, '''QD TC AS KC AH KH 6H 6D TD 8D TH 7C 2H 9C AC AD 5C 5H 8C 9H 9D JS 8S 4D 4C 2S 7D 3C 7H 7S 9S 2C JC 5S 5D 3S 3D 3H KD JH 6C QS 4S 2D KS TS JD QH 6S 4H QC 8H ''', 'Microsoft Deal 123456') game = Game("freecell", 123456, True) # TEST self._cmp_board( game.calc_layout_string(ren), '''3D 6C AS TS QC 8D 4D 2D TC 4H JD TD 2H 5C 2C 8S AH KD KH 5S 7C 9C 8C QH 3C 5D 9S QD AC 9D 7H 6D KS JH 6H TH 8H QS 7D JC 4C 2S 3S 6S 5H 3H KC JS 9H 4S 7S AD ''', 'PySolFC deal No. 123456') rand = constructRandom('ms3000000000') self.assertEqual(rand.getSeedAsStr(), 'ms3000000000') game = Game("freecell", 3000000000, RandomBase.DEALS_MS) # TEST self._cmp_board( game.calc_layout_string(ren), '''8D TS JS TD JH JD JC 4D QS TH AD 4S TC 3C 9H KH QH 4C 5C KD AS 9D 5D 8S 4H KS 6S 9S 6H 2S 7H 3D KC 2C 9C 7C QC 7S QD 7D 6C 3H 8H AC 6D 3S 8C AH 2H 5H 2D 5S ''', 'Microsoft Deal #3E9 - long seed.') rand = constructRandom('ms6000000000') game = Game("freecell", 6000000000, RandomBase.DEALS_MS) # TEST got_s = game.calc_layout_string(ren) self.assertEqual( got_s, '''2D 2C QS 8D KD 8C 4C 3D AH 2H 4H TS 6H QD 4D JS AD 6S JH JC JD KH 3H KS AS TC 5D AC TD 7C 9C 7H 3C 3S QH 9H 9D 5S 7S 6C 5C 5H 2S KC 9S 4S 6D QC 8S TH 7D 8H ''', 'Microsoft Deal #6E9 - extra long seed.') inp = 'ms12345678' got = random__int2str(random__str2int(inp)) # TEST self.assertEqual(got, inp, 'long2str ms roundtrip.') inp = '246007891097' got = random__int2str(random__str2int(inp)) # TEST self.assertEqual(got, inp, 'long2str PySolFC roundtrip.') proto_inp = '246007891097' inp = random__str2int(proto_inp) got = random__str2int(random__int2str(inp)) # TEST self.assertEqual(got, inp, 'str2long PySolFC roundtrip.') rand = constructRandom('ms100000') seed = rand.increaseSeed(rand.initial_seed) seed = rand.str(seed) # TEST self.assertEqual(seed, 'ms100001', 'increaseSeed for ms deals') rand = constructRandom(seed) game = Game("freecell", int(seed[2:]), RandomBase.DEALS_MS) # TEST self._cmp_board( game.calc_layout_string(ren), '''5S AH 4H TD 4S JD JS 3C 8C 4C AC JC AS QS 7C QH 2D QD 8S 9D AD KS 7S 5H 3H TS 3S 5D 9S 7H KC TH 8D 6S 5C KD 9H 2H 2S 6D 9C JH 8H 3D 4D QC KH 6H 6C TC 2C 7D ''', 'ms100001') seed = 24000024 rand = constructRandom(str(seed)) expected0 = rand.randint(0, 100) expected1 = rand.randint(0, 100) rand.reset() got0 = rand.randint(0, 100) got1 = rand.randint(0, 100) # TEST self.assertEqual( [ got0, got1, ], [ expected0, expected1, ], "same results after reset()", )
def make_pysol_board__main(args): obj = SingleDealArgsParser(args) Game(obj.which_game, obj.game_num, obj.which_deals, obj.max_rank).print_layout(CardRenderer(obj.print_ts))