怎么打出来的,广告代码不显示不出来是#什么

是否无法写一段代码将这段代码自己打印出来?
好像是个递归的问题,程序语言不限
按投票排序
当然能啊,首先写个程序:var s = '__'; console.log(unescape(s).replace('__', s))
然后把程序的源码 escape 下塞进 s 后面的引号里:var s = 'var%20s%20%3D%20%27__%27%3B%20console.log%28unescape%28s%29.replace%28%27__%27%2C%20s%29%29'; console.log(unescape(s).replace('__', s))
运行:————————————————————————————————————————————————————————————————————————————————上面这种是所谓「正统 Quine」(不依赖各种反射)的做法:先写出一个解码-替换-输出的过程,源码部分只留下「槽」,然后把程序整体编码一次塞进原来留的「槽」里,这样就能得到一个有效的 Quine 程序。————————————————————————————————————————互相输出对方的 Ouroboros Quine 也能弄啊,方式也是类似的,写两个程序:只不过要小心处理「槽」替换的过程就是了。
两行的C++版本:#include &cstdio&
using namespace std;int main(){char pyc[]="#include &cstdio&%int main(){char pyc[]=%c%s%c;printf(pyc,10,34,pyc,34);}";printf(pyc,10,34,pyc,34);}
如其它各位答主所说,这种程序有个专门的称呼——Quine。网上流传很广的一个经典例子是Ken Thompson很早之前用C写的:char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){printf(f,34,f,34,10);}
我搜了一下Ken Thompson+Quine,找到了一个他当年研究这个问题的页面:他在这个页面大概介绍了一下自己研究这个问题的来龙去脉,然后展示了一个用lisp写的Quine以及上面那个C语言Quine,接着又列出了一堆各种语言的版本。不过最有趣的部分,是他在后面还列出了各种Quine的变体:(同一段代码可以被当做多种不同的语言来运行) (类似那样依次让上一个语言生成下一个语言的源代码) (让程序生成一个Quine) (程序出错时的输出内容是自己源代码) (一个可执行程序输出自己的可执行文件内容,也就是像个病毒一样自我复制)看到上面的Quine Generating的时候,我想起我以前写过的一个Quine类程序,它功能是修改任意一个简单C/C++程序的源代码,使之成为一个Quine,程序原来的功能不受影响。当然,这个可能比自己手写Quine甚至还简单一点。Polyglots在这里面我觉得可能是最有意思的,它本身是个Quine,但是它可以被解释为多种不同的语言。比如下面这段代码可以分别当做ruby脚本和perl脚本来解释运行,还可以用GCC编译为可执行程序运行:#define $begin int main(){const char*$s
#define $end }
$s="#define %cbegin int main(){const char*%cs%c#define %cend }%c%%c%cs=%c%s%c;%cprintf(%cs,36,36,10,36,10,36,10,36,34,%cs,34,10,36,36,10,36,10);%c%%c";
printf($s,36,36,10,36,10,36,10,36,34,$s,34,10,36,36,10,36,10);
shell版的:z=\' a='z=\\$z a=$z$a$z\; eval echo \$a'; eval echo $a各种版本的实现请 google Quine program
echo file_get_content(__FILE__);PHP大法好…其实屌用没有,打印源码只是一段文本,有些答主说程序能进化…too young 啊其实你用操作系统看源代码不就是打印自己么?
以前写过两篇博文:关于 Quine: Quine 的本质是信息量不变的程序: 文章最后讨论了如何定义 cheating
可以啊。另外一种思路是:如果使用一个逻辑式编程语言(比如 miniKanren)来实现一个语言的解释器,那么这个解释器就可以反向运行:比如在
这个 talk 的 26 分钟开始,Dan Friedman 先生和捧哏 Will Byrd 先用 miniKanren 生成了 30 个 evaluate to 6 的 Scheme expression;随后在 36 分钟左右就是关于如何生成 Quine 的部分了。代码可参见:
linux上经典的自打印程序不是这个么#!/bin/cat
一个空的脚本文件,运行一下,啥也没输出,0行实现。
已有帐号?
无法登录?
社交帐号登录&&&您需要以后才能回答,未注册用户请先。

我要回帖

更多关于 代码写不出来 的文章

 

随机推荐