Skip to content

Commit 5b31445

Browse files
committed
Fix Day 15 2021 (corrected Dijkstra's by prioritising minimum distance first)
1 parent 463dd55 commit 5b31445

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

2021/day-15/day-15-part-2.rb

+12-16
Original file line numberDiff line numberDiff line change
@@ -42,33 +42,29 @@ def find_neighbours(grid, x ,y)
4242

4343
grid = new_grid
4444

45-
queue = [[0, 0]]
45+
queue = [[0, 0, 0]]
4646
visited = queue.to_set
4747

4848
risks = {
4949
[0, 0] => 0
5050
}
5151

5252
while queue.any?
53-
x, y = queue.shift
53+
queue.sort_by!(&:last)
54+
x, y, current_risk = queue.shift
5455

55-
current_risk = risks[[x, y]]
56+
find_neighbours(grid, x, y)
57+
.reject { |x1, y1| visited.include?([x1, y1]) }
58+
.each { |x1, y1|
59+
coord = [x1, y1]
5660

57-
find_neighbours(grid, x, y).each do |x1, y1|
58-
coord = [x1, y1]
59-
risk = grid[y1][x1]
61+
new_risk = current_risk + grid[y1][x1]
6062

61-
new_risk = current_risk + risk
63+
risks[coord] = new_risk
6264

63-
next if risks[coord] && risks[coord] < new_risk
64-
65-
risks[coord] = new_risk
66-
67-
next if visited.include?(coord)
68-
69-
queue << coord
70-
visited.add(coord)
71-
end
65+
queue << [x1, y1, new_risk]
66+
visited.add(coord)
67+
}
7268
end
7369

7470
width = grid[0].length

0 commit comments

Comments
 (0)