Subscribed unsubscribe Subscribe Subscribe

javascriptのquine

404 Blog Not Found:perl - Quine.pm で(ほぼ)あらゆるPerl Scriptをquineに
http://d.hatena.ne.jp/shinichiro_h/20081102#1225569359
こういう方法でquineを書けたのですね…。
SpiderMonkeyなら

eval(s="print('eval(s='+s.quote()+')')")

と書けるようだ。

$ cat quine.js
eval(s="print('eval(s='+s.quote()+')')")
$ js quine.js
eval(s="print('eval(s='+s.quote()+')')")
$ js quine.js | js
eval(s="print('eval(s='+s.quote()+')')")
$ js quine.js | js | js
eval(s="print('eval(s='+s.quote()+')')")
$ js quine.js | js | js | js
eval(s="print('eval(s='+s.quote()+')')")

とパイプで繋げていけるのが素敵。
node.jsの場合quote()が使えないようなので、以下のようにする必要がある…のかな?

eval(s="q=String.fromCharCode(34);process.stdout.write('eval(s='+q+s+q+')')")
$ cat quine.js
eval(s="q=String.fromCharCode(34);process.stdout.write('eval(s='+q+s+q+')')")
$ node quine.js
eval(s="q=String.fromCharCode(34);process.stdout.write('eval(s='+q+s+q+')')")

こちらは出力をパイプで繋げてnodeコマンドに流すとエラーになってしまう… ><
これを記号で… と思ったけどこれはevalの中で決められた形式そのまま出力するものなので先日のような方法では無理っぽい。残念。。