x=->s{y,m,d,h=s.scan(/\d+/).map &:to_i
g=Time.new(y,m,d).wday%6<1?0:[0..11,4..9].count{|r|r===h-7}
%W{Off Mid On}[m<5||m>10?(3-g)%3:g]}
def assert_equals(x, y, msg)
fail "Failed: #{msg} (<#{x}> != <#{y}>)" unless x==y
puts "OK: #{msg}"
end
assert_equals(x['2014-09-01T17:30:02'], 'Mid', 'Summer - evening')
assert_equals(x['2014-11-03T17:30:02'], 'On', 'Winter - evening')
assert_equals(x['2014-09-01T10:30:02'], 'Mid', 'Summer - morning')
assert_equals(x['2014-11-03T10:30:02'], 'On', 'Winter - morning')
assert_equals(x['2014-09-01T12:30:02'], 'On', 'Summer - afternoon')
assert_equals(x['2014-11-03T12:30:02'], 'Mid', 'Winter - afternoon')
assert_equals(x['2014-09-01T00:30:02'], 'Off', 'Summer - night')
assert_equals(x['2014-11-03T00:30:02'], 'Off', 'Winter - night')
assert_equals(x['2014-09-06T17:30:02'], 'Off', 'Summer - weekend evening')
assert_equals(x['2014-11-01T17:30:02'], 'Off', 'Winter - weekend evening')
assert_equals(x['2014-09-06T10:30:02'], 'Off', 'Summer - weekend morning')
assert_equals(x['2014-11-01T10:30:02'], 'Off', 'Winter - weekend morning')
eD0tPnN7eSxtLGQsaD1zLnNjYW4oL1xkKy8pLm1hcCAmOnRvX2kKZz1UaW1lLm5ldyh5LG0sZCkud2RheSU2PDE/MDpbMC4uMTEsNC4uOV0uY291bnR7fHJ8cj09PWgtN30KJVd7T2ZmIE1pZCBPbn1bbTw1fHxtPjEwPygzLWcpJTM6Z119CgoKZGVmIGFzc2VydF9lcXVhbHMoeCwgeSwgbXNnKQogIGZhaWwgIkZhaWxlZDogI3ttc2d9ICg8I3t4fT4gIT0gPCN7eX0+KSIgdW5sZXNzIHg9PXkKICBwdXRzICJPSzogI3ttc2d9IgplbmQKCmFzc2VydF9lcXVhbHMoeFsnMjAxNC0wOS0wMVQxNzozMDowMiddLCAnTWlkJywgJ1N1bW1lciAtIGV2ZW5pbmcnKQphc3NlcnRfZXF1YWxzKHhbJzIwMTQtMTEtMDNUMTc6MzA6MDInXSwgJ09uJywgJ1dpbnRlciAtIGV2ZW5pbmcnKQoKYXNzZXJ0X2VxdWFscyh4WycyMDE0LTA5LTAxVDEwOjMwOjAyJ10sICdNaWQnLCAnU3VtbWVyIC0gbW9ybmluZycpCmFzc2VydF9lcXVhbHMoeFsnMjAxNC0xMS0wM1QxMDozMDowMiddLCAnT24nLCAnV2ludGVyIC0gbW9ybmluZycpCgphc3NlcnRfZXF1YWxzKHhbJzIwMTQtMDktMDFUMTI6MzA6MDInXSwgJ09uJywgJ1N1bW1lciAtIGFmdGVybm9vbicpCmFzc2VydF9lcXVhbHMoeFsnMjAxNC0xMS0wM1QxMjozMDowMiddLCAnTWlkJywgJ1dpbnRlciAtIGFmdGVybm9vbicpCgphc3NlcnRfZXF1YWxzKHhbJzIwMTQtMDktMDFUMDA6MzA6MDInXSwgJ09mZicsICdTdW1tZXIgLSBuaWdodCcpCmFzc2VydF9lcXVhbHMoeFsnMjAxNC0xMS0wM1QwMDozMDowMiddLCAnT2ZmJywgJ1dpbnRlciAtIG5pZ2h0JykKCmFzc2VydF9lcXVhbHMoeFsnMjAxNC0wOS0wNlQxNzozMDowMiddLCAnT2ZmJywgJ1N1bW1lciAtIHdlZWtlbmQgZXZlbmluZycpCmFzc2VydF9lcXVhbHMoeFsnMjAxNC0xMS0wMVQxNzozMDowMiddLCAnT2ZmJywgJ1dpbnRlciAtIHdlZWtlbmQgZXZlbmluZycpCgphc3NlcnRfZXF1YWxzKHhbJzIwMTQtMDktMDZUMTA6MzA6MDInXSwgJ09mZicsICdTdW1tZXIgLSB3ZWVrZW5kIG1vcm5pbmcnKQphc3NlcnRfZXF1YWxzKHhbJzIwMTQtMTEtMDFUMTA6MzA6MDInXSwgJ09mZicsICdXaW50ZXIgLSB3ZWVrZW5kIG1vcm5pbmcnKQoK