From 69dbcddfac7cb37e66b8f21d294613bc81f81663 Mon Sep 17 00:00:00 2001 From: smirnovavyu Date: Fri, 4 Sep 2026 15:12:42 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D1=82=D1=8C=20Sm?= =?UTF-8?q?irnovaVYu/docs/data/builders.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SmirnovaVYu/docs/data/builders.py | 56 ------------------------------- 1 file changed, 56 deletions(-) delete mode 100644 SmirnovaVYu/docs/data/builders.py diff --git a/SmirnovaVYu/docs/data/builders.py b/SmirnovaVYu/docs/data/builders.py deleted file mode 100644 index 6837933..0000000 --- a/SmirnovaVYu/docs/data/builders.py +++ /dev/null @@ -1,56 +0,0 @@ -from abc import ABC, abstractmethod -from models import Cell, Maze - - -class MazeBuilder(ABC): - - @abstractmethod - def build_from_file(self, filename: str) -> Maze: - pass - - -class TextFileMazeBuilder(MazeBuilder): - - WALL_CHAR = '#' - START_CHAR = 'S' - EXIT_CHAR = 'E' - PASS_CHAR = ' ' - - def build_from_file(self, filename: str) -> Maze: - with open(filename, 'r', encoding='utf-8') as f: - lines = [line.rstrip('\n') for line in f.readlines()] - - if not lines: - raise ValueError("Файл с лабиринтом пуст") - - height = len(lines) - width = max(len(line) for line in lines) - - maze = Maze(width, height) - - for y, line in enumerate(lines): - for x, ch in enumerate(line): - if x >= width: - continue - - cell = Cell(x, y) - - if ch == self.WALL_CHAR: - cell.is_wall = True - elif ch == self.START_CHAR: - cell.is_start = True - elif ch == self.EXIT_CHAR: - cell.is_exit = True - elif ch == self.PASS_CHAR: - pass - else: - cell.is_wall = True - - maze.set_cell(x, y, cell) - - if maze.start is None: - raise ValueError("В лабиринте нет стартовой клетки (S)") - if maze.exit is None: - raise ValueError("В лабиринте нет выхода (E)") - - return maze \ No newline at end of file