From: Joel VanderWerf Date: 2010-09-21T03:17:51+09:00 Subject: Re: An elegant way... On 09/20/2010 11:06 AM, Joel VanderWerf wrote: > ... Refactoring that: a = [ '1', '2', '3', '4', '6', '7', '9', 'S1', 'S2', "10", "11", "12" ] #a = [ '1', '2', 'S3', 'S4', 'S5', 'O6' ] module Enumerable def each_run(cond) run = nil last = nil each_cons 2 do |prev, s| if cond[prev, s] run ||= [prev] run << s else yield run || prev run = nil end last = s end yield run || [last] self end end result = [] a.each_run(proc {|prev, s| prev.succ == s}) do |run| if run.size > 1 result << "#{run.first}-#{run.last}" else result << run.first end end p result