time_dictionary = { 0 : "" ,
1 : "one" ,
2 : "two" ,
3 : "three" ,
4 : "four" ,
5 : "five" ,
6 : "six" ,
7 : "seven" ,
8 : "eight" ,
9 : "nine" ,
10 : "ten" ,
11 : "eleven" ,
12 : "twelve" ,
13 : "thirteen" ,
14 : "fourteen" ,
15 : "fifteen" ,
16 : "sixteen" ,
17 : "seventeen" ,
18 : "eighteen" ,
19 : "nineteen" ,
20 : "twenty" ,
30 : "thirty" ,
40 : "forty" ,
50 : "fifty"
}
def clock_to_time( time ) :
hour, minute = time .split ( ":" )
hour = int ( hour)
minute = int ( minute)
if 0 > minute > 60 or 0 > hour > 24 :
return "Invalid time!"
if hour == 12 and minute == 0 :
return "It's high noon!"
ret_string = "It's "
post_fix = ""
# hour
if hour == 0 :
hour += 12
post_fix = " am"
if hour > 12 :
post_fix = " pm"
hour -= 12
else :
post_fix = " am"
ret_string += time_dictionary[ hour]
# minute
if minute == 0 :
pass
elif minute < 10 :
ret_string += " oh" + " " + time_dictionary[ minute]
else :
ret_string += " " + time_dictionary[ int ( str ( minute) [ 0 ] ) * 10 ]
if minute % 10 != 0 :
ret_string += "-" + time_dictionary[ minute%10 ]
ret_string += post_fix
return ret_string
test_cases = """00:00
01:30
12:05
14:01
20:29
21:00""" .split ( '\n ' )
for test in test_cases:
print ( test , end= " - " )
print ( clock_to_time( test ) )
dGltZV9kaWN0aW9uYXJ5ID0gezA6ICIiLAogICAgICAgICAgICAgICAgICAgMTogIm9uZSIsCiAgICAgICAgICAgICAgICAgICAyOiAidHdvIiwKICAgICAgICAgICAgICAgICAgIDM6ICJ0aHJlZSIsCiAgICAgICAgICAgICAgICAgICA0OiAiZm91ciIsCiAgICAgICAgICAgICAgICAgICA1OiAiZml2ZSIsCiAgICAgICAgICAgICAgICAgICA2OiAic2l4IiwKICAgICAgICAgICAgICAgICAgIDc6ICJzZXZlbiIsCiAgICAgICAgICAgICAgICAgICA4OiAiZWlnaHQiLAogICAgICAgICAgICAgICAgICAgOTogIm5pbmUiLAogICAgICAgICAgICAgICAgICAgMTA6ICJ0ZW4iLAogICAgICAgICAgICAgICAgICAgMTE6ICJlbGV2ZW4iLAogICAgICAgICAgICAgICAgICAgMTI6ICJ0d2VsdmUiLAogICAgICAgICAgICAgICAgICAgMTM6ICJ0aGlydGVlbiIsCiAgICAgICAgICAgICAgICAgICAxNDogImZvdXJ0ZWVuIiwKICAgICAgICAgICAgICAgICAgIDE1OiAiZmlmdGVlbiIsCiAgICAgICAgICAgICAgICAgICAxNjogInNpeHRlZW4iLAogICAgICAgICAgICAgICAgICAgMTc6ICJzZXZlbnRlZW4iLAogICAgICAgICAgICAgICAgICAgMTg6ICJlaWdodGVlbiIsCiAgICAgICAgICAgICAgICAgICAxOTogIm5pbmV0ZWVuIiwKICAgICAgICAgICAgICAgICAgIDIwOiAidHdlbnR5IiwKICAgICAgICAgICAgICAgICAgIDMwOiAidGhpcnR5IiwKICAgICAgICAgICAgICAgICAgIDQwOiAiZm9ydHkiLAogICAgICAgICAgICAgICAgICAgNTA6ICJmaWZ0eSIKICAgICAgICAgICAgICAgICAgIH0KCgpkZWYgY2xvY2tfdG9fdGltZSh0aW1lKToKICAgIGhvdXIsIG1pbnV0ZSA9IHRpbWUuc3BsaXQoIjoiKQogICAgaG91ciA9IGludChob3VyKQogICAgbWludXRlID0gaW50KG1pbnV0ZSkKCiAgICBpZiAwID4gbWludXRlID4gNjAgb3IgMCA+IGhvdXIgPiAyNDoKICAgICAgICByZXR1cm4gIkludmFsaWQgdGltZSEiCgogICAgaWYgaG91ciA9PSAxMiBhbmQgbWludXRlID09IDA6CiAgICAgICAgcmV0dXJuICJJdCdzIGhpZ2ggbm9vbiEiCgogICAgcmV0X3N0cmluZyA9ICJJdCdzICIKICAgIHBvc3RfZml4ID0gIiIKCiAgICAjIGhvdXIKICAgIGlmIGhvdXIgPT0gMDoKICAgICAgICBob3VyICs9IDEyCiAgICAgICAgcG9zdF9maXggPSAiIGFtIgogICAgaWYgaG91ciA+IDEyOgogICAgICAgIHBvc3RfZml4ID0gIiBwbSIKICAgICAgICBob3VyIC09IDEyCiAgICBlbHNlOgogICAgICAgIHBvc3RfZml4ID0gIiBhbSIKCiAgICByZXRfc3RyaW5nICs9IHRpbWVfZGljdGlvbmFyeVtob3VyXQoKICAgICMgbWludXRlCiAgICBpZiBtaW51dGUgPT0gMDoKICAgICAgICBwYXNzCiAgICBlbGlmIG1pbnV0ZSA8IDEwOgogICAgICAgIHJldF9zdHJpbmcgKz0gIiBvaCIgKyAiICIgKyB0aW1lX2RpY3Rpb25hcnlbbWludXRlXQogICAgZWxzZToKICAgICAgICByZXRfc3RyaW5nICs9ICIgIiArIHRpbWVfZGljdGlvbmFyeVtpbnQoc3RyKG1pbnV0ZSlbMF0pKiAxMF0KICAgICAgICBpZiBtaW51dGUgJSAxMCAhPSAwOgogICAgICAgICAgICByZXRfc3RyaW5nICs9ICItIiArIHRpbWVfZGljdGlvbmFyeVttaW51dGUlMTBdCiAgICByZXRfc3RyaW5nICs9IHBvc3RfZml4CgogICAgcmV0dXJuIHJldF9zdHJpbmcKCnRlc3RfY2FzZXMgPSAiIiIwMDowMAowMTozMAoxMjowNQoxNDowMQoyMDoyOQoyMTowMCIiIi5zcGxpdCgnXG4nKQoKZm9yIHRlc3QgaW4gdGVzdF9jYXNlczoKICAgIHByaW50KHRlc3QsIGVuZD0iIC0gIikKICAgIHByaW50KGNsb2NrX3RvX3RpbWUodGVzdCkp