C, 2.2 * 10 ^ 177 โปรแกรม
#define S(s)char*q=#s,n[]="#####################################################################################################";i;s
S(main(){while(n[i]==91)n[i++]=35;i==101?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
มันไม่สมบูรณ์แบบ แต่ค่อนข้างดี ฉันหมายความว่ามัน255
ยาวจริง ๆ ไบต์และสร้างโปรแกรมที่มีความยาวเท่ากัน คุณอาจจะทำเรื่องยุ่งยากมากขึ้นเพื่อให้ได้โปรแกรมเพิ่มขึ้นบ้าง แต่ฉันจะทิ้งไว้เหมือนตอนนี้
โปรแกรมนี้ใช้ C quine ง่าย ๆ นอกจากนี้ยังมีอัลกอริทึมการนับที่ค่อนข้างง่ายซึ่งนับผ่านค่าที่เป็นไปได้ทั้งหมดของอาร์เรย์อาn
ร์ค n
เรามีโปรแกรมมากเท่าที่พีชคณิตของสตริง
ช่วงถ่านถูก จำกัด ไว้ที่ช่วงจาก#
(= 35) ถึง[
= (91) นั่นเป็นเพราะฉันไม่ต้องการสิ่งใด"
หรือ\
ในสตริงเพราะพวกเขาจำเป็นต้องหลบหนี
รุ่นโปรแกรมจะสิ้นสุดลงเมื่อค่าทั้งหมดในอาร์เรย์ถ่านมีn
[
จากนั้นจะแสดงผลลัพธ์ของโปรแกรมจำลองอย่างง่ายmain(){}
ซึ่งไม่มีผลอะไรเลย
#define S(s) char *q = #s; /* have the source as a string */ \
char n[] = "#####################################################################################################"; \
int i; \
s /* the source itself */
S(main() {
while(n[i]=='[') /* clear out highest value, so next array element be incremented */
n[i++]='#';
i==101 /* end of array reached? output dummy program */
? q = "main(){}"
: n[i]++; /* count one up in the whole array */
printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)", n, q);
})
เป็นการสาธิตว่ามันควรใช้งานได้ฉันเพิ่งเปลี่ยนขีด จำกัด ดังนั้นเฉพาะอักขระระหว่าง ASCII-Code 35
และ36
ใช้กับองค์ประกอบอาร์เรย์ 4 เท่านั้น
โปรแกรมที่ได้คือ
% echo > delim; find -iname 'program_*.c' | xargs -n1 cat delim
#define S(s)char*q=#s,n[]="####";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="$###";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="#$##";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="$$##";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="##$#";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="$#$#";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="#$$#";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="$$$#";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="###$";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="$##$";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="#$#$";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="$$#$";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="##$$";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="$#$$";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="#$$$";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="$$$$";i;s
S(main(){while(n[i]==36)n[i++]=35;i==4?q="main(){}":n[i]++;printf("#define S(s)char*q=#s,n[]=\"%s\";i;s\nS(%s)",n,q);})
#define S(s)char*q=#s,n[]="####";i;s
S(main(){})
ผลลัพธ์นี้เป็น2^4 + 1 = 17
โปรแกรมที่แตกต่างกัน
ดังนั้นโปรแกรมด้านบนให้ผลลัพธ์((91-35)+1)^101 + 1 = 57^101 + 1 ~= 2.2 * 10^177
โปรแกรมที่แตกต่างกัน ฉันไม่แน่ใจอย่างแน่ชัดว่าสิ่งนี้มีค่าหรือไม่หรือการคำนวณของฉันถูกต้อง
2^2048
3.2317e616