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))...)))))))

こうなってるから自乗になるわけだ。リニアにするのが難しいわけではまったくない。手抜き。まめっちのリニアに同じようなことをやってるのかな。