什么是 Quine
Quine 即”自重写“程序,是指可以打印自身源代码的程序。
还挺好玩的
C 语言
在《Go 语言高级编程》一书中我了解到最短的 C 语言自重写程序是这样的:
main(a){printf(a="main(a){printf(a=%c%s%c,34,a,34);}",34,a,34);}
使用了 ASCII 码来处理字符串的双引号。不过 Go 语言的占位符 %q
可以自动加上双引号。
Go 语言
package main;func main(){c:="package main;func main(){c:=%q;print(c,c)}";print(c,c)}
Python 语言
受 C 语言启发,写了一个 Python 语言的自重写程序,同样只有一行:
s="s=%s%s%s;print(s%%(chr(34),s,chr(34)))";print(s%(chr(34),s,chr(34)))
Java 语言
前几天和 Bing 聊天的时候聊到”充满诗意的代码“,Bing 给出了一段 Java Quinie:
public class Quine {
public static void main(String[] args) {
char q = 34;
String[] l = {
"public class Quine {",
" public static void main(String[] args) {",
" char q = 34;",
" String[] l = {",
" ",
" };",
" for (int i = 0; i < 4; i++)",
" System.out.println(l[i]);",
" for (int i = 0; i < l.length; i++)",
" System.out.println(l[4] + q + l[i] + q + ',');",
" for (int i = 5; i < l.length; i++)",
" System.out.println(l[i]);",
" }",
"}",
};
for (int i = 0; i < 4; i++)
System.out.println(l[i]);
for (int i = 0; i < l.length; i++)
System.out.println(l[4] + q + l[i] + q + ',');
for (int i = 5; i < l.length; i++)
System.out.println(l[i]);
}
}
有一种独特的美感。
2023-06-02