Inspiré par le projet Euler # 17 , c'est votre défi. Écrivez un programme ou une fonction complète qui prend un nombre en entrée, puis imprimez ou renvoyez le nombre de lettres qu'il faudrait pour compter jusqu'à ce nombre en anglais (en commençant par un). Vous n'incluez pas d'espaces, de virgules ou de tirets, mais vous devez inclure le mot and
. Par exemple. 342 est orthographié: Three Hundred and Forty-Two
. Cela fait 23 lettres.
Votre entrée sera un entier positif. Vous n'avez pas à gérer les entrées non valides. Les bibliothèques intégrées ou convertissant des nombres en anglais ne sont pas autorisées.
Voici toutes les règles pour épeler les nombres. (Remarque: je me rends compte que certaines personnes utilisent un ensemble de règles différent pour orthographier les nombres. Ce ne seront que les règles officielles aux fins de ce défi)
1 à 20
un, deux, trois, quatre, cinq, six, sept, huit, neuf, dix, onze, douze, treize, quatorze, quinze, seize, dix-sept, dix-huit, dix-neuf, vingt
21 à 99
Rejoignez-les:
Vingt, trente, quarante, cinquante, soixante, soixante-dix, quatre-vingt, quatre-vingt-dix
à ceux-là:
-un, -two, -three, -four, -five, -six, -seven, -eight, -nine,
Notez que quatre a un u mais pas quarante !
Exemples:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
100 à 999
Écrivez combien de centaines (cent, deux cents, trois cents, etc.), un « et » et le reste du nombre comme ci-dessus. Le et compte pour votre score de lettre.
Exemples:
101: One hundred and one
116: One hundred and sixteen
144: One hundred and forty-four
212: Two hundred and twelve
621: Six Hundred and twenty-one
1 000 à 999 999
Écrivez combien de milliers (mille, deux mille, etc.), une virgule, puis le reste du nombre comme ci-dessus. Notez que si vous n'avez pas de centaines, vous avez toujours besoin des touches et .
Exemples:
1,101: One thousand, one hundred and one
15,016: Fifteen thousand and sixteen
362,928: Three hundred and sixty-two thousand, nine hundred and twenty-eight
Des millions
Écrivez combien de millions, puis le reste du nombre comme ci-dessus. Notez que "Un million" équivaut à 6 zéros "1 000 000".
Exemples:
191,232,891: One hundred and ninety-one million, two hundred and thirty-two thousand, eight hundred and ninety-one
1,006,101: One million, six thousand, one hundred and one
La même règle s'applique aux milliards, trillions, quadrillions et plus, mais pour ce défi, vous n'avez pas à gérer un nombre supérieur à 999 999 999 (neuf cent quatre-vingt-dix-neuf millions, neuf cent quatre-vingt-dix-neuf mille, neuf cent quatre-vingt-dix-neuf.)
Solveur Python
Voici un court script python pour vérifier les réponses:
import en
def get_letter_num(s):
count = 0
for c in s:
if c.isalpha():
count += 1
return count
number = input()
count = 0
for i in xrange(1, number + 1):
count += get_letter_num(en.number.spoken(i))
print count
Notez que cela utilise la bibliothèque linguistique NodeBox pour convertir les nombres en anglais. (oui, je viens d'enfreindre ma propre règle, mais ce n'est pas une réponse concurrente) Ceci est disponible gratuitement ici .
Exemple d'E / S
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174
Réponses:
Python 2,
266259236229228 octetsCela fonctionne pour tous les intrants inférieurs à un milliard. Cela fonctionne pour tous les cas de test.
Pour le modifier afin qu'il corresponde à la question comme indiqué (par exemple, ne traitez pas les nombres se terminant par 100 spéciaux), remplacez simplement le nombre 101 à la fin de la première ligne par 100.
Explication:
la source