「Rubyでどう書く?:連続した数列を範囲形式にまとめたい」をやってみた

いろいろあったけどできた。

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

>> (r="1 2 3 5 7 8 9 10 12 15 16".split(/\s+/)).unshift("E").zip(r[1..-1].push("E")).map{|i|(i[0]!="E"&&i[1].to_i==i[0].to_i+1)?"-":i}.flatten[1..-2].inject([]){|a,i|i!=a[-1]?a<<i:a}.inject(""){|a,i|("-"==a[-1,1]||""==a||"-"==i)?a+i:a+","+i}
=> "1-3,5,7-10,12,15-16"

セミコロン使ってないのが唯一の救いか…


どうかんがえても連続した数列を範囲形式にまとめたい - koyoweblogの方がみやすい件(笑