Groovyでどう書く
Rubyでどう書く?:連続した数列を範囲形式にまとめたい - builder by ZDNet Japan
print args[0].split()*.toInteger().sort().inject([[[]]]){ r, v -> r[-1][-1] + 1 == v ? r[-1] << v : r << [v] r }.collect{ it.size > 2 ? it[0, -1].join('-') : it }.flatten().join(',')
一応Ruby版も。
puts eval("[#{$*[0].tr(' ',',')}]").sort!.inject([]){|r, v| r[0] && r[-1][-1] + 1 == v ? r[-1] << v : r << [v] r }.map!{|a| a.size > 2 ? "#{a[0]}-#{a[-1]}" : a } * ','
ついでにIoで。
list do(System args second split mapInPlace(asNumber) sortInPlace foreach(v, if(last ?last == v - 1, last push(v), push(list(v))) )) mapInPlace(a, if(a size > 2, a first .."-".. a last, a) ) flatten join(",") print