I tried to send this before, but it didn't seem to go through. Trying again. Sorry if this is a duplicate.
James Edward Gray II
···
Begin forwarded message:
From: st103@doc.ic.ac.uk
Date: August 29, 2006 5:37:24 AM CDT
To: submission@rubyquiz.com
Subject: Please Forward: Ruby Quiz SubmissionHi James. Here's my submission for number 92. Short, and reasonably sweet.
Regards,
Stuart#a cute little helper method to do the hard work
class Array
def split &blk
#split the array into little arrays at boundary where block evals to true
i=0
r =
while i<length
start=i
loop do
i+=1
break if blk.call(at(i-1), at(i))
if i==length-1
i+=1
break
end
end
r << slice(start..i-1)
end
r
end
end# i personally don't really see the point of wrapping this up in a class
def dayrange *args
r =
days = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']
args.collect!{|d| days.include?(d) ? days.index(d) : d }
raise ArgumentError.new("invalid arguments #{args.inspect} for dayrange")
unless (args - (0..6).to_a).empty?
args.sort.split{|a,b| a.succ != b}.each{|d|
if d.size>=3
r << days[d[0]] + '-' + days[d[-1]]
else
r.concat d.collect{|n| days[n]}
end
}
r.join(',')
end#some examples
puts dayrange(0,2,3,4,6)
puts dayrange('Mon','Tue','Wed', 'Fri')
puts dayrange(0,'Tue',2,'Sat')
puts dayrange(4,2,5,1,3)