Esempio n. 1
0
def test_can_solve_a_3x3_requiring_4_moves():
    player = Solver([None, 1, 2, 4, 5, 3, 7, 8, 6])
    player.solve()
    for path in player.all_paths:
        print("---> {}".format(path))
    assert player.solution_path == [1, 2, 3, 6]
    assert player.board.solved()
Esempio n. 2
0
def test_find_all_paths_ignores_undo_moves():
    config = [1, 2, 3, 4, 5, 6, 7, None, 8]
    mock_visited_states = [
        [1, 2, 3, 4, None, 6, 7, 5, 8]
    ]
    previous_moves = [7]
    player = Solver(config)
    paths = player.find_all_paths_from_point(config, previous_moves, mock_visited_states, [])
    assert paths == [
        [7, 5, "X"],
        [7, 8]
    ]
Esempio n. 3
0
def test_find_all_paths_eliminates_circular_paths():
    config = [1, 2, 3, 4, None, 5, 7, 8, 6]
    mock_visited_states = [
        [1, None, 3, 4, 2, 5, 7, 8, 6],
        [1, 2, 3, None, 4, 5, 7, 8, 6],
        [1, 2, 3, 4, 5, None, 7, 8, 6],
        [1, 2, 3, 4, 8, 5, 7, None, 6]
    ]
    player = Solver(config)
    paths = player.find_all_paths_from_point(config, [], mock_visited_states, [])
    assert paths == [
        [2, "X"],
        [4, "X"],
        [5, "X"],
        [8, "X"]
    ]
Esempio n. 4
0
def test_can_solve_a_3x3_requiring_2_moves():
    player = Solver([1, 2, 3, 4, 5, 6, None, 7, 8])
    player.solve()
    assert player.solution_path == [7, 8]
    assert player.board.solved()
Esempio n. 5
0
def test_solver_can_solve_a_3x3_when_6_out_of_place():
    player = Solver([1, 2, 3, 4, 5, None, 7, 8, 6])
    player.solve()
    assert player.solution_path == [6]
    assert player.board.solved()
Esempio n. 6
0
def test_solver_can_solve_all_valid_2x2s():
    boards = Board.get_boards(2)
    for board in boards:
        assert Solver(board).solve()
Esempio n. 7
0
def test_2x2_requires_multiple_moves():
    assert Solver([2, 3, 1, None]).solve()
    assert Solver([None, 3, 2, 1]).solve()
Esempio n. 8
0
def test_solver_has_board():
    player = Solver([1,2,3,None])
    assert isinstance(player.board, Board)
Esempio n. 9
0
def test_2x2_with_1_out_of_place_solved_in_2_moves():
    player = Solver([None, 2, 1, 3])
    assert player.solve()
    assert player.solution_path == [1, 3]
Esempio n. 10
0
def test_2x2_with_2_out_of_place_solved_in_1_move():
    player = Solver([1, None, 3, 2])
    assert player.solve()
    assert player.solution_path == [2]
Esempio n. 11
0
def test_find_shortest_path():
    player = Solver([1, 2, None, 3])
    shortest_path = player.find_shortest_path()
    assert shortest_path == [3]
Esempio n. 12
0
def test_find_paths_can_map_solutions():
    player = Solver([1, 2, None, 3])
    paths = player.find_all_paths_from_point([1, 2, None, 3], [], [], [])
    assert paths == [[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2], [3]]
Esempio n. 13
0
def test_solver_can_handle_reddit_puzzles():
    # see
    # https://www.reddit.com/r/dailyprogrammer/comments/62ktmx/20170331_challenge_308_hard_slider_game_puzzle/
    # for original
    puzzle1 = Solver([None, 1, 2, 4, 8, 3, 7, 6, 5])
    puzzle1.solve()
    for path in puzzle1.all_paths:
        print("---> {}".format(path))
    assert puzzle1.board.solved()
    assert len(puzzle1.solution_path) == 8

    puzzle2 = Solver([1, 8, 2, None, 4, 3, 7, 6, 5])
    puzzle2.solve()
    assert puzzle2.board.solved()
    assert len(puzzle2.solution_path) == 9

    puzzle3 = Solver([7, 6, 4, None, 8, 1, 2, 3, 5])
    puzzle3.solve()
    assert puzzle3.board.solved()
Esempio n. 14
0
def test_solver_can_solve_a_3x3_requiring_5_moves():
    player = Solver([1, 2, 3, 4, 6, 8, 7, None, 5])
    player.solve()
    assert player.board.solved()