Skip to content

Instantly share code, notes, and snippets.

@catwell
Created April 13, 2011 16:12
Show Gist options
  • Save catwell/917844 to your computer and use it in GitHub Desktop.
Save catwell/917844 to your computer and use it in GitHub Desktop.
Let's try to refactor info_string, keeping it functional and short
# eg.: @slots = Hash[[5,19,20,32,21,28].zip([:new]*6)]
def info_string
"#{self.to_s.ljust(25)} slots:" + @slots.keys.sort.reduce([]){|a,b|
if a.empty? || !(a[-1][1]+1 == b)
a << [b,b]
else
a[-1][1] = b
a
end
}.map{|x| (x[0] == x[1]) ? x[1] : "#{x[0]}-#{x[1]}"}.join(",")
end
# another style...
def info_string
nums = @slots.keys.sort
start = stop = nums.first
slots = []
(nums[1..-1]+[nums.last+2]).each do |x|
if x == stop + 1
stop += 1
else
slots << ((start == stop) ? start : "#{start}-#{stop}")
start = stop = x
end
end
"#{self.to_s.ljust(25)} slots:" + slots.join(",")
end
@raggi
Copy link

raggi commented Apr 14, 2011

Fair answer - that's what I get for throwing together something in a rush and not testing it :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment