Skip to content

Instantly share code, notes, and snippets.

@possibly-wrong
Created August 13, 2019 11:29
Show Gist options
  • Save possibly-wrong/557f02d255b9f9c17395d1e6e74cbe98 to your computer and use it in GitHub Desktop.
Save possibly-wrong/557f02d255b9f9c17395d1e6e74cbe98 to your computer and use it in GitHub Desktop.
mode = 2
# Convert integer to words.
if mode == 0:
units = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven',
'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen',
'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
tens = ['zero', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty',
'seventy', 'eighty', 'ninety']
powers = ['zero', 'thousand', 'million', 'billion', 'trillion',
'quadrillion', 'quintillion', 'sextillion', 'septillion', 'octillion',
'nonillion', 'decillion']
hundred = 'hundred'
minus = 'minus'
comma = ','
and_ = ' and'
space = ' '
hyphen = '-'
empty = ''
key = len
# Convert integer to number-of-words.
elif mode == 1:
units = [1 for n in range(20)]
tens = [1 for n in range(0, 100, 10)]
powers = [1 for n in range(12)]
hundred = 1
minus = 1
comma = 0
and_ = 1
space = 0
hyphen = 0
empty = 0
key = lambda n: n
# Convert integer to number-of-syllables.
elif mode == 2:
units = [2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, 3, 2, 2]
tens = [2, 1, 2, 2, 2, 2, 2, 3, 2, 2]
powers = [2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3]
hundred = 2
minus = 2
comma = 0
and_ = 1
space = 0
hyphen = 0
empty = 0
key = lambda n: n
def small_integer_name(n, use_and=False):
s = empty
if n >= 100:
q, n = divmod(n, 100)
s = units[q] + space + hundred + (
(and_ if use_and else empty) + space if n > 0 else empty)
if n >= 20:
q, n = divmod(n, 10)
s += tens[q] + (hyphen if n > 0 else empty)
return (s + units[n] if n > 0 else s)
def integer_name(n, use_comma=False, use_and=False, power=0):
if n < 0:
return minus + space + integer_name(-n, use_comma, use_and)
elif n == 0:
return units[0]
s = empty
if n >= 1000:
q, n = divmod(n, 1000)
s = integer_name(q, use_comma, use_and, power + 1) + (
(comma if use_comma else empty) + space if n > 0 else empty)
return (s + small_integer_name(n, use_and) +
(space + powers[power] if power > 0 else empty) if n > 0 else s)
print(sum(integer_name(n) for n in range(1, 1000001)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment