• + 0 comments

    C#

    public string Method(int h, int m)
    {
        string result = "";
    
        var hour = Converter(h);
        var minutes = Converter(m);
        var s = m > 1 ? "s" : "";
    
        if (m == 0)
        {
            return result = $"{hour} {minutes}";
        }
    
        if (minutes == "half" || minutes == "quarter")
        {
            switch (m)
            {
                case <= 30:
                    result = $"{minutes} past {hour}";
                    break;
                default:
                    hour = Converter(h + 1);
                    result = $"{minutes} to {hour}";
                    break;
    
            }
        }
        else
        {
            switch (m)
            {
                case <= 30:
                    result = $"{minutes} minute{s} past {hour}";
                    break;
                default:
                    hour = Converter(h + 1);
                    result = $"{minutes} minute{s} to {hour}";
                    break;
    
            }
    
        }
    
        return result;
    }
    
    public string Converter(int number)
    {
        string result = "";
        string[] words = new string[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty" };
        string[] fractions = new string[] { "o' clock", "quarter", "half" };
    
        switch (number)
        {
            case 0:
                result = fractions[0];
                return result;
            case 15:
            case 45:
                result = fractions[1];
                return result;
            case 30:
                result = fractions[2];
                return result;
            case <= 20: // hours
                result = words[number];
                return result;
            default:
                var wholeNumber = "";
                var unitNumber = 0;
    
                // for minutes lower then 30
                if (number < 30)
                {
                    wholeNumber = number.ToString();
                    unitNumber = int.Parse(wholeNumber.Substring(1, 1));
                    result = $"{words[20]} {words[unitNumber]}";
                    return result;
                }
    
                // for minutes past 30
                var sum = 60 - number;
    
                if (sum <= 20)
                {
                    result = words[sum];
                    return result;
                }
                else if (sum < 30)
                {
                    wholeNumber = sum.ToString();
                    unitNumber = int.Parse(wholeNumber.Substring(1, 1));
                    result = $"{words[20]} {words[unitNumber]}";
    
                }
    
                return result;
        }
    
    }