Sobre as representações da Zeckendorf / números base de Fibonacci
Este é um sistema numérico que usa os números de Fibonacci como base. Os números consistem em 0 e 1 e cada 1 significa que o número contém o número correspondente de Fibonacci e 0 significa que não.
Por exemplo, vamos converter todos os números naturais <= 10 em Fibonacci base.
1 se tornará 1, porque é a soma de 1, que é um número de Fibonacci,
2 se tornará 10, porque é a soma de 2, que é um número de Fibonacci, e não precisa de 1, porque já alcançamos a soma desejada.
3 se tornará 100, porque é a soma de 3, que é um número de Fibonacci e não precisa de 2 ou 1, porque já alcançamos a soma desejada.
- 4 se tornará 101, porque é a soma de [3,1], sendo ambos os números de Fibonacci.
- 5 se tornará 1000, porque é a soma de 5, que é um número de Fibonacci, e não precisamos de nenhum dos outros números.
- 6 se tornará 1001, porque é a soma dos números de Fibonacci 5 e 1.
- 7 se tornará 1010, porque é a soma dos números 5 e 2 de Fibonacci.
- 8 se tornará 10000, porque é um número de Fibonacci.
- 9 se tornará 10001, porque é a soma dos números de Fibonacci 8 e 1.
- 10 se tornará 10010, porque é a soma dos números 8 e 2 de Fibonacci.
Vamos converter um número aleatório de Fibonacci base, 10101001010 para decimal: primeiro, escrevemos os números correspondentes de Fibonacci. Em seguida, calculamos a soma dos números abaixo de 1s.
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.
Leia mais sobre os números de Fibonacci base: link , também possui uma ferramenta que converte números inteiros regulares em Fibonacci base. Você pode experimentar com isso.
Agora a pergunta:
Sua tarefa é pegar um número na representação Zeckendorf e gerar seu valor decimal.
Input é uma string que contém apenas 0 e 1 (embora você possa receber a entrada da maneira que desejar).
Imprima um número em decimal.
Casos de teste: (no formato entrada-> saída)
1001 -> 6
100101000 -> 73
1000000000 -> 89
1001000000100100010 -> 8432
1010000010001000100001010000 -> 723452
Isso é código-golfe, então a resposta mais curta em bytes vence.
Nota: A entrada não conterá nenhum 0 inicial ou 1 consecutivo.