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!

Source: codewars | Difficulty: EASY
Tags: Fundamentals

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 '')


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)