这是一篇非常有趣的wiki文章,关于打印自己的源代码而无需访问物理源文件(在文件系统中)的程序.这些文章中的例子包括C和Scheme quine程序(是的,看来它们就是这样称呼的).我记得有人问我很久以前(大约5年)是否可以编写一个"返回自己"的SQL查询.我当时很少考虑过这个问题(说实话,我根本没有考虑过它).但在阅读完这篇文章后,我回想起那件事.现在我想说的是,那个问这个问题的人不是100%可信,因为他几乎不可能知道他在说什么.但也许有可能吗?那么,有没有人知道是否存在quine SQL查询,无论"返回自己" 可能意味着在这种情况下.谢谢.
我有一个小测验,我自己无法解决.我想构建一个程序,用java打印自己的源代码.谁知道怎么做?像这个例子:
public class SourcePrint {
private static final long serialVersionUID = 1L;
public void test(){
System.out.println("Hi I'm test");
}
public static void main(String[] args) {
new SourcePrint().test();
}
}
Run Code Online (Sandbox Code Playgroud)
当我们运行它时,输出将是这样的:
public class SourcePrint {
private static final long serialVersionUID = 1L;
public void test(){
System.out.println("Hi I'm test");
}
public static void main(String[] args) {
new SourcePrint().test();
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做.有人知道解决方案或至少提示吗?这不是反编译器,测验制造商告诉我暗示是"静态".
为比赛编写了一个C程序,该程序在ASCII艺术中被格式化为日文字符.当编译并运行时,它打印出另一个用不同的日文字符格式化的程序,然后是另一个,然后最后再打印出第一个.
我正在寻找代码,但无法在互联网上找到它.我不记得比赛是什么,也不记得该计划的名称是什么.
谢谢.
def start(fileName):
fileReader = open(fileName)
for row in fileReader:
print row,
if __name__ == "__main__":
import sys
if len(sys.argv) <= 1:
print "usage quine /path/to/file"
sys.exit(-1)
fileName = sys.argv[0]
start(fileName)
Run Code Online (Sandbox Code Playgroud)
python quine.py foo
以下程序看起来像一个调用自身的C宏.
#define q(k)int puts();int main(){puts(#k"\nq("#k")");}
q(#define q(k)int puts();int main(){puts(#k"\nq("#k")");})
Run Code Online (Sandbox Code Playgroud)
它编译并运行良好.它打印出来.
这段代码真的是C吗?也就是说,它是否依赖于标准C之外的任何东西才能正常工作?
@devnull指出这个问题有一个类似的程序:
#define q(k)main(){return!puts(#k"\nq("#k")");}
q(#define q(k)main(){return!puts(#k"\nq("#k")");})
Run Code Online (Sandbox Code Playgroud)
该程序是否依赖标准C之外的任何东西才能正常工作?
我最近发现了这个quine
$a='$a=%c%s%c;printf($a,39,$a,39,10);%c';printf($a,39,$a,39,10);
Run Code Online (Sandbox Code Playgroud)
而我无法理解它.我在google/SO上找不到这个特定的解释,所以我希望有人可以向我解释这个东西是如何工作的:-)
最短的bashquine 是空字符串:
$ bash -c ''
$
Run Code Online (Sandbox Code Playgroud)
bash生成自己的源代码作为输出的最短非空脚本是什么?
我试图写一个Common Lisp quine.我认为最简单的选择之一如下:
(let ((program '`(let ((program ',program )
(print (eval program)))))
(print (eval program))))
Run Code Online (Sandbox Code Playgroud)
这不起作用,SBCL和CLISP都抱怨PROGRAM没有约束.但是,我确实发现使用DEFPARAMETER与LET不同,确实有效:
(progn
(defparameter program
'`(progn
(defparameter program
',program)
(print (eval program))))
(print (eval program)))
Run Code Online (Sandbox Code Playgroud)
对于第二个例子,打印的代码和编写的代码之间的唯一区别是空格和大小写,我可以轻松修复.但是,我仍然不明白为什么我的第一次尝试不起作用.正如我所看到的,唯一的区别是变量的范围,但它似乎无关紧要,因为我正在评估包含它的范围内的程序.
我读过一些帖子,其中 Hadley 开了一个关于自毁函数的笑话。我认为这实现起来会相对简单,但事实证明并非如此。
这是尝试编写一个名为self_deletequine的函数,并尝试在打印其主体后自毁。这个想法是在其中搜索函数的名称.GlobalEnv并将其删除,但这不起作用。我想了解为什么会这样。
self_delete<- function(){
print(body(self_delete))
rm(list=lsf.str(pattern="self_delete"))
}
Run Code Online (Sandbox Code Playgroud)
调用上面的内容会按预期打印以下内容,但不会从 中删除自己.Globalenv,我错过了什么?我确实尝试过rm,ls也没有运气
self_delete()
{
print(body(self_delete))
rm(list = lsf.str(pattern = "self_delete"))
}
Run Code Online (Sandbox Code Playgroud) 根据维基百科:
quine是一个非空的计算机程序,它不接受任何输入并生成自己的源代码的副本作为其唯一的输出
我看到了这段perl代码,但我无法弄清楚它是如何工作的.
将以下行保存在文件中
/tmp/p并将文件运行为perl /tmp/p:
Illegal division by zero at /tmp/p line 1.
Run Code Online (Sandbox Code Playgroud)
perl/tmp/p的输出是:
Illegal division by zero at /tmp/p line 1.
代码是如何工作的?