今回の問題 seq という Unix コマンドがあります。 このコマンドを使うと、数値を2つ引数にして、その間にある数を出力することができます。 例えば 3 と 5 を引数として実行すると % seq 3 5 3 4 5 というような実行結果になります。 今回はこのコマンドを実装してみて下さい。
入力のセパレータは ','
「Range objectをいかに短い記述で生成するか」だと思う 多分それは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
p *eval($**'..')
16bytes
$* は ARGVの別名
セコメントをする