Problème 16 "Nombre de caractères"
Si vous écrivez les nombres de 1 à 5 en anglais, c'est un, deux, trois, quatre, cinq et un total de 3 + 3 + 5 + 4 + 4 = 19 caractères sont utilisés. Ensuite, si vous écrivez tous les nombres de 1 à 1000 (mille) en anglais, combien de caractères seront au total? Remarque: ne comptez pas les caractères vides ou les traits d'union. Par exemple, 342 (trois cent quarante-deux) compte pour 23 caractères, 115 (cent quinze) compte pour 20 caractères. Notez que "et" est utilisé. Coutume britannique.
Python
# n = 5
n = 1000
numbers = {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", 1000:"one thousand"}
def number_to_word(num):
if num in numbers:
return numbers[num]
elif num < 100:
a = num % 10
b = (num // 10) * 10
return number_to_word(b) + "-" + number_to_word(a)
else:
a = num % 100
b = num // 100
if a == 0:
return number_to_word(b) + " hundred"
else:
return number_to_word(b) + " hundred and " + number_to_word(a)
def to_character_num(word):
return len(word.replace(" ", "").replace("-", ""))
seq = range(1, n+1)
words = map(number_to_word, seq)
result = sum(map(to_character_num, words))
print result
print result == 21124
print words[:6]
print words[-3:]
résultat
21124
True
['one', 'two', 'three', 'four', 'five', 'six']
['nine hundred and ninety-eight', 'nine hundred and ninety-nine', 'one thousand']
Recommended Posts