るびまゴルフ 【第 6 回】
2009-07-01


るびまゴルフ 【第 6 回】

今回の問題
seq という Unix コマンドがあります。
このコマンドを使うと、数値を2つ引数にして、その間にある数を出力することができます。
例えば 3 と 5 を引数として実行すると
 % seq 3 5
 3
 4
 5
というような実行結果になります。

今回はこのコマンドを実装してみて下さい。

入力のセパレータは ','

題意

「Range objectをいかに短い記述で生成するか」だと思う 多分それはeval

適当にeval

適当に eval してみる

puts eval(gets.sub(',','..')).map

33bytes、パーは50らしいのでクリアはしてるけど、なんか無駄が多い。

末尾の map は * に交換できる(場合がある)のは、出題ページにある通り。

puts *eval(gets.sub(',','..'))

すると、puts の引数がArrayではなく、任意個のNumericになるので p に置換できる

p *eval(gets.sub(',','..'))

あとは、省略可能な括弧を削って

p *eval(gets.sub',','..')

25bytes、だいぶ短かくなった。

おまけ

入力セパレータが 空白文字の場合

String#split が引数なしで使えるようになるので

p *eval(gets.split*'..')

24bytes

Array#*(String) は Array#join(String) の Alias

ARGVを使う

p *eval($**'..')

16bytes

$* は ARGVの別名

[Ruby]
[Golf]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット