grafi.jp

Rubyist Magazine - るびまゴルフ 【第 6 回】 に挑戦。初挑戦どきどき。 ※7/1 初め問題を誤認していたため、一部修正しました。このときputsをpで置換できることに気づき、若干短縮。

問題はシンプルで、unixのseqコマンドライクなプログラムを作れば良い。

例えば

3,5

と標準入力に渡されたら

3
4
5

と標準出力するようなプログラムだ。50byteでパー。

と言うわけで私の回答。26byte。

p *(eval"Range.new "+gets)

コードゴルフに丸括弧は禁物らしいけど素人の自分にはどうしても取り除けないorz Range式を作るという発想は間違ってないと思うんだけどなあ。splat演算子でto_aを削減したりevalの位置を工夫したりはしてみた。数字の出力にまで展開できればpで出力できる、てのでさらに削減できた。

カンマ区切りではなくスペース区切りのバージョン、また本来のseqコマンドライクにコマンドライン引数から渡される問題がサブの問題。

スペース区切りの二問目は上手いのが思いつかない。三問目はできた。25byte。

eval"p *Range.new(#{$*})"

しかしこれは良い頭の体操だ。ワンライナー書く時とか実用にも役立ちそうだし。