[2] #344

Merged
kit8nino merged 14 commits from novikovsd/2026-rff_mp:lab2 into develop 2026-05-30 12:05:52 +00:00
Showing only changes of commit 80d51b3f93 - Show all commits

View File

@ -196,8 +196,42 @@ class AStarStrategy(PathFindingStrategy):
return []
class SearchStats:
def __init__(self, time_ms: float, visited_cells: int, path_length: int):
self.time_ms = time_ms
self.visited_cells = visited_cells
self.path_length = path_length
def __repr__(self):
return f"Stats(time={self.time_ms:.2f}ms, visited={self.visited_cells}, path_len={self.path_length})"
class MazeSolver:
def __init__(self, maze: Maze, strategy: PathFindingStrategy):
self.maze = maze
self.strategy = strategy
self.observers = []
def set_strategy(self, strategy: PathFindingStrategy):
self.strategy = strategy
def attach(self, observer):
self.observers.append(observer)
def detach(self, observer):
self.observers.remove(observer)
def notify(self, event: str, data: Any = None):
for obs in self.observers:
obs.update(event, data)
def solve(self) -> Tuple[List[Cell], SearchStats]:
start_time = time.perf_counter()
path = self.strategy.find_path(self.maze, self.maze.start, self.maze.exit)
end_time = time.perf_counter()
elapsed_ms = (end_time - start_time) * 1000.0
visited_cells = getattr(self.strategy, 'last_visited', len(path) if path else 0)
stats = SearchStats(elapsed_ms, visited_cells, len(path))
self.notify("solved", {"path": path, "stats": stats})
return path, stats
class Observer(ABC):