python3 - <<'PY' def mod(a,b): return a-b*(a//b) def J(a,b): if a==0: return b if b==0: return a if a==b: return a return 3 def JV(x,y): return tuple(J(x[i],y[i]) for i in range(4)) def cod(x): return sum((x[0],4*x[1],16*x[2],64*x[3])) def G(g): if len(g)==0: return 0 if len(g)==1: return sum((1,g[0])) return sum((8,7*g[0],g[1])) CALLS=dict([((0,2),(0,4,2,(2,1,2,1),3,0,1)),((0,5),(1,2,1,(2,1,2,1),3,3,2)),((1,1),(2,4,2,(1,2,1,2),1,2,2)),((1,6),(3,3,3,(2,1,2,1),2,1,2)),((2,3),(4,1,1,(2,1,2,1),3,3,0)),((3,4),(5,2,3,(2,1,2,1),2,1,0)),((4,2),(6,3,2,(2,1,2,1),3,0,1))]) OPS=dict() OPS[(0,0)]=('S',1,1) OPS[(0,1)]=('S',3,1) OPS[(0,3)]=('K',1,1,2) OPS[(0,4)]=('S',1,1) OPS[(0,6)]=('K',3,0,1) OPS[(1,0)]=('S',2,1) OPS[(1,2)]=('S',2,1) OPS[(1,3)]=('J',1,0) OPS[(1,4)]=('S',2,1) OPS[(1,5)]=('J',1,2) OPS[(2,0)]=('K',1,0,1) OPS[(2,1)]=('S',1,1) OPS[(2,2)]=('S',3,1) OPS[(2,4)]=('K',1,0,1) OPS[(2,5)]=('S',1,1) OPS[(2,6)]=('S',2,2) OPS[(3,0)]=('K',2,1,0) OPS[(3,1)]=('J',3,0) OPS[(3,2)]=('K',2,3,2) OPS[(3,3)]=('J',3,2) OPS[(3,5)]=('J',3,0) OPS[(3,6)]=('J',1,1) OPS[(4,0)]=('S',1,1) OPS[(4,1)]=('S',3,1) OPS[(4,3)]=('K',1,1,2) OPS[(4,4)]=('S',1,1) OPS[(4,5)]=('S',2,2) OPS[(4,6)]=('J',2,2) E=dict() S=dict() zero=(0,0,0,0) E[(0,())]=(1,1,1,1) Z=0 H=0 for r in range(1,6): snap=sorted([x for x in E if E[x]!=zero],key=lambda x:(G(x[1]),x[0])) for (p,g) in snap: s=list(E[(p,g)]) for b in range(7): if (p,b) in CALLS: c,q,rot,co,u,v,w=CALLS[(p,b)] if len(g)==0: g2=(c,) elif len(g)==1: g2=(g[0],c) else: g2=(g[1],c) a=tuple(J(s[mod(sum((i,rot)),4)],co[i]) for i in range(4)) E[(q,g2)]=JV(E.get((q,g2),zero),a) Ss=S.get((q,g2),zero) s[u]=J(s[u],Ss[v]) s[w]=J(s[w],Ss[mod(sum((v,1)),4)]) else: cmd=OPS[(p,b)] if cmd[0]=='S': s[cmd[1]]=cmd[2] elif cmd[0]=='J': s[cmd[1]]=J(s[cmd[1]],s[cmd[2]]) else: s[cmd[1]]=J(s[cmd[2]],s[cmd[3]]) if s[cmd[1]]==2 or s[cmd[1]]==3: Z=sum((Z,1)) H=mod(sum((37*H,97*r,53*p,29*b,11*G(g),cod(s))),9973) newS=JV(S.get((p,g),zero),tuple(s)) S[(p,g)]=newS H=mod(sum((37*H,97*r,53*p,11*G(g),5*cod(newS))),9973) print('RESULT',Z,H,len([x for x in E if E[x]!=zero])) PY