Inspirado por el Proyecto Euler # 17 , este es tu desafío. Escriba un programa o función completa que tome un número como entrada, luego imprima o devuelva cuántas letras se necesitarían para contar e incluir ese número en inglés (comenzando en uno). No incluye espacios, comas o guiones, pero debe incluir la palabra and
. Por ejemplo. 342 se escribe: Three Hundred and Forty-Two
. Esto tiene 23 letras de largo.
Su entrada será un número entero positivo. No tiene que manejar entradas inválidas. No se permiten las incorporadas o las bibliotecas que convierten números al inglés.
Aquí están todas las reglas sobre cómo deletrear números. (Nota: me doy cuenta de que algunas personas usan un conjunto diferente de reglas sobre cómo deletrear números. Estas serán solo las reglas oficiales para el propósito de este desafío)
1 a 20
uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, diez, once, doce, trece, catorce, quince, dieciseis, diecisiete, dieciocho, diecinueve, veinte
21 a 99
Únete a estos:
Veinte, treinta, cuarenta, cincuenta, sesenta, setenta, ochenta, noventa
a estos:
-uno, -dos, -tres, -cuatro, -cinco, -seis, -seven, -ocho,-nueve,
Tenga en cuenta que cuatro tiene un u pero cuarenta no!
Ejemplos:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
100 a 999
Escribe cuántos cientos (cien, doscientos, trescientos, etc.), una " y ", y el resto del número como arriba. El y cuenta para su puntaje de letras.
Ejemplos:
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
Escribe cuántos miles (mil, dos mil, etc.), una coma, luego el resto del número como se indica arriba. Tenga en cuenta que si no tiene cientos, aún necesita el y .
Ejemplos:
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
Millones
Escribe cuántos millones, luego el resto del número como arriba. Tenga en cuenta que "Un millón" es 6 ceros "1,000,000".
Ejemplos:
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 misma regla se aplica a miles de millones, billones, cuatrillones y más, pero para el propósito de este desafío, no tiene que manejar ningún número por encima de 999,999,999 (Novecientos noventa y nueve millones, novecientos noventa y nueve mil, novecientos noventa y nueve.)
Solucionador de Python
Aquí hay un breve script de Python para verificar las respuestas:
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
Tenga en cuenta que esto utiliza la biblioteca de lingüística NodeBox para convertir números al inglés. (sí, acabo de romper mi propia regla, pero esta no es una respuesta competitiva) Esto está disponible gratuitamente aquí .
Muestra de E / S
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174
Respuestas:
Python 2,
266259236229228 bytesEsto funciona para todas las entradas por debajo de mil millones. Esto funciona para todos los casos de prueba.
Para modificarlo para que se ajuste a la pregunta como se indica (por ejemplo, no trate los números que terminan con 100 especiales) simplemente reemplace el número 101 al final de la primera línea con 100.
Explicación:
fuente