Example #1
0
def test_board_can_generate_all_valid_2x2_permutations():
    puzzles = Board.get_boards(2)
    assert [1, 2, 3, None] not in puzzles  # does not include solution
    assert [1, 3, 2, None] not in puzzles  # does not include invalid config
    assert [1, 2, None, 3] in puzzles  # does include a known valid config
    for puzzle in puzzles:
        assert Board.valid(puzzle)  # and all the others are valid
Example #2
0
def test_all_2x2s():
    print("\n")
    all_valid_boards = Board.get_boards(2)
    generated_solutions = [[[1, 2, 3, None], []]]
    for move_count in range(1, 10):
        generated_solutions.extend(Generator(2).inmoves(move_count))
    # for thing in solutions:
    #     print(solutions[thing])
    for board in all_valid_boards:
        solved = None
        for solution in generated_solutions:
            if (solution[0] == board):
                if (solved == None or len(solved) > len(solution[1])):
                    solved = solution[1]
                    solved.reverse()
        print("Puzzle {} solution {}".format(board, solved))
def test_solver_can_solve_all_valid_2x2s():
    boards = Board.get_boards(2)
    for board in boards:
        player = Solver(board)
        player.solve()
        assert player.board.solved()
Example #4
0
def test_solver_can_solve_all_valid_2x2s():
    boards = Board.get_boards(2)
    for board in boards:
        assert Solver(board).solve()
Example #5
0
def test_all_3x3s():
    all_valid_boards = Board.get_boards(3)
    generated_solutions = [[[1, 2, 3, 4, 5, 6, 7, 8, None], []]]
    solved_in = {}
    solved_in_10 = []
    not_solved_in_10 = []
    for move_count in range(1, 25):
        solved_in[move_count] = 0
        generated_solutions.extend(Generator(3).inmoves(move_count))

    for board in all_valid_boards:
        solved = None
        for solution in generated_solutions:
            if (solution[0] == board):
                if (solved == None or len(solved) > len(solution[1])):
                    solved = solution[1]
                    solved.reverse()
                    break
        if (solved != None):
            solved_in_10.append([board, solved])
        else:
            not_solved_in_10.append(board)

        # print("Puzzle {} solution {}".format(board, solved))

    for board in solved_in_10:
        # print("Board {} solved in {} moves.".format(board[0], len(board[1])))
        solution_length = len(board[1])
        solved_in[solution_length] += 1
    # print("Count of valid 3x3s = {}".format(len(all_valid_boards)))
    # print("Solved in 100 moves or less = {}".format(len(solved_in_10)))
    # print("Remaining boards = {}".format(len(not_solved_in_10)))

    # Count of valid 3x3s = 181439
    # Solved in 20 moves or less = 37808
    # Remaining boards = 143631
    print("\n| Number of Moves | Count of Boards Solved |")
    print("| ---: | ---: |")
    for item in solved_in:
        print("| {} | {} |".format(item, solved_in[item]))
    print("\n{}".format(solved_in))


# def test_get_stats_for_3x3s():
#     print("\n")
#     all_valid_boards = Board.get_boards(3)
#     states_in_moves = {
#         0: [[ 1, 2, 3, 4, 5, 6, 7, 8, None], []]
#     }
#     solved_in_moves = {}
#
#     for count in range(1, 5):
#         states_in_moves[count] = Generator(3).inmoves(count)
#
#     for board in all_valid_boards:
#         solved = None
#         for count in states_in_moves:
#             for state in states_in_moves[count]:
#                 if state[0] == board:
#                     solved_in_moves[]
#                     if (solved == None or len(solved) > len(solution[1])):
#
#             if (solution[0] == board):
#
#                     solved = solution[1]
#                     solved.reverse()
#                     break
#         if (solved != None):
#             solved_in_10.append([board, solved])
#         else:
#             not_solved_in_10.append(board)
#
#         # print("Puzzle {} solution {}".format(board, solved))
#     print("Count of valid 3x3s = {}".format(len(all_valid_boards)))
#     print("Solved in 100 moves or less = {}".format(len(solved_in_10)))
#     print("Remaining boards = {}".format(len(not_solved_in_10)))

# Count of valid 3x3s = 181439
# Solved in 20 moves or less = 37808
# Remaining boards = 143631