Dugaan Collatz adalah dugaan yang sangat terkenal. Ambil bilangan bulat positif; jika itu genap, bagi dengan 2, yang lain, kalikan dengan 3 dan tambahkan 1. Ulangi sampai Anda mencapai 1atau sesuatu yang lain terjadi. Dugaannya adalah proses ini selalu mencapai 1.
Anda juga dapat membalikkan prosesnya. Mulai dari 1, gandakan dengan 2, dan untuk bercabang ke multiply by 3 and add 1angka, ketika Anda mencapai angka genap 1 (mod 3), kurangi 1 dan bagi dengan 3.
Jalur Collatz menggabungkan keduanya, mencoba untuk berpindah dari satu nomor ke nomor lainnya dengan keempat operasi itu.
Misalnya, untuk mendapatkan 20dari 1:
1 *2
2 *2
4 *2
8 *2
16 *2
5 (-1)/3
10 *2
20 *2
Anda juga bisa mendapatkan 3dari 10dengan mengurangi 1 dan membaginya dengan 3.
Dengan alat-alat ini, Anda dapat melintasi jalur Collatz dari satu nomor ke yang lain. Misalnya, jalur dari 20ke 3adalah (bagi dengan 2), (kurangi 1, bagi dengan 3).
Singkatnya, operasi yang tersedia adalah:
n * 2 always
n // 2 if n % 2 == 0
n * 3 + 1 if n % 2 == 1
(n-1) // 3 if n % 6 == 4
Catatan: tidak semua jalur Collatz pendek. a(7,3)bisa berlari
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 2, 4, 8, 16, 5, 10, 3
tapi jalan yang lebih pendek adalah
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 3
Tantangan
Temukan panjang jalur Collatz terpendek antara dua bilangan bulat positif, pdan q.
- Input adalah dua bilangan bulat positif kurang dari
2^20untuk menghindari bilangan bulat bilangan bulat. Metode input diserahkan kepada kebijaksanaan pegolf. Bilangan bulat mungkin sama, dalam hal ini, panjang jalur Collatz adalah0. - Output harus berupa satu bilangan bulat, yang menunjukkan panjang jalur Collatz terpendek antara
pdanq.
Uji Kasus
a(2,1)
1
a(4,1)
1 # 4 -> 1
a(3,1)
6 # 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 1
a(11,12)
11 # 11 -> 34 -> 17 -> 52 -> 26 -> 13
# -> 40 -> 20 -> 10 -> 3 -> 6 -> 12
a(15,9)
20 # 46 -> 23 -> 70 -> 35 -> 106 -> 53 -> 160 -> 80 -> 40 -> 13
# -> 26 -> 52 -> 17 -> 34 -> 11 -> 22 -> 7 -> 14 -> 28 -> 9
Terima kasih banyak orlp atas bantuan mereka dalam mengklarifikasi tantangan ini.
Seperti biasa, jika masalahnya tidak jelas, beri tahu saya. Semoga berhasil dan bermain golf dengan baik!