Este desafio é baseado neste vídeo . Eu recomendo que você assista antes de tentar este desafio.
Primeiro, definimos uma função. Esta função ( OEIS ) recebe um número inteiro n como entrada e gera o número de letras na representação em inglês de n (sem espaços ou hífens). Por exemplo, "três" tem 5 letras, portanto, 3 mapeia para 5.
Conforme demonstrado no vídeo, iniciando com qualquer número que se repita, esse processo resultará em quatro, que serão mapeados para si mesmos para sempre.
Aqui está um gráfico direcionado bruto mostrando as órbitas dos números menores que 16:
12 11
\|
15 2 6 1 10 14 13
\ \|/ / / /
7 3-/ 8--/
\| /
9 0 5--/
\ \|
\-4
Seu desafio é determinar o número de etapas que um número executará (ou o número de vezes que essa função deve ser aplicada a um número) antes de atingir quatro (ou seja, o nível no gráfico direcionado na foto).
Formando números em inglês
Aqui está uma breve explicação de como se deve formar palavras em inglês para este desafio:
Os números de um a dezenove são:
um, dois, três, quatro, cinco, seis, sete, oito, nove, dez, onze, doze, treze, quatorze, quinze, dezesseis, dezessete, dezoito, dezenove
Para números maiores que dezenove, o processo é o seguinte:
Se o número tiver centenas, comece com o nome do dígito na casa das centenas e "cem".
por exemplo
100 -> "onehundred"
Se o restante for menor que vinte, acrescente a representação em inglês do restante.
por exemplo
714 -> "sevenhundredfourteen"
Caso contrário, se o dígito das dezenas não for zero, acrescente a representação adequada:
2-> twenty
3-> thirty
4-> forty
5-> fifty
6-> sixty
7-> seventy
8-> eighty
9-> ninety
por exemplo
470 -> "fourhundredseventy"
Finalmente, se houver um dígito, acrescente sua representação
por exemplo
681 -> "sixhundredeightyone"
Outras estipulações
Para números maiores que cem, você deve deixar de lado o "e" ao contar o número de letras. Por exemplo, 577 é "quinhentos e sete até sete", que tem 23 letras.
Seu programa deve aceitar todos os números inteiros maiores que 0 e menores que 1.000 como entrada por métodos padrão.
Seu programa deve gerar o número de etapas necessárias para os métodos de saída padrão.
Este é um codegolf, e a solução com o menor número de bytes vence.
Casos de teste
1 -> 3
4 -> 0
7 -> 2
23 -> 5
577 -> 6
600 -> 4