夏休みの宿題の続き

先日の宿題のプログラムをもう少し短くしてみた。
ぼくの原案:

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

一見、違うことをやっているように見えるけど結果は正しく生成されます。