読者です 読者をやめる 読者になる 読者になる

本当は怖い情報科学

情報系大学院生の趣味&実益ブログ。

連続した数列を範囲形式にまとめたい(馬鹿な人間の場合)

ruby ネタ

Rubyでどう書く?:連続した数列を範囲形式にまとめたい - builder by ZDNet Japan

並んだ数字を確認用にわかりやすくする為に、ソートされた数字の列をハイフンで繋ぐにはどうすればよいでしょうか?

(略)

仕様
* 数値は、半角スペースで区切られた文字列で渡されます。
* 続いている部分は、最初の数値と最後の数値を-(ハイフン)で繋いだ表記にします。
* 連続が1回の場合(前の数も後ろの数も連続でない)は、-(ハイフン)では繋ぎません。
* 出力は、「,」(カンマ)と半角スペースで区切られた文字列でなければなりません。

馬鹿な人間の血が騒ぐ。

ボクの場合。配列なんかいらないよ!injectなんて難しいメソッド使わないよ!正規表現の文字列置換だけで十分さ!

a=$*[0]+''
while a.sub!(/(\d+)\s+(\d+)/){|m|$1.succ==$2?"#{$1}!#{$2}":"#{$1}, #{$2}"};end
puts(a.gsub(/(\d+)(!\d+)*!(\d+)/){|m|"#{$1}-#{$3}"})

143バイト

追記:空白が一個足りなかったので修正しました

【広告】