From e6e4ae9a9968316df1225bf1bd0b728ee92f2e9f Mon Sep 17 00:00:00 2001 From: lomakinae Date: Mon, 25 May 2026 02:34:56 +0300 Subject: [PATCH] feat: add MazeSolver orchestrator with SearchStats --- lomakinae/docs/data/02/src/solver.py | 35 ++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 lomakinae/docs/data/02/src/solver.py diff --git a/lomakinae/docs/data/02/src/solver.py b/lomakinae/docs/data/02/src/solver.py new file mode 100644 index 0000000..f794471 --- /dev/null +++ b/lomakinae/docs/data/02/src/solver.py @@ -0,0 +1,35 @@ +import time +from typing import NamedTuple + +from .maze import Maze +from .strategies import PathFindingStrategy + + +class SearchStats(NamedTuple): + time_ms: float + visited_cells: int + path_length: int + + +class MazeSolver: + def __init__(self, maze: Maze): + self.maze = maze + self.strategy = None + + def set_strategy(self, strategy: PathFindingStrategy): + self.strategy = strategy + + def solve(self) -> SearchStats: + if self.strategy is None: + raise ValueError("Strategy not set") + + start_time = time.perf_counter() + path = self.strategy.find_path(self.maze, self.maze.start, self.maze.exit) + end_time = time.perf_counter() + time_ms = (end_time - start_time) * 1000 + + return SearchStats( + time_ms=time_ms, + visited_cells=self.strategy.visited_count, + path_length=len(path), + )