tasks a-s

This commit is contained in:
Ingy döt Net 2013-04-10 23:57:08 -07:00
parent 47bf37c096
commit b83f433714
12433 changed files with 156208 additions and 123 deletions

View file

@ -0,0 +1,48 @@
def spell_integer(n):
tens = [None, None, "twenty", "thirty", "forty",
"fifty", "sixty", "seventy", "eighty", "ninety"]
small = ["zero", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine", "ten", "eleven",
"twelve", "thirteen", "fourteen", "fifteen",
"sixteen", "seventeen", "eighteen", "nineteen"]
bl = [None, None, "m", "b", "tr", "quadr",
"quint", "sext", "sept", "oct", "non", "dec"]
def nonzero(c, n):
return "" if n == 0 else c + spell_integer(n)
def big(e, n):
if e == 0:
return spell_integer(n)
elif e == 1:
return spell_integer(n) + " thousand"
else:
return spell_integer(n) + " " + bl[e] + "illion"
def base1000_rev(n):
# generates the value of the digits of n in base 1000
# (i.e. 3-digit chunks), in reverse.
while n != 0:
n, r = divmod(n, 1000)
yield r
if n < 0:
return "negative " + spell_integer(-n)
elif n < 20:
return small[n]
elif n < 100:
a, b = divmod(n, 10)
return tens[a] + nonzero("-", b)
elif n < 1000:
a, b = divmod(n, 100)
return small[a] + " hundred" + nonzero(" ", b)
else:
return ", ".join([big(e, x) for e, x in
enumerate(base1000_rev(n)) if x][::-1])
# example
print spell_integer(1278)
print spell_integer(1752)
print spell_integer(2010)