O quebra-cabeça
Um pequeno quebra-cabeça que ouvi quando estava no colégio foi mais ou menos assim ...
- O questionador pedia que eu desse um número;
- Ao ouvir o número, o questionador faria algum tipo de transformação nele repetidamente (por exemplo, ele poderia dizer que dez é três ) até finalmente chegar ao número 4 (nesse ponto ele terminaria com quatro é mágico ).
- Qualquer número parece ser transformável em quatro eventualmente, não importa o quê.
O objetivo era tentar descobrir a função de transformação e, então, ser capaz de supervisionar esse quebra-cabeça de maneira confiável.
A solução
A função de transformação em qualquer etapa era
- Pegue o número em questão,
- Conte o número de letras em sua representação de palavra em inglês, ignorando um hífen ou espaços ou "e" (por exemplo, "dez" tem 3 letras, "trinta e quatro" tem 10 letras, "cento e quarenta e três" tem 20 letras).
- Retorne aquele número de letras.
Para todos os números que já me preocupei em testar, isso converge para 4. Como "quatro" também tem quatro letras, haveria um loop infinito aqui; em vez disso, é apenas referido como mágica por convenção para encerrar a sequência.
O desafio
Seu desafio é criar um pedaço de código que lerá um número do usuário e então imprimirá linhas mostrando a função de transformação sendo aplicada repetidamente até que "quatro é mágico" seja alcançado.
Especificamente:
- As soluções devem ser programas completos por si mesmas. Eles não podem ser meramente funções que recebem um número - fator na entrada.
- A entrada deve ser lida a partir da entrada padrão. (Canalizar de "echo" ou usar redirecionamento de entrada é bom, pois também vai de stdin)
- A entrada deve ser em formato numérico.
- Para cada aplicação da função de transformação, uma linha deve ser impressa:,
a is b.
onde a e b são as formas numéricas dos números na transformação. - Paradas completas (períodos) SÃO obrigatórios!
- A última linha deve naturalmente dizer
4 is magic.
,. - O código deve produzir uma saída correta para todos os números de 0 a 99 .
Exemplos:
> 4
4 is magic.
> 12
12 is 6.
6 is 3.
3 is 5.
5 is 4.
4 is magic.
> 42
42 is 8.
8 is 5.
5 is 4.
4 is magic.
> 0
0 is 4.
4 is magic.
> 99
99 is 10.
10 is 3.
3 is 5.
5 is 4.
4 is magic.
O vencedor é o envio mais curto por contagem de caracteres do código-fonte, que também está correto .
BÔNUS
Você também pode tentar escrever uma versão do código que imprima os NOMES EM INGLÊS para os números com cada aplicação da função de transformação. A entrada original ainda é numérica, mas as linhas de saída devem ter a forma de palavra do número.
(Bônus duplo para desenhar formas com seu código)
(EDIT) Alguns esclarecimentos:
- Eu quero que a palavra apareça em ambos os lados em todos os casos aplicáveis, por exemplo
Nine is four. Four is magic.
- Não me importo com letras maiúsculas, no entanto. E eu não me importo como você separa as palavras tokens, embora elas devam ser separadas:
ninety-nine
está certo,ninety nine
está certo,ninetynine
não está certo.
Estou considerando isso como uma categoria separada para competição de bônus no que diz respeito ao desafio, então, se você for para isso, não se preocupe com o seu código ser mais longo do que a versão numérica.
Sinta-se à vontade para enviar uma solução para cada versão.