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