アナゴる v

v.grass

アルゴリズムを工夫したらどんどん縮んで気持ちよかった。4 位だったけど。
最初に submit したのはこんなのでした。131 byte。

wwwWWWwwWwwWWWWwv # チャーチ数を 1+
wwwWWwWWWWwv # チャーチ数の掛け算 * = (lambda(n m)(lambda(f)(n (m f))))
wwWWwWWWwv # チャーチ数 2
wWWwwWWWWWwWWWWwWWWWWWwWwwwwwwWWWWWWWWWwWWWWWWWWWwWwwwwwwv # チャーチ数 255 を返す関数 (lambda(x) 255)
      # 255 を 2^2=4, 1+ 4=5, 5^2=25, 25*2=50, 1+50=51, 51*5=255 と計算
wWWwWwwwwwwwwWwwwwwwwwwwWWWWWWWWWw # 'w' を 255 回 succ して 'v' を出力 (lambda(x) (out (255 succ 'w')))

255 を作る所を工夫して 108 byte。

wwwWWWwwWwwWWWWwWWWWWwv # チャーチ数を +2
wwwWWwWWWWwv # チャーチ数の掛け算 *
wWWWwWWWwwWwwv # チャーチ数の関数 f(n)=n*(n+2)
wwWWwv # チャーチ数 1
wWWWwwWWWWwWWWWWw # f(1)=3, f(3)=15, f(15)=255
WwwwwwwwwwwWwwwwwwwwwwwwWWWWWWWWWWWw # 'w' を 255 回 succ して出力

f(n) を一度に定義して 80 byte。

wwwWWWwwWWWWwWwwwWWWwWWWWwv # f(n)=n*(n+2)
wwWWwv # 1
wWWWwwWWWWwWWWWWwWwwwwwwwwWwwwwwwwwwwWWWWWWWWWw # f(1)=3, f(3)=15, f(15)=255, 'w' を 255 回 succ して出力

定義の順番を変えて 78 byte

wwWWwv # 1
wwwWWWwwWWWWwWwwwWWWwWWWWwv # f(n)=n*(n+2)
wWWwwwWWWwWWWWwWwwwwwwwwWwwwwwwwwwwWWWWWWWWWw # さっきと同じ

最後の行を 1 変数関数から関数適用の連打に変えて 70 byte。

wwWWwv # 1
wwwWWWwwWWWWwWwwwWWWwWWWWwv # f(n)=n*(n+2)
WwwWWwWWWwWwwwwwwwWwwwwwwwwwWWWWWWWWw # 基本的にさっきと同じ

チャーチ数の 256 は簡単に作れる事を思い出す。最後の 1 回だけ succ しなければ 255 回 succ したことになる。56 byte。hirose さんのと同じ。

wWWWwWWWWWwWwwwWwwwv # f(c){succ(c)=='w'?c:succ(c)}
wwWWwWWWwv # 2
WwWw # 2^2=4, 4^4=256
WwwwwWwwwwwwwwWWWWWWWw # 256 回 'w' に f を適用し、出力

256 を作らずに再帰にして、55 byte。niha さんと同じコードでした。

wwWWwwWWWWWwwWwwwwwwwWwwwwWWwWwwwwwWwwwwwv # f(self,c){succ(c)=='w'?c:self(self,succ(c))}
    #  ww        f(self,c){
    #  WWww         ss(x) = self(self,x)
    #  WWWWWww      c+1 = succ(c)
    #  Wwwwwwww     c+1=='w'
    #  Wwwww        g(x){c+1=='w'?c:x}
    #  WWwWwwwww    h(x){c+1=='w'?g(x):ss(x)} つまり {c+1=='w'?c:self(self,x)}
    #  Wwwwww       h(c+1) つまり c+1=='w'?c:self(self,c+1)
    #            }
WwWwwwwwWWWWw # f(f,'w') で 'v' になるまで succ して出力

irie さんの「f(f,'w') が 'v' そのものを返さない」、youz さんの「エラーで出力を止める」は、私にそういう発想がなかったので感動した。

v.lazy

irori さんのコードは、32+1=9、102+1=101、101+1+16=118(='v')、として共通部分をまとめたものなのかな。
と書いているうちにさらに縮んでる