diff --git a/VaravinVV/docs/data/task2/empty.txt b/VaravinVV/docs/data/task2/empty.txt new file mode 100644 index 0000000..1a1141e --- /dev/null +++ b/VaravinVV/docs/data/task2/empty.txt @@ -0,0 +1 @@ +S E \ No newline at end of file diff --git a/VaravinVV/docs/data/task2/graphs/results_easy.txt.png b/VaravinVV/docs/data/task2/graphs/results_easy.txt.png new file mode 100644 index 0000000..73c7242 Binary files /dev/null and b/VaravinVV/docs/data/task2/graphs/results_easy.txt.png differ diff --git a/VaravinVV/docs/data/task2/graphs/results_empty.txt.png b/VaravinVV/docs/data/task2/graphs/results_empty.txt.png new file mode 100644 index 0000000..f75ea4d Binary files /dev/null and b/VaravinVV/docs/data/task2/graphs/results_empty.txt.png differ diff --git a/VaravinVV/docs/data/task2/graphs/results_hard.txt.png b/VaravinVV/docs/data/task2/graphs/results_hard.txt.png new file mode 100644 index 0000000..6dc9161 Binary files /dev/null and b/VaravinVV/docs/data/task2/graphs/results_hard.txt.png differ diff --git a/VaravinVV/docs/data/task2/graphs/results_medium.txt.png b/VaravinVV/docs/data/task2/graphs/results_medium.txt.png new file mode 100644 index 0000000..2e390fc Binary files /dev/null and b/VaravinVV/docs/data/task2/graphs/results_medium.txt.png differ diff --git a/VaravinVV/docs/data/task2/graphs/results_noexit.txt.png b/VaravinVV/docs/data/task2/graphs/results_noexit.txt.png new file mode 100644 index 0000000..607b334 Binary files /dev/null and b/VaravinVV/docs/data/task2/graphs/results_noexit.txt.png differ diff --git a/VaravinVV/docs/data/task2/hard.txt b/VaravinVV/docs/data/task2/hard.txt new file mode 100644 index 0000000..f0200a4 --- /dev/null +++ b/VaravinVV/docs/data/task2/hard.txt @@ -0,0 +1,101 @@ +##################################################################################################### +#S # # # # # # # # # # # # # # # # # # # +# # # ####### ########### # # # ######### ######### ##### # ### # ####### ##### # # # # # ### ### # # +# # # # # # # # # # # # # # # # # # # # # # # +### ### # ##### ##### ### ### ####### # # # ##### # # # ####### ##### ##### ### # ##### # ####### # # +# # # # # # # # # # # # # # # # # # # # # +# # # ### # ### # # ####### # # ### ##### ### ### # ####### # ### ### ##### ##### ### ##### ### ### # +# # # # # # # # # # # # # # # # # # # # # +# ### ##### ######### ### ####### ### # ### # ### # ######### # ######### # ### # ### # ##### ####### +# # # # # # # # # # # # # # # # # # # # # # # # # # +### ### ### # ### ######### # ##### ### # # ### ####### # ########### # # ### ############### ####### +# # # # # # # # # # # # # # # # +# ##### # # ####### # # ##### ### # ### ######### # ##### ##### ### ### # ### # # ####### # ### ##### +# # # # # # # # # # # # # # # # # # # # # # # # # # +### # ### # ### # ### # ### # ### ### # # ####### ####### ##### ##### # # # # ##### ### ### ### # ### +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # ### # ### # # ####### ##### # ######### # # # # ### # ### ### ### ##### # # ### # # ### # ####### +# # # # # # # # # # # # # # # # # # # # # # # # # # +##### # ##### # # ### # # # # # ####### # ### # ##### ### # ##### # # # # ##### # ### # ##### # # ### +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # ##### # # # ### # ### # ### ### # ##### # ### # # ##### ############# ##### ### ##### ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +# ##### # # ### # ### ################### ### ### ### # ### # ### # # ### ### ######### ### ####### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +##### ### ##### ####### ### ### ##### # # ### ### ### ### ### # ### ### ### ### ##### # # ### # ##### +# # # # # # # # # # # # # # # # # # # # # # # # # # +### # ### # ### # # # # # ####### # ### ############# ####### ### ### ### # # ### ####### # ### # ### +# # # # # # # # # # # # # # # # # # # # # # # +# # # ##### ### # ### # ### # ### # # # # # ### ### # ### ### # # ### ##### # ### ### # ##### ##### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # ##### ##### # # # ############### ##### # ### ### # # ##### ####### ##### ####### ##### ### # # +# # # # # # # # # # # # # # # # # # # # # # # +##### ### ##### # # # # # # ### ##### ### ########### # ### # # # ### ### # # # ### # # ######### # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +### # ### # ### # ##### ##### ##### ########### # ### ### ##### # ##### ### ### ##### ######### # # # +# # # # # # # # # # # # # # # # # # # # # # +# ### # ####### # ### ##### # # ############# ### ####### # # ### # # ### # ####### ### # # # # ##### +# # # # # # # # # # # # # # # # # # # # # # # # # # +####### # # ### # ########### # ### ##### ########### # ##### ### # ### ############# # # # # ##### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# ### ##### ### # ### # # ### ### ### ### # ##### ##### ### # # ### ### # # ##### ### ####### ####### +# # # # # # # # # # # # # # # # # # # # # # # # +# ##### # # # # ##### # # # ######### ### # ####### # # ####### # ##### ### # ### ### # # ####### ### +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # ####### # # # # # ### ####### # # # ####### # ### # ### ### # ##### ##### ### # ##### ### ### # # +# # # # # # # # # # # # # # # # # # # # # # # # +# ##### ### # # ######### ##### ####### ##### # ##### ####### ### ### ####### ##### ### ##### # # # # +# # # # # # # # # # # # # # # # # # # # # # # # +# # ######### # # # ####### ### # ####### # # ##### # ### # ### # ########### ############# ##### # # +# # # # # # # # # # # # # # # # # # # # # # # +# ### ##### # ##### # ### # ##### # ### # ### ### # # ### ##### ##### # # # ### # ############# # ### +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +### # ### ### # # ######### ### ### ### ### # # ####### # ### ######### ### ##### # # # # ### # ##### +# # # # # # # # # # # # # # # # # # # # # +### # ######### ######### # ### # # ### # ############# # # # # # # ############# ######### # ####### +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # ### ### ### ### ### # ##### # # ##### ####### # # # # ### # # # # ### ### # # # # ##### # ### +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# # ### ##### ### ### # # # ### # # ######### ######### ##### ##### # ######### ### # # ### # ### ### +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +### ##### ### # # # ############### # ### ### # # ### ### # ##### # ### # ##### ### ######### # ##### +# # # # # # # # # # # # # # # # # # # # # # # +# ##### ### ### ### # ####### # ### # ### ### ######### # ### ######### # # ### # ### ########### ### +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # ### ### # # ##### ### # # ### ### ##### ### ### # ########### # ### ####### # # ######### ### ### +# # # # # # # # # # # # # # # # # # # # +##### ### # # # # # # ##### ####### # # # ####### # ####### # ##### ######### # ### # ####### # ##### +# # # # # # # # # # # # # # # # # # # # # # # # +# ### # ### ### ####### # ### # ### # # ####### # ### # ### ##### ##### ### ####### # # # ##### ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # ### # # ############### # # ##### # ##### ########### # # # ### # ### ### ### ### # ### # ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +##### ######### ##### ### # ### # ### # ### ### ####### ######### ########### ##### # ### # ### # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +### # ### ### # ##### # ##### # ##### # # ##### ####### # ####### ### ##### ### ####### ##### ### ### +# # # # # # # # # # # # # # # # # # # # # # # +##### ### # # ##### ####### ### # ##### ####### ### # # # ### ####### ### # ##### ####### # # ##### # +# # # # # # # # # # # # # # # # # # +# ### ####### ##### ####### ### # ### ##### ##### ### # # ### # ### ### # # # ####### # # ##### # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# ### ### ##### ######### # ##### ##### # # # # ### ##### ### # # # # # ######### # ######### # ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # ####### ### ##### ######### ##### ########### # ### # ### # # # # ##### # # ### ##### ##### ### +# # # # # # # # # # # # # # # # # # # # # # # +# # # ### # ### ##### ### # ########### ##### # ####### # ##### # # ### # # ##### ### # ######### ### +# # # # # # # # # # # # # # # # # # # # # # # # # +# # # ### ### # ######### # ### # # # ##### ### # # ### ##### ##### ### ### ############# ####### # # +# # # # # # # # # # # # # # # # # # # # # # # # # +##### ### # ### ### # # # ### ##### # ##### # ##### # ### ##### # ### ### # # # # # ##### # ######### +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # ##### # ### # # # ##### # ### ### ##### # ### ##### # ### ####### ### # ##### ### # ##### # # ### +# # # # # # # # # # # # # # # # # # # # # # # +# # # ### ########### ##### # ### # # ### # ######### ####### # # # # ########### ### ####### ##### # +# # # # # # # # # # # # # # # # # # # # # # # # # +# ### # # ### ############# ### # ### ##### ### ### ##### # # ### ######### ### ### ### # # ### ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # +##### ### # ### # # # # # ### # # ### # # ####### ####### # # ##### # ### # # ##### # ### # ### ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # +### # ### ##### ### ### # # # ##### ### # ### ### ##### # ##### ### # # ##### # ####### # ######### # +# # # # # # # # # # # # # # # # # # # # # # E# +##################################################################################################### diff --git a/VaravinVV/docs/data/task2/medium.txt b/VaravinVV/docs/data/task2/medium.txt new file mode 100644 index 0000000..0baeea6 --- /dev/null +++ b/VaravinVV/docs/data/task2/medium.txt @@ -0,0 +1,51 @@ +################################################### +#S # # # # +# # # ####### ########### # # # ######### ######### +# # # # # # # # # # # # # # +### ### # ##### ##### ### ### ####### # # # ##### # +# # # # # # # # # # # # # +# # # ### # ### # # ####### # # ### ##### ### ### # +# # # # # # # # # # +# ### ##### ######### ### ####### ### # ### # ### # +# # # # # # # # # # # # # # +### ### ### # ### ######### # ##### ### # # ### ### +# # # # # # # # # # # +# ##### # # ####### # # ##### ### # ### ######### # +# # # # # # # # # # # # # # +### # ### # ### # ### # ### # ### ### ### ######### +# # # # # # # # # # # # # +# # ### # ### # # ####### ##### # ######### ##### # +# # # # # # # # # # # # # +##### # ##### # # ### # # # # # ######### ##### ### +# # # # # # # # # # # # # +# # # # # ##### # # # ### # ### # ####### # ####### +# # # # # # # # # # # # # # # # # +# ##### # # ### # ### ################# # ### ### # +# # # # # # # # # # # # # +##### ### ##### ####### ### ### ##### ### # # ##### +# # # # # # # # # # # # +### # ### # ### # # # # # ##### # # ##### # # ##### +# # # # # # # # # # # # # # # # # +# # # ##### ### # ### # ### # ### # ####### # # # # +# # # # # # # # # # # # # # # +# # # ##### ##### # # # ####### # ### ####### ### # +# # # # # # # # # # # # # +##### ### ##### # # # # # # ##### # # # # ### # # # +# # # # # # # # # # # # # # # # # # # +### # ### # ### # ##### ##### ####### ########### # +# # # # # # # # # # # # +# ### # ####### # ### ##### ##### ### ### ######### +# # # # # # # # # # # # +####### # # ### # ######### # ##### # ##### # ### # +# # # # # # # # # # # # # # +# # ####### ### # ### # # ##### ######### ### ##### +# # # # # # # # # # # # # # +### ### # # # # ##### ### ##### # # # ### # # # # # +# # # # # # # # # # # # # # +### ### # # # # ### # # # ##### ######### ####### # +# # # # # # # # # # # # # +##### # # ### # # ########### ### ##### # # ### # # +# # # # # # # # # # # # # # +### ### # ##### # # ### ### ##### ### # # ### ### # +# # # # # # # # # # # # #E# +################################################### diff --git a/VaravinVV/docs/data/task2/res.csv b/VaravinVV/docs/data/task2/res.csv new file mode 100644 index 0000000..12c8979 --- /dev/null +++ b/VaravinVV/docs/data/task2/res.csv @@ -0,0 +1,16 @@ +лабиринт,стратегия,время_мс,посещено_клеток,длина_пути,путь_найден +easy.txt,BFS,0.046,32.0,17.0,True +easy.txt,DFS,0.026,28.0,17.0,True +easy.txt,AStar,0.037,21.0,17.0,True +medium.txt,BFS,1.141,1249.0,101.0,True +medium.txt,DFS,0.547,633.0,101.0,True +medium.txt,AStar,1.26,721.0,101.0,True +hard.txt,BFS,4.703,4997.0,209.0,True +hard.txt,DFS,3.61,4026.0,209.0,True +hard.txt,AStar,6.119,3377.0,209.0,True +noexit.txt,BFS,0.002,1.0,0.0,False +noexit.txt,DFS,0.002,1.0,0.0,False +noexit.txt,AStar,0.005,1.0,0.0,False +empty.txt,BFS,0.003,3.0,3.0,True +empty.txt,DFS,0.003,3.0,3.0,True +empty.txt,AStar,0.004,3.0,3.0,True diff --git a/VaravinVV/docs/data/task2/tables.py b/VaravinVV/docs/data/task2/tables.py new file mode 100644 index 0000000..e17a747 --- /dev/null +++ b/VaravinVV/docs/data/task2/tables.py @@ -0,0 +1,53 @@ +import pandas as pd +import matplotlib.pyplot as plt +import seaborn as sns +import sys +import os + +def plot_results(csv_file: str, output_dir: str = "plots"): + if not os.path.exists(csv_file): + print(f"Файл {csv_file} не найден.") + return + df = pd.read_csv(csv_file, encoding='utf-8') + required = ["лабиринт", "стратегия", "время_мс", "посещено_клеток", "длина_пути"] + for col in required: + if col not in df.columns: + print(f"В CSV отсутствует колонка {col}") + return + + os.makedirs(output_dir, exist_ok=True) + + sns.set_style("whitegrid") + + for maze_name in df["лабиринт"].unique(): + maze_df = df[df["лабиринт"] == maze_name] + fig, axes = plt.subplots(1, 3, figsize=(15, 5)) + fig.suptitle(f"Сравнение стратегий для лабиринта {maze_name}", fontsize=14) + + ax = axes[0] + sns.barplot(data=maze_df, x="стратегия", y="время_мс", ax=ax, palette="viridis") + ax.set_title("Время выполнения (мс)") + ax.set_ylabel("мс") + + ax = axes[1] + sns.barplot(data=maze_df, x="стратегия", y="посещено_клеток", ax=ax, palette="plasma") + ax.set_title("Количество посещённых клеток") + ax.set_ylabel("клетки") + + ax = axes[2] + sns.barplot(data=maze_df, x="стратегия", y="длина_пути", ax=ax, palette="coolwarm") + ax.set_title("Длина найденного пути") + ax.set_ylabel("шаги") + + plt.tight_layout() + plt.savefig(os.path.join(output_dir, f"results_{maze_name}.png"), dpi=150) + plt.close() + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Использование: python tables.py <папка_для_сохранения>") + print("Пример: python tables.py res.csv plots") + sys.exit(1) + csv_file = sys.argv[1] + out_dir = sys.argv[2] if len(sys.argv) > 2 else "plots" + plot_results(csv_file, out_dir) \ No newline at end of file