[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Fwd: Please Forward: Ruby Quiz Submission

James Gray

8/27/2006 4:16:00 PM

Begin forwarded message:

> From: Karl Czisch <karl.czisch@gmail.com>
> Date: August 26, 2006 3:14:41 PM CDT
> To: submission@rubyquiz.com
> Subject: Please Forward: Ruby Quiz Submission
>
> Quiz #92: DayRange
>
> class DayRange
> @@days = {'Mon' => 1, 'Tue' => 2, 'Wed' => 3, 'Thu' => 4, 'Fri' => 5,
> 'Sat' => 6, 'Sun' => 7}
>
> def initialize(*input)
> @numbers = Array.new
>
> input.each do |arg|
> num = 0
> if arg.kind_of?(Numeric)
> num = arg
> elsif arg.kind_of?(String)
> num = @@days[arg[0..2]]
> end
> raise ArgumentError, "Wrong parameters" if num == nil or num < 1 or
> num > 7
> @numbers << num
> end
> end
>
> def getNextRange
> left = right = nil
> @numbers.sort.each do |num|
> if left == nil
> left = right = num
> elsif num - right <= 1
> right = num
> else
> yield left, right
> left = right = num
> end
> end
> yield left, right if left
> end
>
> def to_s
> days_inv = @@days.invert
> s = ""
> getNextRange do |from, to|
> s << ', ' unless s.empty?
> s << days_inv[from]
> if to > from
> s << (to - from > 1 ? "-" : ", ")
> s << days_inv[to]
> end
> end
> s
> end
> end
>
> puts DayRange.new(1,2,3,4,5,6,7)
> puts DayRange.new(1,2,3,6,7)
> puts DayRange.new(1,3,4,5,6)
> puts DayRange.new(2,3,4,6,7)
> puts DayRange.new(1,3,4,6,7)
> puts DayRange.new(7)
> puts DayRange.new(1,7)
> puts DayRange.new(1,8)
>
>
>