夏休みの宿題の続き
先日の宿題のプログラムをもう少し短くしてみた。
ぼくの原案:
def p2rp(i); return i.shift if i[0]=~/^\d/; a=i.shift; b=p2rp(i); c=p2rp(i); [b,c,a].flatten; end
id:suikyoさんによる改良案:
def x(i); (t=i.shift)=~/^\d/ ? t : [x(i),x(i),t].flatten; end
短いっ。
さらにid:Gimiteさんによる改良案:
def x(i); (t=i.shift)=~/^\d/ ? [t] : x(i)+x(i)+[t]; end
flattenが不要になってすっきり。
せっかくなので、Gimiteさんのをさらに短くしてみた。
def x(i); (t=i.shift)=~/^\d/ || x(i)+x(i); i<<t; end
一見、違うことをやっているように見えるけど結果は正しく生成されます。