Quine作った
みんなQuine作ってるので、作ってみた。
$ time ruby grass.rb quine1.grass >quine1-out.grass real 1m16.528s user 1m13.429s sys 0m3.108s $ cmp quine1.grass quine1-out.grass $ ls -l quine1*.grass -rw-r--r-- 1 kik kik 1087824 2008-09-11 00:54 quine1-out.grass -rw-r--r-- 1 kik kik 1087824 2008-09-11 00:45 quine1.grass
てきとーに作ったら1MBになった
dataとmain部分があって、dataにはmain部分がエンコードしておいてある
# data let data p1 p2, p3 p4 = エンコードされたmain in # main out(w) out(w) out(w) out(w) data(ラムダ内部を直接吐く引数) # data の定義を吐く data(デコードして出力する引数) # data をデコードして吐く
問題はエンコードのしかたがいい加減なので、data は mainの自乗のサイズになることだ(ぉ。
その結果が1MB
ようするに
let data p1, w, W, v = v(W(W(w(w(w(W(W(W(...(W(p1))...)))))))
こうなってるから自乗になるわけだ。リニアにするのが難しいわけではまったくない。手抜き。まめっちのリニアに同じようなことをやってるのかな。