210 lines
7.0 KiB
Plaintext
210 lines
7.0 KiB
Plaintext
|
Advent of Code
|
||
|
|
||
|
--- Day 22: Slam Shuffle ---
|
||
|
|
||
|
There isn't much to do while you wait for the droids to repair your ship. At least you're drifting in the right direction.
|
||
|
You decide to practice a new card shuffle you've been working on.
|
||
|
|
||
|
Digging through the ship's storage, you find a deck of space cards! Just like any deck of space cards, there are 10007 cards
|
||
|
in the deck numbered 0 through 10006. The deck must be new - they're still in factory order, with 0 on the top, then 1, then
|
||
|
2, and so on, all the way through to 10006 on the bottom.
|
||
|
|
||
|
You've been practicing three different techniques that you use while shuffling. Suppose you have a deck of only 10 cards
|
||
|
(numbered 0 through 9):
|
||
|
|
||
|
To deal into new stack, create a new stack of cards by dealing the top card of the deck onto the top of the new stack
|
||
|
repeatedly until you run out of cards:
|
||
|
|
||
|
Top Bottom
|
||
|
0 1 2 3 4 5 6 7 8 9 Your deck
|
||
|
New stack
|
||
|
|
||
|
1 2 3 4 5 6 7 8 9 Your deck
|
||
|
0 New stack
|
||
|
|
||
|
2 3 4 5 6 7 8 9 Your deck
|
||
|
1 0 New stack
|
||
|
|
||
|
3 4 5 6 7 8 9 Your deck
|
||
|
2 1 0 New stack
|
||
|
|
||
|
Several steps later...
|
||
|
|
||
|
9 Your deck
|
||
|
8 7 6 5 4 3 2 1 0 New stack
|
||
|
|
||
|
Your deck
|
||
|
9 8 7 6 5 4 3 2 1 0 New stack
|
||
|
|
||
|
Finally, pick up the new stack you've just created and use it as the deck for the next technique.
|
||
|
|
||
|
To cut N cards, take the top N cards off the top of the deck and move them as a single unit to the bottom of the deck,
|
||
|
retaining their order. For example, to cut 3:
|
||
|
|
||
|
Top Bottom
|
||
|
0 1 2 3 4 5 6 7 8 9 Your deck
|
||
|
|
||
|
3 4 5 6 7 8 9 Your deck
|
||
|
0 1 2 Cut cards
|
||
|
|
||
|
3 4 5 6 7 8 9 Your deck
|
||
|
0 1 2 Cut cards
|
||
|
|
||
|
3 4 5 6 7 8 9 0 1 2 Your deck
|
||
|
|
||
|
You've also been getting pretty good at a version of this technique where N is negative! In that case, cut (the absolute
|
||
|
value of) N cards from the bottom of the deck onto the top. For example, to cut -4:
|
||
|
|
||
|
Top Bottom
|
||
|
0 1 2 3 4 5 6 7 8 9 Your deck
|
||
|
|
||
|
0 1 2 3 4 5 Your deck
|
||
|
6 7 8 9 Cut cards
|
||
|
|
||
|
0 1 2 3 4 5 Your deck
|
||
|
6 7 8 9 Cut cards
|
||
|
|
||
|
6 7 8 9 0 1 2 3 4 5 Your deck
|
||
|
|
||
|
To deal with increment N, start by clearing enough space on your table to lay out all of the cards individually in a long
|
||
|
line. Deal the top card into the leftmost position. Then, move N positions to the right and deal the next card there. If you
|
||
|
would move into a position past the end of the space on your table, wrap around and keep counting from the leftmost card
|
||
|
again. Continue this process until you run out of cards.
|
||
|
|
||
|
For example, to deal with increment 3:
|
||
|
|
||
|
0 1 2 3 4 5 6 7 8 9 Your deck
|
||
|
. . . . . . . . . . Space on table
|
||
|
^ Current position
|
||
|
|
||
|
Deal the top card to the current position:
|
||
|
|
||
|
1 2 3 4 5 6 7 8 9 Your deck
|
||
|
0 . . . . . . . . . Space on table
|
||
|
^ Current position
|
||
|
|
||
|
Move the current position right 3:
|
||
|
|
||
|
1 2 3 4 5 6 7 8 9 Your deck
|
||
|
0 . . . . . . . . . Space on table
|
||
|
^ Current position
|
||
|
|
||
|
Deal the top card:
|
||
|
|
||
|
2 3 4 5 6 7 8 9 Your deck
|
||
|
0 . . 1 . . . . . . Space on table
|
||
|
^ Current position
|
||
|
|
||
|
Move right 3 and deal:
|
||
|
|
||
|
3 4 5 6 7 8 9 Your deck
|
||
|
0 . . 1 . . 2 . . . Space on table
|
||
|
^ Current position
|
||
|
|
||
|
Move right 3 and deal:
|
||
|
|
||
|
4 5 6 7 8 9 Your deck
|
||
|
0 . . 1 . . 2 . . 3 Space on table
|
||
|
^ Current position
|
||
|
|
||
|
Move right 3, wrapping around, and deal:
|
||
|
|
||
|
5 6 7 8 9 Your deck
|
||
|
0 . 4 1 . . 2 . . 3 Space on table
|
||
|
^ Current position
|
||
|
|
||
|
And so on:
|
||
|
|
||
|
0 7 4 1 8 5 2 9 6 3 Space on table
|
||
|
|
||
|
Positions on the table which already contain cards are still counted; they're not skipped. Of course, this technique is
|
||
|
carefully designed so it will never put two cards in the same position or leave a position empty.
|
||
|
|
||
|
Finally, collect the cards on the table so that the leftmost card ends up at the top of your deck, the card to its right ends
|
||
|
up just below the top card, and so on, until the rightmost card ends up at the bottom of the deck.
|
||
|
|
||
|
The complete shuffle process (your puzzle input) consists of applying many of these techniques. Here are some examples that
|
||
|
combine techniques; they all start with a factory order deck of 10 cards:
|
||
|
|
||
|
deal with increment 7
|
||
|
deal into new stack
|
||
|
deal into new stack
|
||
|
Result: 0 3 6 9 2 5 8 1 4 7
|
||
|
|
||
|
cut 6
|
||
|
deal with increment 7
|
||
|
deal into new stack
|
||
|
Result: 3 0 7 4 1 8 5 2 9 6
|
||
|
|
||
|
deal with increment 7
|
||
|
deal with increment 9
|
||
|
cut -2
|
||
|
Result: 6 3 0 7 4 1 8 5 2 9
|
||
|
|
||
|
deal into new stack
|
||
|
cut -2
|
||
|
deal with increment 7
|
||
|
cut 8
|
||
|
cut -4
|
||
|
deal with increment 7
|
||
|
cut 3
|
||
|
deal with increment 9
|
||
|
deal with increment 3
|
||
|
cut -1
|
||
|
Result: 9 2 5 8 1 4 7 0 3 6
|
||
|
|
||
|
Positions within the deck count from 0 at the top, then 1 for the card immediately below the top card, and so on to the
|
||
|
bottom. (That is, cards start in the position matching their number.)
|
||
|
|
||
|
After shuffling your factory order deck of 10007 cards, what is the position of card 2019?
|
||
|
|
||
|
Your puzzle answer was 6129.
|
||
|
|
||
|
--- Part Two ---
|
||
|
|
||
|
After a while, you realize your shuffling skill won't improve much more with merely a single deck of cards. You ask every 3D
|
||
|
printer on the ship to make you some more cards while you check on the ship repairs. While reviewing the work the droids have
|
||
|
finished so far, you think you see Halley's Comet fly past!
|
||
|
|
||
|
When you get back, you discover that the 3D printers have combined their power to create for you a single, giant, brand new,
|
||
|
factory order deck of 119315717514047 space cards.
|
||
|
|
||
|
Finally, a deck of cards worthy of shuffling!
|
||
|
|
||
|
You decide to apply your complete shuffle process (your puzzle input) to the deck 101741582076661 times in a row.
|
||
|
|
||
|
You'll need to be careful, though - one wrong move with this many cards and you might overflow your entire ship!
|
||
|
|
||
|
After shuffling your new, giant, factory order deck that many times, what number is on the card that ends up in position
|
||
|
2020?
|
||
|
|
||
|
Your puzzle answer was 71345377301237.
|
||
|
|
||
|
Both parts of this puzzle are complete! They provide two gold stars: **
|
||
|
|
||
|
At this point, all that is left is for you to admire your Advent calendar.
|
||
|
|
||
|
If you still want to see it, you can get your puzzle input.
|
||
|
|
||
|
References
|
||
|
|
||
|
Visible links
|
||
|
. https://adventofcode.com/
|
||
|
. https://adventofcode.com/2019/about
|
||
|
. https://adventofcode.com/2019/events
|
||
|
. https://adventofcode.com/2019/settings
|
||
|
. https://adventofcode.com/2019/auth/logout
|
||
|
. Advent of Code Supporter
|
||
|
https://adventofcode.com/2019/support
|
||
|
. https://adventofcode.com/2019
|
||
|
. https://adventofcode.com/2019
|
||
|
. https://adventofcode.com/2019/support
|
||
|
. https://adventofcode.com/2019/sponsors
|
||
|
. https://adventofcode.com/2019/leaderboard
|
||
|
. https://adventofcode.com/2019/stats
|
||
|
. https://adventofcode.com/2019/sponsors
|
||
|
. https://en.wikipedia.org/wiki/Shuffling
|
||
|
. https://en.wikipedia.org/wiki/Halley%27s_Comet
|
||
|
. https://adventofcode.com/2019
|
||
|
. https://adventofcode.com/2019/day/22/input
|