Latar Belakang
Urutan 1-2-3-Tribonacci
Bayangkan sesaat Anda bisa membuat urutan fibonacci dengan mengganti rumus iterasi standar dengan yang berikut:
Pada dasarnya, alih-alih menjumlahkan dua terakhir untuk mendapatkan yang berikutnya, Anda menjumlahkan tiga terakhir. Ini adalah dasar untuk urutan 1-2-3-Tribonacci.
Kriteria Brown
Kriteria Brown menyatakan bahwa Anda dapat mewakili nilai integer apa pun sebagai jumlah anggota dari suatu urutan asalkan:
Untuk semua yang
n
lebih besar dari 1,
Apa artinya ini untuk tantangan
Anda dapat menggambarkan bilangan bulat positif sebagai jumlah anggota dari urutan 1-2-3-Tribonacci yang dibentuk oleh kondisi awal berikut:
Ini dikenal sebagai, untuk setiap nilai dalam urutan ini, rasio antara istilah tidak pernah lebih besar dari 2 (rasio rata-rata keluar sekitar 1,839).
Cara menulis dalam sistem representasi numerik ini
Katakanlah Anda menggunakan representasi little-endian. Sejajarkan anggota urutan seperti ini:
1 2 3 6 11 20 37 68
Kemudian, Anda mengambil nomor Anda untuk diwakili (untuk pengujian kami, katakan saja itu 63
) dan temukan nilai-nilai yang diberikan 1-2-3-Tribonacci yang berjumlah 63 (menggunakan nilai terbesar pertama!) . Jika nomor tersebut merupakan bagian dari jumlah, tulis 1 di bawahnya, 0 jika tidak.
1 2 3 6 11 20 37 68
0 0 0 1 0 1 1 0
Anda dapat melakukan ini untuk bilangan bulat apa pun yang diberikan - cukup verifikasi bahwa Anda menggunakan nilai terbesar di bawah input yang Anda berikan terlebih dahulu!
Definisi (akhirnya)
Tulis program atau fungsi yang akan melakukan hal berikut ini dengan beberapa input bilangan bulat positif n
(ditulis dalam basis standar apa pun) antara 1 dan nilai maksimum bahasa Anda:
- Ubah nilainya menjadi representasi numerik 1-2-3-Tribonacci yang ditentukan.
- Menggunakan representasi seperti biner ini, dan membacanya seolah-olah biner. Ini berarti bahwa digitnya tetap sama, tetapi yang mereka maksud berubah.
- Ambil nomor biner ini dan ubah menjadi basis nomor asli.
- Keluarkan atau kembalikan nomor baru ini.
Namun, selama outputnya valid, Anda tidak perlu mengikuti langkah-langkah ini. Jika Anda secara ajaib menemukan beberapa rumus yang lebih pendek (dan secara matematis setara), silakan menggunakannya.
Contohnya
Biarkan fungsi f
menjadi fungsi yang dijelaskan oleh definisi, dan biarkan []
mewakili langkah-langkah yang diambil (sebagai little-endian, meskipun seharusnya tidak masalah) (Anda tidak perlu mengikuti proses ini, ini hanya proses yang dijelaskan):
>>> f(1)
[1]
[1]
[1]
1
>>> f(5)
[5]
[0, 1, 1]
[6]
6
>>> f(63)
[63]
[0, 0, 0, 1, 0, 1, 1]
[104]
104