Ispirata al Project Euler # 17 , questa è la tua sfida. Scrivi un programma completo o una funzione che accetta un numero come input, quindi stampa o restituisci quante lettere ci vorrebbe per contare fino a includere quel numero in inglese (iniziando da uno). Non includere spazi, virgole o trattini, ma è necessario includere la parola and. Per esempio. 342 è farro: Three Hundred and Forty-Two. Sono lunghe 23 lettere.
Il tuo input sarà un numero intero positivo. Non è necessario gestire input non validi. Non sono consentiti built-in o librerie che convertono i numeri in inglese.
Ecco tutte le regole su come si scrive il numero. (Nota: mi rendo conto che alcune persone usano un diverso insieme di regole per come si scrive il numero. Queste saranno solo le regole ufficiali ai fini di questa sfida)
Da 1 a 20
uno, due, tre, quattro, cinque, sei, sette, otto, nove, dieci, undici, dodici, tredici, quattordici, quindici, sedici, diciassette, diciotto, diciannove, venti
21 a 99
Unisciti a questi:
Venti, trenta, quaranta, cinquanta, sessanta, settanta, ottanta, novanta
a questi:
-uno, -due, -three, -four, -five, -six, -seven, -eight, -nine,
Nota che quattro ha un u ma quaranta no!
Esempi:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
Da 100 a 999
Scrivi quante centinaia (cento, duecento, trecento, ecc.), Un " e " e il resto del numero come sopra. Il e conta per il punteggio della tua lettera.
Esempi:
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 a 999.999
Scrivi quante migliaia (mille, duemila, ecc.), Una virgola, quindi il resto del numero come sopra. Nota che se non ne hai centinaia, hai ancora bisogno di e .
Esempi:
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
milioni
Scrivi quanti milioni, poi il resto del numero come sopra. Si noti che "Un milione" è 6 zero "1.000.000".
Esempi:
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 stessa regola si applica a miliardi, trilioni, quadrilioni e oltre, ma ai fini di questa sfida, non è necessario gestire alcun numero superiore a 999.999.999 (Nove novecentonovantanove, Novecentonovantanove mila, novecentonovantanove.)
Risolutore di Python
Ecco un breve script Python per verificare le risposte:
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
Si noti che questo utilizza la libreria linguistica NodeBox per convertire i numeri in inglese. (sì, ho appena infranto la mia regola, ma questa non è una risposta concorrente) È disponibile gratuitamente qui .
I / O di esempio
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174