2026-rff_mp/stepushovgs/labyrinth/test.ipynb
GordStep 5fce1bb8a6 Добавил dfs
- чертовы координаты
- изменил положение observer
- изменил систему координат, привёл к единому стилю - столбец, строка
2026-05-21 23:31:17 +03:00

360 lines
10 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "4489fc7e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"S # ###\n",
"## # # E\n",
"# # #\n",
"### ## #\n",
"# #\n",
"########\n"
]
}
],
"source": [
"with open('test_lab.txt') as f:\n",
" data = f.readlines()\n",
" for el in data:\n",
" print(el.rstrip())"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "fde1eddb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"S # ###\n",
"## # # E\n",
"# # #\n",
"### ## #\n",
"# #\n",
"########\n"
]
}
],
"source": [
"from source.builder.builder import TextFileMazeBuilder\n",
"\n",
"builder = TextFileMazeBuilder()\n",
"maze = builder.buildFromFile(filename='test_lab.txt')\n",
"\n",
"maze.printer()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "22325f68",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Загружен лабиринт:\n",
"S*P# ###\n",
"## # # E\n",
"# # #\n",
"### ## #\n",
"# #\n",
"########\n"
]
}
],
"source": [
"from source.observer.console_view import ConsoleView\n",
"from source.observer.observer import Event\n",
"\n",
"view = ConsoleView()\n",
"view.update(Event(\n",
" event=\"maze_loaded\",\n",
" maze=maze,\n",
" player_position=(2, 0),\n",
" path=[(0, 0), (1, 0)]\n",
"))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "19840429",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Старт: (0, 0)\n",
"Выход: (7, 1)\n",
"Соседи старта: [(1, 0)]\n",
"для клекти (0, 0) соседи: [(1, 0)]\n",
"для клекти (1, 0) соседи: [(0, 0), (2, 0)]\n",
"для клекти (2, 0) соседи: [(2, 1), (1, 0)]\n",
"для клекти (2, 1) соседи: [(2, 0), (2, 2)]\n",
"для клекти (2, 2) соседи: [(2, 1), (1, 2), (3, 2)]\n",
"для клекти (3, 2) соседи: [(3, 3), (2, 2), (4, 2)]\n",
"для клекти (4, 2) соседи: [(4, 1), (3, 2)]\n",
"для клекти (4, 1) соседи: [(4, 0), (4, 2)]\n",
"для клекти (4, 0) соседи: [(4, 1)]\n",
"для клекти (3, 3) соседи: [(3, 2), (3, 4)]\n",
"для клекти (3, 4) соседи: [(3, 3), (2, 4), (4, 4)]\n",
"для клекти (4, 4) соседи: [(3, 4), (5, 4)]\n",
"для клекти (5, 4) соседи: [(4, 4), (6, 4)]\n",
"для клекти (6, 4) соседи: [(6, 3), (5, 4)]\n",
"для клекти (6, 3) соседи: [(6, 2), (6, 4)]\n",
"для клекти (6, 2) соседи: [(6, 1), (6, 3)]\n",
"для клекти (6, 1) соседи: [(6, 2), (7, 1)]\n",
"Путь найден:\n",
"S**# ###\n",
"##*# #*E\n",
"# ** #*#\n",
"###*##*#\n",
"# ****#\n",
"########\n"
]
},
{
"data": {
"text/plain": [
"([(2, 1), (1, 0)],\n",
" [(0, 0),\n",
" (1, 0),\n",
" (2, 0),\n",
" (2, 1),\n",
" (2, 2),\n",
" (3, 2),\n",
" (3, 3),\n",
" (3, 4),\n",
" (4, 4),\n",
" (5, 4),\n",
" (6, 4),\n",
" (6, 3),\n",
" (6, 2),\n",
" (6, 1),\n",
" (7, 1)])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from source.strategy.DFS import DFS\n",
"from source.strategy.maze_solver import MazeSolver\n",
"from source.classes.cell import Cell\n",
"\n",
"\n",
"solver = MazeSolver(maze, DFS(), ConsoleView())\n",
"stats = solver.solve()\n",
"\n",
"[cord.getXY() for cord in maze.getNeighbors(cell=Cell(2, 0))], [cord.getXY() for cord in stats.path]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "857c5c04",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\n",
"2\n",
"1\n",
"4\n",
"3\n",
"3\n"
]
},
{
"data": {
"text/plain": [
"{'0', '1', '2', '3', '4'}"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def dfs(graph, start, visited=None):\n",
" if visited is None:\n",
" visited = set()\n",
" visited.add(start)\n",
"\n",
" print(start)\n",
"\n",
" for next in graph[start] - visited:\n",
" dfs(graph, next, visited)\n",
" return visited\n",
"\n",
"\n",
"graph = {'0': set(['1', '2']),\n",
" '1': set(['0', '3', '4']),\n",
" '2': set(['0']),\n",
" '3': set(['1']),\n",
" '4': set(['2', '3'])}\n",
"\n",
"dfs(graph, '0')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "9a5ea5cb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Размер: 8x6\n",
"(0,0): wall=False, start=True, exit=False\n",
"(1,0): wall=False, start=False, exit=False\n",
"(2,0): wall=False, start=False, exit=False\n",
"(3,0): wall=True, start=False, exit=False\n",
"(4,0): wall=False, start=False, exit=False\n",
"(5,0): wall=True, start=False, exit=False\n",
"(6,0): wall=True, start=False, exit=False\n",
"(7,0): wall=True, start=False, exit=False\n",
"(0,1): wall=True, start=False, exit=False\n",
"(1,1): wall=True, start=False, exit=False\n",
"(2,1): wall=False, start=False, exit=False\n",
"(3,1): wall=True, start=False, exit=False\n",
"(4,1): wall=False, start=False, exit=False\n",
"(5,1): wall=True, start=False, exit=False\n",
"(6,1): wall=False, start=False, exit=False\n",
"(7,1): wall=False, start=False, exit=True\n",
"(0,2): wall=True, start=False, exit=False\n",
"(1,2): wall=False, start=False, exit=False\n",
"(2,2): wall=False, start=False, exit=False\n",
"(3,2): wall=False, start=False, exit=False\n",
"(4,2): wall=False, start=False, exit=False\n",
"(5,2): wall=True, start=False, exit=False\n",
"(6,2): wall=False, start=False, exit=False\n",
"(7,2): wall=True, start=False, exit=False\n",
"(0,3): wall=True, start=False, exit=False\n",
"(1,3): wall=True, start=False, exit=False\n",
"(2,3): wall=True, start=False, exit=False\n",
"(3,3): wall=False, start=False, exit=False\n",
"(4,3): wall=True, start=False, exit=False\n",
"(5,3): wall=True, start=False, exit=False\n",
"(6,3): wall=False, start=False, exit=False\n",
"(7,3): wall=True, start=False, exit=False\n",
"(0,4): wall=True, start=False, exit=False\n",
"(1,4): wall=False, start=False, exit=False\n",
"(2,4): wall=False, start=False, exit=False\n",
"(3,4): wall=False, start=False, exit=False\n",
"(4,4): wall=False, start=False, exit=False\n",
"(5,4): wall=False, start=False, exit=False\n",
"(6,4): wall=False, start=False, exit=False\n",
"(7,4): wall=True, start=False, exit=False\n",
"(0,5): wall=True, start=False, exit=False\n",
"(1,5): wall=True, start=False, exit=False\n",
"(2,5): wall=True, start=False, exit=False\n",
"(3,5): wall=True, start=False, exit=False\n",
"(4,5): wall=True, start=False, exit=False\n",
"(5,5): wall=True, start=False, exit=False\n",
"(6,5): wall=True, start=False, exit=False\n",
"(7,5): wall=True, start=False, exit=False\n",
"\n",
"Клетка (2,0) из лабиринта: wall=True\n",
"Соседи (2,0): [(1, 2)]\n",
"Соседи (1,0): [(0, 0)]\n"
]
}
],
"source": [
"# Проверьте структуру лабиринта\n",
"print(f\"Размер: {maze.width}x{maze.height}\")\n",
"\n",
"# Проверьте конкретные клетки\n",
"for y in range(maze.height):\n",
" for x in range(maze.width):\n",
" cell = maze.cells[y][x]\n",
" print(f\"({x},{y}): wall={cell.isWall}, start={cell.isStart}, exit={cell.isExit}\")\n",
"\n",
"# Проверьте соседей конкретной клетки из лабиринта\n",
"cell_from_maze = maze.cells[2][0] # Берём реальную клетку из лабиринта\n",
"print(f\"\\nКлетка (2,0) из лабиринта: wall={cell_from_maze.isWall}\")\n",
"print(f\"Соседи (2,0): {[n.getXY() for n in maze.getNeighbors(cell_from_maze)]}\")\n",
"\n",
"# Проверьте соседей (1,0)\n",
"cell_1_0 = maze.cells[1][0]\n",
"print(f\"Соседи (1,0): {[n.getXY() for n in maze.getNeighbors(cell_1_0)]}\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "32edf4d1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['S # ###', '## # # E', '# # #', '### ## #', '# #', '########']\n",
"8 6\n"
]
}
],
"source": [
"with open('test_lab.txt') as f:\n",
" data = f.read().splitlines()\n",
" x, y = 0, 0\n",
" width = len(data[0])\n",
" height = len(data)\n",
" print(data)\n",
" print(width, height)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "48d20564",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}