Informazioni su rappresentazioni di Zeckendorf / numeri di Fibonacci di base
Questo è un sistema numerico che utilizza i numeri di Fibonacci come base. I numeri sono composti da 0 e 1 e ogni 1 indica che il numero contiene il corrispondente numero di Fibonacci e 0 indica che non lo è.
Ad esempio, convertiamo tutti i numeri naturali <= 10 in Fibonacci base.
1 diventerà 1, perché è la somma di 1, che è un numero di Fibonacci,
2 diventerà 10, perché è la somma di 2, che è un numero di Fibonacci, e non ha bisogno di 1, perché abbiamo già ottenuto la somma desiderata.
3 diventerà 100, perché è la somma di 3, che è un numero di Fibonacci e non ha bisogno di 2 o 1 perché abbiamo già ottenuto la somma desiderata.
- 4 diventerà 101, perché è la somma di [3,1], che sono entrambi numeri di Fibonacci.
- 5 diventerà 1000, perché è la somma di 5, che è un numero di Fibonacci, e non abbiamo bisogno di nessuno degli altri numeri.
- 6 diventerà 1001, perché è la somma dei numeri di Fibonacci 5 e 1.
- 7 diventerà 1010, perché è la somma dei numeri di Fibonacci 5 e 2.
- 8 diventerà 10000, perché è un numero di Fibonacci.
- 9 diventerà 10001, perché è la somma dei numeri 8 e 1 di Fibonacci.
- 10 diventerà 10010, perché è la somma dei numeri di Fibonacci 8 e 2.
Convertiamo un numero casuale di Fibonacci, 10101001010 in decimale: per prima cosa scriviamo i corrispondenti numeri di Fibonacci. Quindi calcoliamo la somma dei numeri sotto 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.
Maggiori informazioni sui numeri di Fibonacci di base: link , ha anche uno strumento che converte interi regolari in Fibonacci di base. Puoi sperimentarlo.
Ora la domanda:
Il tuo compito è prendere un numero nella rappresentazione Zeckendorf e produrre il suo valore decimale.
L'input è una stringa che contiene solo 0 e 1 (sebbene sia possibile accettare l'input nel modo desiderato).
Emette un numero in decimale.
Casi di prova: (nel formato input-> output)
1001 -> 6
100101000 -> 73
1000000000 -> 89
1001000000100100010 -> 8432
1010000010001000100001010000 -> 723452
Questo è code-golf, quindi vince la risposta più breve in byte.
Nota: l'ingresso non conterrà alcun 0 iniziale o 1 consecutivo.