day22
This commit is contained in:
parent
6291148c24
commit
7f8895c2c1
55
day22.py
Normal file
55
day22.py
Normal 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
53
inputs/22
Normal 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
13
inputs/22_test
Normal file
@ -0,0 +1,13 @@
|
||||
Player 1:
|
||||
9
|
||||
2
|
||||
6
|
||||
3
|
||||
1
|
||||
|
||||
Player 2:
|
||||
5
|
||||
8
|
||||
4
|
||||
7
|
||||
10
|
||||
Loading…
Reference in New Issue
Block a user