pol*_*nts 23
好吧,不妨让它自动运行.享受疯狂.运行风险自负.
是的,这是可能的,因为我实际上已经写完了.它没有RUN部分(这太疯狂了,因为正如其他人提到的那样,它会导致无限循环),但这里是:Quine.java
import java.io.*;
public class Quine {
public static void main(String[] args) throws Exception {
char q = 34;
String out = "Quine$";
String text = (
"import java.io.*; " +
"public class [OUT] { " +
"public static void main(String[] args) throws Exception { " +
"char q = 34; String out = `[OUT]$`; String text = `[TEXT]`; " +
"PrintWriter pw = new PrintWriter(out + `.java`); " +
"pw.format(text, 34, out, text); " +
"pw.close(); Runtime runtime = Runtime.getRuntime(); " +
"runtime.exec(`javac ` + out + `.java`).waitFor(); " +
"runtime.exec(`java ` + out); " +
"} " +
"}"
).replace("`", "%1$c").replace("[OUT]", "%2$s").replace("[TEXT]", "%3$s");
PrintWriter pw = new PrintWriter(out + ".java");
pw.format(text, 34, out, text);
pw.close();
Runtime runtime = Runtime.getRuntime();
runtime.exec("javac " + out + ".java").waitFor();
runtime.exec("java " + out);
}
}
Run Code Online (Sandbox Code Playgroud)
所以这里是如何让疯狂开始:
javac Quine.java 编译java Quine 运行它
Quine$Quine.java尽可能可读,因此主要区别Quine$.java在于格式化和3x replace.该未成年人不同的是,Quine$.java已经out设置为Quine$$.Quine$ 将生产,编译和运行 Quine$$Quine$$ 将生产,编译和运行 Quine$$$Quine$$$ 将生产,编译和运行 Quine$$$$请注意,这不会通过阅读.java源代码进行任何逆向工程或作弊,等等Quine是一个quine生成器,因为它生成不同格式的不同代码,但Quine$它几乎是一个真正的自包含的quine:它确实重现本身,它只是重新标记它Quine$$(它自我复制和重新标记Quine$$$等).
所以从技术上讲,没有无限循环:当文件系统无法处理另一个循环时,它最终会停止$.我能够通过强行删除所有Quine$*文件手动停止疯狂,但运行风险自负!
M.A*_*nin 11
对的,这是可能的.一个简单的实现是:让源代码在字符串中包含自己,将字符串保存到文件中并用相同的字符串填充自己的字符串(否则,初始字符串将具有无限大小,因为它的递归方式实现),编译文件,并运行编译后的文件(反过来,它将执行相同的操作).
非平凡的实现要困难得多.
自我复制的程序或自我复制的程序被称为Quine 程序
复制自身的Java示例程序。
public class QuineProgram {
public static void main(String[] args){
String f = "public class QuineProgram { "
+ "public static void main(String[] args)"
+ "{ String f =%c%s%1$c;"
+ " System.out.printf(f,34,f);}} ";
System.out.printf(f, 34, f);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
public class QuineProgram { public static void main(String[] args){ String f ="public class QuineProgram { public static void main(String[] args){ String f =%c%s%1$c; System.out.printf(f,34,f);}} "; System.out.printf(f,34,f);}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13694 次 |
| 最近记录: |