Eine Funktion wird gesagt , ein haben Zyklus der Länge n , wenn es eine gibt x in seiner Domäne , so dass f n (x) = x und f m (x) ≠ x für 0 <m <n , wobei der Exponent n Bezeichnet n - Falte Anwendung von f . Beachten Sie, dass ein Zyklus der Länge 1 ein fester Punkt f (x) = x ist .
Ihre Aufgabe ist es, eine bijektive Funktion von den ganzen Zahlen zu sich selbst zu implementieren , die genau einen Zyklus jeder positiven Länge n hat . Eine bijektive Funktion ist eine Eins-zu-Eins-Entsprechung, dh jede Ganzzahl, die genau einmal zugeordnet ist. Genau einen Zyklus der Länge n zu haben bedeutet, dass es genau n verschiedene Zahlen x gibt, für die f n (x) = x und f m (x) ≠ x für 0 <m <n ist .
Hier ist ein Beispiel, wie eine solche Funktion um x = 0 aussehen könnte :
x ... -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 ...
f(x) ... 2 4 6 -3 -1 1 -4 0 -2 5 7 -7 -6 3 -5 ...
Dieser Auszug enthält Zyklen der Länge 1 bis 5 :
n cycle
1 0
2 -2 1
3 -4 -3 -1
4 -5 6 3 7
5 -7 2 5 -6 4
...
Beachten Sie, dass ich oben "Funktion" nur im mathematischen Sinne verwende. Sie können entweder eine Funktion oder ein vollständiges Programm in der Sprache Ihrer Wahl schreiben, sofern eine einzelne (vorzeichenbehaftete) Ganzzahl als Eingabe verwendet und eine einzelne (vorzeichenbehaftete) Ganzzahl zurückgegeben wird. Wie üblich können Sie Eingaben über STDIN, Befehlszeilenargument, Funktionsargument usw. und Ausgaben über STDOUT, Funktionsrückgabewert oder Funktionsargument (out) usw. vornehmen.
Natürlich unterstützen viele Sprachen (leicht) keine Ganzzahlen mit beliebiger Genauigkeit. Es ist in Ordnung, wenn Ihre Implementierung nur für den Bereich des nativen Integer-Typs Ihrer Sprache funktioniert, sofern dieser mindestens den Bereich [-127, 127] abdeckt und für beliebige Ganzzahlen funktioniert, wenn der Integer-Typ der Sprache durch einen beliebigen Integer-Typ ersetzt wird. Präzisions-Ganzzahlen.
Es gelten die Standardregeln für Code-Golf .