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