In this kata, you'll be given an integer of range `0 <= x <= 99` and have to return that number spelt out in English. A few examples:

```python
name_that_number(4)   # returns "four"
name_that_number(19)  # returns "nineteen"
name_that_number(99)  # returns "ninety nine"
```

Words should be separated by only spaces and not hyphens. No need to validate parameters, they will always be in the range [0, 99]. Make sure that the returned String has no leading of trailing spaces. Good luck!

Difficulty: introductory

Starter code:

def name_that_number(x):
	

Solutions:
WORDS = (
    (90, 'ninety'), (80, 'eighty'), (70, 'seventy'), (60, 'sixty'),
    (50, 'fifty'), (40, 'forty'), (30, 'thirty'), (20, 'twenty'),
    (19, 'nineteen'), (18, 'eighteen'), (17, 'seventeen'), (16, 'sixteen'),
    (15, 'fifteen'), (14, 'fourteen'), (13, 'thirteen'), (12, 'twelve'),
    (11, 'eleven'), (10, 'ten'), (9, 'nine'), (8, 'eight'), (7, 'seven'),
    (6, 'six'), (5, 'five'), (4, 'four'), (3, 'three'), (2, 'two'), (1, 'one')
)


def name_that_number(num):
    result = []
    for word_value, word_name in WORDS:
        quo, num = divmod(num, word_value)
        if quo:
            result.append(word_name)
    return ' '.join(result) or 'zero'

ONES = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine'}
TENS = {20: 'twenty', 30: 'thirty', 40: 'forty', 50: 'fifty', 60: 'sixty', 70: 'seventy', 80: 'eighty', 90: 'ninety'}
TEENS = {10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', 15: 'fifteen', 16: 'sixteen', 17: 'seventeen', 18: 'eighteen', 19: 'nineteen'} 


def name_that_number(x):
    if x < 10:
        return ONES[x]
    elif x < 20:
        return TEENS[x]
    t, o = divmod(x, 10)
    return " ".join((TENS[t*10], o and ONES[o] or '')).strip()

def name_that_number(x):
    d = {2: 'twenty', 3: 'thirty', 4: 'forty', 5: 'fifty',
         6: 'sixty', 7: 'seventy', 8: 'eighty', 9: 'ninety'}
    e = {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'}
    if x < 20:
        return e.get(x, None)

    else:
        return d.get(x // 10, '') +  (' ' + e.get(x % 10, '') if x % 10 != 0 else '')

numbers = [
    'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine',
    'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'
]
tens = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']

def name_that_number(x):
    if x < 20:
        return numbers[x]
    a, b = divmod(x - 20, 10)
    if b:
        return '{} {}'.format(tens[a], numbers[b])
    return tens[a]     

ENGLISH_NUMS = {
    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',
    15: 'fifteen',
    18: 'eighteen',
    20: 'twenty',
    30: 'thirty',
    40: 'forty',
    50: 'fifty',
    60: 'sixty',
    70: 'seventy',
    80: 'eighty',
    90: 'ninety'
}

def name_that_number(x):
    return ENGLISH_NUMS.get(x, ENGLISH_NUMS[x % 10] + 'teen' if x < 20 else ENGLISH_NUMS[x - x % 10] + ' ' + ENGLISH_NUMS[x % 10])

names = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 
    'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']

tens = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety']

def name_that_number(x):
    if x<20:
        return names[x]
    else:
        return tens[int(x/10)-2] + ((' ' + names[x%10]) if x%10>0 else '')

##func
def name_that_number(x):
    num1 = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten","eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]
    num2 = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
    
    if ((x >= 0) & (x < 20)):
      return num1[x]  
    else:
        if(x % 10 == 0):
            return num2[int(x / 10) - 2] + ""  
        else:
            return num2[int(x / 10) - 2] + " " + num1[x % 10]

def name_that_number(x):
    ones = {
            0 : "zero",
            1 : "one",
            2 : "two",
            3 : "three",
            4 : "four",
            5 : "five",
            6 : "six",
            7 : "seven",
            8 : "eight",
            9 : "nine"
            }
    
    teens = {
            11 : "eleven",
            12 : "twelve",
            13 : "thirteen",
            14 : "fourteen",
            15 : "fifteen",
            16 : "sixteen",
            17 : "seventeen",
            18 : "eighteen",
            19 : "nineteen"
            }
    
    tens = {
            10 : "ten",
            20 : "twenty",
            30 : "thirty",
            40 : "forty",
            50 : "fifty",
            60 : "sixty",
            70 : "seventy",
            80 : "eighty",
            90 : "ninety"
            }
    
    if x in ones:
        return ones[x]
    elif x in teens:
        return teens[x]
    else:
        out = tens[10 * (x//10)]
        if x % 10 != 0:
            out += " " + ones[x % 10]
        return out

def name_that_number(num):
    num_str = str(num)
    word_num = ['zero', "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven",
            "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]
    word_units = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
        
    if num < 20:
        return word_num[num]
    else:   
        first_digit = int(num_str[0]) - 2
        second_digit = int(num_str[1]) 
        if second_digit == 0:
            return word_units[first_digit]
        else:   
            return word_units[first_digit] + ' ' + word_num[second_digit]

lessThan20 = ["","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"]
tens = ["","ten","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"]

def name_that_number(n):
    if n==0: return "zero"
    return helper(n).strip()

def helper(n):
    if n<20: return lessThan20[n]+" "
    return tens[n//10]+" "+helper(n%10)