Inspirado no Projeto Euler # 17 , este é o seu desafio. Escreva um programa ou função completa que use um número como entrada e imprima ou retorne quantas letras seriam necessárias para contar até e incluindo esse número em inglês (começando em um). Você não inclui espaços, vírgulas ou hífens, mas deve incluir a palavra and
. Por exemplo. 342 está escrito: Three Hundred and Forty-Two
. São 23 letras.
Sua entrada será um número inteiro positivo. Você não precisa lidar com entradas inválidas. Built-ins ou bibliotecas que convertem números em inglês não são permitidos.
Aqui estão todas as regras de como escrever números. (Observação: percebo que algumas pessoas usam um conjunto diferente de regras para escrever números. Essas serão apenas as regras oficiais para o objetivo deste desafio)
1 a 20
um, dois, três, quatro, cinco, seis, sete, oito, nove, dez, onze, doze, treze, quatorze, quinze, dezesseis, dezessete, dezoito, dezenove, vinte
21 a 99
Junte-se a estes:
Vinte, trinta, quarenta, cinquenta, sessenta, setenta, oitenta, noventa
para estes:
-um, dois, três, quatro, cinco e cinco, seis, sete, oito e nove,
Note que quatro tem u, mas quarenta não!
Exemplos:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
100 a 999
Escreva quantas centenas (cem, duzentos, trezentos etc.), um " e " e o restante do número, como acima. O e conta para a pontuação da sua letra.
Exemplos:
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
Escreva quantos milhares (mil, dois mil etc.), uma vírgula e o restante do número, como acima. Observe que, se você não tiver centenas, ainda precisará do e .
Exemplos:
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
Milhões
Escreva quantos milhões e o restante do número acima. Observe que "Um milhão" é 6 zeros "1.000.000".
Exemplos:
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
A mesma regra se aplica a bilhões, trilhões, quadrilhões e acima, mas para o objetivo deste desafio, você não precisa lidar com números acima de 999.999.999 (novecentos e noventa e nove milhões, novecentos e noventa e nove mil, novecentos e noventa e nove.)
Solucionador de Python
Aqui está um pequeno script python para verificar as respostas:
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
Observe que isso utiliza a biblioteca de linguística NodeBox para converter números em inglês. (sim, acabei de quebrar minha própria regra, mas essa não é uma resposta competitiva) Isso está disponível gratuitamente aqui .
E / S de amostra
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174
Respostas:
Python 2,
266259236229228 bytesIsso funciona para todas as entradas abaixo de um bilhão. Isso funciona para todos os casos de teste.
Para modificá-lo para caber na pergunta conforme indicado (por exemplo, não trate números que terminem com 100 especiais), substitua o número 101 no final da primeira linha por 100.
Explicação:
fonte