Ce défi est basé sur cette vidéo . Je vous recommande de le regarder avant d'essayer ce défi.
Nous définissons d'abord une fonction. Cette fonction ( OEIS ) prend un entier n en entrée et génère le nombre de lettres dans la représentation anglaise de n (sans espaces ni tirets). Par exemple, "trois" a 5 lettres, donc 3 correspond à 5.
Comme démontré dans la vidéo en commençant par un nombre répétitif, ce processus aboutira finalement à un quatre, qui se mappera pour lui-même pour toujours.
Voici un graphique orienté brut montrant les orbites des nombres inférieurs à 16:
12 11
\|
15 2 6 1 10 14 13
\ \|/ / / /
7 3-/ 8--/
\| /
9 0 5--/
\ \|
\-4
Votre défi est de déterminer le nombre d'étapes qu'un nombre prendra (ou le nombre de fois que cette fonction doit être appliquée à un nombre) avant d'atteindre quatre (c'est-à-dire le niveau sur le graphique dirigé illustré).
Former des nombres anglais
Voici une brève explication sur la façon de former des mots anglais pour ce défi:
Les nombres de un à dix-neuf sont:
un, deux, trois, quatre, cinq, six, sept, huit, neuf, dix, onze, douze, treize, quatorze, quinze, seize, dix-sept, dix-huit, dix-neuf
Pour les nombres supérieurs à dix-neuf, le processus est le suivant:
Si le nombre contient des centaines, commencez par le nom du chiffre à la place des centaines et «cent».
par exemple
100 -> "onehundred"
Si le reste est inférieur à vingt, ajoutez la représentation anglaise du reste.
par exemple
714 -> "sevenhundredfourteen"
Sinon, si le chiffre des dizaines n'est pas nul, ajoutez la représentation appropriée:
2-> twenty
3-> thirty
4-> forty
5-> fifty
6-> sixty
7-> seventy
8-> eighty
9-> ninety
par exemple
470 -> "fourhundredseventy"
Enfin, s'il y a un chiffre, ajoutez sa représentation
par exemple
681 -> "sixhundredeightyone"
Autres stipulations
Pour les nombres supérieurs à cent, vous devez omettre le "et" lors du comptage du nombre de lettres. Par exemple, 577 est "fivehundredseventyseven" qui contient 23 lettres.
Votre programme doit accepter tous les entiers supérieurs à 0 et inférieurs à 1 000 en entrée via des méthodes standard.
Votre programme doit générer le nombre d'étapes requises pour les méthodes de sortie standard.
Il s'agit de codegolf, donc la solution avec le moins d'octets est gagnante.
Cas de test
1 -> 3
4 -> 0
7 -> 2
23 -> 5
577 -> 6
600 -> 4