Das Puzzle
Ein kleines Rätsel, das ich während meiner Schulzeit gehört habe, ging ungefähr so ...
- Der Fragesteller würde mich bitten, ihm eine Nummer zu geben;
- Wenn der Fragesteller die Zahl hört, führt er wiederholt eine Art Transformation durch (zum Beispiel könnte er sagen, zehn ist drei ), bis er schließlich die Zahl 4 erreicht (an diesem Punkt würde er mit vier abschließen, ist magisch ).
- Jede Zahl scheint schließlich in vier umwandelbar zu sein, egal was passiert.
Ziel war es, die Transformationsfunktion herauszufinden und dieses Rätsel dann selbst zuverlässig zu lösen.
Die Lösung
Die Transformationsfunktion bei jedem Schritt war zu
- Nehmen Sie die betreffende Nummer,
- Zählen Sie die Anzahl der Buchstaben in der englischen Wortdarstellung, ignorieren Sie einen Bindestrich oder Leerzeichen oder "und" (z. B. "zehn" enthält 3 Buchstaben, "vierunddreißig" enthält 10 Buchstaben, "einhundertdreiundvierzig"). enthält 20 Buchstaben).
- Geben Sie diese Anzahl von Buchstaben zurück.
Für alle Zahlen, die ich jemals testen wollte, konvergiert dies gegen 4. Da "vier" auch vier Buchstaben enthält, würde es hier eine Endlosschleife geben; Stattdessen wird es lediglich konventionell als Magie bezeichnet , um die Sequenz zu beenden.
Die Herausforderung
Ihre Herausforderung besteht darin, einen Code zu erstellen, der eine Zahl vom Benutzer liest und dann Zeilen druckt, in denen die Transformationsfunktion wiederholt angewendet wird, bis "Vier ist Magie" erreicht ist.
Speziell:
- Lösungen müssen vollständige Programme an und für sich sein. Sie können nicht nur Funktionen sein, die einen Zahlenfaktor in der Eingabe berücksichtigen.
- Die Eingabe muss von der Standardeingabe gelesen werden. (Piping von "Echo" oder die Verwendung der Eingangsumleitung ist in Ordnung, da dies auch von stdin geht)
- Die Eingabe sollte in numerischer Form erfolgen.
- Für jede Anwendung der Transformationsfunktion sollte eine Zeile gedruckt werden:
a is b.
wobei a und b numerische Formen der Zahlen in der Transformation sind. - Punkte (Perioden) sind erforderlich!
- Die letzte Zeile sollte natürlich sagen ,
4 is magic.
. - Der Code sollte für alle Zahlen von 0 bis 99 eine korrekte Ausgabe erzeugen .
Beispiele:
> 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.
Der Gewinner ist die kürzeste Einsendung nach Anzahl der Quellcodezeichen, was ebenfalls korrekt ist .
BONUS
Sie können auch versuchen, bei jeder Anwendung der Transformationsfunktion eine Version des Codes zu schreiben, die die ENGLISCHEN NAMEN für die Zahlen ausgibt. Die ursprüngliche Eingabe ist immer noch numerisch, aber die Ausgabezeilen sollten die Wortform der Zahl haben.
(Doppelter Bonus für das Zeichnen von Formen mit Ihrem Code)
(EDIT) Einige Klarstellungen:
- Ich möchte, dass das Wort in allen zutreffenden Fällen auf beiden Seiten erscheint, z
Nine is four. Four is magic.
- Die Kapitalisierung ist mir jedoch egal. Und es ist mir egal, wie Sie die Wort-Token trennen, obwohl sie getrennt werden sollten:
ninety-nine
ist in Ordnung,ninety nine
ist in Ordnung,ninetynine
ist nicht in Ordnung.
Ich betrachte diese Kategorie als separate Kategorie für den Bonuswettbewerb in Bezug auf die Herausforderung. Wenn Sie sich also dafür entscheiden, machen Sie sich keine Sorgen, dass Ihr Code länger als die numerische Version ist.
Sie können gerne eine Lösung für jede Version einreichen.