10000 WiP need to do graph algorithms · dumbledad/adventofcode@56815b9 · GitHub
[go: up one dir, main page]

Skip to content

Commit 56815b9

Browse files
author
Tim Regan
committed
WiP need to do graph algorithms
1 parent 8a579fe commit 56815b9

File tree

1 file changed

+42
-19
lines changed

1 file changed

+42
-19
lines changed

2022/day16.py

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
from functools import total_ordering
21
import re
32

4-
@total_ordering
53
class Valve:
64
def __init__(self, name, flow, to_names):
75
self.name = name
@@ -12,24 +10,31 @@ def __init__(self, name, flow, to_names):
1210
self.flowed = 0
1311

1412
def __eq__(self, other):
15-
return self.name.__eq__(other.name)
13+
return self.name == other.name
14+
15+
def __ne__(self, other):
16+
return self.name != other.name
1617

1718
def __lt__(self, other):
18-
return self.flow.__lt__(other.flow)
19+
return self.flow < other.flow
1920

2021
def __le__(self, other):
21-
return self.flow.__le__(other.flow)
22+
return self.flow <= other.flow
2223

2324
def __gt__(self, other):
24-
return self.flow.__gt__(other.flow)
25+
return self.flow > other.flow
2526

2627
def __ge__(self, other):
27-
return self.flow.__ge__(other.flow)
28+
return self.flow >= other.flow
2829

2930
def tick(self):
3031
if self.open:
3132
self.flowed += self.flow
3233

34+
def reset(self):
35+
self.open = False
36+
self.flowed = 0
37+
3338
class Cave:
3439
def __init__(self, filename) -> None:
3540
with open(filename) as file:
@@ -49,15 +54,33 @@ def __init__(self, filename) -> None:
4954
self.current = self.valves[0]
5055

5156
def do(self, minutes=30):
52-
for _ in range(minutes):
53-
for valve in self.valves:
54-
valve.tick()
55-
# One deep search
56-
if most_promising := max(valve for valve in self.current.to if not valve.open):
57-
if most_promising.flow > self.current.flow + 1 or self.current.open:
58-
print(f'You move to valve {most_promising.name}.')
59-
self.current = most_promising
60-
continue
61-
print(f'You open valve {self.current.name}.')
62-
self.current.open = True
63-
return sum([valve.flowed for valve in self.valves])
57+
all_routes = self.routes()
58+
59+
60+
def routes(self, start=None, prior=[], max_depth=30):
61+
if not start:
62+
start = self.current
63+
if max_depth == 0:
64+
return prior
65+
result = []
66+
if f'open{start.name}' not in prior:
67+
result.extend(
68+
self.routes(
69+
start=start,
70+
prior=prior.append(f'open{start.name}'),
71+
max_depth=max_depth-1
72+
)
73+
)
74+
for valve in start.to:
75+
result.extend(
76+
self.routes(
77+
start=valve,
78+
prior=prior.append(valve.name),
79+
max_depth=max_depth-1
80+
)
81+
)
82+
return result
83+
84+
def score_route(self, route):
85+
86+

0 commit comments

Comments
 (0)
0