270 lines
6.1 KiB
Plaintext
270 lines
6.1 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
|