45 lines
1.1 KiB
Python
Executable File
45 lines
1.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
from useful import *
|
|
|
|
def monkey(p):
|
|
ls = p.strip().split('\n')
|
|
op = ls[2].strip().split()[4]
|
|
return [op, *[numbers(l) for l in ls[1:3]], *[numbers(l)[0] for l in ls[3:]], 0]
|
|
|
|
ps = pgphs(open(0).read())
|
|
ms = [monkey(p) for p in ps]
|
|
ns = [monkey(p) for p in ps]
|
|
|
|
def op(base, leop, vals):
|
|
if not vals: # happens once in our input; is 'old * old'
|
|
return base * base
|
|
return base * vals[0] if leop == '*' else base + vals[0]
|
|
|
|
def rnd():
|
|
for m in ms:
|
|
a = m[1]
|
|
m[6] += len(a)
|
|
for i in a:
|
|
i = op(i, m[0], m[2]) // 3
|
|
ms[m[4 if not (i % m[3]) else 5]][1].append(i)
|
|
m[1] = []
|
|
|
|
common = np.prod([m[3] for m in ms])
|
|
|
|
def rnd2():
|
|
for m in ns:
|
|
a = m[1]
|
|
m[6] += len(a)
|
|
for i in a:
|
|
i = op(i, m[0], m[2]) % common
|
|
ns[m[4 if not (i % m[3]) else 5]][1].append(i)
|
|
m[1] = []
|
|
|
|
for i in range(20):
|
|
rnd()
|
|
print(np.prod(sorted(m[6] for m in ms)[-2:]))
|
|
|
|
for i in range(10000):
|
|
rnd2()
|
|
print(np.prod(sorted(m[6] for m in ns)[-2:]))
|