アナゴる 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')、として共通部分をまとめたものなのかな。
と書いているうちにさらに縮んでる