On Fri, 19 Oct 2007 21:14:00 +0900, Ruby Quiz wrote: > The three rules of Ruby Quiz: > > 1. Please do not post any solutions or spoiler discussion for this quiz > until 48 hours have passed from the time on this message. > > 2. Support Ruby Quiz by submitting ideas as often as you can: > > http://www.rubyquiz.com/ > > 3. Enjoy! > > Suggestion: A [QUIZ] in the subject of emails about the problem helps > everyone on Ruby Talk follow the discussion. Please reply to the > original quiz message, if you can. > > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-= > > by Brian Candler > > Write a Ruby class which can tell you whether the current time (or any > given time) is within a particular "time window". Time windows are > defined by strings in the following format: > > # 0700-0900 # every day between these times # > Sat Sun # all day Sat and Sun, no other times # > Sat Sun 0700-0900 # 0700-0900 on Sat and Sun only # > Mon-Fri 0700-0900 # 0700-0900 on Monday to Friday only # > Mon-Fri 0700-0900; Sat Sun # ditto plus all day Sat and Sun # > Fri-Mon 0700-0900 # 0700-0900 on Fri Sat Sun Mon # Sat > 0700-0800; Sun 0800-0900 # 0700-0800 on Sat, plus 0800-0900 on Sun > > Time ranges should exclude the upper bound, i.e. 0700-0900 is 07:00:00 > to 08:59:59. An empty time window means "all times everyday". Here are > some test cases to make it clearer: > I have rewritten the test cases to give more informative messages: class TestTimeWindow < Test::Unit::TestCase def test_window_1 s = "Sat-Sun; Mon Wed 0700-0900; Thu 0700-0900 1000-1200" w = TimeWindow.new(s) assert ! w.include?(Time.mktime(2007,9,25,8,0,0)), "#{s.inspect} should not include Tue 8am" assert w.include?(Time.mktime(2007,9,26,8,0,0)), "#{s.inspect} should include Wed 8am" assert ! w.include?(Time.mktime(2007,9,26,11,0,0)), "#{s.inspect} should not include Wed 11am" assert ! w.include?(Time.mktime(2007,9,27,6,59,59)), "#{s.inspect} should not include Thurs 6:59am" assert w.include?(Time.mktime(2007,9,27,7,0,0)), "#{s.inspect} should include Thurs 7am" assert w.include?(Time.mktime(2007,9,27,8,59,59)), "#{s.inspect} should include Thurs 8:59am" assert ! w.include?(Time.mktime(2007,9,27,9,0,0)), "#{s.inspect} should not include Thurs 9am" assert w.include?(Time.mktime(2007,9,27,11,0,0)), "#{s.inspect} should include Thurs 11am" assert w.include?(Time.mktime(2007,9,29,11,0,0)), "#{s.inspect} should include Sat 11am" assert w.include?(Time.mktime(2007,9,29,0,0,0)), "#{s.inspect} should include Sat midnight" assert w.include?(Time.mktime(2007,9,29,23,59,59)), "#{s.inspect} should include Saturday one minute before midnight" end def test_window_2 s = "Fri-Mon" w = TimeWindow.new(s) assert ! w.include?(Time.mktime(2007,9,27)), "#{s.inspect} should not include Thurs" assert w.include?(Time.mktime(2007,9,28)), "#{s.inspect} should include Fri" assert w.include?(Time.mktime(2007,9,29)), "#{s.inspect} should include Sat" assert w.include?(Time.mktime(2007,9,30)), "#{s.inspect} should include Sun" assert w.include?(Time.mktime(2007,10,1)), "#{s.inspect} should include Mon" assert ! w.include?(Time.mktime(2007,10,2)), "#{s.inspect} should not include Tues" end def test_window_nil w = TimeWindow.new("") assert w.include?(Time.mktime(2007,9,25,1,2,3)),"Empty string should include all times" end end -- Ken Bloom. PhD candidate. Linguistic Cognition Laboratory. Department of Computer Science. Illinois Institute of Technology. http://www.iit.edu/~kbloom1/