python3 - <<'PY' T=112 M=[(-2,5,-1),(-1,-4,3),(0,4,-3),(1,2,2),(2,-5,1),(-2,1,-4),(1,-4,-2),(2,3,-3)] def md(a,m): return a-(a//m)*m r=17 s=41 q=73 RR=[] SS=[] QQ=[] for i in range(72): r=md(5*r+3*s+7*i+11,97) s=md(2*r+7*s+q+5*i+13,89) q=md(3*r+s+5*q+11*i+17,83) RR.append(r) SS.append(s) QQ.append(q) tt=[20+i+i//4 for i in range(72)] xx=[4+md(7*RR[i]+3*SS[i]+5*QQ[i]+2*i,23) for i in range(72)] yy=[3+md(5*RR[i]+2*SS[i]+7*QQ[i]+3*i,17) for i in range(72)] pp=[1 if md(RR[i]+2*SS[i]+QQ[i]+i,6) in [0,1,4] else -1 for i in range(72)] print('eventcheck',RR[0],SS[0],QQ[0],tt[0],xx[0],yy[0],pp[0],RR[71],SS[71],QQ[71]) P=[] N=[] LP=[] LM=[] for h in range(8): P.append([[0]*8 for a in range(11)]) N.append([[0]*8 for a in range(11)]) LP.append([[-1000]*8 for a in range(11)]) LM.append([[-1000]*8 for a in range(11)]) AA=[0]*8 OO=[0]*8 JJ=[0]*8 CC=[0]*8 DD=[0]*8 ZZ=[] for h in range(8): ZZ.append([0]*72) H=0 for i in range(72): for h in range(8): om=M[h][0] xi=M[h][1] eta=M[h][2] u=xx[i]+((T-tt[i])*(om*(yy[i]-11)+xi))//128 v=yy[i]+((T-tt[i])*(-om*(xx[i]-15)+eta))//128 if u<0 or u>30 or v<0 or v>22: zz=0 else: a=u//3 b=v//3 if pp[i]==1: last=LP[h][a][b] else: last=LM[h][a][b] if tt[i]-last<=7: zz=1 if pp[i]==1 else 2 else: P0=P[h][a][b] N0=N[h][a][b] dd=P0-N0 mm=P0+N0 zz=3 if pp[i]==1 else 4 if pp[i]==1: P[h][a][b]=P0+1 LP[h][a][b]=tt[i] else: N[h][a][b]=N0+1 LM[h][a][b]=tt[i] AAA[h]+=1 if mm==0: OO[h]+=1 JJ[h]+=pp[i] CC[h]+=2*pp[i]*dd+1 if (pp[i]==1 and N0>0) or (pp[i]==-1 and P0>0): DD[h]+=1 ZZ[h][i]=zz H=md(37*H+19*(i+1)+23*(h+1)+11*(u+32)+13*(v+32)+17*(zz+1)+CC[h]+7*AAA[h]+5*OO[h]+3*DD[h]+JJ[h]+72,9973) for h in range(8): print('h',h,'A',AAA[h],'O',OO[h],'J',JJ[h],'C',CC[h],'D',DD[h]) best=-1 bestkey=None for h in range(8): V=88*CC[h]-JJ[h]*JJ[h] K=AAA[h]-2*DD[h] key=(V,K,-OO[h],-h) if bestkey is None or key>bestkey: bestkey=key best=h print('best',best,bestkey) hs=best dx=1 if M[hs][1]>0 else -1 dy=1 if M[hs][2]>0 else -1 EE=[[-1000]*8 for a in range(11)] EF=[[-1000]*8 for a in range(11)] SSsum=0 def g(E,a,b): if a<0 or a>10 or b<0 or b>7: return -1000 return E[a][b] for i in range(72): if ZZ[hs][i]!=3 and ZZ[hs][i]!=4: continue om=M[hs][0] xi=M[hs][1] eta=M[hs][2] u=xx[i]+((T-tt[i])*(om*(yy[i]-11)+xi))//128 v=yy[i]+((T-tt[i])*(-om*(xx[i]-15)+eta))//128 a=u//3 b=v//3 ap=a-dx bp=b-dy pi=pp[i] if pi==1: ep=EE eo=EF else: ep=EF eo=EE qs=0 if 4<=tt[i]-g(ep,a,b)<=12: qs+=1 if 4<=tt[i]-g(ep,ap,bp)<=12: qs+=1 qo=0 if 1<=tt[i]-g(eo,a,b)<=6: qo+=1 if 1<=tt[i]-g(eo,ap,bp)<=6: qo+=1 if qs>=1 and qo==0: SSsum+=1 ep[a][b]=tt[i] print('S',SSsum,'H',H) print('result',hs,SSsum,H) PY