quine
事情从千里码开始,看到高阶函数这个问题的时候,了解了quine问题,附上百科链接
相关quine实现
java
使用文本存储自身代码,通过多次循环输出自身
public class Quine
{
public static void main(String[] args)
{
char q = 34; // Quotation mark character
String[] l = { // Array of source code
"public class Quine",
"{",
" public static void main(String[] args)",
" {",
" char q = 34; // Quotation mark character",
" String[] l = { // Array of source code",
" ",
" };",
" for(int i = 0; i < 6; i++) // Print opening code",
" System.out.println(l[i]);",
" for(int i = 0; i < l.length; i++) // Print string array",
" System.out.println(l[6] + q + l[i] + q + ',');",
" for(int i = 7; i < l.length; i++) // Print this code",
" System.out.println(l[i]);",
" }",
"}",
};
for(int i = 0; i < 6; i++) // Print opening code
System.out.println(l[i]);
for(int i = 0; i < l.length; i++) // Print string array
System.out.println(l[6] + q + l[i] + q + ',');
for(int i = 7; i < l.length; i++) // Print this code
System.out.println(l[i]);
}
}
python
暂时不太懂这段python的原理
s = 's = %r\nprint(s%%s)'
print(s%s)
javascript
通过callee.toString()获取自身代码,再通过截取这段字符串获取自身整体的代码
Quine = function () {var str = arguments.callee.toString(); Quine = console.log(str.substring(52, 60) + str +
str.substring(32, 37) + str.substring(9, 11));}.call()
通过输出a来输出函数自身,下面那个是我改了一下方便在console执行
function a() {
document.write(a, "a()");
}
a()
或
function a() {
console.log(a+"a()");
}a()
php
获取自身文本
<? highlight_file(__FILE__) ?>
我的尝试
由于上面php的实现太简单了,我想实现一个使用函数的quine
于是模仿上面java的代码写了下面这个小函数
function a(){
$p=chr(39);$q=chr(10);$t=chr(9);
$b=array(
'function a(){',
'$p=chr(39);$q=chr(10);$t=chr(9);',
'$b=array(',
');',
'}',
'a();',
'echo $b[0].$q;',
'for($i=1;$i<3;$i++)echo $t.$b[$i].$q;',
'for($i=0;$i<count($b);$i++)echo $t.$t.$p.$b[$i].$p.",".$q;',
'echo $t.$b[3].$q;',
'for($i=6;$i<13;$i++)echo $t.$b[$i].$q;',
'echo $b[4].$q;',
'echo $b[5];',
);
echo $b[0].$q;
for($i=1;$i<3;$i++)echo $t.$b[$i].$q;
for($i=0;$i<count($b);$i++)echo $t.$t.$p.$b[$i].$p.",".$q;
echo $t.$b[3].$q;
for($i=6;$i<13;$i++)echo $t.$b[$i].$q;
echo $b[4].$q;
echo $b[5];
}
a();
改的乱七八糟的,但是确实能输出自己
今天本来不加班的,写这个小函数写了好一会,挺有意思的
1 条评论
感觉我把简单问题复杂化了,纠结