C、スコア:553 + 552 + 551 + 550 + 549 = 2755、
元の長さ:553、平均:551
編集:6世代ではなく5世代のみ!
マーティンは時間とスコアの両方で(ほぼ一桁!)まぁ。
元のプログラムは次のとおりです。
char*c="char*c=%c%s%c;k=%d,a;p(c,v,d){for(v=2;v<c;v++)d+=!(c%cv);return!d;}int main(int C,char**V){if(C==1){printf(c,34,c,34,k/10,37,34,34,34,34,34,37,34);return 0;}a=atoi(V[1]);if(C==2)printf(p(a,0,0)?%cPrime%c:%cNot prime%c);if(C==3)for(;a<atoi(V[2]);a++)if(p(a,0,0))printf(%c%cd %c,a);}";k=10000,a;p(c,v,d){for(v=2;v<c;v++)d+=!(c%v);return!d;}int main(int C,char**V){if(C==1){printf(c,34,c,34,k/10,37,34,34,34,34,34,37,34);return 0;}a=atoi(V[1]);if(C==2)printf(p(a,0,0)?"Prime":"Not prime");if(C==3)for(;a<atoi(V[2]);a++)if(p(a,0,0))printf("%d ",a);}
理解を深めるために少し詳しく説明しますが、正しく機能するためには、新しい行はプログラムの一部ではありません。
char*c="char*c=%c%s%c;k=%d,a;p(c,v,d){for(v=2;v<c;v++)d+=!(c%cv);return!d;}int main(int C,char**V){if(C==1){printf(c,34,c,34,k/10,37,34,34,34,34,34,37,34);return 0;}a=atoi(V[1]);if(C==2)printf(p(a,0,0)?%cPrime%c:%cNot prime%c);if(C==3)for(;a<atoi(V[2]);a++)if(p(a,0,0))printf(%c%cd %c,a);}";
k=10000,a;
p(c,v,d){
for(v=2;v<c;v++)
d+=!(c%v);
return!d;
}
int main(int C,char**V){
if(C==1){
printf(c,34,c,34,k/10,37,34,34,34,34,34,37,34);
return 0;
}
a=atoi(V[1]);
if(C==2)
printf(p(a,0,0)?"Prime":"Not prime");
if(C==3)
for(;a<atoi(V[2]);a++)
if(p(a,0,0))
printf("%d ",a);
}
プログラムごとに変わる唯一のものは、の値でありk
、反復ごとに正確に1桁を失います。興味深いことに、第5世代の後、kはゼロになり、そこに留まるので、無限に反復して常に有効な出力を得ることができます。