fork download
  1. x=->s{y,m,d,h=s.scan(/\d+/).map &:to_i
  2. g=Time.new(y,m,d).wday%6<1?0:[0..11,4..9].count{|r|r===h-7}
  3. %W{Off Mid On}[m<5||m>10?(3-g)%3:g]}
  4.  
  5.  
  6. def assert_equals(x, y, msg)
  7. fail "Failed: #{msg} (<#{x}> != <#{y}>)" unless x==y
  8. puts "OK: #{msg}"
  9. end
  10.  
  11. assert_equals(x['2014-09-01T17:30:02'], 'Mid', 'Summer - evening')
  12. assert_equals(x['2014-11-03T17:30:02'], 'On', 'Winter - evening')
  13.  
  14. assert_equals(x['2014-09-01T10:30:02'], 'Mid', 'Summer - morning')
  15. assert_equals(x['2014-11-03T10:30:02'], 'On', 'Winter - morning')
  16.  
  17. assert_equals(x['2014-09-01T12:30:02'], 'On', 'Summer - afternoon')
  18. assert_equals(x['2014-11-03T12:30:02'], 'Mid', 'Winter - afternoon')
  19.  
  20. assert_equals(x['2014-09-01T00:30:02'], 'Off', 'Summer - night')
  21. assert_equals(x['2014-11-03T00:30:02'], 'Off', 'Winter - night')
  22.  
  23. assert_equals(x['2014-09-06T17:30:02'], 'Off', 'Summer - weekend evening')
  24. assert_equals(x['2014-11-01T17:30:02'], 'Off', 'Winter - weekend evening')
  25.  
  26. assert_equals(x['2014-09-06T10:30:02'], 'Off', 'Summer - weekend morning')
  27. assert_equals(x['2014-11-01T10:30:02'], 'Off', 'Winter - weekend morning')
  28.  
  29.  
Success #stdin #stdout 0.03s 7472KB
stdin
Standard input is empty
stdout
OK: Summer - evening
OK: Winter - evening
OK: Summer - morning
OK: Winter - morning
OK: Summer - afternoon
OK: Winter - afternoon
OK: Summer - night
OK: Winter - night
OK: Summer - weekend evening
OK: Winter - weekend evening
OK: Summer - weekend morning
OK: Winter - weekend morning