Über Zeckendorf Vertretungen / Basis Fibonacci Nummern
Dies ist ein Zahlensystem, das Fibonacci-Zahlen als Basis verwendet. Die Zahlen bestehen aus 0 und 1 und jede 1 bedeutet, dass die Zahl die entsprechende Fibonacci-Zahl enthält, und 0 bedeutet, dass dies nicht der Fall ist.
Lassen Sie uns zum Beispiel alle natürlichen Zahlen <= 10 in Basis-Fibonacci konvertieren.
1 wird 1, weil es die Summe von 1 ist, die eine Fibonacci-Zahl ist,
2 wird zu 10, weil es sich um die Summe von 2 handelt, die eine Fibonacci-Zahl ist, und es wird keine 1 benötigt, weil wir bereits die gewünschte Summe erreicht haben.
3 wird zu 100, weil es sich um die Summe von 3 handelt, die eine Fibonacci-Zahl ist und keine 2 oder 1 benötigt, weil wir bereits die gewünschte Summe erreicht haben.
- 4 wird 101, weil es die Summe von [3,1] ist, die beide Fibonacci-Zahlen sind.
- 5 wird zu 1000, da es sich um die Summe von 5 handelt, die eine Fibonacci-Zahl ist, und wir keine der anderen Zahlen benötigen.
- 6 wird 1001, weil es die Summe der Fibonacci-Zahlen 5 und 1 ist.
- 7 wird 1010, weil es die Summe der Fibonacci-Zahlen 5 und 2 ist.
- 8 wird zu 10000, da es sich um eine Fibonacci-Zahl handelt.
- 9 wird 10001, weil es die Summe der Fibonacci-Zahlen 8 und 1 ist.
- 10 wird zu 10010, weil es die Summe der Fibonacci-Zahlen 8 und 2 ist.
Lassen Sie uns eine zufällige Basis-Fibonacci-Zahl, 10101001010, in eine Dezimalzahl umwandeln: Zuerst schreiben wir die entsprechenden Fibonacci-Zahlen. Dann berechnen wir die Summe der Zahlen unter 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.
Lesen Sie mehr über Base Fibonacci-Zahlen: link , es gibt auch ein Tool, das reguläre Ganzzahlen in Base Fibonacci umwandelt. Sie können damit experimentieren.
Nun die Frage:
Ihre Aufgabe ist es, eine Zahl in die Zeckendorf-Darstellung aufzunehmen und deren Dezimalwert auszugeben.
Die Eingabe ist eine Zeichenfolge, die nur 0 und 1 enthält (obwohl Sie die Eingabe beliebig verwenden können).
Geben Sie eine Dezimalzahl aus.
Testfälle: (im Format Eingabe-> Ausgabe)
1001 -> 6
100101000 -> 73
1000000000 -> 89
1001000000100100010 -> 8432
1010000010001000100001010000 -> 723452
Das ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes.
Hinweis: Der Eingang enthält keine führenden Nullen oder aufeinander folgenden Einsen.