確率的クワイン

はじめに

クワイン(Quine)とは、自身のソースコードと同じ文字列を出力するコードのこと。ちゃんとやると面倒なので、確率的にクワインになるスクリプトを書いてみた。

スクリプト

52.times{print"\"().245[\]acdehimnprst{}"[rand(24)]}

要するに自分のスクリプトに含まれる文字種全てを、ランダムに自分のスクリプトの長さだけ出力するスクリプト。文字は24種、スクリプトの長さは52文字なので、1/(24**52)の確率でクワインになります(投げやり)。

90億の神の御名

アーサー・C・クラークの短編で「90億の神の御名」というのがある。チベットの僧侶が神のあらゆる可能な御名をつらねたリストを編纂しているが、人間の手では時間がかかりすぎるというので、コンピュータの力を借りたいという。コンピュータを使えば実時間で「可能な神の名」を列挙することができるのだが、リストが完成すると世界は・・・という話。

ちなみに上記の確率的クワイン、手元の環境で/dev/nullに10万回出力するのに4.41秒かかったので、自分自身が出力され、見事クワインになる時間の期待値は2.6e67秒、えーと、8.3e59年くらい? 宇宙の年齢が138e8年とからしいので、とりあえずこの宇宙でどんなに頑張って並列処理しても、上記スクリプトがクワインになることはなさそうですね(投げやり)。