标签: quine

构造quines(自我复制功能)

是否有人在R中构建了一个quine("一个程序,它生成一个自己的源文本副本作为其完整输出":http://www.nyx.net/~gthompso/quine.htm)?([quine]标签在Python,Java中提取了大量示例......但在R中显然没有.)

f <- function() { body() }
Run Code Online (Sandbox Code Playgroud)

接近:

> f()
{
    body()
}
Run Code Online (Sandbox Code Playgroud)

但缺少功能的名称.

最短的可能性怎么样?大多数混淆了吗?

编辑:从下面的各种答案中,似乎有多种方法来定义自我指涉性和必须发生的环境:

  • 在R环境中:函数->函数(@ bill_080)
  • 在OS/shell环境中:程序->程序[或多或少等同于程序->文本] :( @kohske)
  • 其他:功能->文本(@JoshUlrich,@ James,上面定义的问题)

笔记:

  • 从R-帮助线程指出的@Spacedman(这似乎强调了简洁混淆)认为identical(quine,quine())是一个很好的测试案例,虽然它的棘手,因为环境相处携带:identical(quine,quine(),ignore.environment=TRUE)可能会更容易.
  • 最近(2015年10月)的博客文章提供了另一个答案......

r quine

15
推荐指数
3
解决办法
502
查看次数

这个Python 3 quine如何工作?

找到这个quine的例子:

s='s=%r;print(s%%s)';print(s%s)
Run Code Online (Sandbox Code Playgroud)

我得到了,%s并按照此处的指示%r执行strrepr功能,但究竟是什么意思是部分以及如何工作?s%s

python quine

15
推荐指数
1
解决办法
1851
查看次数

是否可以创建HTML quine?

根据标题,是否可以在HTML中创建(非平凡的)quine

我对HTML quine的定义:

在假设HTML文件中的某些字符串由浏览器呈现为纯文本的情况下,非平凡的HTML quine是非空的并且至少使用一个HTML标记.定义HTML quine q.html ,使得标准浏览器呈现as的输出是其q.html自身的内容.

(我对这个定义的任何评论持开放态度,我现在就把它搞砸了)

HTML不是图灵完备的,因此定点定理不能用来证明它确实是可能的.

但是,这并不一定意味着HTML quine是不可能的.或者它实际上可以证明HTML quine是不可能的?

html computer-science quine computation-theory

14
推荐指数
1
解决办法
1442
查看次数

这个程序如何复制自己?

此代码来自Hacker's Delight.它说这是C中最短的程序,长度为64个字符,但我不明白:

    main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}
Run Code Online (Sandbox Code Playgroud)

我试着编译它.它编译3个警告,没有错误.

c quine

13
推荐指数
2
解决办法
889
查看次数

没有main()的quine程序

我遇到了这个没有主要方法的小quine程序:

enum f {
  f;
  System z;
  String s="enum f{f;System z;String s=%c%s%1$c;{z.out.printf(s,34,s);z.exit(0);}}";
  {z.out.printf(s,34,s);
  z.exit(0);}
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释这是如何工作的?谢谢.

java enums quine

12
推荐指数
1
解决办法
618
查看次数

C/C++程序打印自己的源代码作为输出

维基百科称它被称为quine,有人给出了以下代码:

char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}
Run Code Online (Sandbox Code Playgroud)

但是,显然你必须添加

#include <stdio.h> //corrected from #include <stdlib.h>
Run Code Online (Sandbox Code Playgroud)

这样printf()才有用.

从字面上看,由于上面的程序没有打印#include <stdio.h>,所以它不是解决方案(?)

我对"打印自己的源代码"的字面要求以及此类问题的任何目的感到困惑,尤其是在访谈时.

c quine

11
推荐指数
4
解决办法
3万
查看次数

function(){}是真正的quine吗?

在互联网上闲逛后,我找不到任何在R中编写过quine的人(编辑:自写这篇文章以来,已经在SO上找到了几个,但我仍然对这个问题感兴趣).所以我想我会试着亲自拿出一个.我的结果是(令人惊讶的短)代码:

function(){}
Run Code Online (Sandbox Code Playgroud)

function(){}运行时会输出.这利用了这样一个事实:在没有parens或参数之后的函数名称将返回函数的源代码.

然而,一个"看自己"的程序通常不被认为是真正的quine.在试图决定我是否写了一个"真正的"因素的过程中,我意识到有两件事我不明白:(1)什么构成了一个"看着自己"的程序(从一个角度来看)超出使用范围文件i/o和(2)function(){}(或类似命令logical(0))在打印时自我引用的程度.前者似乎对SO来说过于主观,但我希望对后者进行一些澄清.所以...

当我跑步时function(){},究竟发生了什么导致它打印出自己的"源代码"?例如,R是否将空函数加载到本地环境中,评估该函数,然后回顾定义它以进行打印的代码?或者,它只是看着function(){}并立即回应其定义?这和它之间有根本的区别吗?

f<-function(){cat("f<-");print(f);cat("f()")}
f()
Run Code Online (Sandbox Code Playgroud)

在运行时如何打印自己?

r quine

11
推荐指数
1
解决办法
656
查看次数

自我复制程序

main(a){printf(a="main(a){printf(a=%c%s%c,34,a,34);}",34,a,34);}
Run Code Online (Sandbox Code Playgroud)

编译后它是如何复制的?在printf函数中编写34的作用是什么?

c linux printf ascii quine

10
推荐指数
1
解决办法
4725
查看次数

是否有可能编写一个程序,利用"序列生成函数"打印自己的源代码

是否有可能编写一个程序,利用"序列生成函数"打印自己的源代码?

我所谓的序列生成函数只是一个从特定区间返回值的函数(即可打印的ascii-charecters(32-126)).现在的观点是,这个生成的序列应该是程序自己的源代码.如你所见,实现一个返回任意序列的函数实际上是微不足道的,但由于返回的序列必须包含函数本身的实现,因此这是一项非常重要的任务.

这是这样一个程序(如何它对应的输出)可能看起来像

#include <stdio.h>

int fun(int x) {
    ins1;
    ins2;
    ins3;
    .
    .
    .
    return y;
}

int main(void) {
    int i;
    for ( i=0; i<size of the program; i++ ) {
        printf("%c", fun(i));
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我个人认为这是不可能的,但由于我不太了解潜在的问题,我在这里发表了我的想法.我真的很期待听到一些意见!

c math complexity-theory quine

9
推荐指数
1
解决办法
1294
查看次数

程序源代码与其输出完全相同

我越想了解这个困惑的谜,我就越想放弃.

char *s = "char *s = %c%s%c; main(){printf(s,34,s,34);}"; main(){printf(s,34,s,34);}
Run Code Online (Sandbox Code Playgroud)

这个单行源代码如何在程序执行时生成完全相同的输出,这种程序有什么共同的概念吗?

c printf quine output

8
推荐指数
1
解决办法
254
查看次数