• + 0 comments

    Python3, not the best solution anyway

    numbers = {
        0: 'zero',
        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',
        21: 'twenty one',
        22: 'twenty two',
        23: 'twenty three',
        24: 'twenty four',
        25: 'twenty five',
        26: 'twenty six',
        27: 'twenty seven',
        28: 'twenty eight',
        29: 'twenty nine',
        30: 'thirty',
    }
    
    def hour_to_word(h):
        return numbers.get(h)
    
    def minutes_to_word(m):
        if not 0 < m < 60:
            raise ValueError("Wrong value for minutes.")
        
        if m == 15 or m == 45:
            return "quarter"
        elif m == 30:
            return "half"
        else:
            minutes = m if m <= 30 else 60-m
            end_word = 'minute' if minutes == 1 else 'minutes'
            return f"{numbers.get(minutes)} {end_word}"
        
    
    def timeInWords(h, m):
        if m == 0:
            return f"{hour_to_word(h)} o' clock"
        elif m <= 30:
            return f"{minutes_to_word(m)} past {hour_to_word(h)}"
        else:
            hour = h % 12 + 1
            return f"{minutes_to_word(m)} to {hour_to_word(hour)}"****