Example #1
0
    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)
Example #2
0
        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)
Example #3
0
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)
Example #8
0
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
Example #9
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()
Example #10
0
    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))