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)] r=17 s=41 q=73 R=[] S=[] Q=[] for i in range(72): r=(5*r+3*s+7*i+11)%97 s=(2*r+7*s+q+5*i+13)%89 q=(3*r+s+5*q+11*i+17)%83 R.append(r) S.append(s) Q.append(q) t=[20+i+i//4 for i in range(72)] x=[4+((7*R[i]+3*S[i]+5*Q[i]+2*i)%23) for i in range(72)] y=[3+((5*R[i]+2*S[i]+7*Q[i]+3*i)%17) for i in range(72)] p=[1 if ((R[i]+2*S[i]+Q[i]+i)%6) in (0,1,4) else -1 for i in range(72)] print('check',R[0],S[0],Q[0],t[0],x[0],y[0],p[0],R[71],S[71],Q[71]) P={} N={} LP={} LM={} for h in range(8): for a in range(11): for b in range(8): P[(h,a,b)]=0 N[(h,a,b)]=0 LP[(h,a,b)]=-1000 LM[(h,a,b)]=-1000 A=[0]*8 O=[0]*8 J=[0]*8 C=[0]*8 D=[0]*8 Z={} H=0 pairs=[(i,h) for i in range(72) for h in range(8)] for i,h in pairs: om,xi,eta=M[h] u=x[i]+((T-t[i])*(om*(y[i]-11)+xi))//128 v=y[i]+((T-t[i])*(-om*(x[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 last=(LP if p[i]==1 else LM)[(h,a,b)] if t[i]-last<=7: zz=1 if p[i]==1 else 2 else: P0=P[(h,a,b)] N0=N[(h,a,b)] d=P0-N0 m=P0+N0 zz=3 if p[i]==1 else 4 if p[i]==1: P[(h,a,b)]=P0+1 LP[(h,a,b)]=t[i] else: N[(h,a,b)]=N0+1 LM[(h,a,b)]=t[i] A[h]+=1 if m==0: O[h]+=1 J[h]+=p[i] C[h]+=2*p[i]*d+1 if (p[i]==1 and N0>0) or (p[i]==-1 and P0>0): D[h]+=1 Z[(h,i)]=zz H=(37*H+19*(i+1)+23*(h+1)+11*(u+32)+13*(v+32)+17*(zz+1)+C[h]+7*A[h]+5*O[h]+3*D[h]+J[h]+72)%9973 for h in range(8): print(h,A[h],O[h],J[h],C[h],D[h]) best=None bk=None for h in range(8): V=88*C[h]-J[h]*J[h] K=A[h]-2*D[h] key=(V,K,-O[h],-h) if bk is None or key>bk: bk=key best=h print('best',best,bk) h=best dx=1 if M[h][1]>0 else -1 dy=1 if M[h][2]>0 else -1 EP={} EM={} for a in range(11): for b in range(8): EP[(a,b)]=-1000 EM[(a,b)]=-1000 SS=0 def get(E,a,b): if (a,b) in E: return E[(a,b)] return -1000 for i in range(72): if Z[(h,i)] not in (3,4): continue om,xi,eta=M[h] u=x[i]+((T-t[i])*(om*(y[i]-11)+xi))//128 v=y[i]+((T-t[i])*(-om*(x[i]-15)+eta))//128 a=u//3 b=v//3 ap=a-dx bp=b-dy ep=EP if p[i]==1 else EM eo=EM if p[i]==1 else EP qs=(1 if 4<=t[i]-get(ep,a,b)<=12 else 0)+(1 if 4<=t[i]-get(ep,ap,bp)<=12 else 0) qo=(1 if 1<=t[i]-get(eo,a,b)<=6 else 0)+(1 if 1<=t[i]-get(eo,ap,bp)<=6 else 0) if qs>=1 and qo==0: SS+=1 ep[(a,b)]=t[i] print('result',h,SS,H) PY