Suatu fungsi (atau program) yang mengambil input dan menyediakan output dapat dikatakan memiliki siklus jika memanggil fungsi pada outputnya sendiri berulang kali akhirnya mencapai angka aslinya. Misalnya, ambil fungsi berikut:
Input: n 1 2 3 4 5 6
Output: f(n) 5 7 1 3 4 9
Jika kita mulai dengan 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
.
Ini ditulis (1 5 4 3)
. Karena ada 4 angka unik dalam loop ini, ini adalah siklus dengan panjang 4.
Tantangan Anda adalah menulis program atau fungsi yang memiliki siklus dari setiap panjang yang memungkinkan. Artinya, harus ada siklus panjang 1, panjang 2, dan seterusnya.
Selain itu, fungsi / program Anda harus dari bilangan bulat positif ke bilangan bulat positif, dan itu harus bijective , artinya harus ada tepat satu nilai input untuk setiap nilai output yang mungkin, di atas semua bilangan bulat positif. Dengan kata lain, fungsi / program harus menghitung permutasi bilangan bulat positif.
Detail: Setiap sistem input / output standar diperbolehkan, termasuk STDIN, STDOUT, argumen fungsi, pengembalian, dll. Lubang standar dilarang.
Anda tidak perlu khawatir tentang keterbatasan tipe data Anda - properti di atas hanya perlu tahan dengan asumsi bahwa a int
atau float
dapat memiliki nilai apa pun, misalnya.
Tidak ada batasan pada perilaku fungsi pada input yang bukan bilangan bulat positif, dan input / output tersebut akan diabaikan.
Skor adalah kode golf dalam byte, kode terpendek menang.