quineの履歴
クワイン。自分自身を吐き出すコードのこと
作り方
http://d.hatena.ne.jp/bellbind/20081101/1225491517
PHP版quine
1行で書ける!PHP最強!
readfile(__FILE__);
正攻法。
<?php $str = array( 'echo "<?php\n\$str = array(\n";', 'array_walk($str, \'hoge\');', 'echo ");\n";', 'echo join("\n", $str) . "\n";', 'echo "?>";', 'function hoge($s){echo " \'".str_replace(chr(0x27), chr(0x5c).chr(0x27), $s)."\',\n";}', ); echo "<?php\n\$str = array(\n"; array_walk($str, 'hoge'); echo ");\n"; echo join("\n", $str) . "\n"; echo "?>"; function hoge($s){echo " '".str_replace(chr(0x27), chr(0x5c).chr(0x27), $s)."',\n";} ?>
前半と後半に分けて変換関数で再現。「'」とか「\」を文字コードで扱う
プログラムは2つの部分A,Bからなる。Aのコードを<A>、Bのコードを<B>とする。
Aは<B>を記録する。
BはAの記録から<B>を知り、
<B>を出力するようなプログラム(つまりA)のコード(つまり<A>)を求め、
<A><B>を出力する。
<A>と<B>を書き下す過程は循環しない。2つは同時にできあがる。
次の文に対してコピーを二つ書き、二つ目のコピーは、かぎ括弧で囲め。
『次の文に対してコピーを二つ書き、二つ目のコピーは、かぎ括弧で囲め。』