rename stuff
This commit is contained in:
1 parent
7c3d439f6e
commit
97ddc36b62
325 files changed
+85
No files matched your search
Executable
+83
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys, re
|
||||
|
||||
def memo(fc):
|
||||
memo = {}
|
||||
def f2(a,b,c,d,e,f,g):
|
||||
if (a,b,c,d,e,f,g) not in memo: memo[(a,b,c,d,e,f,g)] = fc(a,b,c,d,e,f,g)
|
||||
return memo[(a,b,c,d,e,f,g)]
|
||||
return f2
|
||||
|
||||
def parse(line):
|
||||
groups = re.compile(r"Player 1 starting position: (?P<p1>\d+)\nPlayer 2 starting position: (?P<p2>\d+)").search(line)
|
||||
return groups
|
||||
|
||||
def step(p1,p2):
|
||||
d,s1,s2,die,dr = 0,0,0,0,0
|
||||
t = 1
|
||||
while s1 < 1000 and s2 < 1000:
|
||||
mv = d*3 + 6
|
||||
d = d + 3 % 100
|
||||
dr += 3
|
||||
if t == 1:
|
||||
p1 = (p1 + mv - 1) % 10 + 1
|
||||
s1 += p1
|
||||
if t == 2:
|
||||
p2 = (p2 + mv - 1) % 10 + 1
|
||||
s2 += p2
|
||||
t = t%2+1
|
||||
return dr*s2 if s2 < 1000 else dr*s1
|
||||
|
||||
@memo
|
||||
def qstep(p1,p2,s1,s2,dv,t,dt):
|
||||
if s1 >= 21:
|
||||
return {1:1,2:0}
|
||||
elif s2 >= 21:
|
||||
return {1:0,2:1}
|
||||
wins = {1: 0, 2: 0}
|
||||
if t == 1:
|
||||
if dt == 3:
|
||||
nt = t%2+1
|
||||
np1 = (p1 + dv - 1) % 10 + 1
|
||||
ns1 = s1+np1
|
||||
win = qstep(np1,p2,ns1,s2,0,nt,0)
|
||||
wins[1] += win[1]
|
||||
wins[2] += win[2]
|
||||
else:
|
||||
dt += 1
|
||||
for d in range(1,4):
|
||||
ndv = dv+d
|
||||
win = qstep(p1,p2,s1,s2,ndv,t,dt)
|
||||
wins[1] += win[1]
|
||||
wins[2] += win[2]
|
||||
if t == 2:
|
||||
if dt == 3:
|
||||
nt = t%2+1
|
||||
np2 = (p2 + dv - 1) % 10 + 1
|
||||
ns2 = s2+np2
|
||||
win = qstep(p1,np2,s1,ns2,0,nt,0)
|
||||
wins[1] += win[1]
|
||||
wins[2] += win[2]
|
||||
else:
|
||||
dt += 1
|
||||
for d in range(1,4):
|
||||
ndv = dv+d
|
||||
win = qstep(p1,p2,s1,s2,ndv,t,dt)
|
||||
wins[1] += win[1]
|
||||
wins[2] += win[2]
|
||||
return wins
|
||||
|
||||
if __name__ == '__main__':
|
||||
p1,p2 = map(int,parse(open(sys.argv[1]).read()).groups())
|
||||
|
||||
# challenge 1
|
||||
res1 = str(step(p1,p2))
|
||||
print("challenge 1:" + "\n" + res1 + "\n")
|
||||
|
||||
# challenge 2
|
||||
results = qstep(p1,p2,0,0,0,1,0)
|
||||
|
||||
res2 = str(max(results.values()))
|
||||
print("challenge 2:" + "\n" + res2 + "\n")
|
||||
|
||||
Reference in new issue
Block a user