Mercurial > repos > other > adventofcode2023
annotate day17.txt @ 26:eb6c3a7d2f72
Constrained and more optimised route finding
* Track routes so we can see if we have gone straight for
too long
* Track multiple routes so we can use a non-optimal route to
X if it makes another route to Y through X possible (e.g.
optimal route takes three consecutive steps to X, but then
has to turn, whereas a longer straight earlier and two
consecutive steps to X gives a much better next hop to Y)
* We have a start point, so only include the nodes from the
search front in "unvisited" to avoid looking at lots of
irrelevant nodes
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 17 Dec 2023 20:13:03 +0000 |
parents | 79dc2ba41df2 |
children |
rev | line source |
---|---|
25
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
1 --- Day 17: Clumsy Crucible --- |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
2 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
3 A route finding puzzle with the following constraints: |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
4 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
5 * Reduce the sum of values walked (the "cost" of the route) |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
6 * Do not go in a straight line for more than three blocks |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
7 * Don't count the starting square (unless you return to it) |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
8 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
9 Start at the top-left and move to the bottom-right |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
10 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
11 Given: |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
12 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
13 2413432311323 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
14 3215453535623 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
15 3255245654254 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
16 3446585845452 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
17 4546657867536 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
18 1438598798454 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
19 4457876987766 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
20 3637877979653 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
21 4654967986887 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
22 4564679986453 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
23 1224686865563 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
24 2546548887735 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
25 4322674655533 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
26 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
27 We could go: |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
28 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
29 2>>34^>>>1323 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
30 32v>>>35v5623 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
31 32552456v>>54 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
32 3446585845v52 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
33 4546657867v>6 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
34 14385987984v4 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
35 44578769877v6 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
36 36378779796v> |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
37 465496798688v |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
38 456467998645v |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
39 12246868655<v |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
40 25465488877v5 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
41 43226746555v> |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
42 |
79dc2ba41df2
Copy a Dijkstra's Algorithm implementation
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
43 This path never moves more than three consecutive blocks in the same direction and incurs a heat loss of only 102. |