diff --git a/romanovpv/task 2/docs/data/big_maze.txt b/romanovpv/task 2/docs/data/big_maze.txt new file mode 100644 index 0000000..0c56bf5 --- /dev/null +++ b/romanovpv/task 2/docs/data/big_maze.txt @@ -0,0 +1,100 @@ +#################################################################################################### +#S ### ## # ## ## # # # # ## # ## ## # #### ##### # ## ## # ## # ### # +# # ### # ## # # # # ## # # # # # # ## ## # # ### ## # # # +# # # # ## # # ## ## # # # ## # # # #### # # ### ### # ## # # # # +# ### ### ## ## # ### # ## # # # # # # ## ## ## ## # #### ### ## # ## +# # # # ## # # # # ## ## # # ## # #### ### #### # # ### ### # ### +# ## # # # # # ## # ## ## ## ## # ### ## #### ## # # # # ## ## +# ## # # # #### # # # # # # # ###### # # # # ## ## # # ## # ## ## ## +# # # # # ## ## # # # ### # ## # # ### # # ### ## # ## # # # ## # # ## ### # +# ## ## # # # # # ## #### ### # ## ##### # # # # # # # ## +# # ### ## ## # ### # ## # # ##### # # # # ### ### # ### ### +# # ## # ## ## # # # ## ## # # # #### ## # # # ## # #### +# # ### # ## # # # # # # # # # # # # # ## # #### # # # # # # ## +# ### # ## ## # # # ## # # # ## ### # ## # ## # ## ## # ## # ### ## ## ## +# ## #### ###### # ## ## ## # # ## # #### # #### ## ## # # # # ## ## # ## # +# ## # ### ### ## # ## ## # ## # # # # ## # # ## ## # # # # # ## # +# ## ## ## # ### # ## # ## # # # ##### # #### # ## # # # ## # # ## ### ## +# # # ## ## ## # #### ##### # ## ## # ### # # # # # # # ### ## +# # # # # ## ## # ### # # ## # #### # ### ## # # ### ###### # ## # +# ## # # # ### # # # ## # # # ## # # ### ## ## # +# # # # # # ## # # # # ## # # # # # # # ### # ##### # # # # ### ## # # ## +# ### # # # ## # ### # # # # ## ## # ### ## ### # # # # # # ## # +# # ## ### # # # # ## ##### #### # # ### ### #### # ## # ### +# # # # # # # ## # # ## ### # # ## # # ### # # # ## # # # # +# # #### # # ##### # # ### ## # # # # # ## ### ## # # # ### # ## # +# # ### ## # # ## # # ## ### # ## ## # # # # # # # ## # # # +# # ## # ## # # # ### ## # ## # # ### # # # ### # # # # # ## +# # # # # ## # # # # # ## # #### # # ## # # # ###### ### ### +# # # # ##### ## # ## ### ## # ## ## # # ## # ##### ## ## # # ## ## +# # # ### # # ## # ### # # # # ## # # # ## # # # # #### # # # # +# ### # # ## # # ## # # ## # # # #### ### # # ### # # ### ### #### +# ##### ## # # ## # # # # ## ### # # # ## # # ### ## # # # ## # +# ## # ## # ## #### # ## # # ## # ## ## # # ## ## # ### # # # # # +# # #### ## ### ## ### ## # # ## # ##### # # # ## ## ## ### ### # ##### # ## # # +# # # # ###### ## ## ### # # ## # # ## # # ### ## #### # # ## # # +# # # ## ### #### # # ## # # # ## # ## # # # ## # # # #### # # ## # +# # # # # # ### ## # # ## # # ##### # # # # # ### ## ## ### # # +# # ## # # # # ## ## # ## # # # #### ## # ## ##### # ## # # # ### # # +# ## ## ## # ## # ## ### # # # # ## # ## # # # ### #### # # # # +# ### ### # # ## ##### # # # #### # # # ## ## ## # ### ## # ### # ### # # # +# # # ## ## # ## ## ## # # # # # ## # # ## ## ## # ## ## ## # # # +# ## # # ### # # # # # ## # # # ##### # # # # # #### # # ### +# ### # ## ## ## # # # # # # # # # #### ## # ## # # # # ## # ## # +# # # # ### # # ## # # #### # # # # ## # ## ## ## ## # # ## # # # ## # +# ## ## # ## # ### # ## # ##### # # # # ## # # # #### ## ##### # +# # ## # # # ## # # #### # ## ## # # # ## ## ## #### #### ## # ### +# # # ## ## # # # # ## # ## # # # # ## # # ## # # ## # ## +# #### # # ## # ## # ### # # # # # #### # # # ### # # # # # # ## +# # # # # # # ## # # ## # # # # ## # ## # # # # ### # ## # # ### # +# ### # ##### ## # # ## ### ## # #### ## # ## ### ## # # # # # # ### ## +# # ## #### ## # # # # # # # ## # ###### # ## #### ###### # #### +# # # ##### # ## # ## # # # ## ### # # ## # # # # # # # # +# # # # # # # # # # # ## ## # # # ## ### ### # # ### # +# ## ## # # # # # # # # ## #### # # #### # #### # ## # # ## # #### +# # # ## # # # ## ## ### # # # # # # # ### # # # # ## ## # # # ## # # +# # ## #### # ## ## ## # # # ### # # ## ## ####### ### # # # ## +# # ##### # # # # # # ## # # ### # #### # # # #### # # # # # +# # ## # ### # # ## # # # # # ### ## # ## # # ## # # # ### # ## ##### +# # ## #### ## # # # ## ### # ## # ### # ## # #### ## # # ## # # +# # ## ## ## # # ### # # # ### ### # # # ##### # # # # # ## +# # ## # # # # # ### # ## # # # ## # # # ## # ### ### # # # ## +# # ### ## ##### ## # ## # # ###### # ## ####### # # ## # ### ## ## # # ##### ## +# ### # ### # # # # # # ##### # # # # ##### # ##### # +# # # ## # # # #### ## # ## # # # # # ## ## ### # # # #### # +# ### # ## # # # ## ## # # # ##### # # # ## # # # ## # ### ## # # +# # # ## ## # # # # ## ## # ## # # ## ## # # ## # ##### # #### +# ##### # #### # # # #### # # ## ## # # ## ## # # ##### # ##### # ## ## +# ## # ## # # # ## # # # ### # ### ##### #### # # # # # ## ## # # # +# # ### # # # #### # # ## # # ## # ### ### ## ## ## # # ## # # # # # ## # # # +# # # # # # # # # # # ## # # ## # ## ### # # # # ### # # ## ### ## # +# ## ## # # ### ##### ## # ### ## # # ## # # # # ##### # ### ### ## # # +# ## ## ## ## # ## ### ## ### # # # # # # ## # # # # ## +# # # #### # # # # # #### # # # # # # ### ## ## # +# # ## ## ### # # # # ## # #### ## # ## # # # # ### ### ## # # # # ### +# # # ## # ## ## ## ## # ## # # ### # # # # # # ### # #### # # # ## # +# # ### # ## ## # # # ## # ## # # # # # # ## # # # # # +# # # # # # # # ## #### # ### ## ## # ## # ### # ### ## +# # # ## # # ### ## # # ### # ## ## # # ### # #### # # # # ## # +# # # # # ### # # # # ### ### ## # # # ## ## # ## ### # # # ## +# ## #### # ### # # ##### # # # # ## ## # #### #### # +# # # # # # # ## # ## ## # # ## ## # ### # ### # # +# # # # ## # # ## # ### ### # ### #### # # # ### ## # ## # ## # ### ## +# ### ## ## # # # # # # # ### ### ## ## ### # ## ## ## ### ## +# ## # ## ### ## # #### # ## # # ## ## # # ## ## ## # ## ## # # +# # ## ## # ## # # # # #### # ## ## ## # ### # ### # +# # # # # # ## # # # # # # ## ## # ##### # # # # ###### ### # +# # # ## ### ## ### # # ## ## # # # # ### # # ## ### #### # # +# ## # ## # ### # # # # ## # # ### # # # # #### # # ### # # # ## #### +# # # # #### ## # ## # ### #### # # # # # # # # # # ## ### # ## +# ## ## ### # ### ## ## ## #### #### ## ## ### # ## # # ## # # # # # # # # +# # # # ### # # ## # # # # ## ### ## # ### # # # # ## # # # ### +# # # #### # ## # # # ## ### # ## ## ## ## ## ### # ### # # # # +# # # # # # ## # # ## ## ## # ##### # # # # ## ### # ##### # # +# ## # ### # # # # # ## # ## # # ## # ## ## # # # # ## #### # # # # # # # +# # ## ## ## #### # # ## # # # # ### #### # ### # # # # ### # # +# # #### # ## # ## ## ## ## # #### # ## # # # ### ## ### # # # +# # ### ## ## ## # ### ### # # # # # ## ## ## # ##### ## # # # # +# ## # # ## # # # ## ## # # # # # # ## # ### # # # ## ### ## # +# E# +#################################################################################################### diff --git a/romanovpv/task 2/docs/data/generate_mazes.py b/romanovpv/task 2/docs/data/generate_mazes.py new file mode 100644 index 0000000..faaaea5 --- /dev/null +++ b/romanovpv/task 2/docs/data/generate_mazes.py @@ -0,0 +1,43 @@ +import random + +def save_maze(filename, width, height, wall_probability): + maze = [] + for i in range(height): + row = "" + for j in range(width): + if i == 0 or i == height-1: + row += "#" + elif j == 0 or j == width-1: + row += "#" + else: + if random.random() < wall_probability: + row += "#" + else: + row += " " + + maze.append(list(row)) + maze[1][1] = "S" + maze[height-2][width-2] = "E" + + for i in range(1, height-1): + maze[i][1] = " " + for j in range(1, width-1): + maze[height-2][j] = " " + maze[1][1] = "S" + maze[height-2][width-2] = "E" + with open(filename, "w", encoding="utf-8") as f: + for row in maze: + f.write("".join(row)+"\n") +save_maze( + "medium_maze.txt", + 50, + 50, + 0.30 +) +save_maze( + "big_maze.txt", + 100, + 100, + 0.40 +) +print("Лабиринты созданы") \ No newline at end of file diff --git a/romanovpv/task 2/docs/data/main.py b/romanovpv/task 2/docs/data/main.py index 265a711..8204df2 100644 --- a/romanovpv/task 2/docs/data/main.py +++ b/romanovpv/task 2/docs/data/main.py @@ -5,7 +5,7 @@ from observer_command import ConsoleView, Player, MoveCommand import os builder = TextFileMazeBuilder() -maze = builder.buildFromFile("maze.txt") +maze = builder.buildFromFile("no_exit_maze.txt") print("Лабиринт:\n") maze.printMaze() print("Выберете алгоритм") diff --git a/romanovpv/task 2/docs/data/maze.txt b/romanovpv/task 2/docs/data/maze.txt deleted file mode 100644 index 14998ce..0000000 --- a/romanovpv/task 2/docs/data/maze.txt +++ /dev/null @@ -1,5 +0,0 @@ -########## -#S # # -# ### # -# ##E # -########## \ No newline at end of file diff --git a/romanovpv/task 2/docs/data/medium_maze.txt b/romanovpv/task 2/docs/data/medium_maze.txt new file mode 100644 index 0000000..31a144a --- /dev/null +++ b/romanovpv/task 2/docs/data/medium_maze.txt @@ -0,0 +1,50 @@ +################################################## +#S## # ## # # # # # # ## # +# # # # # # # ### # #### # # +# ## ## # # ## ### # # # +# ## #### ### ## ## ## # # # +# # #### # ## # # # ## ## # ##### +# # ## # ### ## # # #### # # # +# # # # ### # ## # ##### # ### # # +# # # # # # # # # # ## ### ## +# # # # # # ## # ## ## # # # +# # # # ### #### ### # # ## ## # +# # ## # ## # # ## # ## # # ## ## +# # # # # # # ##### ## # ### # # ## +# # # ## ### ## # # # ## # +# ## # # ### # # # # ## # # +# # #### ### ### #### # ## # # +# # # # # # # ## # ## # # +# ## ## # # # # # # ## ### # +# ## # ## # ## #### ### # #### # # # +# ## ### # # # # # # ## # +# # # ## # ##### ### # # +# # # ## # # ## # # +# # ## # # # # ## # # # +# # # # # # +# # ## ## # ## ## # +# # ## ### # # # # ## ## +# # #### # # ## # # # ## # ## +# # # # # ## ## # # # # #### +# # # # # ## ##### # # # ## +# # ## # ## ### # # ## # ## ## # +# # # ### ## ###### # # ## # # # # +# # # ## # # # # # ## +# # # # # # ## ## # # # ## # +# ##### # # ## ## ## # ## ### ## +# ## ## # # # ## # ## ## +# # # # # ### # # # ### # # +# ## # ## ### ## # ## +# # ### # ## ## # ## ## # # # # +# ## # ## # # ## #### # ## ## +# ## # # # # ## ## # # # # +# # # # # # # # # ## # # +# # # # # # ## # ### # ### +# ## # ## # # # ## # # # +# # # # # # # # # # ## # +# ## # # # # ## ## # ## # # # # +# # # ## # # # ## # ## # +# ## ## # # # # # ## # # # ## # # +# # ## ## # # ## # # # # # +# E# +################################################## diff --git a/romanovpv/task 2/docs/data/no_exit_maze.txt b/romanovpv/task 2/docs/data/no_exit_maze.txt new file mode 100644 index 0000000..3c482a1 --- /dev/null +++ b/romanovpv/task 2/docs/data/no_exit_maze.txt @@ -0,0 +1,10 @@ +########## +#S # # +# ###### # +# ###### # +# ###### # +# ###### # +# ###### # +# ###### # +# ######E# +########## \ No newline at end of file diff --git a/romanovpv/task 2/docs/data/no_wall_maze.txt b/romanovpv/task 2/docs/data/no_wall_maze.txt new file mode 100644 index 0000000..db91695 --- /dev/null +++ b/romanovpv/task 2/docs/data/no_wall_maze.txt @@ -0,0 +1,10 @@ +########## +#S # +# # +# # +# # +# # +# # +# # +# E# +########## \ No newline at end of file diff --git a/romanovpv/task 2/docs/data/result.py b/romanovpv/task 2/docs/data/result.py new file mode 100644 index 0000000..e92ff90 --- /dev/null +++ b/romanovpv/task 2/docs/data/result.py @@ -0,0 +1,21 @@ +import csv + +results = [ + ["maze", "strategy", "time_ms", "cells visited", "path length"], + ["small_maze", "BFS", 0.173, 15, 15], + ["small_maze", "DFS", 0.198, 15, 15], + ["small_maze", "A*", 0.195, 15, 15], + ["medium_maze", "BFS", 7.228, 95, 95], + ["medium_maze", "DFS", 1.361, 189, 189], + ["medium_maze", "A*", 3.050, 95, 95], + ["big_maze", "BFS", 18.487, 195, 195], + ["big_maze", "DFS", 10.021, 497, 497], + ["big_maze", "A*", 4.471, 195, 195], + ["no_wall_maze", "BFS", 0.325, 15, 15], + ["no_wall_maze", "DFS", 0.251, 29, 29], + ["no_wall_maze", "A*", 0.396, 15, 15], +] + +with open("results.csv", "w", newline="") as f: + writer = csv.writer(f) + writer.writerows(results) \ No newline at end of file diff --git a/romanovpv/task 2/docs/data/results.csv b/romanovpv/task 2/docs/data/results.csv new file mode 100644 index 0000000..4441a24 --- /dev/null +++ b/romanovpv/task 2/docs/data/results.csv @@ -0,0 +1,13 @@ +maze,strategy,time_ms,cells visited,path length +small_maze,BFS,0.173,15,15 +small_maze,DFS,0.198,15,15 +small_maze,A*,0.195,15,15 +medium_maze,BFS,7.228,95,95 +medium_maze,DFS,1.361,189,189 +medium_maze,A*,3.05,95,95 +big_maze,BFS,18.487,195,195 +big_maze,DFS,10.021,497,497 +big_maze,A*,4.471,195,195 +no_wall_maze,BFS,0.325,15,15 +no_wall_maze,DFS,0.251,29,29 +no_wall_maze,A*,0.396,15,15 diff --git a/romanovpv/task 2/docs/data/small_maze.txt b/romanovpv/task 2/docs/data/small_maze.txt new file mode 100644 index 0000000..93c9fd5 --- /dev/null +++ b/romanovpv/task 2/docs/data/small_maze.txt @@ -0,0 +1,10 @@ +########## +#S # +# ###### # +# # # +###### # # +# # # +# ###### # +# # +# ######E# +########## \ No newline at end of file