python3 - <<'PY' p=996979 K=[(22716,22810),(397695,397787),(731292,731385),(1019695,1019789),(1394674,1394766),(1728271,1728364)] W=[b-a for a,b in K] NY=0 Ntot=0 Nmax=0 patterns=[] def gen(pos,cost,arr,D): if pos==46: patterns.append(tuple(arr)) return w=1 if pos in (0,45) else 2 for e in range((D-cost)//w+1): arr.append(e) gen(pos+1,cost+w*e,arr,D) arr.pop() for m,(L,U) in enumerate(K[:3]): D=W[m]-90 patterns.clear() gen(0,0,[],D) for e in patterns: delta=90+2*sum(e[1:45])+e[0]+e[45] lo=(L-e[0])//2 hi=(U-delta-1-e[0])//2 for y1 in range(lo,hi+1): ys=[y1] y=y1 for g in e: y+=1+g ys.append(y) if not(len(ys)==47 and ys[0]+ys[1]>=L and ys[-2]+ys[-1]<=U): print('bad') NY+=1 y1=ys[0] y47=ys[-1] A=[] B=[] for li,ui in K: a0=max(0,li-y1) a1=min(y1-1,ui-y47) if a0<=a1: A.append((a0,a1)) b0=max(y47+1,li-y1) b1=min(p-1,ui-y47) if b0<=b1: B.append((b0,b1)) cnt=0 for a0,a1 in A: for b0,b1 in B: for lk,uk in K: for a in range(a0,a1+1): l=max(b0,lk-a) h=min(b1,uk-a) if h>=l: cnt+=h-l+1 Ntot+=cnt if cnt>Nmax: Nmax=cnt print('Y',NY,'pairs',Ntot,'maxperY',Nmax) PY