From: "F. Senault" Date: 2010-09-21T02:10:09+09:00 Subject: An elegant way... Hello everybody. I've written a method to solve a little problem, but I find my solution really ugly. So, I'm trying to find ways to improve it. 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 ? module RAniDBTools def RAniDBTools.format_episodes_list(list) lt = [] le = [] list.each do |epno| if ('0'..'9').include? epno[0,1] t = '' e = epno.to_i else t = epno[0..0] e = epno[1..-1].to_i end if lt.last == t max = le.last.max rescue le.last min = le.last.min rescue le.last if e == max + 1 le[-1] = (min..e) else le << e lt << t end else le << e lt << t end end f = [] le.each_with_index do |e, i| if e.is_a? Range f << "#{lt[i]}#{e.min}-#{lt[i]}#{e.max}" else f << "#{lt[i]}#{e}" end end f.join(', ') end end TIA, Fred -- This is the right time, once in a lifetime So I find it hard to sleep, don't you know The sun is shining in my window, life's in flow Making music in the morning, laughter's light Creativity touches in for flight (The Corrs, The Right Time)