systemを扱うライブラリがあるので、実行スクリプト自らのファイルを読み込むことでquine的なプログラムを簡単に書ける。quine.jsprocess.stdout.write(require('fs').readFileSync(__filename))何となくコレを記号だけで書いてみようと思ったのだけど、どうも"require"や"__filename"はFunction()内で使えないらしい。(node.js:108:26)まぁ__filenameはprocess.argv[1]から取れるからいいのだけど、requireはどうしようもない。quine3.jsFunction("process.stdout.write(arguments[0]('fs').readFileSync(process.argv[1]))")(require)のようにFunction()の引数にrequireを渡して呼び出してやればそれを使うことができるけど、このrequireはどうにも記号化できそうにない。いうことでfs.jsから関連する部分を引っ張ってきてみる。冗長な部分削るとこんなカンジ。buffer;};process.stdout.write(fs.readFileSync(process.argv[1]));これでrequireの不要なquineが書けた。Buffer(999),l=s.read(d,b,0,b.length);s.close(d);p.stdout.write(b.slice(0,l).toString('utf8'))だいたいこうなる。やってることはほぼ同じのはず。Buffer(999),l=s.read(d,b,0,b.length);s.close(d);p.stdout.write(b.slice(0,l).toString('utf8'))これならFunction()内でも実行できる。Buffer(999),l=s.read(d,b,0,b.length);s.close(d);p.stdout.write(b.slice(0,l).toString('utf8'))")()あとは以下の記事を参考に記号化してゆく。undefined)[10]だと[NaN][10]になってしまいました。「\」と「'」が存在していました。「console」「dir」は次のように記号だけで書けます。console")()["dir"]...と、また上記のような変換をかけていくことになり、「\」1文字を作るために2400文字ほど使うことになる。quineは以下のような394125byteの大長編になってしまった。result.js$いちおうソースコードと実行結果は同じになってる。感想いやー初めて記号JavaScriptに挑戦してみたけど本当にキモいw改めてid:hasegawayosukeさんのスゴさを思い知りました。おまけもしかすると今後も「このnodeスクリプトを記号化したい!」ということがあるかもしれないと思い、任意のnodeスクリプトを記号化するスクリプトをnodeスクリプトで書いた。前述の理由でrequireや__filenameなどを含むものは変換しても動かないけど。n[e]}).join("+"));}p.stdout.write("+"+a.q+")())()")を記号化してみたところ、約4.67MBの巨大JavaScriptファイルが出来上がった。圧縮したものを置いておくので欲しいヒトはこちらからどうぞ。アホらしいのでやめておきます。)一応これを使っても任意のnodeスクリプトを記号化できる、はず。前回の4ラウンド終了時にどんな点差になっているのが理想的な...2008-11-024ラウンド終了時にどんな点差になっているのが理想的なのかどうにも自作AIが弱すぎる。