453 lines
12 KiB
Org Mode
453 lines
12 KiB
Org Mode
** --- Day 22: Crab Combat ---
|
|
It only takes a few hours of sailing the ocean on a raft for boredom to
|
|
sink in. Fortunately, you brought a small deck of [[/2019/day/22][space
|
|
cards]]! You'd like to play a game of /Combat/, and there's even an
|
|
opponent available: a small crab that climbed aboard your raft before
|
|
you left.
|
|
|
|
Fortunately, it doesn't take long to teach the crab the rules.
|
|
|
|
Before the game starts, split the cards so each player has their own
|
|
deck (your puzzle input). Then, the game consists of a series of
|
|
/rounds/: both players draw their top card, and the player with the
|
|
higher-valued card wins the round. The winner keeps both cards, placing
|
|
them on the bottom of their own deck so that the winner's card is above
|
|
the other card. If this causes a player to have all of the cards, they
|
|
win, and the game ends.
|
|
|
|
For example, consider the following starting decks:
|
|
|
|
#+BEGIN_EXAMPLE
|
|
Player 1:
|
|
9
|
|
2
|
|
6
|
|
3
|
|
1
|
|
|
|
Player 2:
|
|
5
|
|
8
|
|
4
|
|
7
|
|
10
|
|
#+END_EXAMPLE
|
|
|
|
This arrangement means that player 1's deck contains 5 cards, with =9=
|
|
on top and =1= on the bottom; player 2's deck also contains 5 cards,
|
|
with =5= on top and =10= on the bottom.
|
|
|
|
The first round begins with both players drawing the top card of their
|
|
decks: =9= and =5=. Player 1 has the higher card, so both cards move to
|
|
the bottom of player 1's deck such that =9= is above =5=. In total, it
|
|
takes 29 rounds before a player has all of the cards:
|
|
|
|
#+BEGIN_EXAMPLE
|
|
-- Round 1 --
|
|
Player 1's deck: 9, 2, 6, 3, 1
|
|
Player 2's deck: 5, 8, 4, 7, 10
|
|
Player 1 plays: 9
|
|
Player 2 plays: 5
|
|
Player 1 wins the round!
|
|
|
|
-- Round 2 --
|
|
Player 1's deck: 2, 6, 3, 1, 9, 5
|
|
Player 2's deck: 8, 4, 7, 10
|
|
Player 1 plays: 2
|
|
Player 2 plays: 8
|
|
Player 2 wins the round!
|
|
|
|
-- Round 3 --
|
|
Player 1's deck: 6, 3, 1, 9, 5
|
|
Player 2's deck: 4, 7, 10, 8, 2
|
|
Player 1 plays: 6
|
|
Player 2 plays: 4
|
|
Player 1 wins the round!
|
|
|
|
-- Round 4 --
|
|
Player 1's deck: 3, 1, 9, 5, 6, 4
|
|
Player 2's deck: 7, 10, 8, 2
|
|
Player 1 plays: 3
|
|
Player 2 plays: 7
|
|
Player 2 wins the round!
|
|
|
|
-- Round 5 --
|
|
Player 1's deck: 1, 9, 5, 6, 4
|
|
Player 2's deck: 10, 8, 2, 7, 3
|
|
Player 1 plays: 1
|
|
Player 2 plays: 10
|
|
Player 2 wins the round!
|
|
|
|
...several more rounds pass...
|
|
|
|
-- Round 27 --
|
|
Player 1's deck: 5, 4, 1
|
|
Player 2's deck: 8, 9, 7, 3, 2, 10, 6
|
|
Player 1 plays: 5
|
|
Player 2 plays: 8
|
|
Player 2 wins the round!
|
|
|
|
-- Round 28 --
|
|
Player 1's deck: 4, 1
|
|
Player 2's deck: 9, 7, 3, 2, 10, 6, 8, 5
|
|
Player 1 plays: 4
|
|
Player 2 plays: 9
|
|
Player 2 wins the round!
|
|
|
|
-- Round 29 --
|
|
Player 1's deck: 1
|
|
Player 2's deck: 7, 3, 2, 10, 6, 8, 5, 9, 4
|
|
Player 1 plays: 1
|
|
Player 2 plays: 7
|
|
Player 2 wins the round!
|
|
|
|
|
|
== Post-game results ==
|
|
Player 1's deck:
|
|
Player 2's deck: 3, 2, 10, 6, 8, 5, 9, 4, 7, 1
|
|
#+END_EXAMPLE
|
|
|
|
Once the game ends, you can calculate the winning player's /score/. The
|
|
bottom card in their deck is worth the value of the card multiplied by
|
|
1, the second-from-the-bottom card is worth the value of the card
|
|
multiplied by 2, and so on. With 10 cards, the top card is worth the
|
|
value on the card multiplied by 10. In this example, the winning
|
|
player's score is:
|
|
|
|
#+BEGIN_EXAMPLE
|
|
3 * 10
|
|
+ 2 * 9
|
|
+ 10 * 8
|
|
+ 6 * 7
|
|
+ 8 * 6
|
|
+ 5 * 5
|
|
+ 9 * 4
|
|
+ 4 * 3
|
|
+ 7 * 2
|
|
+ 1 * 1
|
|
= 306
|
|
#+END_EXAMPLE
|
|
|
|
So, once the game ends, the winning player's score is /=306=/.
|
|
|
|
Play the small crab in a game of Combat using the two decks you just
|
|
dealt. /What is the winning player's score?/
|
|
|
|
Your puzzle answer was =31314=.
|
|
|
|
** --- Part Two ---
|
|
You lost to the small crab! Fortunately, crabs aren't very good at
|
|
recursion. To defend your honor as a Raft Captain, you challenge the
|
|
small crab to a game of /Recursive Combat/.
|
|
|
|
Recursive Combat still starts by splitting the cards into two decks (you
|
|
offer to play with the same starting decks as before - it's only fair).
|
|
Then, the game consists of a series of /rounds/ with a few changes:
|
|
|
|
- Before either player deals a card, if there was a previous round in
|
|
this game that had exactly the same cards in the same order in the
|
|
same players' decks, the /game/ instantly ends in a win for player 1.
|
|
Previous rounds from other games are not considered. (This prevents
|
|
infinite games of Recursive Combat, which everyone agrees is a bad
|
|
idea.)
|
|
- Otherwise, this round's cards must be in a new configuration; the
|
|
players begin the round by each drawing the top card of their deck as
|
|
normal.
|
|
- If both players have at least as many cards remaining in their deck as
|
|
the value of the card they just drew, the winner of the round is
|
|
determined by playing a new game of Recursive Combat (see below).
|
|
- Otherwise, at least one player must not have enough cards left in
|
|
their deck to recurse; the winner of the round is the player with the
|
|
higher-value card.
|
|
|
|
As in regular Combat, the winner of the round (even if they won the
|
|
round by winning a sub-game) takes the two cards dealt at the beginning
|
|
of the round and places them on the bottom of their own deck (again so
|
|
that the winner's card is above the other card). Note that the winner's
|
|
card might be /the lower-valued of the two cards/ if they won the round
|
|
due to winning a sub-game. If collecting cards by winning the round
|
|
causes a player to have all of the cards, they win, and the game ends.
|
|
|
|
Here is an example of a small game that would loop forever without the
|
|
infinite game prevention rule:
|
|
|
|
#+BEGIN_EXAMPLE
|
|
Player 1:
|
|
43
|
|
19
|
|
|
|
Player 2:
|
|
2
|
|
29
|
|
14
|
|
#+END_EXAMPLE
|
|
|
|
During a round of Recursive Combat, if both players have at least as
|
|
many cards in their own decks as the number on the card they just dealt,
|
|
the winner of the round is determined by recursing into a sub-game of
|
|
Recursive Combat. (For example, if player 1 draws the =3= card, and
|
|
player 2 draws the =7= card, this would occur if player 1 has at least 3
|
|
cards left and player 2 has at least 7 cards left, not counting the =3=
|
|
and =7= cards that were drawn.)
|
|
|
|
To play a sub-game of Recursive Combat, each player creates a new deck
|
|
by making a /copy/ of the next cards in their deck (the quantity of
|
|
cards copied is equal to the number on the card they drew to trigger the
|
|
sub-game). During this sub-game, the game that triggered it is on hold
|
|
and completely unaffected; no cards are removed from players' decks to
|
|
form the sub-game. (For example, if player 1 drew the =3= card, their
|
|
deck in the sub-game would be /copies/ of the next three cards in their
|
|
deck.)
|
|
|
|
Here is a complete example of gameplay, where =Game 1= is the primary
|
|
game of Recursive Combat:
|
|
|
|
#+BEGIN_EXAMPLE
|
|
=== Game 1 ===
|
|
|
|
-- Round 1 (Game 1) --
|
|
Player 1's deck: 9, 2, 6, 3, 1
|
|
Player 2's deck: 5, 8, 4, 7, 10
|
|
Player 1 plays: 9
|
|
Player 2 plays: 5
|
|
Player 1 wins round 1 of game 1!
|
|
|
|
-- Round 2 (Game 1) --
|
|
Player 1's deck: 2, 6, 3, 1, 9, 5
|
|
Player 2's deck: 8, 4, 7, 10
|
|
Player 1 plays: 2
|
|
Player 2 plays: 8
|
|
Player 2 wins round 2 of game 1!
|
|
|
|
-- Round 3 (Game 1) --
|
|
Player 1's deck: 6, 3, 1, 9, 5
|
|
Player 2's deck: 4, 7, 10, 8, 2
|
|
Player 1 plays: 6
|
|
Player 2 plays: 4
|
|
Player 1 wins round 3 of game 1!
|
|
|
|
-- Round 4 (Game 1) --
|
|
Player 1's deck: 3, 1, 9, 5, 6, 4
|
|
Player 2's deck: 7, 10, 8, 2
|
|
Player 1 plays: 3
|
|
Player 2 plays: 7
|
|
Player 2 wins round 4 of game 1!
|
|
|
|
-- Round 5 (Game 1) --
|
|
Player 1's deck: 1, 9, 5, 6, 4
|
|
Player 2's deck: 10, 8, 2, 7, 3
|
|
Player 1 plays: 1
|
|
Player 2 plays: 10
|
|
Player 2 wins round 5 of game 1!
|
|
|
|
-- Round 6 (Game 1) --
|
|
Player 1's deck: 9, 5, 6, 4
|
|
Player 2's deck: 8, 2, 7, 3, 10, 1
|
|
Player 1 plays: 9
|
|
Player 2 plays: 8
|
|
Player 1 wins round 6 of game 1!
|
|
|
|
-- Round 7 (Game 1) --
|
|
Player 1's deck: 5, 6, 4, 9, 8
|
|
Player 2's deck: 2, 7, 3, 10, 1
|
|
Player 1 plays: 5
|
|
Player 2 plays: 2
|
|
Player 1 wins round 7 of game 1!
|
|
|
|
-- Round 8 (Game 1) --
|
|
Player 1's deck: 6, 4, 9, 8, 5, 2
|
|
Player 2's deck: 7, 3, 10, 1
|
|
Player 1 plays: 6
|
|
Player 2 plays: 7
|
|
Player 2 wins round 8 of game 1!
|
|
|
|
-- Round 9 (Game 1) --
|
|
Player 1's deck: 4, 9, 8, 5, 2
|
|
Player 2's deck: 3, 10, 1, 7, 6
|
|
Player 1 plays: 4
|
|
Player 2 plays: 3
|
|
Playing a sub-game to determine the winner...
|
|
|
|
=== Game 2 ===
|
|
|
|
-- Round 1 (Game 2) --
|
|
Player 1's deck: 9, 8, 5, 2
|
|
Player 2's deck: 10, 1, 7
|
|
Player 1 plays: 9
|
|
Player 2 plays: 10
|
|
Player 2 wins round 1 of game 2!
|
|
|
|
-- Round 2 (Game 2) --
|
|
Player 1's deck: 8, 5, 2
|
|
Player 2's deck: 1, 7, 10, 9
|
|
Player 1 plays: 8
|
|
Player 2 plays: 1
|
|
Player 1 wins round 2 of game 2!
|
|
|
|
-- Round 3 (Game 2) --
|
|
Player 1's deck: 5, 2, 8, 1
|
|
Player 2's deck: 7, 10, 9
|
|
Player 1 plays: 5
|
|
Player 2 plays: 7
|
|
Player 2 wins round 3 of game 2!
|
|
|
|
-- Round 4 (Game 2) --
|
|
Player 1's deck: 2, 8, 1
|
|
Player 2's deck: 10, 9, 7, 5
|
|
Player 1 plays: 2
|
|
Player 2 plays: 10
|
|
Player 2 wins round 4 of game 2!
|
|
|
|
-- Round 5 (Game 2) --
|
|
Player 1's deck: 8, 1
|
|
Player 2's deck: 9, 7, 5, 10, 2
|
|
Player 1 plays: 8
|
|
Player 2 plays: 9
|
|
Player 2 wins round 5 of game 2!
|
|
|
|
-- Round 6 (Game 2) --
|
|
Player 1's deck: 1
|
|
Player 2's deck: 7, 5, 10, 2, 9, 8
|
|
Player 1 plays: 1
|
|
Player 2 plays: 7
|
|
Player 2 wins round 6 of game 2!
|
|
The winner of game 2 is player 2!
|
|
|
|
...anyway, back to game 1.
|
|
Player 2 wins round 9 of game 1!
|
|
|
|
-- Round 10 (Game 1) --
|
|
Player 1's deck: 9, 8, 5, 2
|
|
Player 2's deck: 10, 1, 7, 6, 3, 4
|
|
Player 1 plays: 9
|
|
Player 2 plays: 10
|
|
Player 2 wins round 10 of game 1!
|
|
|
|
-- Round 11 (Game 1) --
|
|
Player 1's deck: 8, 5, 2
|
|
Player 2's deck: 1, 7, 6, 3, 4, 10, 9
|
|
Player 1 plays: 8
|
|
Player 2 plays: 1
|
|
Player 1 wins round 11 of game 1!
|
|
|
|
-- Round 12 (Game 1) --
|
|
Player 1's deck: 5, 2, 8, 1
|
|
Player 2's deck: 7, 6, 3, 4, 10, 9
|
|
Player 1 plays: 5
|
|
Player 2 plays: 7
|
|
Player 2 wins round 12 of game 1!
|
|
|
|
-- Round 13 (Game 1) --
|
|
Player 1's deck: 2, 8, 1
|
|
Player 2's deck: 6, 3, 4, 10, 9, 7, 5
|
|
Player 1 plays: 2
|
|
Player 2 plays: 6
|
|
Playing a sub-game to determine the winner...
|
|
|
|
=== Game 3 ===
|
|
|
|
-- Round 1 (Game 3) --
|
|
Player 1's deck: 8, 1
|
|
Player 2's deck: 3, 4, 10, 9, 7, 5
|
|
Player 1 plays: 8
|
|
Player 2 plays: 3
|
|
Player 1 wins round 1 of game 3!
|
|
|
|
-- Round 2 (Game 3) --
|
|
Player 1's deck: 1, 8, 3
|
|
Player 2's deck: 4, 10, 9, 7, 5
|
|
Player 1 plays: 1
|
|
Player 2 plays: 4
|
|
Playing a sub-game to determine the winner...
|
|
|
|
=== Game 4 ===
|
|
|
|
-- Round 1 (Game 4) --
|
|
Player 1's deck: 8
|
|
Player 2's deck: 10, 9, 7, 5
|
|
Player 1 plays: 8
|
|
Player 2 plays: 10
|
|
Player 2 wins round 1 of game 4!
|
|
The winner of game 4 is player 2!
|
|
|
|
...anyway, back to game 3.
|
|
Player 2 wins round 2 of game 3!
|
|
|
|
-- Round 3 (Game 3) --
|
|
Player 1's deck: 8, 3
|
|
Player 2's deck: 10, 9, 7, 5, 4, 1
|
|
Player 1 plays: 8
|
|
Player 2 plays: 10
|
|
Player 2 wins round 3 of game 3!
|
|
|
|
-- Round 4 (Game 3) --
|
|
Player 1's deck: 3
|
|
Player 2's deck: 9, 7, 5, 4, 1, 10, 8
|
|
Player 1 plays: 3
|
|
Player 2 plays: 9
|
|
Player 2 wins round 4 of game 3!
|
|
The winner of game 3 is player 2!
|
|
|
|
...anyway, back to game 1.
|
|
Player 2 wins round 13 of game 1!
|
|
|
|
-- Round 14 (Game 1) --
|
|
Player 1's deck: 8, 1
|
|
Player 2's deck: 3, 4, 10, 9, 7, 5, 6, 2
|
|
Player 1 plays: 8
|
|
Player 2 plays: 3
|
|
Player 1 wins round 14 of game 1!
|
|
|
|
-- Round 15 (Game 1) --
|
|
Player 1's deck: 1, 8, 3
|
|
Player 2's deck: 4, 10, 9, 7, 5, 6, 2
|
|
Player 1 plays: 1
|
|
Player 2 plays: 4
|
|
Playing a sub-game to determine the winner...
|
|
|
|
=== Game 5 ===
|
|
|
|
-- Round 1 (Game 5) --
|
|
Player 1's deck: 8
|
|
Player 2's deck: 10, 9, 7, 5
|
|
Player 1 plays: 8
|
|
Player 2 plays: 10
|
|
Player 2 wins round 1 of game 5!
|
|
The winner of game 5 is player 2!
|
|
|
|
...anyway, back to game 1.
|
|
Player 2 wins round 15 of game 1!
|
|
|
|
-- Round 16 (Game 1) --
|
|
Player 1's deck: 8, 3
|
|
Player 2's deck: 10, 9, 7, 5, 6, 2, 4, 1
|
|
Player 1 plays: 8
|
|
Player 2 plays: 10
|
|
Player 2 wins round 16 of game 1!
|
|
|
|
-- Round 17 (Game 1) --
|
|
Player 1's deck: 3
|
|
Player 2's deck: 9, 7, 5, 6, 2, 4, 1, 10, 8
|
|
Player 1 plays: 3
|
|
Player 2 plays: 9
|
|
Player 2 wins round 17 of game 1!
|
|
The winner of game 1 is player 2!
|
|
|
|
|
|
== Post-game results ==
|
|
Player 1's deck:
|
|
Player 2's deck: 7, 5, 6, 2, 4, 1, 10, 8, 9, 3
|
|
#+END_EXAMPLE
|
|
|
|
After the game, the winning player's score is calculated from the cards
|
|
they have in their original deck using the same rules as regular Combat.
|
|
In the above game, the winning player's score is /=291=/.
|
|
|
|
Defend your honor as Raft Captain by playing the small crab in a game of
|
|
Recursive Combat using the same two decks as before. /What is the
|
|
winning player's score?/
|
|
|
|
Your puzzle answer was =32760=.
|
|
|
|
Both parts of this puzzle are complete! They provide two gold stars: **
|