252 lines
6.0 KiB
Plaintext
252 lines
6.0 KiB
Plaintext
|
Advent of Code
|
||
|
|
||
|
--- Day 13: Mine Cart Madness ---
|
||
|
|
||
|
A crop of this size requires significant logistics to transport produce, soil, fertilizer, and so on. The Elves are very busy pushing
|
||
|
things around in carts on some kind of rudimentary system of tracks they've come up with.
|
||
|
|
||
|
Seeing as how cart-and-track systems don't appear in recorded history for another 1000 years, the Elves seem to be making this up as
|
||
|
they go along. They haven't even figured out how to avoid collisions yet.
|
||
|
|
||
|
You map out the tracks (your puzzle input) and see where you can help.
|
||
|
|
||
|
Tracks consist of straight paths (| and -), curves (/ and \), and intersections (+). Curves connect exactly two perpendicular pieces
|
||
|
of track; for example, this is a closed loop:
|
||
|
|
||
|
/----\
|
||
|
| |
|
||
|
| |
|
||
|
\----/
|
||
|
|
||
|
Intersections occur when two perpendicular paths cross. At an intersection, a cart is capable of turning left, turning right, or
|
||
|
continuing straight. Here are two loops connected by two intersections:
|
||
|
|
||
|
/-----\
|
||
|
| |
|
||
|
| /--+--\
|
||
|
| | | |
|
||
|
\--+--/ |
|
||
|
| |
|
||
|
\-----/
|
||
|
|
||
|
Several carts are also on the tracks. Carts always face either up (^), down (v), left (<), or right (>). (On your initial map, the
|
||
|
track under each cart is a straight path matching the direction the cart is facing.)
|
||
|
|
||
|
Each time a cart has the option to turn (by arriving at any intersection), it turns left the first time, goes straight the second
|
||
|
time, turns right the third time, and then repeats those directions starting again with left the fourth time, straight the fifth
|
||
|
time, and so on. This process is independent of the particular intersection at which the cart has arrived - that is, the cart has no
|
||
|
per-intersection memory.
|
||
|
|
||
|
Carts all move at the same speed; they take turns moving a single step at a time. They do this based on their current location: carts
|
||
|
on the top row move first (acting from left to right), then carts on the second row move (again from left to right), then carts on
|
||
|
the third row, and so on. Once each cart has moved one step, the process repeats; each of these loops is called a tick.
|
||
|
|
||
|
For example, suppose there are two carts on a straight track:
|
||
|
|
||
|
| | | | |
|
||
|
v | | | |
|
||
|
| v v | |
|
||
|
| | | v X
|
||
|
| | ^ ^ |
|
||
|
^ ^ | | |
|
||
|
| | | | |
|
||
|
|
||
|
First, the top cart moves. It is facing down (v), so it moves down one square. Second, the bottom cart moves. It is facing up (^), so
|
||
|
it moves up one square. Because all carts have moved, the first tick ends. Then, the process repeats, starting with the first cart.
|
||
|
The first cart moves down, then the second cart moves up - right into the first cart, colliding with it! (The location of the crash
|
||
|
is marked with an X.) This ends the second and last tick.
|
||
|
|
||
|
Here is a longer example:
|
||
|
|
||
|
/->-\
|
||
|
| | /----\
|
||
|
| /-+--+-\ |
|
||
|
| | | | v |
|
||
|
\-+-/ \-+--/
|
||
|
\------/
|
||
|
|
||
|
/-->\
|
||
|
| | /----\
|
||
|
| /-+--+-\ |
|
||
|
| | | | | |
|
||
|
\-+-/ \->--/
|
||
|
\------/
|
||
|
|
||
|
/---v
|
||
|
| | /----\
|
||
|
| /-+--+-\ |
|
||
|
| | | | | |
|
||
|
\-+-/ \-+>-/
|
||
|
\------/
|
||
|
|
||
|
/---\
|
||
|
| v /----\
|
||
|
| /-+--+-\ |
|
||
|
| | | | | |
|
||
|
\-+-/ \-+->/
|
||
|
\------/
|
||
|
|
||
|
/---\
|
||
|
| | /----\
|
||
|
| /->--+-\ |
|
||
|
| | | | | |
|
||
|
\-+-/ \-+--^
|
||
|
\------/
|
||
|
|
||
|
/---\
|
||
|
| | /----\
|
||
|
| /-+>-+-\ |
|
||
|
| | | | | ^
|
||
|
\-+-/ \-+--/
|
||
|
\------/
|
||
|
|
||
|
/---\
|
||
|
| | /----\
|
||
|
| /-+->+-\ ^
|
||
|
| | | | | |
|
||
|
\-+-/ \-+--/
|
||
|
\------/
|
||
|
|
||
|
/---\
|
||
|
| | /----<
|
||
|
| /-+-->-\ |
|
||
|
| | | | | |
|
||
|
\-+-/ \-+--/
|
||
|
\------/
|
||
|
|
||
|
/---\
|
||
|
| | /---<\
|
||
|
| /-+--+>\ |
|
||
|
| | | | | |
|
||
|
\-+-/ \-+--/
|
||
|
\------/
|
||
|
|
||
|
/---\
|
||
|
| | /--<-\
|
||
|
| /-+--+-v |
|
||
|
| | | | | |
|
||
|
\-+-/ \-+--/
|
||
|
\------/
|
||
|
|
||
|
/---\
|
||
|
| | /-<--\
|
||
|
| /-+--+-\ |
|
||
|
| | | | v |
|
||
|
\-+-/ \-+--/
|
||
|
\------/
|
||
|
|
||
|
/---\
|
||
|
| | /<---\
|
||
|
| /-+--+-\ |
|
||
|
| | | | | |
|
||
|
\-+-/ \-<--/
|
||
|
\------/
|
||
|
|
||
|
/---\
|
||
|
| | v----\
|
||
|
| /-+--+-\ |
|
||
|
| | | | | |
|
||
|
\-+-/ \<+--/
|
||
|
\------/
|
||
|
|
||
|
/---\
|
||
|
| | /----\
|
||
|
| /-+--v-\ |
|
||
|
| | | | | |
|
||
|
\-+-/ ^-+--/
|
||
|
\------/
|
||
|
|
||
|
/---\
|
||
|
| | /----\
|
||
|
| /-+--+-\ |
|
||
|
| | | X | |
|
||
|
\-+-/ \-+--/
|
||
|
\------/
|
||
|
|
||
|
After following their respective paths for a while, the carts eventually crash. To help prevent crashes, you'd like to know the
|
||
|
location of the first crash. Locations are given in X,Y coordinates, where the furthest left column is X=0 and the furthest top row
|
||
|
is Y=0:
|
||
|
|
||
|
111
|
||
|
0123456789012
|
||
|
0/---\
|
||
|
1| | /----\
|
||
|
2| /-+--+-\ |
|
||
|
3| | | X | |
|
||
|
4\-+-/ \-+--/
|
||
|
5 \------/
|
||
|
|
||
|
In this example, the location of the first crash is 7,3.
|
||
|
|
||
|
Your puzzle answer was 83,106.
|
||
|
|
||
|
--- Part Two ---
|
||
|
|
||
|
There isn't much you can do to prevent crashes in this ridiculous system. However, by predicting the crashes, the Elves know where to
|
||
|
be in advance and instantly remove the two crashing carts the moment any crash occurs.
|
||
|
|
||
|
They can proceed like this for a while, but eventually, they're going to run out of carts. It could be useful to figure out where the
|
||
|
last cart that hasn't crashed will end up.
|
||
|
|
||
|
For example:
|
||
|
|
||
|
/>-<\
|
||
|
| |
|
||
|
| /<+-\
|
||
|
| | | v
|
||
|
\>+</ |
|
||
|
| ^
|
||
|
\<->/
|
||
|
|
||
|
/---\
|
||
|
| |
|
||
|
| v-+-\
|
||
|
| | | |
|
||
|
\-+-/ |
|
||
|
| |
|
||
|
^---^
|
||
|
|
||
|
/---\
|
||
|
| |
|
||
|
| /-+-\
|
||
|
| v | |
|
||
|
\-+-/ |
|
||
|
^ ^
|
||
|
\---/
|
||
|
|
||
|
/---\
|
||
|
| |
|
||
|
| /-+-\
|
||
|
| | | |
|
||
|
\-+-/ ^
|
||
|
| |
|
||
|
\---/
|
||
|
|
||
|
After four very expensive crashes, a tick ends with only one cart remaining; its final location is 6,4.
|
||
|
|
||
|
What is the location of the last cart at the end of the first tick where it is the only cart left?
|
||
|
|
||
|
Your puzzle answer was 132,26.
|
||
|
|
||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||
|
|
||
|
References
|
||
|
|
||
|
Visible links
|
||
|
. https://adventofcode.com/
|
||
|
. https://adventofcode.com/2018/about
|
||
|
. https://adventofcode.com/2018/events
|
||
|
. https://adventofcode.com/2018/settings
|
||
|
. https://adventofcode.com/2018/auth/logout
|
||
|
. Advent of Code Supporter
|
||
|
https://adventofcode.com/2018/support
|
||
|
. https://adventofcode.com/2018
|
||
|
. https://adventofcode.com/2018
|
||
|
. https://adventofcode.com/2018/support
|
||
|
. https://adventofcode.com/2018/sponsors
|
||
|
. https://adventofcode.com/2018/leaderboard
|
||
|
. https://adventofcode.com/2018/stats
|
||
|
. https://adventofcode.com/2018/sponsors
|
||
|
. https://adventofcode.com/2018
|
||
|
. https://adventofcode.com/2018/day/13/input
|