Skip to content

Instantly share code, notes, and snippets.

@kaipakartik
Created January 11, 2014 15:36
Show Gist options
  • Save kaipakartik/8372324 to your computer and use it in GitHub Desktop.
Save kaipakartik/8372324 to your computer and use it in GitHub Desktop.
If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total. If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?
singleDigits = ["zero","one","two","three","four","five","six","seven","eight","nine"]
tens = ["zero","ten","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"]
teens = ["zero"] * 11 + ["eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"]
hundredLength = len("hundred")
andLength = len("and")
singleDigits = [len(x) for x in singleDigits]
tens = [len(x) for x in tens]
teens = [len(x) for x in teens]
lengths = []
def getLength(number):
isTeen = False
originalNumber = number
l = []
if number / 100 > 0:
l.append(singleDigits[number/100])
l.append(hundredLength)
number = number % 100
if number > 0:
l.append(andLength)
if number / 10 > 0:
if number < 20 and number > 10:
l.append(teens[number])
isTeen = True
number = number % 10
else:
l.append(tens[number/10])
number = number % 10
if number > 0 and not isTeen:
l.append(singleDigits[number])
return sum(l)
for number in xrange(1, 1000):
lengths.append(getLength(number))
lengths.append(len("one"))
lengths.append(len("thousand"))
print sum(lengths)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment