Tentukan fungsi f (n) untuk bilangan bulat positif n sebagai berikut:
- n / 2 , jika n genap
- 3 * n + 1 , jika n ganjil
Jika Anda berulang kali menerapkan fungsi ini ke n lebih besar dari 0, hasilnya selalu konvergen ke 1 (meskipun belum ada yang bisa membuktikannya). Properti ini dikenal sebagai Dugaan Collatz .
Tentukan waktu berhenti integer sebagai berapa kali Anda harus melewati fungsi Collatz f sebelum mencapai 1. Berikut adalah waktu berhenti dari 15 integer pertama:
1 0
2 1
3 7
4 2
5 5
6 8
7 16
8 3
9 19
10 6
11 14
12 9
13 9
14 17
15 17
Mari kita sebut set angka dengan sepupu Collatz waktu berhenti yang sama . Misalnya, 5 dan 32 adalah sepupu Collatz, dengan waktu berhenti 5.
Tugas Anda: menulis sebuah program atau fungsi yang mengambil integer nonnegatif dan menghasilkan set sepupu Collatz yang waktu berhentinya sama dengan integer itu.
Memasukkan
Integer non negatif, diberikan melalui argumen STDIN, ARGV, atau fungsi.
Keluaran
Daftar semua angka yang waktu berhentinya adalah S, diurutkan dalam urutan menaik . Daftar tersebut dapat berupa output oleh program Anda, atau dikembalikan atau dihasilkan oleh fungsi Anda. Format output fleksibel: dipisahkan oleh spasi, dipisahkan oleh baris, atau format daftar standar bahasa Anda baik-baik saja, asalkan jumlahnya mudah dibedakan satu sama lain.
Persyaratan
Kiriman Anda harus memberikan hasil yang benar untuk setiap S ≤ 30. Itu harus selesai dalam hitungan detik atau menit, bukan jam atau hari.
Contohnya
0 -> 1
1 -> 2
5 -> 5, 32
9 -> 12, 13, 80, 84, 85, 512
15 -> 22, 23, 136, 138, 140, 141, 150, 151, 768, 832, 848, 852, 853, 904, 906, 908, 909, 5120, 5376, 5440, 5456, 5460, 5461, 32768
Berikut adalah inti dari output untuk S = 30 .
Ini adalah kode-golf : program terpendek dalam byte yang menang. Semoga berhasil!