summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordzwdz2022-12-24 19:57:23 +0100
committerdzwdz2022-12-24 19:57:23 +0100
commit678a0c0a8a8a2c75d7875fb6c14e5272bfcd9234 (patch)
tree633c5bc61a6547c2a2e6e9bc9fad02220e3d0f13
parent8b859a325322960934344accc35650a68bafabd3 (diff)
fix day 24main
-rw-r--r--22.24/main.py44
1 files changed, 15 insertions, 29 deletions
diff --git a/22.24/main.py b/22.24/main.py
index 9e5783e..68f4c64 100644
--- a/22.24/main.py
+++ b/22.24/main.py
@@ -48,42 +48,28 @@ def coll(x, y, t):
return True
return False
-def search():
- partOne = None
- cur = [(0, (start, 0, 0))]
+def search(start, end, t):
+ cur = [(0, (start, t))]
visited = set(cur[0][1])
- asdf = 0
- gid_bonus = tdist(start, end)
def dist(node):
- bv, t, gid = node
- goal = end if gid != 1 else start
- score = 0
- score += tdist(bv, goal)
- score += t
- score -= gid * gid_bonus
+ bv, t = node
+ return tdist(bv, end) + t
while True:
_, node = heappop(cur)
- bv, t, gid = node
+ bv, t, = node
vs = [bv]
for d in range(4):
vs.append(tadd(bv, tdir(d)))
for v in vs:
if not coll(*v, t+1):
- node = None
- if v == end and gid == 0:
- if not partOne: partOne = t+1
- node = (v, t+1, 1)
- elif v == start and gid == 1:
- node = (v, t+1, 2)
- elif v == end and gid == 2:
- return partOne, t+1
- else:
- node = (v, t+1, gid)
- chk = (node[0], node[1], node[2])
- if not chk in visited:
- visited.add(chk)
- heappush(cur, (asdf, node))
- asdf += 1
- return None
+ if v == end:
+ return t+1
+ node = (v, t+1)
+ if not node in visited:
+ visited.add(node)
+ heappush(cur, (dist(node), node))
-print(search())
+partOne = search(start, end, 0)
+print(partOne)
+partTwo = search(start, end, search(end, start, partOne))
+print(partTwo)