Skip to content

Commit 2313ba1

Browse files
committed
Maze Solver SbSp: TR Feedback (Materials)
1 parent 64f970f commit 2313ba1

8 files changed

Lines changed: 45 additions & 38 deletions

File tree

python-maze-solver/source_code_final/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ name = "maze-solver"
77
version = "1.0.0"
88

99
dependencies = [
10-
"networkx == 3.0",
10+
"networkx >= 3.0",
1111
]
1212

1313
[project.scripts]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
blessed==1.20.0
2+
bpython==0.24
3+
certifi==2022.12.7
4+
charset-normalizer==3.0.1
5+
curtsies==0.4.1
6+
cwcwidth==0.1.8
7+
greenlet==2.0.2
8+
idna==3.4
9+
# Editable install with no version control (maze-solver==1.0.0)
10+
-e /home/bartek/Desktop/maze-solver-final
11+
networkx==3.0
12+
Pygments==2.14.0
13+
pyxdg==0.28
14+
requests==2.28.2
15+
six==1.16.0
16+
urllib3==1.26.14
17+
wcwidth==0.2.6

python-maze-solver/source_code_final/src/maze_solver/__main__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77

88

99
def main() -> None:
10+
maze = Maze.load(parse_path())
1011
renderer = SVGRenderer()
11-
for solution in solve_all(maze := Maze.load(parse_path())):
12+
for solution in solve_all(maze):
1213
renderer.render(maze, solution).preview()
1314
else:
1415
print("No solution found")

python-maze-solver/source_code_final/src/maze_solver/graphs/converter.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import math
12
from typing import NamedTuple, TypeAlias
23

34
import networkx as nx
@@ -19,14 +20,13 @@ def flip(self) -> "Edge":
1920
return Edge(self.node2, self.node1)
2021

2122
@property
22-
def distance(self) -> int:
23-
if self.node1.row == self.node2.row:
24-
return abs(self.node1.column - self.node2.column)
25-
if self.node1.column == self.node2.column:
26-
return abs(self.node1.row - self.node2.row)
27-
raise ValueError("Can only move horizontally oor vertically")
28-
29-
def weight(self, bonus=1, penalty=2) -> int:
23+
def distance(self) -> float:
24+
return math.dist(
25+
(self.node1.row, self.node1.column),
26+
(self.node2.row, self.node2.column),
27+
)
28+
29+
def weight(self, bonus=1, penalty=2) -> float:
3030
match self.node2.role:
3131
case Role.REWARD:
3232
return self.distance - bonus
@@ -43,10 +43,6 @@ def make_graph(maze: Maze) -> nx.DiGraph:
4343
)
4444

4545

46-
def get_directed_edges(maze: Maze, nodes: set[Node]) -> set[Edge]:
47-
return (edges := get_edges(maze, nodes)) | {edge.flip for edge in edges}
48-
49-
5046
def get_nodes(maze: Maze) -> set[Node]:
5147
nodes: set[Node] = set()
5248
for square in maze:
@@ -66,7 +62,7 @@ def get_nodes(maze: Maze) -> set[Node]:
6662
def get_edges(maze: Maze, nodes: set[Node]) -> set[Edge]:
6763
edges: set[Edge] = set()
6864
for source_node in nodes:
69-
# Follow east:
65+
# Follow right:
7066
node = source_node
7167
for x in range(node.column + 1, maze.width):
7268
if node.border & Border.RIGHT:
@@ -75,8 +71,7 @@ def get_edges(maze: Maze, nodes: set[Node]) -> set[Edge]:
7571
if node in nodes:
7672
edges.add(Edge(source_node, node))
7773
break
78-
79-
# Follow south:
74+
# Follow down:
8075
node = source_node
8176
for y in range(node.row + 1, maze.height):
8277
if node.border & Border.BOTTOM:
@@ -86,3 +81,7 @@ def get_edges(maze: Maze, nodes: set[Node]) -> set[Edge]:
8681
edges.add(Edge(source_node, node))
8782
break
8883
return edges
84+
85+
86+
def get_directed_edges(maze: Maze, nodes: set[Node]) -> set[Edge]:
87+
return (edges := get_edges(maze, nodes)) | {edge.flip for edge in edges}

python-maze-solver/source_code_final/src/maze_solver/models/solution.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ def __len__(self) -> int:
2626

2727

2828
def validate_collinear(current: Square, following: Square) -> Square:
29-
assert 0 == min(
30-
abs(current.row - following.row),
31-
abs(current.column - following.column),
29+
assert any(
30+
[current.row == following.row, current.column == following.column]
3231
), "Squares must be collinear"
3332
return following

python-maze-solver/source_code_final/src/maze_solver/persistence/serializer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ def dump_squares(
1616
squares: tuple[Square, ...],
1717
path: pathlib.Path,
1818
) -> None:
19+
header, body = serialize(width, height, squares)
1920
with path.open(mode="wb") as file:
20-
header, body = serialize(width, height, squares)
2121
header.write(file)
2222
body.write(file)
2323

python-maze-solver/source_code_final/src/maze_solver/view/primitives.py

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,11 @@ class Rect:
6060
top_left: Point | None = None
6161

6262
def draw(self, **attributes) -> str:
63-
return tag(
64-
"rect",
65-
**(
66-
attributes
67-
| (
68-
{
69-
"x": self.top_left.x,
70-
"y": self.top_left.y,
71-
}
72-
if self.top_left
73-
else {}
74-
)
75-
),
76-
)
63+
if self.top_left:
64+
attrs = attributes | {"x": self.top_left.x, "y": self.top_left.y}
65+
else:
66+
attrs = attributes
67+
return tag("rect", **attrs)
7768

7869

7970
@dataclass(frozen=True)

python-maze-solver/source_code_final/src/maze_solver/view/renderer.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ def offset(self):
5757
return self.line_width // 2
5858

5959
def render(self, maze: Maze, solution: Solution | None = None) -> SVG:
60-
margin = 2 * (self.offset + self.line_width)
61-
width = margin + maze.width * self.square_size
62-
height = margin + maze.height * self.square_size
60+
margins = 2 * (self.offset + self.line_width)
61+
width = margins + maze.width * self.square_size
62+
height = margins + maze.height * self.square_size
6363
return SVG(
6464
tag(
6565
"svg",

0 commit comments

Comments
 (0)