You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

58 lines
1.8 KiB

#!/usr/bin/env python3
import sys
def step(deck1, deck2):
new1, new2 = [x for x in deck1[1:]], [y for y in deck2[1:]]
if deck1[0] > deck2[0]:
new1.append(deck1[0])
new1.append(deck2[0])
else:
new2.append(deck2[0])
new2.append(deck1[0])
return new1, new2
def game(deck1, deck2):
while len(deck1) > 0 and len(deck2) > 0:
deck1, deck2 = step(deck1, deck2)
if len(deck1) > 0: return "1", deck1
else: return "2", deck2
def recursive_game(deck1, deck2):
comb = []
while True:
if len(deck1) == 0: return 'player2', deck2
if len(deck2) == 0: return 'player1', deck1
new1, new2 = [x for x in deck1[1:]], [y for y in deck2[1:]]
if (deck1, deck2) in comb: return 'player1', deck1
comb.append((deck1, deck2))
if len(new1) >= deck1[0] and len(new2) >= deck2[0]:
if recursive_game(deck1[1:(deck1[0]+1)], deck2[1:(deck2[0]+1)])[0] == 'player1':
new1.append(deck1[0])
new1.append(deck2[0])
else:
new2.append(deck2[0])
new2.append(deck1[0])
deck1, deck2 = [x for x in new1], [y for y in new2]
else: deck1, deck2 = step(deck1, deck2)
def score(deck):
count = 0
for i, n in enumerate(deck):
count += ((len(deck)-i) * n)
return count
if __name__ == '__main__':
decks = open(sys.argv[1]).read()
deck1, deck2 = decks.split('\n\n')
deck1, deck2 = deck1.split('\n')[1:], deck2.split('\n')[1:-1]
deck1, deck2 = [int(i) for i in deck1], [int(j) for j in deck2]
rdeck1, rdeck2 = [x for x in deck1], [y for y in deck2]
winner, windeck = game(deck1, deck2)
print(winner, score(windeck))
winner, wdeck = recursive_game(rdeck1, rdeck2)
print(winner, score(wdeck))