This commit is contained in:
Stefan Harmuth 2020-12-22 08:38:38 +01:00
parent 6291148c24
commit 7f8895c2c1
3 changed files with 121 additions and 0 deletions

55
day22.py Normal file
View File

@ -0,0 +1,55 @@
import aoclib
DAY = 22
TEST_SOLUTION_PART1 = 306
TEST_SOLUTION_PART2 = 291
def play(player1_cards, player2_cards, recursive_combat=False):
previous_rounds = set()
while player1_cards and player2_cards:
if recursive_combat:
deck_tuple = (tuple(player1_cards), tuple(player2_cards))
if deck_tuple in previous_rounds:
return 1, player1_cards
else:
previous_rounds.add(deck_tuple)
card1 = player1_cards.pop(0)
card2 = player2_cards.pop(0)
if not recursive_combat:
if card1 > card2:
player1_cards.extend([card1, card2])
else:
player2_cards.extend([card2, card1])
else:
if len(player1_cards) >= card1 and len(player2_cards) >= card2:
winner, _ = play(player1_cards.copy()[:card1], player2_cards.copy()[:card2], True)
else:
winner = 1 if card1 > card2 else 2
if winner == 1:
player1_cards.extend([card1, card2])
else:
player2_cards.extend([card2, card1])
winner = (1, player1_cards) if len(player1_cards) else (2, player2_cards)
return winner
def part1(test_mode=False, recursive_combat=False):
my_input = aoclib.getMultiLineInputAsArray(day=DAY, test=test_mode)
player1 = [int(x) for x in my_input[0][1:]]
player2 = [int(x) for x in my_input[1][1:]]
_, winner = play(player1, player2, recursive_combat)
answer = 0
for x, c in enumerate(winner):
answer += (len(winner) - x) * c
return answer
def part2(test_mode=False):
return part1(test_mode, recursive_combat=True)

53
inputs/22 Normal file
View File

@ -0,0 +1,53 @@
Player 1:
31
24
5
33
7
12
30
22
48
14
16
26
18
45
4
42
25
20
46
21
40
38
34
17
50
Player 2:
1
3
41
8
37
35
28
39
43
29
10
27
11
36
49
32
2
23
19
9
13
15
47
6
44

13
inputs/22_test Normal file
View File

@ -0,0 +1,13 @@
Player 1:
9
2
6
3
1
Player 2:
5
8
4
7
10