summaryrefslogtreecommitdiff
path: root/22_2020.py
blob: b127679e23147c44e9d6322b80c5bd75edf73b4a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import fileinput
import re
from collections import deque
from copy import deepcopy

D1 = deque()
D2 = deque()
active_deck = D1

L = list([l.strip() for l in fileinput.input()])
for l in L:
    if "Player" in l:
        if "2" in l:
            active_deck = D2
    elif l:
        active_deck.append(int(l))

t = 0


def play_game(D1, D2, is_p2):
    SEEN = set()
    while D1 and D2:
        global t
        t += 1
        my_key = (tuple(D1), tuple(D2))
        if my_key in SEEN and is_p2:
            return True, D1
        SEEN.add(my_key)
        c1, c2 = D1.popleft(), D2.popleft()
        if len(D1) >= c1 and len(D2) >= c2 and is_p2:
            NEW_D1 = deque([D1[x] for x in range(c1)])
            NEW_D2 = deque([D2[x] for x in range(c2)])
            p1_wins, _ = play_game(NEW_D1, NEW_D2, is_p2)
        else:
            p1_wins = c1 > c2

        if p1_wins:
            D1.append(c1)
            D1.append(c2)
        else:
            D2.append(c2)
            D2.append(c1)
    if D1:
        return True, D1
    else:
        return False, D2


for p2 in [False, True]:
    p1, winner_deck = play_game(deepcopy(D1), deepcopy(D2), p2)
    score = 0
    for i, c in enumerate(winner_deck):
        score += (len(winner_deck) - i) * c
    print(score)