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 Submission
>
> Hi 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)