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?
NOTE: Do not count spaces or hyphens. For example, \(342\) (three hundred and forty-two) contains \(23\) letters and \(115\) (one hundred and fifteen) contains \(20\) letters. The use of "and" when writing out numbers is in compliance with British usage.
We need to note how many times each word appears. I use the term "century" to denote the ranges 1-99, 100-199, 200-299, and so on up to 900-999.
def p17():
res = 0
# trailing and leading single digits
place1 = ['one', 'two', 'three', 'four', 'five', 'six', \
'seven', 'eight', 'nine']
res += sum(map(len, place1)) * 190
# teen words
place11 = ['ten', 'eleven', 'twelve', 'thirteen', \
'fourteen', 'fifteen', 'sixteen', \
'seventeen', 'eighteen', 'nineteen']
res += sum(map(len, place11)) * 10
# tens place words
place10 = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', \
'seventy', 'eighty', 'ninety']
res += sum(map(len, place10)) * 100
# "and"
res += len('and') * 891
# hundred"
res += len('hundred') * 900
# and finally:
res += len('one') + len('thousand')
return res