# Этап 7. Отчёт

## Описание задачи

Разработать программу для загрузки лабиринта из файла, поиска пути с выбором алгоритма и сравнения их эффективности. Применены четыре паттерна GoF:

| Паттерн      | Где применён                                  |
|--------------|-----------------------------------------------|
| **Builder**  | `TextFileBuilder`                             |
| **Strategy** | `BFSStrategy`, `DFSStrategy`, `AStarStrategy` |
| **Observer** | `ConsoleView`                                 |
| **Command**  | `MoveCommand`, `CommandHistory`               |

## Диаграмма классов

## Результаты экспериментов

| Лабиринт          | Быстрее всех   | Кратчайший путь   |
|-------------------|----------------|-------------------|
| 10×10 path        | все одинаково  | все одинаково     |
| 50×50 deadends    | BFS            | BFS = A\*         |
| 100×100 spaghetti | DFS            | BFS = A\*         |
| 30×30 empty       | DFS            | BFS = A\*         |

**BFS** — надёжный выбор, всегда кратчайший путь.<br />
\\\\
**DFS** — быстрый, но путь длиннее. На 100×100 обошёл в 10 раз больше клеток.<br />
\\\\
**A**\* — лучший на больших лабиринтах с препятствиями, проигрывает на простых из-за накладных расходов на `heapq`.

## Выводы

Паттерны сделали код расширяемым: новый алгоритм — один класс, новый формат файла — один класс, новый способ отображения — один класс. Без паттернов каждое такое изменение потребовало бы правки существующего кода.
