def compaction(array)
return array if array.size == 0
result = [[array.shift]]
array.each{|n|
result.last.last == n - 1 ? result.last << n : result << [n]
}
result.map!{|ary|
ary.size >= 3 ? "#{ary.first}-#{ary.last}" : ary.map{|n| n.to_s }.join(", ")
}
result.join(", ")
end
p compaction([1, 2, 3, 10, 11, 20, 100, 101, 102, 200])