Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from __future__ import division
- import matplotlib.pyplot as plt
- import numpy as np
- from math import cos,sin
- import sys
- sys.path.append("../../")
- from aoc_utilities import *
- def calc_score(d):
- return np.sum([d[-i]*i for i in range(1,len(d)+1)])
- sol1,sol2 = 0,0
- inp,raw = parse(year = 2020, day = 22,delim=' ',force_int=True,test=False)
- p1 = [i[0] for i in inp[1:26]]
- p2 = [i[0] for i in inp[28:]]
- sol1 = 0
- while True:
- a = p1[0]
- b = p2[0]
- if a > b:
- p1 = p1[1:] + [a,b]
- p2 = p2[1:]
- else:
- p1 = p1[1:]
- p2 = p2[1:] + [b,a]
- if len(p1) == 0:
- sol1 = calc_score(p2)
- print('p2',sol1)
- break
- if len(p2) == 0:
- sol1 = calc_score(p1)
- print('p1',sol1)
- break
- p1 = [i[0] for i in inp[1:26]]
- p2 = [i[0] for i in inp[28:]]
- def play_recursive(d1,d2,ret_score=False):
- history = {}
- while True:
- x = ','.join([str(i) for i in d1]) + ','.join([str(i) for i in d2])
- if x in history:
- score = -1
- if ret_score: score = calc_score(d1)
- return 'p1',score
- else:
- history[x] = 1
- a,b = d1[0], d2[0]
- if len(d1)-1 >= a and len(d2)-1 >= b:
- winner,score = play_recursive(d1[1:1+a],d2[1:1+b])
- else:
- winner = 'p1' if a > b else 'p2'
- if winner == 'p1':
- d1 = d1[1:] + [a,b]
- d2 = d2[1:]
- else:
- d1 = d1[1:]
- d2 = d2[1:] + [b,a]
- if len(d1) == 0:
- score = -1
- if ret_score:
- print(d2)
- score = calc_score(d2)
- return 'p2',score
- if len(d2) == 0:
- score = -1
- if ret_score:
- print(d1)
- score = calc_score(d1)
- return 'p1',score
- print(play_recursive(p1,p2,ret_score = True))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement