Tentang Representasi Zeckendorf / Nomor Fibonacci Dasar
Ini adalah sistem angka yang menggunakan angka Fibonacci sebagai basisnya. Angka-angka terdiri dari 0 dan 1 dan masing-masing 1 berarti angka tersebut berisi angka Fibonacci yang sesuai, dan 0 berarti tidak.
Sebagai contoh, mari kita konversi semua bilangan asli <= 10 ke basis Fibonacci.
1 akan menjadi 1, karena itu adalah jumlah dari 1, yang merupakan angka Fibonacci,
2 akan menjadi 10, karena itu adalah jumlah dari 2, yang merupakan angka Fibonacci, dan itu tidak perlu 1, karena kami telah mencapai jumlah yang diinginkan.
3 akan menjadi 100, karena itu adalah jumlah dari 3, yang merupakan angka Fibonacci dan tidak perlu 2 atau 1 karena kita sudah mencapai jumlah yang diinginkan.
- 4 akan menjadi 101, karena itu adalah jumlah [3,1], yang keduanya adalah angka Fibonacci.
- 5 akan menjadi 1000, karena itu adalah jumlah dari 5, yang merupakan angka Fibonacci, dan kita tidak memerlukan angka lainnya.
- 6 akan menjadi 1001, karena itu adalah jumlah angka Fibonacci 5 dan 1.
- 7 akan menjadi 1010, karena itu adalah jumlah angka Fibonacci 5 dan 2.
- 8 akan menjadi 10.000, karena itu adalah angka Fibonacci.
- 9 akan menjadi 10001, karena itu adalah jumlah angka Fibonacci 8 dan 1.
- 10 akan menjadi 10010, karena itu adalah jumlah angka-angka Fibonacci 8 dan 2.
Mari kita konversi angka Fibonacci Basis acak, 10101001010 ke desimal: Pertama kita menulis angka Fibonacci yang sesuai. Kemudian kami menghitung jumlah angka di bawah 1.
1 0 1 0 1 0 0 1 0 1 0
144 89 55 34 21 13 8 5 3 2 1 -> 144+55+21+5+2 = 227.
Baca lebih lanjut tentang angka Fibonacci Dasar: tautan , ini juga memiliki alat yang mengubah bilangan bulat reguler ke Fibonacci dasar. Anda bisa bereksperimen dengannya.
Sekarang Pertanyaannya:
Tugas Anda adalah mengambil nomor di Representasi Zeckendorf, dan menampilkan nilai desimalnya.
Input adalah string yang hanya berisi 0 dan 1 (walaupun Anda dapat mengambil input dengan cara apa pun yang Anda inginkan).
Keluarkan satu angka dalam desimal.
Test case: (dalam format input-> output)
1001 -> 6
100101000 -> 73
1000000000 -> 89
1001000000100100010 -> 8432
1010000010001000100001010000 -> 723452
Ini adalah kode-golf, jadi jawaban tersingkat dalam byte menang.
Catatan: Input tidak akan berisi 0 terkemuka atau 1 berturut-turut.