package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
fmt.Println(TalkingClock("00:00"))
fmt.Println(TalkingClock("01:30"))
fmt.Println(TalkingClock("12:05"))
fmt.Println(TalkingClock("14:01"))
fmt.Println(TalkingClock("20:29"))
fmt.Println(TalkingClock("21:00"))
}
func TalkingClock
(time string
) string
{ hour
, minute
:= UnpackPair
(time, ":")
period := "am"
if i, _ := strconv.Atoi(hour); i >= 12 {
hour = strconv.Itoa(i - 12)
period = "pm"
}
if minute == "00" {
return "It's " + HourToWords(hour) + " " + period
}
return "It's " + HourToWords(hour) + " " + MinuteToWords(minute) + " " + period
}
func oneToTen(n string) string {
i, _ := strconv.Atoi(n)
switch i {
case 1:
return "one"
case 2:
return "two"
case 3:
return "three"
case 4:
return "four"
case 5:
return "five"
case 6:
return "six"
case 7:
return "seven"
case 8:
return "eight"
case 9:
return "nine"
default:
return "ten"
}
}
func HourToWords(hour string) string {
i, _ := strconv.Atoi(hour)
switch i {
case 0:
return "twelve"
case 11:
return "eleven"
default:
return oneToTen(hour)
}
}
func MinuteToWords(minute string) string {
if minute == "00" {
return ""
}
if minute == "10" {
return "ten"
}
imin, _ := strconv.Atoi(minute)
if imin < 10 {
return "oh " + oneToTen(minute)
}
if imin > 10 && imin < 16 {
switch imin {
case 11:
return "eleven"
case 12:
return "twelve"
case 13:
return "thirteen"
case 14:
return "fourteen"
default:
return "fifteen"
}
}
tens, ones := UnpackPair(minute, "")
if imin < 20 {
return oneToTen(ones) + "teen"
}
itens, _ := strconv.Atoi(tens)
switch itens {
case 2:
tens = "twenty"
case 3:
tens = "thirty"
case 4:
tens = "fourty"
default:
tens = "fifty"
}
if i, _ := strconv.Atoi(ones); i == 0 {
return tens
}
return tens + " " + oneToTen(ones)
}
func UnpackPair(str string, sep string) (string, string) {
split := strings.SplitN(str, sep, 2)
if len(split) == 1 {
return split[0], ""
}
return split[0], split[1]
}
cGFja2FnZSBtYWluCgoJaW1wb3J0ICgKCQkiZm10IgoJCSJzdHJjb252IgoJCSJzdHJpbmdzIgoJKQoKCWZ1bmMgbWFpbigpIHsKCQlmbXQuUHJpbnRsbihUYWxraW5nQ2xvY2soIjAwOjAwIikpCgkJZm10LlByaW50bG4oVGFsa2luZ0Nsb2NrKCIwMTozMCIpKQoJCWZtdC5QcmludGxuKFRhbGtpbmdDbG9jaygiMTI6MDUiKSkKCQlmbXQuUHJpbnRsbihUYWxraW5nQ2xvY2soIjE0OjAxIikpCgkJZm10LlByaW50bG4oVGFsa2luZ0Nsb2NrKCIyMDoyOSIpKQoJCWZtdC5QcmludGxuKFRhbGtpbmdDbG9jaygiMjE6MDAiKSkKCX0KCglmdW5jIFRhbGtpbmdDbG9jayh0aW1lIHN0cmluZykgc3RyaW5nIHsKCQlob3VyLCBtaW51dGUgOj0gVW5wYWNrUGFpcih0aW1lLCAiOiIpCgoJCXBlcmlvZCA6PSAiYW0iCgkJaWYgaSwgXyA6PSBzdHJjb252LkF0b2koaG91cik7IGkgPj0gMTIgewoJCQlob3VyID0gc3RyY29udi5JdG9hKGkgLSAxMikKCQkJcGVyaW9kID0gInBtIgoJCX0KCgkJaWYgbWludXRlID09ICIwMCIgewoJCQlyZXR1cm4gIkl0J3MgIiArIEhvdXJUb1dvcmRzKGhvdXIpICsgIiAiICsgcGVyaW9kCgkJfQoKCQlyZXR1cm4gIkl0J3MgIiArIEhvdXJUb1dvcmRzKGhvdXIpICsgIiAiICsgTWludXRlVG9Xb3JkcyhtaW51dGUpICsgIiAiICsgcGVyaW9kCgl9CgoJZnVuYyBvbmVUb1RlbihuIHN0cmluZykgc3RyaW5nIHsKCQlpLCBfIDo9IHN0cmNvbnYuQXRvaShuKQoJCXN3aXRjaCBpIHsKCQljYXNlIDE6CgkJCXJldHVybiAib25lIgoJCWNhc2UgMjoKCQkJcmV0dXJuICJ0d28iCgkJY2FzZSAzOgoJCQlyZXR1cm4gInRocmVlIgoJCWNhc2UgNDoKCQkJcmV0dXJuICJmb3VyIgoJCWNhc2UgNToKCQkJcmV0dXJuICJmaXZlIgoJCWNhc2UgNjoKCQkJcmV0dXJuICJzaXgiCgkJY2FzZSA3OgoJCQlyZXR1cm4gInNldmVuIgoJCWNhc2UgODoKCQkJcmV0dXJuICJlaWdodCIKCQljYXNlIDk6CgkJCXJldHVybiAibmluZSIKCQlkZWZhdWx0OgoJCQlyZXR1cm4gInRlbiIKCQl9Cgl9CgoJZnVuYyBIb3VyVG9Xb3Jkcyhob3VyIHN0cmluZykgc3RyaW5nIHsKCQlpLCBfIDo9IHN0cmNvbnYuQXRvaShob3VyKQoJCXN3aXRjaCBpIHsKCQljYXNlIDA6CgkJCXJldHVybiAidHdlbHZlIgoJCWNhc2UgMTE6CgkJCXJldHVybiAiZWxldmVuIgoJCWRlZmF1bHQ6CgkJCXJldHVybiBvbmVUb1Rlbihob3VyKQoJCX0KCX0KCglmdW5jIE1pbnV0ZVRvV29yZHMobWludXRlIHN0cmluZykgc3RyaW5nIHsKCQlpZiBtaW51dGUgPT0gIjAwIiB7CgkJCXJldHVybiAiIgoJCX0KCgkJaWYgbWludXRlID09ICIxMCIgewoJCQlyZXR1cm4gInRlbiIKCQl9CgoJCWltaW4sIF8gOj0gc3RyY29udi5BdG9pKG1pbnV0ZSkKCgkJaWYgaW1pbiA8IDEwIHsKCQkJcmV0dXJuICJvaCAiICsgb25lVG9UZW4obWludXRlKQoJCX0KCgkJaWYgaW1pbiA+IDEwICYmIGltaW4gPCAxNiB7CgkJCXN3aXRjaCBpbWluIHsKCQkJY2FzZSAxMToKCQkJCXJldHVybiAiZWxldmVuIgoJCQljYXNlIDEyOgoJCQkJcmV0dXJuICJ0d2VsdmUiCgkJCWNhc2UgMTM6CgkJCQlyZXR1cm4gInRoaXJ0ZWVuIgoJCQljYXNlIDE0OgoJCQkJcmV0dXJuICJmb3VydGVlbiIKCQkJZGVmYXVsdDoKCQkJCXJldHVybiAiZmlmdGVlbiIKCQkJfQoJCX0KCgkJdGVucywgb25lcyA6PSBVbnBhY2tQYWlyKG1pbnV0ZSwgIiIpCgoJCWlmIGltaW4gPCAyMCB7CgkJCXJldHVybiBvbmVUb1RlbihvbmVzKSArICJ0ZWVuIgoJCX0KCgkJaXRlbnMsIF8gOj0gc3RyY29udi5BdG9pKHRlbnMpCgkJc3dpdGNoIGl0ZW5zIHsKCQljYXNlIDI6CgkJCXRlbnMgPSAidHdlbnR5IgoJCWNhc2UgMzoKCQkJdGVucyA9ICJ0aGlydHkiCgkJY2FzZSA0OgoJCQl0ZW5zID0gImZvdXJ0eSIKCQlkZWZhdWx0OgoJCQl0ZW5zID0gImZpZnR5IgoJCX0KCgkJaWYgaSwgXyA6PSBzdHJjb252LkF0b2kob25lcyk7IGkgPT0gMCB7CgkJCXJldHVybiB0ZW5zCgkJfQoKCQlyZXR1cm4gdGVucyArICIgIiArIG9uZVRvVGVuKG9uZXMpCgl9CgoJZnVuYyBVbnBhY2tQYWlyKHN0ciBzdHJpbmcsIHNlcCBzdHJpbmcpIChzdHJpbmcsIHN0cmluZykgewoJCXNwbGl0IDo9IHN0cmluZ3MuU3BsaXROKHN0ciwgc2VwLCAyKQoJCWlmIGxlbihzcGxpdCkgPT0gMSB7CgkJCXJldHVybiBzcGxpdFswXSwgIiIKCQl9CgkJcmV0dXJuIHNwbGl0WzBdLCBzcGxpdFsxXQoJfQ==