From 7eb2e400994aae01265dfbb09522c81e250da0eb Mon Sep 17 00:00:00 2001 From: tseremonnikovaaa Date: Sun, 24 May 2026 20:15:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=AD=D0=BA=D1=81=D0=BF=D0=B5=D1=80=D0=B8?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20?= =?UTF-8?q?=D1=87=D0=B0=D1=81=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tseremonnikovaaa/lab2/docs/data/main2.py | 146 +++++++++++++++++++++++ 1 file changed, 146 insertions(+) diff --git a/tseremonnikovaaa/lab2/docs/data/main2.py b/tseremonnikovaaa/lab2/docs/data/main2.py index 2206e54..563c3ef 100644 --- a/tseremonnikovaaa/lab2/docs/data/main2.py +++ b/tseremonnikovaaa/lab2/docs/data/main2.py @@ -330,3 +330,149 @@ def interactive_move_demo(maze, path): cmd.undo() print(f"Отменён последний шаг, позиция: ({player.current_cell.x},{player.current_cell.y})") +def test_single_maze(filename, strategies, repeats=5): + """Тестирование одного лабиринта с разными стратегиями""" + builder = TextFileMazeBuilder() + maze = builder.build_from_file(filename) + results = [] + for strategy in strategies: + solver = MazeSolver(maze, strategy) + times = [] + visits = [] + lengths = [] + for _ in range(repeats): + _, stats = solver.solve() + times.append(stats.time_ms) + visits.append(stats.visited_cells) + lengths.append(stats.path_length) + results.append({ + 'algorithm': strategy.__class__.__name__, + 'avg_time_ms': sum(times) / repeats, + 'avg_visited': sum(visits) / repeats, + 'avg_path_len': sum(lengths) / repeats + }) + return results + + +def save_maze_to_file(maze, filename): + """Сохранение лабиринта в файл""" + os.makedirs(os.path.dirname(filename), exist_ok=True) + with open(filename, 'w', encoding='utf-8') as f: + for y in range(maze.height): + line = "" + for x in range(maze.width): + cell = maze.get_cell(x, y) + if cell.is_wall: + line += "#" + elif cell.is_start: + line += "S" + elif cell.is_exit: + line += "E" + else: + line += " " + f.write(line + "\n") + + +def create_test_mazes(): + """Создание тестовых лабиринтов""" + os.makedirs("mazes", exist_ok=True) + + # 1. Простой лабиринт 10x10 (tiny.txt) + maze1 = Maze(10, 10) + for y in range(10): + for x in range(10): + is_start = (x == 0 and y == 0) + is_exit = (x == 9 and y == 0) + is_wall = False + if y == 1 and x not in [0, 1, 9]: + is_wall = True + if y == 2 and x not in [9]: + is_wall = True + if y == 3 and x not in [0, 9]: + is_wall = True + if y == 4 and x not in [0, 1, 9]: + is_wall = True + if y == 5 and x not in [9]: + is_wall = True + if y == 6 and x not in [0, 9]: + is_wall = True + if y == 7 and x not in [9]: + is_wall = True + if y == 8 and x not in [0, 9]: + is_wall = True + cell = Cell(x, y, is_wall=is_wall) + cell.is_start = is_start + cell.is_exit = is_exit + maze1.cells[y][x] = cell + if is_start: + maze1.start = cell + if is_exit: + maze1.exit = cell + save_maze_to_file(maze1, "mazes/tiny.txt") + + # 2. Средний лабиринт 15x15 (medium.txt) + maze2 = Maze(15, 15) + for y in range(15): + for x in range(15): + is_start = (x == 0 and y == 0) + is_exit = (x == 14 and y == 14) + is_wall = (x % 3 == 1 and y % 2 == 0) and not is_start and not is_exit + cell = Cell(x, y, is_wall=is_wall) + cell.is_start = is_start + cell.is_exit = is_exit + maze2.cells[y][x] = cell + if is_start: + maze2.start = cell + if is_exit: + maze2.exit = cell + save_maze_to_file(maze2, "mazes/medium.txt") + + # 3. Большой лабиринт 30x30 (large.txt) + maze3 = Maze(30, 30) + for y in range(30): + for x in range(30): + is_start = (x == 0 and y == 0) + is_exit = (x == 29 and y == 29) + is_wall = (x % 2 == 0 and y % 3 == 0) and not is_start and not is_exit + cell = Cell(x, y, is_wall=is_wall) + cell.is_start = is_start + cell.is_exit = is_exit + maze3.cells[y][x] = cell + if is_start: + maze3.start = cell + if is_exit: + maze3.exit = cell + save_maze_to_file(maze3, "mazes/large.txt") + + # 4. Пустой лабиринт 15x15 (empty.txt) + maze4 = Maze(15, 15) + for y in range(15): + for x in range(15): + is_start = (x == 0 and y == 0) + is_exit = (x == 14 and y == 14) + cell = Cell(x, y, is_wall=False) + cell.is_start = is_start + cell.is_exit = is_exit + maze4.cells[y][x] = cell + if is_start: + maze4.start = cell + if is_exit: + maze4.exit = cell + save_maze_to_file(maze4, "mazes/empty.txt") + + # 5. Лабиринт без выхода 10x10 (no_exit.txt) + maze5 = Maze(10, 10) + for y in range(10): + for x in range(10): + is_start = (x == 0 and y == 0) + is_exit = (x == 9 and y == 9) + is_wall = (x > 0 and y > 0) and not is_start + cell = Cell(x, y, is_wall=is_wall) + cell.is_start = is_start + cell.is_exit = is_exit + maze5.cells[y][x] = cell + if is_start: + maze5.start = cell + if is_exit: + maze5.exit = cell + save_maze_to_file(maze5, "mazes/no_exit.txt") \ No newline at end of file