Zeckendorf Temsilcilikleri / Baz Fibonacci Sayıları Hakkında
Bu temel olarak Fibonacci sayılarını kullanan bir sayı sistemidir. Sayılar 0 ve 1'lerden oluşur ve her 1, sayının karşılık gelen Fibonacci numarasını içerdiği ve 0'ın içermediği anlamına gelir.
Örneğin, tüm doğal sayıları <= 10 temel Fibonacci'ye dönüştürelim.
1 1 olur, çünkü bu bir Fibonacci sayısı olan 1'in toplamıdır,
2, 10 olacak, çünkü bu bir Fibonacci sayısı olan 2'nin toplamıdır ve 1'e ihtiyaç duymaz, çünkü zaten istenen toplamı elde ettik.
3 100 olur, çünkü bu bir Fibonacci sayısı olan 3'ün toplamıdır ve istenen toplamı zaten elde ettiğimiz için 2 veya 1'e ihtiyaç duymaz.
- 4 101 olur, çünkü her ikisi de Fibonacci sayıları olan [3,1] 'in toplamıdır.
- 5, 1000 olacak, çünkü bu bir Fibonacci sayısı olan 5'in toplamıdır ve diğer sayılardan hiçbirine ihtiyacımız yoktur.
- 6 1001 olacak, çünkü bu Fibonacci 5 ve 1 sayılarının toplamıdır.
- 7, 1010 olacak, çünkü Fibonacci 5 ve 2 sayılarının toplamıdır.
- 8 10000 olur, çünkü bu bir Fibonacci numarasıdır.
- 9 10001 olacaktır, çünkü bu Fibonacci 8 ve 1 sayılarının toplamıdır.
- 10 10010 olacaktır, çünkü bu Fibonacci 8 ve 2 sayılarının toplamıdır.
Rastgele bir Baz Fibonacci sayısını, 10101001010'u ondalığa dönüştürelim: İlk önce ilgili Fibonacci sayılarını yazıyoruz. Sonra 1'lerin altındaki sayıların toplamını hesaplıyoruz.
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.
Temel Fibonacci sayıları hakkında daha fazla bilgi edinin: bağlantı , aynı zamanda düzenli tam sayıları temel Fibonacci'ye dönüştüren bir araca sahiptir. Bunu deneyebilirsiniz.
Şimdi soru:
Göreviniz Zeckendorf Temsilcisinde bir sayı almak ve ondalık değerini çıkarmaktır.
Giriş yalnızca 0 ve 1 içeren bir dizedir (girişi istediğiniz şekilde alabilmenize rağmen).
Ondalık olarak bir sayı çıktılayın.
Test senaryoları: (girdi-> çıktı biçiminde)
1001 -> 6
100101000 -> 73
1000000000 -> 89
1001000000100100010 -> 8432
1010000010001000100001010000 -> 723452
Bu kod golf, bu yüzden bayttaki en kısa cevap kazanır.
Not: Giriş, önde gelen 0'lar veya ardışık 1'ler içermez.