From: brabuhr@... Date: 2010-09-21T03:05:56+09:00 Subject: Re: An elegant way... On Mon, Sep 20, 2010 at 1:10 PM, F. Senault wrote: > The method takes one argument, an array containing a sorted list of > strings representing episodes numbers.  The episodes numbers are either > a number ('1', '12') or prefixed with a letter ('S1' for special 1).  My > goal is to find sequences in the numbers and join them with dashes : > >>> RAniDBTools.format_episodes_list([ '1', '2', '3', '4', '6', '7', '9', 'S1', 'S2' ]) > => "1-4, 6-7, 9, S1-S2" >>> RAniDBTools.format_episodes_list([ '1', '2', 'S3', 'S4', 'S5', 'O6' ]) > => "1-2, S3-S5, O6" > > Here's the code ; what can I do to improve this ? I wouldn't call this an improvement: def format_episodes_list a z = [] z << a.inject([""]){|i,j| i.last.succ==j ? i << j : (z << i ; [j])} z[1..-1].map{|b| b.size==1?b:"#{b.first}-#{b.last}"}.join(", ") end puts format_episodes_list([ '1', '2', '3', '4', '6', '7', '9', 'S1', 'S2' ]) #=> 1-4, 6-7, 9, S1-S2 puts format_episodes_list([ '1', '2', 'S3', 'S4', 'S5', 'O6' ]) #=> 1-2, S3-S5, O6 puts format_episodes_list([ '1', '2', '9', '10', 'S9', 'S10' ]) #=> 1-2, 9-10, S9, S10 (And, I'm guessing that the last one there isn't correct :-)