From 49ef151e631028e0c9226a3f4c83e1dc80c81be6 Mon Sep 17 00:00:00 2001 From: tseremonnikovaaa Date: Sun, 24 May 2026 20:12:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B0=D1=82=D1=82=D0=B5=D1=80=D0=BD=20Ob?= =?UTF-8?q?server?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tseremonnikovaaa/lab2/docs/data/main2.py | 52 ++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tseremonnikovaaa/lab2/docs/data/main2.py b/tseremonnikovaaa/lab2/docs/data/main2.py index 792c32c..df260a4 100644 --- a/tseremonnikovaaa/lab2/docs/data/main2.py +++ b/tseremonnikovaaa/lab2/docs/data/main2.py @@ -210,3 +210,55 @@ class MazeSolver: algorithm=self.strategy.__class__.__name__ ) return path, stats + +class Observer(ABC): + @abstractmethod + def update(self, event_type, data=None): + pass + + +class ConsoleLogger(Observer): + def update(self, event_type, data=None): + if event_type == "search_start": + print(f"[LOG] Поиск пути начат") + elif event_type == "path_found": + print(f"[LOG] Путь найден! Длина: {data}") + elif event_type == "no_path": + print("[LOG] Путь не найден") + elif event_type == "step": + print(f"[LOG] Шаг: {data}") + + +class MazeSolverWithObserver(MazeSolver): + def __init__(self, maze, strategy, observers=None): + super().__init__(maze, strategy) + self.observers = observers if observers else [] + + def attach(self, observer): + self.observers.append(observer) + + def detach(self, observer): + self.observers.remove(observer) + + def notify(self, event_type, data=None): + for obs in self.observers: + obs.update(event_type, data) + + def solve(self): + if self.maze.start is None or self.maze.exit is None: + raise ValueError("Лабиринт не имеет старта или выхода") + self.notify("search_start") + start_time = time.perf_counter() + path, visited = self.strategy.find_path(self.maze, self.maze.start, self.maze.exit) + end_time = time.perf_counter() + if path: + self.notify("path_found", len(path)) + else: + self.notify("no_path") + stats = SearchStats( + time_ms=(end_time - start_time) * 1000, + visited_cells=visited, + path_length=len(path), + algorithm=self.strategy.__class__.__name__ + ) + return path, stats \ No newline at end of file