In der Chaostheorie ist die Hufeisenkarte ein Beispiel dafür, wie Chaos in einem einfachen Prozess des Faltens und Quetschens entsteht. Es geht so: Nehmen Sie ein imaginäres Stück Teig, falten Sie es und zerdrücken Sie es schließlich auf seine ursprüngliche Größe. Chaos entsteht in dem Muster, wie die Teigstücke nach n Iterationen in der endgültigen Anordnung enden.
In unserem Fall schauen wir uns an, wie sich ein einfaches binäres Muster verhält, wenn wir es falten und quetschen . Hier sind die Schritte mit einem 8-Bit-Beispiel (die binäre Darstellung von 201 oder 11001001
).
Schneiden Sie die Bits in zwei gleich lange Stücke (fügen Sie am Anfang eine '0' hinzu, wenn eine ungerade Anzahl von Bits vorhanden ist).
1100 | 1001
Falten Sie die erste Hälfte über die zweite Hälfte. Beachten Sie, dass die Reihenfolge der ersten Hälfte umgekehrt ist, da wir sie beim Falten drehen.
0011
1001
Squash in seine ursprüngliche Form. Während des Quetschens werden die oberen Bits unter ihrer ursprünglichen Position nach links zu den Bits verschoben.
01001011
Wenn wir dies für dieses Beispiel wiederholen, können wir sehen, dass wir nach 4 Iterationen wieder zur ursprünglichen Bitfolge zurückkehren:
Start bits: 11001001
Iteration 1: 01001011
Iteration 2: 01001101
Iteration 3: 01011001
Iteration 4: 11001001
Für den Dezimalwert von 201 beträgt die Anzahl der Zyklen also 4.
Die Herausforderung
- Schreiben Sie ein vollständiges Programm, das eine Dezimalzahl als Eingabe verwendet und die Anzahl der Zyklen ausgibt, die zum Wiederholen im oben beschriebenen binären Squash-and-Fold-Prozess erforderlich sind.
- Die (Dezimal-) Eingabe muss von stdin stammen (Bereich: von 1 bis Googol oder 10 ^ 100).
- Die (Dezimal-) Ausgabe muss in stdout geschrieben werden.
- Ihre Punktzahl ist die Anzahl der Bytes Ihres Codes.
- Ihre Antwort muss mit [Programmiersprache] - [Punktzahl in Bytes] beginnen.
- Standardlücken sind nicht erlaubt.
Beispiele
7 --> 3
43 --> 5
178 --> 4
255 --> 1
65534 --> 1
65537 --> 12
1915195950546866338219593388801304344938837974777392666909760090332935537657862595345445466245217915 --> 329
Schlussbemerkung
Interessant ist, dass die Anzahl der Zyklen mit der Länge der Binärdarstellung zusammenhängt, mit Ausnahme einiger Ausnahmen, bei denen die Anzahl der Zyklen aufgrund des Musters in der Bitfolge kürzer ist (z. B. 111110
Zyklen nach 1 Iteration). Dies bietet eine interessante Möglichkeit, die Codelänge mithilfe des zugrunde liegenden Musters zu optimieren, anstatt die Anzahl der Zyklen zu berechnen.
Antworten:
CJam, 34 Bytes
Nichts Besonderes, es wendet nur die Karte an, bis wir zur Eingabe zurückkehren und die Anzahl der Iterationen drucken, die benötigt wurden.
Testen Sie es hier.
quelle
Python 2,
175154149 BytesIdeone Link
Vielen Dank an agtoever für 27 Bytes!
quelle
while i!=o|c==0
und lassen Sie das fallenif i==o:break
. Speichert 5. Vielleicht (beachten Sie sicher) brauchen Sie auch nichta
. Einfach benutzeni
. Speichert eine Zuordnung (4 Bytes). Auch die Zuordnung von j kann außerhalb der Schleife erfolgen.while i!=c|c==0
Ersatz zu implementieren , einen TypeError erhalten , konnte aber dennoch einige Bytes mit einem Standard- `oder` speichern.Pyth, 21 Bytes
Ich schreibe dies auf meinem Telefon. Bitte informieren Sie mich über Fehler.
Probieren Sie es online aus.
quelle