まじめに縮めてみる

上のアプローチで縮めてみた。

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

  let.f00 = abs f do
    f0(f0(f))
  end

  let.f11 = abs f do
    f1(f1(f))
  end
  
  let.f10 = abs f do
    f0(f1(f))
  end

  let.f01 = abs f do
    f1(f0(f))
  end

  let.tail = abs pr111011, pr111101, pr111110 do
    let.pr10 = pr(f10)
    pr10(f11,f01,f01) #,
    let.pr101010 = pr10(f10,f10)
    pr101010(f01) # SP
    out(ch119) # w
    pr111110(f00) # o
    pr111110(f11) # r
    pr111101(f01) # l
    pr111011(f01)
    pr101010(f10)
  end
  let.pr11 = pr(f11)
  pr11(f01,f00,f01) # H
  let.pr111011 = pr11(f10,f11)
  let.tail2 = tail pr111011
  pr111011(f10) # e
  let.pr1111 = pr11(f11)
  let.pr111101 = pr1111(f01)
  let.tail3 = tail2 pr111101
  pr111101(f01) # l
  pr111101(f01) # l
  let.pr111110 = pr1111(f10)
  pr111110(f00) # o
  tail3 pr111110
end
wvwwwwWWWWwwwwwWWWWwWWWWwWWWWwWwwwwwwwwwwwwWWWWWWWWWWWwvwwWWwWWWwv
wwWWWwwWwwWWWWWWWWWwvwWWWwWWWWwvwWWWwWWWWwvwWWWWwWWWWWWwvwWWWWWWwW
WWWWWwvwwwWWWWWWWWWWwwwwwWwwwwwwwWwwwwwwWwwwwwwwWWWWwwwwwwwwwWwwww
wwwwwwWwwwwwwwwwwWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwWWWWWWWWW
wwwwwwwwwwwwwwwWWWWWWWWWWwwwwwwwwwwwwwwwWWWWWWWWWWWWwwwwwwwwwwwwww
WWWWWWWWWWWWWWwwwwwwwwwwwwwwwWWWWWWWwwwwwwwwwwwwwwwwwvWWWWWWWWwwww
WwwwWwwwwwwwWwwwwwWWWWwwwwwwwWwwwwwwwwwWWWWWWWwWWwwwwwwwwwwWWWWWWW
WwwwwwwwwwwwwWwwwwwwwwwwwWWWWwWWwwwwwwwwwwwwwWWWwwwwwwwwwwwwwwWWWW
WwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwWWWWWww

pr(f10,f11,f01,f00) みたいに呼び出すと 'w'+0x10110100 が表示される。で適当にpr(...)の頭の部分を共通化して 572 バイト。
よそのコードがほとんど入ってない割には縮んだ気がする。