Zeckendorf Representations / Base Fibonacci Numbersについて
これは、フィボナッチ数をベースとして使用する数値システムです。数値は0と1で構成され、各1は数値に対応するフィボナッチ数が含まれることを意味し、0は含まれないことを意味します。
たとえば、10以下のすべての自然数をベースフィボナッチに変換しましょう。
1はフィボナッチ数である1の合計であるため、1になります。
2はフィボナッチ数である2の合計であるため10になります。1は必要ありません。これは既に目的の合計を達成しているためです。
3はフィボナッチ数である3の合計であるため、100になります。目的の合計をすでに達成しているため、2または1は必要ありません。
- 4は101になります。これは、フィボナッチ数である[3,1]の合計であるためです。
- 5はフィボナッチ数である5の合計であるため、1000になります。他の数は必要ありません。
- 6はフィボナッチ数5と1の合計であるため、1001になります。
- 7はフィボナッチ数5と2の合計であるため、1010になります。
- 8はフィボナッチ数であるため、10000になります。
- 9は、フィボナッチ数8と1の合計であるため、10001になります。
- 10はフィボナッチ数8と2の合計であるため、10010になります。
ランダムなベースフィボナッチ数10101001010を10進数に変換しましょう:最初に、対応するフィボナッチ数を書きます。次に、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.
ベースフィボナッチ数の詳細:linkには、通常の整数をベースフィボナッチに変換するツールもあります。あなたはそれを試すことができます。
今質問:
あなたの仕事は、Zeckendorf表現で数値を取得し、その10進数値を出力することです。
入力は、0と1のみを含む文字列です(ただし、入力は任意の方法で取得できます)。
1つの数値を10進数で出力します。
テストケース:(入力->出力の形式)
1001 -> 6
100101000 -> 73
1000000000 -> 89
1001000000100100010 -> 8432
1010000010001000100001010000 -> 723452
これはコードゴルフなので、バイト単位の最短回答が勝ちです。
注:入力には、先行する0または連続する1は含まれません。