python-euler/solutions/017/numberlettercounts.py

74 lines
1.8 KiB
Python

numberWord = {
0: '',
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',
20: 'twenty',
30: 'thirty',
40: 'forty',
50: 'fifty',
60: 'sixty',
70: 'seventy',
80: 'eighty',
90: 'ninety',
100: 'onehundred',
200: 'twohundred',
300: 'threehundred',
400: 'fourhundred',
500: 'fivehundred',
600: 'sixhundred',
700: 'sevenhundred',
800: 'eighthundred',
900: 'ninehundred',
1000: 'onethousand'
}
andString = "and"
numberString = ""
for i in range (1,21):
numberString += numberWord[i]
for i in range (21,1001):
ones = i % 10
tens = i % 100 - ones
huns = i - tens - ones
numberStringInProgress = ""
if i == 20 or i == 30 or i == 40 or i == 50 or i == 60 or i == 70 or i == 80 or i == 90 or i == 100 or i == 200 or i == 300 or i == 400 or i == 500 or i == 600 or i == 700 or i == 800 or i == 900 or i == 1000:
numberString += numberWord[i]
else:
if i > 100:
numberStringInProgress += numberWord[huns]
numberStringInProgress += andString
if tens >= 20 or tens == 0:
numberStringInProgress += numberWord[tens]
numberStringInProgress += numberWord[ones]
elif tens == 10:
numberStringInProgress += numberWord[tens+ones]
numberString += numberStringInProgress
print("The length of all the numbers from 1 to 1000 (inclusive) written out in words is " + str(len(numberString)) + " letters.")