Grass

さすがにもう縮まないのでネタバレ

最終的に1525バイトになった。劇的に縮められる新機軸はもうなさそうなのでネタバレ

新しい方法があまりに斬新なので

一晩で実装してしまった。 $ ruby grass.rb quine5.grass >quine5-out.grass $ cmp quine5.grass quine5-out.grass $ ls -l quine5* -rw-r--r-- 1 kik kik 2462 2008-09-13 06:19 quine5-out.grass -rw-r--r-- 1 kik kik 2462 2008-09-13 06:19 quine5.grass…

wWvを生成するコードをもらってきた

昨日の続きwWvを生成するコードを短くして、細かい最適化をやったところ $ time ruby grass.rb quine4.grass >quine4-out.grass real 0m0.796s user 0m0.704s sys 0m0.040s $ cmp quine4.grass quine4-out.grass $ ls -l quine4* -rw-r--r-- 1 kik kik 8947 …

コードサイズをmainに比例するようにした

昨日の続き。昨日のはコードサイズがmainの自乗に比例していたので、1MBになった。 今回は定数倍ですむようにした。定数倍にするには let data p1 w W v = v(W(W(w(w(w(W(W(W(...(W(p1))...)))))))を let dat1 w W v = w (dat0 w W v) in let dat2 w W v = W…

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 qu…

なんでもできるぞー

チャーチ数を使って計算してみるテスト。810バイト。全然縮んでない。チャーチ数を使うと、掛け算が簡単だ。べき乗はさらに簡単だ。169とか251とか重要な数値が簡単に作れるぞー。頑張れば縮むと思うんだけどなあ。なんつーかかっこいいし require 'compile.…

まじめに縮めてみる

上のアプローチで縮めてみた。 require 'compile.rb' compile do let.idt = abs x do end let.pr = abs a, b, c, d do out(d(c(b(a(idt))),ch119)) end # f0 f = f+f let.f0 = abs f, x do f(f(x)) end # f1 f = f+f+1 let.f1 = abs f, x do succ(f0(f,x)) e…

Hello, world!

草アセンブラとHello, world!を書いた。compile.rb やばい。適当に書きすぎてわけわからん。 INIT_ENV = [:out, :succ, :ch119, :inp] class Let def initialize(e) @e = e end def method_missing(name, *args) name = name.to_s raise NameError.new("Unkn…