实施quines的技术

时间:2011-08-22 08:41:59

标签: algorithm language-agnostic quine

几年前,我正在考虑制作一个打印自己的源代码的程序的方法,我想出了这两种方法:

  • 程序根据可执行文件名打印.c或.cpp文件(app1打印app1.cpp)。但如果.cpp文件位于其他地方,则会失败。
  • 程序使用“聪明”的字符串(我忘记了这个的源代码),并自行打印。

程序可以使用其他算法来打印自己的源代码吗?

4 个答案:

答案 0 :(得分:2)

我认为你的两个案例涵盖了所有选项。情况(1)包括“从外部设备加载程序源”形式的情况,而情况(2)包括“以编程方式生成程序源”形式的情况。您当然可以考虑一种混合方法,例如“从文件中读取程序的前半部分,然后以编程方式生成后半部分”,但这与您上面描述的内容没有任何不同。

答案 1 :(得分:2)

史蒂夫在评论中指出案例1)通常不被认为是一个quine,可能因为它在任何可以执行文件I / O的语言中都是微不足道的

案例2)是大多数人在说quine时的意思,“聪明地使用字符串”是你展示的部分。

在某些语言中有第三种情况(通常也不算是真正的情况,因为它比案例1更简单)。如果一种语言允许一个完全没有语句的程序,那么这个“空”程序通常不会打印任何内容,这当然与它的源代码相同。例如TCL脚本:

将打印:

答案 2 :(得分:0)

程序不必是具有特定“名称”的“可执行”,并且源代码不必位于具有特定“名称”的“文件”中。这些都是现代操作系统的工件,完全与手头的工作无关。

答案 3 :(得分:0)

 char*f="char*f=%c%s%c;main()
 {printf(f,34,f,34,10);}%c";
 main(){printf(f,34,f,34,10);}

(在一行中)

有很多这样的代码 http://www.nyx.net/~gthompso/quine.htm

对我来说这是最好的方法:将代码分配给变量并重复使用它。