You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.7 KiB
59 lines
1.7 KiB
#essentially an "english" number parser.
|
|
#count the letter counts of something like 399 "Three hundred and ninety nine"
|
|
#don't count spaces, hyphens
|
|
|
|
# one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve,
|
|
# thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen
|
|
ones_word_count_dict = {1: 3, 2: 3, 3: 5, 4: 4, 5: 4, 6: 3, 7: 5, 8: 5, 9: 4, 10: 3, 11: 6, 12:6,
|
|
13: 8, 14: 8, 15: 7, 16: 7, 17: 9, 18: 8, 19: 8}
|
|
|
|
# ten, twenty, thirty, forty, fifty, sixty, seventy, eighty, ninety
|
|
tens_word_count_dict = {1: 3, 2: 6, 3: 6, 4: 5, 5: 5, 6: 5, 7: 7, 8: 6, 9: 6}
|
|
|
|
hundred_letter_count = 7
|
|
and_letter_count = 3
|
|
|
|
def countLetters(number):
|
|
letter_count = 0
|
|
|
|
if number == 1000:
|
|
return 11
|
|
|
|
#count hundreds
|
|
hundreds = int(number / 100)
|
|
if hundreds > 0:
|
|
letter_count += hundred_letter_count
|
|
letter_count += ones_word_count_dict[hundreds]
|
|
|
|
number -= hundreds * 100
|
|
|
|
# if the number is a "teen"
|
|
if number < 20 and number > 0:
|
|
if hundreds > 0:
|
|
letter_count += and_letter_count
|
|
letter_count += ones_word_count_dict[number]
|
|
return letter_count
|
|
|
|
# if the number was an even 0
|
|
elif number == 0:
|
|
return letter_count
|
|
|
|
# there is a tens and later a ones value
|
|
else:
|
|
if hundreds > 0:
|
|
letter_count += and_letter_count
|
|
|
|
tens = int(number / 10)
|
|
letter_count += tens_word_count_dict[tens]
|
|
|
|
number -= tens * 10
|
|
if number != 0:
|
|
letter_count += ones_word_count_dict[number]
|
|
return letter_count
|
|
|
|
|
|
sum_letters = 0
|
|
for i in range(1, 1001):
|
|
sum_letters += countLetters(i)
|
|
|
|
print(sum_letters) |