入力を受け取り、出力を提供する関数(またはプログラム)は、独自の出力で関数を繰り返し呼び出して最終的に元の数に達した場合、サイクルを持っていると言えます。たとえば、次の関数を使用します。
Input: n 1 2 3 4 5 6
Output: f(n) 5 7 1 3 4 9
我々が開始するとn=1
、f(n)=5
、f(f(n))=f(5)=4
、f(f(f(n)))=f(4)=3
、f(f(f(f(n))))=f(3)=1
。
これは書かれてい(1 5 4 3)
ます。このループには4つの一意の番号があるため、これは長さ4のサイクルです。
あなたの課題は、あらゆる長さのサイクルを持つプログラムまたは関数を書くことです。つまり、長さ1、長さ2などのサイクルが必要です。
さらに、関数/プログラムは正の整数から正の整数である必要があります。また、すべての正の整数にわたって、可能な出力値ごとに1つの入力値が存在する必要があることを意味するbijectiveでなければなりません。別の言い方をすれば、関数/プログラムは正の整数の順列を計算する必要があります。
詳細:STDIN、STDOUT、関数の引数、戻り値など、標準の入出力システムはすべて許可されます。標準の抜け穴は禁止されています。
データ型の制限について心配する必要はありません-上記のプロパティは、たとえば、任意の値を保持できる、int
またはfloat
任意の値を保持できるという仮定の下でのみ保持する必要があります。
正の整数ではない入力に対する関数の動作に制限はなく、これらの入力/出力は無視されます。
得点はバイト単位のコードゴルフで、最短のコードが勝ちです。