Solve 2020/22
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…
Reference in New Issue