Le puzzle
Un petit casse-tête que j'ai entendu pendant que j'étais au lycée ressemblait à quelque chose comme ça ...
- L'intervenant me demandait de lui donner un numéro;
- En entendant le nombre, le questionneur ferait une sorte de transformation à plusieurs reprises (par exemple, il pourrait dire que dix est trois ) jusqu'à arriver finalement au nombre 4 (à quel point il finirait avec quatre est magique ).
- N'importe quel nombre semble éventuellement transformable en quatre, quoi qu'il arrive.
L'objectif était d'essayer de comprendre la fonction de transformation et de pouvoir ensuite surveiller de manière fiable ce puzzle vous-même.
La solution
La fonction de transformation à chaque étape était de
- Prends le numéro en question,
- Comptez le nombre de lettres dans sa représentation de mot anglais, en ignorant un trait d'union ou des espaces ou "et" (par exemple, "dix" a 3 lettres, "trente-quatre" a 10 lettres, "cent quarante-trois" contient 20 lettres).
- Renvoyez ce nombre de lettres.
Pour tous les nombres que j'ai jamais voulu tester, cela converge vers 4. Puisque "quatre" contient également quatre lettres, il y aurait une boucle infinie ici; au lieu de cela, on parle simplement de magie par convention pour terminer la séquence.
Le défi
Votre défi est de créer un morceau de code qui lira un nombre de l'utilisateur, puis imprimera des lignes montrant la fonction de transformation appliquée à plusieurs reprises jusqu'à ce que «quatre est magique» soit atteint.
Plus précisément:
- Les solutions doivent être des programmes complets en soi. Ils ne peuvent pas être simplement des fonctions qui prennent un nombre - facteur dans l'entrée.
- L'entrée doit être lue à partir de l'entrée standard. (La tuyauterie depuis "echo" ou l'utilisation de la redirection d'entrée est très bien puisque cela va également de stdin)
- L'entrée doit être sous forme numérique.
- Pour chaque application de la fonction de transformation, une ligne doit être imprimée:,
a is b.
où a et b sont des formes numériques des nombres dans la transformation. - Des arrêts complets (périodes) SONT obligatoires!
- La dernière ligne devrait dire naturellement,
4 is magic.
. - Le code doit produire une sortie correcte pour tous les nombres de 0 à 99 .
Exemples:
> 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.
Le gagnant est la soumission la plus courte par nombre de caractères du code source qui est également correct .
PRIME
Vous pouvez également essayer d'écrire une version du code qui imprime les NOMS EN ANGLAIS pour les nombres à chaque application de la fonction de transformation. L'entrée d'origine est toujours numérique, mais les lignes de sortie doivent avoir la forme mot du nombre.
(Double bonus pour dessiner des formes avec votre code)
(EDIT) Quelques clarifications:
- Je veux que le mot apparaisse des deux côtés dans tous les cas applicables, par exemple
Nine is four. Four is magic.
- Je me fiche de la capitalisation, cependant. Et je me fiche de la façon dont vous séparez les mots jetons, même s'ils devraient être séparés:
ninety-nine
c'est bien,ninety nine
c'est bien,ninetynine
n'est pas bien.
Je les considère comme une catégorie distincte pour la compétition de bonus en ce qui concerne le défi, donc si vous optez pour cela, ne vous inquiétez pas que votre code soit plus long que la version numérique.
N'hésitez pas à soumettre une solution pour chaque version.