#include static unsigned long seed=16807; static char canswer[170]= "300/LP6/AAA 6\ P A6/6/0 6L\ L6 0 A// 0 /\ A06 6 3 60 A\ P6L0/ P/ A0\ L3PA/ P 60/ \ 3 LL/AL A// \ A/36AL3P 6 0\ 6/6//PLP/0 A \ ALP3L/6LAP/A \ 6660303L6/P3\ 6 0/ 3L030A\ A AA0L /L P6"; static char clist[10]=" APL/360 "; static int answer[169]; unsigned long aplrandom() { unsigned long qu7t5=16807; unsigned long qu2t31=2147483647; seed = seed*qu7t5%qu2t31; return seed; } unsigned long frandom(long n) { unsigned long n1; n1 = ((aplrandom()*n)>>31)+1; return n1; } main() { long i,i1,i2,i3; char longlist[169]; unsigned int longseed[169]; int ok; for(i1=0;i1<169;i1++) { answer[i1]=0; for(i2=0;i2<9;i2++) { if(canswer[i1]==clist[i2]) { answer[i1]=i2+1; break; } } if(i1%13==0) printf("\n"); printf("%d ",answer[i1]); } printf("\nGenerate list.\n"); for(i=0; i<2147483646; i++) { i1 = i%169; longseed[i1] = seed; longlist[i1] = frandom(9L); if(i>=168) { i3 = i-168; ok=1; for(i2=0;i2<169;i2++) { if(answer[i2]==1) { if(longlist[(i3+i2)%169] != 1 && longlist[(i3+i2)%169] != 9) { ok=0; break; } } else { if(longlist[(i3+i2)%169] != answer[i2]) { ok=0; break; } } } if(ok) { printf("OK: %ld %d\n",i3,longseed[i3%169]); } } } }