forked from UNN/2026-rff_mp
904 lines
171 KiB
Plaintext
904 lines
171 KiB
Plaintext
|
|
{
|
|||
|
|
"cells": [
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"id": "6dc3ad27",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"# Отчёт: Поиск выхода из лабиринта (объектно-ориентированная реализация с паттернами)\n",
|
|||
|
|
"\n",
|
|||
|
|
"- Описание задачи и выбранных паттернов (с диаграммой классов из Mermaid).\n",
|
|||
|
|
"- Результаты экспериментов (таблицы, графики).\n",
|
|||
|
|
"- Анализ эффективности алгоритмов и применимости паттернов.\n",
|
|||
|
|
"- Выводы: как ООП и паттерны помогли сделать код гибким и расширяемым. Что было бы сложно изменить без них."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"id": "59b2f0d3",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 1. Описание задачи и выбранных паттернов\n",
|
|||
|
|
"\n",
|
|||
|
|
"Необходимо создать программу с применением паттернов ООП для решения задачи поиска из лабиринта. Для этого, подготовим схему из Mermaid, отражающую связи между объектами:\n",
|
|||
|
|
"\n",
|
|||
|
|
"```mermaid\n",
|
|||
|
|
"classDiagram\n",
|
|||
|
|
" class Maze {\n",
|
|||
|
|
" -Cell[] cells\n",
|
|||
|
|
" -int width, height\n",
|
|||
|
|
" -Cell start\n",
|
|||
|
|
" -Cell exit\n",
|
|||
|
|
" +getCell(x,y): Cell\n",
|
|||
|
|
" +getNeighbors(cell): List~Cell~\n",
|
|||
|
|
" }\n",
|
|||
|
|
" \n",
|
|||
|
|
" class Cell {\n",
|
|||
|
|
" -int x, y\n",
|
|||
|
|
" -bool isWall\n",
|
|||
|
|
" -bool isStart\n",
|
|||
|
|
" -bool isExit\n",
|
|||
|
|
" +isPassable(): bool\n",
|
|||
|
|
" }\n",
|
|||
|
|
" \n",
|
|||
|
|
" class MazeBuilder {\n",
|
|||
|
|
" <<interface>>\n",
|
|||
|
|
" +buildFromFile(filename): Maze\n",
|
|||
|
|
" }\n",
|
|||
|
|
" \n",
|
|||
|
|
" class TextFileMazeBuilder {\n",
|
|||
|
|
" +buildFromFile(filename): Maze\n",
|
|||
|
|
" }\n",
|
|||
|
|
" \n",
|
|||
|
|
" class PathFindingStrategy {\n",
|
|||
|
|
" <<interface>>\n",
|
|||
|
|
" +findPath(maze, start, exit): List~Cell~\n",
|
|||
|
|
" }\n",
|
|||
|
|
" \n",
|
|||
|
|
" class BFS\n",
|
|||
|
|
" class DFS\n",
|
|||
|
|
" class AStar\n",
|
|||
|
|
" \n",
|
|||
|
|
" class SearchStats {\n",
|
|||
|
|
" +timeMs: float\n",
|
|||
|
|
" +visitedCells: int\n",
|
|||
|
|
" +pathLength: int\n",
|
|||
|
|
" }\n",
|
|||
|
|
" \n",
|
|||
|
|
" class MazeSolver {\n",
|
|||
|
|
" -Maze maze\n",
|
|||
|
|
" -PathFindingStrategy strategy\n",
|
|||
|
|
" +setStrategy(strategy)\n",
|
|||
|
|
" +solve(): SearchStats\n",
|
|||
|
|
" }\n",
|
|||
|
|
" \n",
|
|||
|
|
" class Observer {\n",
|
|||
|
|
" <<interface>>\n",
|
|||
|
|
" +update(event)\n",
|
|||
|
|
" }\n",
|
|||
|
|
" \n",
|
|||
|
|
" class ConsoleView {\n",
|
|||
|
|
" +update(event)\n",
|
|||
|
|
" +render(maze, player, path)\n",
|
|||
|
|
" }\n",
|
|||
|
|
" \n",
|
|||
|
|
" MazeBuilder <|.. TextFileMazeBuilder\n",
|
|||
|
|
" MazeBuilder --> Maze : creates\n",
|
|||
|
|
" PathFindingStrategy <|.. BFS\n",
|
|||
|
|
" PathFindingStrategy <|.. DFS\n",
|
|||
|
|
" PathFindingStrategy <|.. AStarStrategy\n",
|
|||
|
|
" MazeSolver --> PathFindingStrategy : uses\n",
|
|||
|
|
" MazeSolver --> Maze : uses\n",
|
|||
|
|
" Observer <|.. ConsoleView\n",
|
|||
|
|
" MazeSolver --> Observer : notifies\n",
|
|||
|
|
"```"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"id": "e268fdf0",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"Builder — позволяет отделить создание сложного объекта от его представления. \n",
|
|||
|
|
"Strategy — позволяет инкапсулировать разные алгоритмы поиска пути так, чтобы их можно было подставлять динамически. \n",
|
|||
|
|
"Observer — позволяет обеспечить реакцию отображения на изменения состояния без жёсткой привязки. \n",
|
|||
|
|
"\n",
|
|||
|
|
"Код можно найти в репозитории: http://31.128.43.79:3000/musinaa/2026-rff_mp"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"id": "6ffa70d6",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"# 2. Практическая часть\n",
|
|||
|
|
"# 2.0 Подготовим окружение"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 1,
|
|||
|
|
"id": "d457dda4",
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": [
|
|||
|
|
"import sys\n",
|
|||
|
|
"import os\n",
|
|||
|
|
"sys.path.insert(0, os.path.abspath( '../'))\n",
|
|||
|
|
"\n",
|
|||
|
|
"from task2.mazeBuilder import TextFileMazeBuilder\n",
|
|||
|
|
"from task2.tester import Tester"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"id": "888f0e3c",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 2.1 Данные для анализа\n",
|
|||
|
|
"\n",
|
|||
|
|
"В папке `mazeExamples` лежит несколько лабиринтов разных размеров: 5x5, 10x10, 50x50, 100x100. Для каждого лабиринта будем искать путь с помощью всех доступных алгоритмов поиска: BFS, DFS и A*. Измерения будем проводить 10 раз, а затем усреднённое значение записывать."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 2,
|
|||
|
|
"id": "22ac68eb",
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": [
|
|||
|
|
"builder = TextFileMazeBuilder()\n",
|
|||
|
|
"tester = Tester(builder, \"docs/data/task2/results.csv\")\n",
|
|||
|
|
"tester.setTestingDirectory(\"task2/mazeExamples\")\n",
|
|||
|
|
"tester.test()\n",
|
|||
|
|
"tester.saveCSV()"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"id": "27441b5f",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 2.2 Данные по лабиринтам и графики"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 3,
|
|||
|
|
"id": "702c1844",
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"\n",
|
|||
|
|
" Лабиринт 5x5\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"text/html": [
|
|||
|
|
"<div>\n",
|
|||
|
|
"<style scoped>\n",
|
|||
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|||
|
|
" vertical-align: middle;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"\n",
|
|||
|
|
" .dataframe tbody tr th {\n",
|
|||
|
|
" vertical-align: top;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"\n",
|
|||
|
|
" .dataframe thead th {\n",
|
|||
|
|
" text-align: right;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"</style>\n",
|
|||
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
|
" <thead>\n",
|
|||
|
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th>Лабиринт</th>\n",
|
|||
|
|
" <th>Время (мс)</th>\n",
|
|||
|
|
" <th>Посещённые клетки</th>\n",
|
|||
|
|
" <th>Длинна пути</th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>Алгоритм</th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </thead>\n",
|
|||
|
|
" <tbody>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>BFS</th>\n",
|
|||
|
|
" <td>5x5</td>\n",
|
|||
|
|
" <td>0.075332</td>\n",
|
|||
|
|
" <td>8</td>\n",
|
|||
|
|
" <td>7</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>DFS</th>\n",
|
|||
|
|
" <td>5x5</td>\n",
|
|||
|
|
" <td>0.018403</td>\n",
|
|||
|
|
" <td>8</td>\n",
|
|||
|
|
" <td>7</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>AStar</th>\n",
|
|||
|
|
" <td>5x5</td>\n",
|
|||
|
|
" <td>0.022371</td>\n",
|
|||
|
|
" <td>8</td>\n",
|
|||
|
|
" <td>7</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </tbody>\n",
|
|||
|
|
"</table>\n",
|
|||
|
|
"</div>"
|
|||
|
|
],
|
|||
|
|
"text/plain": [
|
|||
|
|
" Лабиринт Время (мс) Посещённые клетки Длинна пути\n",
|
|||
|
|
"Алгоритм \n",
|
|||
|
|
"BFS 5x5 0.075332 8 7\n",
|
|||
|
|
"DFS 5x5 0.018403 8 7\n",
|
|||
|
|
"AStar 5x5 0.022371 8 7"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"\n",
|
|||
|
|
" Лабиринт 10x10\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"text/html": [
|
|||
|
|
"<div>\n",
|
|||
|
|
"<style scoped>\n",
|
|||
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|||
|
|
" vertical-align: middle;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"\n",
|
|||
|
|
" .dataframe tbody tr th {\n",
|
|||
|
|
" vertical-align: top;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"\n",
|
|||
|
|
" .dataframe thead th {\n",
|
|||
|
|
" text-align: right;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"</style>\n",
|
|||
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
|
" <thead>\n",
|
|||
|
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th>Лабиринт</th>\n",
|
|||
|
|
" <th>Время (мс)</th>\n",
|
|||
|
|
" <th>Посещённые клетки</th>\n",
|
|||
|
|
" <th>Длинна пути</th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>Алгоритм</th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </thead>\n",
|
|||
|
|
" <tbody>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>BFS</th>\n",
|
|||
|
|
" <td>10x10</td>\n",
|
|||
|
|
" <td>0.403814</td>\n",
|
|||
|
|
" <td>53</td>\n",
|
|||
|
|
" <td>23</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>DFS</th>\n",
|
|||
|
|
" <td>10x10</td>\n",
|
|||
|
|
" <td>0.079438</td>\n",
|
|||
|
|
" <td>35</td>\n",
|
|||
|
|
" <td>31</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>AStar</th>\n",
|
|||
|
|
" <td>10x10</td>\n",
|
|||
|
|
" <td>0.067146</td>\n",
|
|||
|
|
" <td>23</td>\n",
|
|||
|
|
" <td>23</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </tbody>\n",
|
|||
|
|
"</table>\n",
|
|||
|
|
"</div>"
|
|||
|
|
],
|
|||
|
|
"text/plain": [
|
|||
|
|
" Лабиринт Время (мс) Посещённые клетки Длинна пути\n",
|
|||
|
|
"Алгоритм \n",
|
|||
|
|
"BFS 10x10 0.403814 53 23\n",
|
|||
|
|
"DFS 10x10 0.079438 35 31\n",
|
|||
|
|
"AStar 10x10 0.067146 23 23"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"\n",
|
|||
|
|
" Лабиринт 50x50\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"text/html": [
|
|||
|
|
"<div>\n",
|
|||
|
|
"<style scoped>\n",
|
|||
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|||
|
|
" vertical-align: middle;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"\n",
|
|||
|
|
" .dataframe tbody tr th {\n",
|
|||
|
|
" vertical-align: top;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"\n",
|
|||
|
|
" .dataframe thead th {\n",
|
|||
|
|
" text-align: right;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"</style>\n",
|
|||
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
|
" <thead>\n",
|
|||
|
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th>Лабиринт</th>\n",
|
|||
|
|
" <th>Время (мс)</th>\n",
|
|||
|
|
" <th>Посещённые клетки</th>\n",
|
|||
|
|
" <th>Длинна пути</th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>Алгоритм</th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </thead>\n",
|
|||
|
|
" <tbody>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>BFS</th>\n",
|
|||
|
|
" <td>50x50</td>\n",
|
|||
|
|
" <td>3.010086</td>\n",
|
|||
|
|
" <td>640</td>\n",
|
|||
|
|
" <td>427</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>DFS</th>\n",
|
|||
|
|
" <td>50x50</td>\n",
|
|||
|
|
" <td>2.066407</td>\n",
|
|||
|
|
" <td>995</td>\n",
|
|||
|
|
" <td>435</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>AStar</th>\n",
|
|||
|
|
" <td>50x50</td>\n",
|
|||
|
|
" <td>2.081632</td>\n",
|
|||
|
|
" <td>496</td>\n",
|
|||
|
|
" <td>427</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </tbody>\n",
|
|||
|
|
"</table>\n",
|
|||
|
|
"</div>"
|
|||
|
|
],
|
|||
|
|
"text/plain": [
|
|||
|
|
" Лабиринт Время (мс) Посещённые клетки Длинна пути\n",
|
|||
|
|
"Алгоритм \n",
|
|||
|
|
"BFS 50x50 3.010086 640 427\n",
|
|||
|
|
"DFS 50x50 2.066407 995 435\n",
|
|||
|
|
"AStar 50x50 2.081632 496 427"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"\n",
|
|||
|
|
" Лабиринт 100x100\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"text/html": [
|
|||
|
|
"<div>\n",
|
|||
|
|
"<style scoped>\n",
|
|||
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|||
|
|
" vertical-align: middle;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"\n",
|
|||
|
|
" .dataframe tbody tr th {\n",
|
|||
|
|
" vertical-align: top;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"\n",
|
|||
|
|
" .dataframe thead th {\n",
|
|||
|
|
" text-align: right;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"</style>\n",
|
|||
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
|
" <thead>\n",
|
|||
|
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th>Лабиринт</th>\n",
|
|||
|
|
" <th>Время (мс)</th>\n",
|
|||
|
|
" <th>Посещённые клетки</th>\n",
|
|||
|
|
" <th>Длинна пути</th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>Алгоритм</th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </thead>\n",
|
|||
|
|
" <tbody>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>BFS</th>\n",
|
|||
|
|
" <td>100x100</td>\n",
|
|||
|
|
" <td>17.143568</td>\n",
|
|||
|
|
" <td>2495</td>\n",
|
|||
|
|
" <td>1171</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>DFS</th>\n",
|
|||
|
|
" <td>100x100</td>\n",
|
|||
|
|
" <td>8.430860</td>\n",
|
|||
|
|
" <td>3219</td>\n",
|
|||
|
|
" <td>1243</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>AStar</th>\n",
|
|||
|
|
" <td>100x100</td>\n",
|
|||
|
|
" <td>4.951790</td>\n",
|
|||
|
|
" <td>1286</td>\n",
|
|||
|
|
" <td>1171</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </tbody>\n",
|
|||
|
|
"</table>\n",
|
|||
|
|
"</div>"
|
|||
|
|
],
|
|||
|
|
"text/plain": [
|
|||
|
|
" Лабиринт Время (мс) Посещённые клетки Длинна пути\n",
|
|||
|
|
"Алгоритм \n",
|
|||
|
|
"BFS 100x100 17.143568 2495 1171\n",
|
|||
|
|
"DFS 100x100 8.430860 3219 1243\n",
|
|||
|
|
"AStar 100x100 4.951790 1286 1171"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"import pandas as pd\n",
|
|||
|
|
"\n",
|
|||
|
|
"df = pd.read_csv(\"data/task2/results.csv\")\n",
|
|||
|
|
"for name in [\"5x5\", \"10x10\", \"50x50\", \"100x100\"]:\n",
|
|||
|
|
" print(f\"\\n Лабиринт {name}\")\n",
|
|||
|
|
" display(df[df[\"Лабиринт\"] == name].set_index(\"Алгоритм\"))"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"id": "c7a1b48e",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"Как видно из таблиц, A* рекордно низкое врея выполнения, а так же хорошая длинна пути, часто совпадающая с медленными алгоритмами вроде BFS. Примечательно, что у A* всегда посещает меньше клеток, чем остальные алгоритмы, сильнее всего это заметно на большом лабиринте в 100 клеток, где разрыв от BFS: примерно в 2 раза меньше посещённых клеток, с DFS и вовсе почти в 3 раза.\n",
|
|||
|
|
"\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 4,
|
|||
|
|
"id": "d5078321",
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"\n",
|
|||
|
|
" Лабиринт maze_25x25_wo_exit\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"text/html": [
|
|||
|
|
"<div>\n",
|
|||
|
|
"<style scoped>\n",
|
|||
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|||
|
|
" vertical-align: middle;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"\n",
|
|||
|
|
" .dataframe tbody tr th {\n",
|
|||
|
|
" vertical-align: top;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"\n",
|
|||
|
|
" .dataframe thead th {\n",
|
|||
|
|
" text-align: right;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"</style>\n",
|
|||
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
|
" <thead>\n",
|
|||
|
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th>Лабиринт</th>\n",
|
|||
|
|
" <th>Время (мс)</th>\n",
|
|||
|
|
" <th>Посещённые клетки</th>\n",
|
|||
|
|
" <th>Длинна пути</th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>Алгоритм</th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </thead>\n",
|
|||
|
|
" <tbody>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>BFS</th>\n",
|
|||
|
|
" <td>maze_25x25_wo_exit</td>\n",
|
|||
|
|
" <td>1.968229</td>\n",
|
|||
|
|
" <td>338</td>\n",
|
|||
|
|
" <td>-1</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>DFS</th>\n",
|
|||
|
|
" <td>maze_25x25_wo_exit</td>\n",
|
|||
|
|
" <td>0.719102</td>\n",
|
|||
|
|
" <td>338</td>\n",
|
|||
|
|
" <td>-1</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>AStar</th>\n",
|
|||
|
|
" <td>maze_25x25_wo_exit</td>\n",
|
|||
|
|
" <td>1.011797</td>\n",
|
|||
|
|
" <td>338</td>\n",
|
|||
|
|
" <td>-1</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </tbody>\n",
|
|||
|
|
"</table>\n",
|
|||
|
|
"</div>"
|
|||
|
|
],
|
|||
|
|
"text/plain": [
|
|||
|
|
" Лабиринт Время (мс) Посещённые клетки Длинна пути\n",
|
|||
|
|
"Алгоритм \n",
|
|||
|
|
"BFS maze_25x25_wo_exit 1.968229 338 -1\n",
|
|||
|
|
"DFS maze_25x25_wo_exit 0.719102 338 -1\n",
|
|||
|
|
"AStar maze_25x25_wo_exit 1.011797 338 -1"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"\n",
|
|||
|
|
" Лабиринт maze_25x25_empty\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"text/html": [
|
|||
|
|
"<div>\n",
|
|||
|
|
"<style scoped>\n",
|
|||
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|||
|
|
" vertical-align: middle;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"\n",
|
|||
|
|
" .dataframe tbody tr th {\n",
|
|||
|
|
" vertical-align: top;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"\n",
|
|||
|
|
" .dataframe thead th {\n",
|
|||
|
|
" text-align: right;\n",
|
|||
|
|
" }\n",
|
|||
|
|
"</style>\n",
|
|||
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
|
" <thead>\n",
|
|||
|
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th>Лабиринт</th>\n",
|
|||
|
|
" <th>Время (мс)</th>\n",
|
|||
|
|
" <th>Посещённые клетки</th>\n",
|
|||
|
|
" <th>Длинна пути</th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>Алгоритм</th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" <th></th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </thead>\n",
|
|||
|
|
" <tbody>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>BFS</th>\n",
|
|||
|
|
" <td>maze_25x25_empty</td>\n",
|
|||
|
|
" <td>4.574538</td>\n",
|
|||
|
|
" <td>625</td>\n",
|
|||
|
|
" <td>49</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>DFS</th>\n",
|
|||
|
|
" <td>maze_25x25_empty</td>\n",
|
|||
|
|
" <td>0.903779</td>\n",
|
|||
|
|
" <td>625</td>\n",
|
|||
|
|
" <td>337</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>AStar</th>\n",
|
|||
|
|
" <td>maze_25x25_empty</td>\n",
|
|||
|
|
" <td>0.217635</td>\n",
|
|||
|
|
" <td>49</td>\n",
|
|||
|
|
" <td>49</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </tbody>\n",
|
|||
|
|
"</table>\n",
|
|||
|
|
"</div>"
|
|||
|
|
],
|
|||
|
|
"text/plain": [
|
|||
|
|
" Лабиринт Время (мс) Посещённые клетки Длинна пути\n",
|
|||
|
|
"Алгоритм \n",
|
|||
|
|
"BFS maze_25x25_empty 4.574538 625 49\n",
|
|||
|
|
"DFS maze_25x25_empty 0.903779 625 337\n",
|
|||
|
|
"AStar maze_25x25_empty 0.217635 49 49"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"tester.setTestingDirectory(\"task2/mazeExamplesSpeical\")\n",
|
|||
|
|
"tester.writefile = \"../docs/data/task2/results2.csv\"\n",
|
|||
|
|
"tester.test()\n",
|
|||
|
|
"tester.saveCSV()\n",
|
|||
|
|
"\n",
|
|||
|
|
"df = pd.read_csv(\"data/task2/results2.csv\")\n",
|
|||
|
|
"for name in [\"maze_25x25_wo_exit\", \"maze_25x25_empty\"]:\n",
|
|||
|
|
" print(f\"\\n Лабиринт {name}\")\n",
|
|||
|
|
" display(df[df[\"Лабиринт\"] == name].set_index(\"Алгоритм\"))"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"id": "41192153",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"Из выходных данных видно, что A* всегда быстро находит путь в пустом лабиринте, в реальных системах это очень большой плюс. BFS и BFS, из-за своей особенности пытается найти кратчайший путь и ему приходится оббегать весь лабиринт в поисках оптимального пути. \n",
|
|||
|
|
"\n",
|
|||
|
|
"Для того, чтобы оценить различия в алгоритмах на обычных лабиринтах нагляднее, построем серию графиков."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 5,
|
|||
|
|
"id": "43409471",
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABc4AAAGiCAYAAADeCVUTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XlcVNX/x/HXzLCIiCgoIuGeu0Iq5paKuZeamVlZqGlmZaapqWWm5jdNLZc0l8qtTK1Mc6kfpbll4oKC5l6JO7iggijbzNzfH9MMDAwKCAwz9/N8PHg498yZO+fMW7gzZ849V6MoioIQQgghhBBCCCGEEEIIIQDQ2rsBQgghhBBCCCGEEEIIIURxIgPnQgghhBBCCCGEEEIIIUQmMnAuhBBCCCGEEEIIIYQQQmQiA+dCCCGEEEIIIYQQQgghRCYycC6EEEIIIYQQQgghhBBCZCID50IIIYQQQgghhBBCCCFEJjJwLoQQQgghhBBCCCGEEEJkIgPnQgghhBBCCCGEEEIIIUQmLvZugBBCCCGEGhmNRtLS0uzdDCGEA3Jzc0OrlTlQQgghhBCFSQbOhRBCCCGKWFpaGjExMRiNRns3RQjhgLRaLdWqVcPNzc3eTRFCCCGEcFoaRVEUezdCCCGEEEItFEXh/PnzpKenExAQILNGhRB5YjQauXz5Mq6urlSuXBmNRmPvJgkhhBBCOCWZcS6EEEIIUYT0ej13794lICCAkiVL2rs5QggHVL58eS5fvoxer8fV1dXezRFCCCGEcEoyxUkIIYQQoggZDAYAWWJBCJFv5r8f5r8nQgghhBCi4MnAuRBCCCGEHcjyCkKI/JK/H0IIIYQQhU8GzoUQQgghhBBCCCGEEEKITGTgXAghhBBCCCGEEEIIIYTIRAbOhRBCCCEckMEAO3bA6tWmfwt7qeMBAwag0WgsP76+vnTp0oUjR45Y6mS+3/zz2GOPWe5fvHgxwcHBeHp6UqZMGRo1asT06dMLt+EFyGA0sOPsDlb/tZodZ3dgMBbui575NXd1daVChQp07NiRpUuXYjQaLfWqVq2a7XUPDAy03P/jjz/SrFkzvL298fLyon79+owaNapQ216gjAa4sgPOrjb9W8ivu9mePXvQ6XR06dIl2333e00nTZrEI488UiTtFEIIIYQQhcPF3g0QQgghhBB5s24dDB8OFy9mlAUGwty50KtX4T1vly5dWLZsGQBxcXG8//77dOvWjfPnz1vqLFu2zGqg0XwRwyVLljBy5Eg+++wz2rZtS2pqKkeOHOH48eOF1+ACtO7EOoaHD+diYsaLHlg6kLld5tKrbuG96ObX3GAwcOXKFcLDwxk+fDhr165l48aNuLiY3s5/+OGHDB482PI4nU4HwNatW3n++eeZOnUqPXr0QKPRcPz4cX7//fdCa3OBurAODg6Hu5n+s5cMhCZzoVIh/mcHli5dyrBhw/jqq684f/48lStXBor2NTUYDGg0GrRame8khBBCCFHUNIqiKPZuhBBCCCGEWqSkpBATE0O1atUoUaJEnh+/bh307g1Z38GZrxW4dm3hDJ4PGDCAW7du8dNPP1nK/vjjD9q0acPVq1cpX748Go2G9evX07Nnz2yP79mzJ2XLlrUMvDuSdSfW0fv73ihYv+gaTC/62j5rC2Xw3NZrDrBt2zbat2/Pl19+ySuvvELVqlUZMWIEI0aMyLaPESNGcPjwYbZv317g7St0F9bBH72BrB9X/vvP3nptoQ2e37lzh4oVK3LgwAEmTpxIvXr1+OCDD4D7v6bLly/n5ZdftipbtmwZAwYMYNasWSxbtowzZ87g4+ND9+7dmTFjBqVKlbI8dsSIEaxcuZIxY8Zw+vRp/v77b6pVq2a1vwf9OyKEEEIIIe5Ppi4IIYQQQjgIg8E009zWtAdz2YgRhb9sC0BSUhLffvstDz/8ML6+vvet7+/vz969ezl37lzhN64AGYwGhocPzzZoDljKRoSPKPRlWzJ7/PHHCQ4OZt26dfet6+/vz7Fjxzh69GgRtKwAGQ2mmeY2XndL2cERhbZsy3fffUft2rWpXbs2L730EsuWLcM83+h+r+lzzz3HqFGjqF+/PrGxscTGxvLcc88BoNVq+eyzzzh69CgrVqxg27ZtjBkzxurxd+/eZdq0aXz11VccO3YMPz+/QumjEEIIIYS4N1mqRQghhBDCzkJCIC7u/vVSU+H69ZzvVxS4cAH8/cHd/f778/eHyMjct3Pz5s2WmbHmGbmbN2+2WkbihRdesCwTArBy5Up69uzJxIkT6dWrF1WrVqVWrVq0aNGCJ554gt69e9tlGYqQL0KIS7r/i56qT+V6cs4vuoLChcQL+H/ij7vL/V90/1L+RL6ahxc9B3Xq1LFaX37s2LG8//77lu2pU6fy1ltvMWzYMP744w8aNmxIlSpVaN68OZ06deLFF1/EPTf/SQpaeAgk5+I/uyEV0u7xnx0F7l6Adf6gy0U/PPyhS+5f9yVLlvDSSy8BpuVykpKS+P333+nQocN9X1MPDw9KlSqFi4sL/v7+VvvNfFZAtWrVmDJlCq+//joLFiywlKenp7NgwQKCg4Nz3V4hhBBCCFHwZOBcCCGEEMLO4uLg0qWC29+9BtcfRLt27Vi4cCEAN27cYMGCBXTt2pX9+/dTpUoVAGbPnk2HDh0sj6lYsaLl34iICI4ePcrOnTvZs2cP/fv356uvviI8PLzIB8/jkuK4dLvgXvR7Da4XBkVR0JjX5wHeeecdBgwYYNkuV64cAJ6envz888/8+++/bN++nb179zJq1Cjmzp1LREQEJUuWLNJ2kxwHyQX4n/2eg+v5c+rUKfbv32+Z0e/i4sJzzz3H0qVL6dChwwO9ptu3b2fq1KkcP36cxMRE9Ho9KSkp3LlzB09PT8B0XYCgoKAC75cQQgghhMgbGTgXQgghhLCzLJNSc3S/Gedm5crlfsZ5Xnh6evLwww9btps0aYK3tzdffvkl//vf//7bp79VnawaNGhAgwYNGDp0KLt376Z169bs3LmTdu3a5a0xD8i/VO46f78Z52blPMrlesZ5QThx4oTVutflypW75+teo0YNatSowSuvvML48eOpVasW3333Xba1uAudRy77f98Z5/9xK5f7Gee5tGTJEvR6PQ899JClTFEUXF1duXnzJmXLlgXy/pqeO3eOJ554gtdee40pU6bg4+PD7t27GTRoEOnp6RlN9fCw+lJECCGEEELYhwycCyGEEELYWW6XSzEYoGpV0+x0W+ucazQQGAgxMZBptZRCo9Fo0Gq1JCcn5+vx9erVA0zLvhS13C6XYjAaqDq3KpcSL9lc51yDhsDSgcQMj0GnLYIXHdPFQf/66y/efvvtfD2+atWqlCxZ0i6ve66XSzEaYGNVuHsJ2+uca6BkIPSIgQJ83fV6PV9//TWffvopnTp1srrvmWee4dtvv+XNN9/M9risr6mbmxuGLBcbiIyMRK/X8+mnn1rOsPj+++8LrO1CCCGEEKJgycC5EEIIIYSD0Olg7lzo3ds0SJ558Nw8QXXOnMIbNE9NTSXuv8XYb968yfz580lKSqJ79+73fezrr79OQEAAjz/+OIGBgcTGxvK///2P8uXL06JFi8JpcAHQaXXM7TKX3t/3RoPGavBcg+lFn9NlTqENmptfc4PBwJUrVwgPD2fatGl069aNfv363ffxkyZN4u7duzzxxBNUqVKFW7du8dlnn5Genk7Hjh0Lpc0FQquDJnPhj96ABuvB8//+szeZU6CD5mBax//mzZsMGjQIb29vq/t69+7NkiVLuH79+n1f06pVqxITE0N0dDSBgYF4eXlRo0YN9Ho98+bNo3v37vz5558sWrSoQNsvhBBCCCEKTtFfiUkIIYQQQuRbr16wdi1kWkUCMM00X7vWdH9hCQ8Pp2LFilSsWJFmzZpx4MABfvjhB0JDQ+/72A4dOrB3716effZZatWqxTPPPEOJEiX4/fff8fX1LbxGF4BedXuxts9aHipt/aIHlg5kbZ+19KpbeC+6+TWvWrUqXbp0Yfv27Xz22Wds2LDB6iKsOWnbti1nzpyhX79
|
|||
|
|
"text/plain": [
|
|||
|
|
"<Figure size 1500x400 with 3 Axes>"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"import matplotlib.pyplot as plt\n",
|
|||
|
|
"\n",
|
|||
|
|
"df = pd.read_csv(\"data/task2/results.csv\")\n",
|
|||
|
|
"\n",
|
|||
|
|
"size_order = [\"5x5\", \"10x10\", \"50x50\", \"100x100\"]\n",
|
|||
|
|
"algo_order = [\"BFS\", \"DFS\", \"AStar\"]\n",
|
|||
|
|
"colors = {\"BFS\": \"blue\", \"DFS\": \"green\", \"AStar\": \"orange\"}\n",
|
|||
|
|
"\n",
|
|||
|
|
"x = range(len(size_order))\n",
|
|||
|
|
"fig, axes = plt.subplots(1, 3, figsize=(15, 4))\n",
|
|||
|
|
"\n",
|
|||
|
|
"params = [\"Время (мс)\", \"Посещённые клетки\", \"Длинна пути\"]\n",
|
|||
|
|
"titles = [\"Время выполнения (мс)\", \"Посещённые клетки\", \"Длина пути\"]\n",
|
|||
|
|
"\n",
|
|||
|
|
"for i, (param, title) in enumerate(zip(params, titles)):\n",
|
|||
|
|
" ax = axes[i]\n",
|
|||
|
|
" for algo in algo_order:\n",
|
|||
|
|
" values = []\n",
|
|||
|
|
" for s in size_order:\n",
|
|||
|
|
" val = df[(df[\"Алгоритм\"] == algo) & (df[\"Лабиринт\"] == s)][param].values\n",
|
|||
|
|
" if len(val) > 0:\n",
|
|||
|
|
" values.append(val[0])\n",
|
|||
|
|
" else:\n",
|
|||
|
|
" values.append(None)\n",
|
|||
|
|
" ax.plot(x, values, marker='o', label=algo, color=colors[algo], linewidth=2, markersize=6)\n",
|
|||
|
|
" ax.set_xticks(x)\n",
|
|||
|
|
" ax.set_xticklabels(size_order)\n",
|
|||
|
|
" ax.set_title(title)\n",
|
|||
|
|
" ax.set_xlabel(\"Размер лабиринта\")\n",
|
|||
|
|
" if i == 0:\n",
|
|||
|
|
" ax.set_ylabel(\"Значение\")\n",
|
|||
|
|
" ax.grid(True, linestyle='--', alpha=0.7)\n",
|
|||
|
|
"\n",
|
|||
|
|
"# Общая легенда сверху\n",
|
|||
|
|
"handles, labels = axes[0].get_legend_handles_labels()\n",
|
|||
|
|
"fig.legend(handles, labels, loc='upper center', bbox_to_anchor=(0.5, 1.05), ncol=3)\n",
|
|||
|
|
"plt.tight_layout()\n",
|
|||
|
|
"plt.show()"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"id": "c573b32b",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 3. Применение паттерна Observer\n",
|
|||
|
|
"\n",
|
|||
|
|
"Для того, чтобы продемонстрировать работу этого паттерна необходимо иметь возможность очищать вывод, но в Jupyter такой возможности нет. В терминале всё работает корректно."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 6,
|
|||
|
|
"id": "898e8536",
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"\u001b[H\u001b[2J\u001b[48;5;9m\u001b[38;5;7mS\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
"\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
"\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
"\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;12m\u001b[38;5;7mE\u001b[0m\n",
|
|||
|
|
"\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"from task2.consoleView import ConsoleView\n",
|
|||
|
|
"from task2.mazeSolver import MazeSolver\n",
|
|||
|
|
"from task2.strategyObjects.AStar import AStar\n",
|
|||
|
|
"\n",
|
|||
|
|
"maze = builder.buildFromFile(\"../task2/mazeExamples/25x25.txt\")\n",
|
|||
|
|
"console = ConsoleView(maze)\n",
|
|||
|
|
"solver = MazeSolver(AStar(), maze)\n",
|
|||
|
|
"solver.attach(console)\n",
|
|||
|
|
"console.render()"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 7,
|
|||
|
|
"id": "aa5a4c8c",
|
|||
|
|
"metadata": {},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stdout",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"\u001b[H\u001b[2J\u001b[48;5;9m\u001b[38;5;7mS\u001b[0m \u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
"\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
"\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;196m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
"\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
"\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;161m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\n",
|
|||
|
|
"\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
"\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
"\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\n",
|
|||
|
|
"\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\n",
|
|||
|
|
"\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\n",
|
|||
|
|
"\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;91m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\n",
|
|||
|
|
"\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
"\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \n",
|
|||
|
|
" \u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;126m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m \u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;56m\u001b[38;5;10m+\u001b[0m\u001b[48;5;7m\u001b[38;5;7m#\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;21m\u001b[38;5;10m+\u001b[0m\u001b[48;5;12m\u001b[38;5;7mE\u001b[0m\n",
|
|||
|
|
"\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"# При нахождении решения рендер должен произойти автоматически\n",
|
|||
|
|
"_ = solver.solve()"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"id": "484b4ef6",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 4. Применимость паттернов\n",
|
|||
|
|
"После выполнения работы можно оценить, насколько для этого помогли паттерны ООП. \n",
|
|||
|
|
"Самый полезный паттерн - это конечно Strategy. Он позволил без лишней мороки провести замеры серийно, не используя каждый алгоритм вручную. \n",
|
|||
|
|
" \n",
|
|||
|
|
"Вторым по значимости я бы назвал Observer, он позволил сделать рендер лабиринта проще, однако сильнее всего оценить его получилось бы совместно с паттерном Commad и игроком с передвижениями. Его я не успел реализовать.\n",
|
|||
|
|
" \n",
|
|||
|
|
"Третий - Builder. В этой работе его преимущества оценить трудно из-за того, что использовался только один формат файла - plaintext. Однако, если понадобится искать пути в больших лабиринтах, то их придётся хрвнить в другом формате, например бинарном, и тогда преимщества паттерна Builder станут очевидны. \n",
|
|||
|
|
" \n",
|
|||
|
|
"Так же я создал класс-оркестратор MazeSolver, который помог перенести почти весь код тестов в одно место и удобно эти тесты использовать. Этот паттерн я так же считаю полезным. "
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"id": "d4026233",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## 5. Вывод\n",
|
|||
|
|
"Применение объектно-ориентированного подхода и паттернов проектирования позволило разделить ответственность между независимыми модулями и обеспечить простоту внесения изменений. Если бы логика поиска пути, построения лабиринта и визуализации была сосредоточена в одном классе или реализована процедурно, любое расширение требовало бы переписывания значительной части кода."
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"metadata": {
|
|||
|
|
"kernelspec": {
|
|||
|
|
"display_name": "Python 3",
|
|||
|
|
"language": "python",
|
|||
|
|
"name": "python3"
|
|||
|
|
},
|
|||
|
|
"language_info": {
|
|||
|
|
"codemirror_mode": {
|
|||
|
|
"name": "ipython",
|
|||
|
|
"version": 3
|
|||
|
|
},
|
|||
|
|
"file_extension": ".py",
|
|||
|
|
"mimetype": "text/x-python",
|
|||
|
|
"name": "python",
|
|||
|
|
"nbconvert_exporter": "python",
|
|||
|
|
"pygments_lexer": "ipython3",
|
|||
|
|
"version": "3.14.5"
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
"nbformat": 4,
|
|||
|
|
"nbformat_minor": 5
|
|||
|
|
}
|