Solve 2020/22

master
Alfred Melch 4 years ago
parent 7099ab637c
commit f5df4c2e4a

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

@ -0,0 +1,9 @@
Player 1:
43
19
Player 2:
2
29
14

@ -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

@ -0,0 +1,38 @@
from collections import deque
p1 = deque()
p2 = deque()
with open('input', 'r') as f:
f.readline() # player 1
while (line := f.readline()) and line != '\n':
p1.append(int(line))
f.readline() # player 2
while (line := f.readline()) and line != '\n':
p2.append(int(line))
print(p1)
print(p2)
while len(p1) and len(p2):
a = p1.popleft()
b = p2.popleft()
winner = p1 if a > b else p2
winner.append(max(a, b))
winner.append(min(a, b))
print(p1)
print(p2)
winner = p1 if len(p1) else p2
i = 1
score = 0
while len(winner):
score += winner.pop() * i
i += 1
print(score)

@ -0,0 +1,66 @@
from collections import deque
p1 = deque()
p2 = deque()
with open('input', 'r') as f:
f.readline() # player 1
while (line := f.readline()) and line != '\n':
p1.append(int(line))
f.readline() # player 2
while (line := f.readline()) and line != '\n':
p2.append(int(line))
print('p1:', p1)
print('p2:', p2)
def game(p1, p2):
rounds = set()
while len(p1) and len(p2):
# prevent infinite games
round_hash = str(p1) + str(p2)
if round_hash in rounds:
return 1
rounds.add(round_hash)
a = p1.popleft()
b = p2.popleft()
# check if each player has enough cards for recursion
if len(p1) >= a and len(p2) >= b:
new_p1 = p1.copy()
new_p2 = p2.copy()
while len(new_p1) > a:
new_p1.pop()
while len(new_p2) > b:
new_p2.pop()
winner = game(new_p1, new_p2)
else:
# normal round
winner = 1 if a > b else 2
# append cards to winner
winning_player = p1 if winner == 1 else p2
winning_player.append(a if winner == 1 else b)
winning_player.append(b if winner == 1 else a)
return 1 if len(p1) else 2
game(p1, p2)
print('After game:')
print('p1:', p1)
print('p2:', p2)
winner = p1 if len(p1) else p2
i = 1
score = 0
while len(winner):
score += winner.pop() * i
i += 1
print('Score:')
print(score)
Loading…
Cancel
Save