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
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()
def test_solver_can_solve_all_valid_2x2s(): boards = Board.get_boards(2) for board in boards: assert Solver(board).solve()
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