15
15
end = p
16
16
grid [p ] = "."
17
17
18
-
19
- def make_id ():
20
- return str (uuid .uuid4 ().fields [- 1 ])[:20 ]
21
-
22
-
23
18
scores = defaultdict (lambda : float ("inf" ))
24
- previous = defaultdict ( set )
19
+ previous = {}
25
20
best_score = float ("inf" )
26
21
27
- q = [(0 , make_id () , start , 1 )]
22
+ q = [(0 , i := 0 , start , 1 )]
28
23
while q :
29
24
score , _ , p , dp = heappop (q )
30
25
if score > best_score :
@@ -39,10 +34,12 @@ def make_id():
39
34
new_dps .append (dp )
40
35
costs .append (1 )
41
36
for new_p , new_dp , cost in zip (new_ps , new_dps , costs ):
42
- if score + cost <= scores [(new_p , new_dp )]:
37
+ if score + cost < scores [(new_p , new_dp )]:
43
38
scores [(new_p , new_dp )] = score + cost
44
- previous [(new_p , new_dp )] |= {(p , dp )}
45
- heappush (q , (score + cost , make_id (), new_p , new_dp ))
39
+ previous [(new_p , new_dp )] = {(p , dp )}
40
+ heappush (q , (score + cost , i := i + 1 , new_p , new_dp ))
41
+ if score + cost == scores [(new_p , new_dp )]:
42
+ previous [(new_p , new_dp )].add ((p , dp ))
46
43
47
44
# Part 1
48
45
print (best_score )
0 commit comments