Sie erhalten eine nicht negative Ganzzahl (Basis 9), die wie üblich aus den Ziffern 0 bis 8 besteht. Die Anzahl der Ziffern in dieser Zahl (ohne führende Nullen) ist jedoch ein Präfektenquadrat.
Aus diesem Grund kann die Nummer in einem quadratischen Raster angeordnet werden (wobei die Lesereihenfolge weiterhin erhalten bleibt).
Beispiel mit 1480 (1125 Base 10):
14
80
Lassen Sie nun jede Ziffer in einem solchen nichtären Gitter eine Bewegung in einen anderen Gitterraum anzeigen (mit periodischen Randbedingungen ):
432
501
678
Das sagt das
0 = stay still
1 = move right
2 = move right and up
3 = move up
...
8 = move right and down
Wenn Sie also im 1480-Raster bei der 4 beginnen, bewegen Sie sich nach oben (denken Sie an pbc) und nach links zur 8, was bedeutet, dass Sie sich nach rechts und unten zur 4 bewegen und einen Zyklus mit Periode 2 beginnen.
Im Allgemeinen wird dieser Vorgang fortgesetzt, bis Sie eine 0 erreichen oder ein Zyklus bemerkt wird. (Eine 0 wird als Zyklus mit Periode 1 betrachtet.)
Im Fall von 1480 beträgt die schließlich bei jeder der 4 Startziffern erreichte Periode 2 2 2 1jeweils.
Für ein größeres Gitter können diese Zahlen größer als 8 sein, aber wir können sie immer noch als "Ziffern" in einer neuen nicht-sekundären Zahl verwenden (einfach die Koeffizienten von 9 ^ n, als wären sie Ziffern):
2*9^3 + 2*9^2 + 2*9 + 1 = 1639 (base 10) = 2221 (base 9)
Wir werden dies die Stärke der ursprünglichen Nonary-Nummer nennen. Die Stärke von 1480 beträgt also 1639 (Basis 10) oder gleichwertig 2221 (Basis 9).
Herausforderung
Schreiben Sie das kürzeste Programm, das angibt, ob die Stärke einer Nicht-Zahl größer, kleiner oder gleich der Nicht-Zahl selbst ist. (Sie müssen die Stärke nicht unbedingt berechnen.)
Die Eingabe ist eine nicht negative nicht-sekundäre Zahl, die eine quadratische Anzahl von Ziffern enthält (und keine führenden Nullen außer dem Sonderfall 0 selbst). Es sollte von der Kommandozeile oder stdin kommen.
Die Ausgabe sollte wie folgt an stdout gehen:
G if the strength is larger than the original number (example: 1480 -> strength = 2221)
E if the strength is equal to the original number (example: 1 -> strength = 1)
L if the strength is less than the original number (example: 5 -> strength = 1)
Fun Bonus Challenge:
Was ist der höchste Input, den Sie finden können, der seiner Stärke entspricht? (Gibt es eine Grenze?)