เกี่ยวกับการเป็นตัวแทนของ Zeckendorf / หมายเลขฐานฟีโบนักชี
นี่คือระบบตัวเลขที่ใช้หมายเลขฟีโบนักชีเป็นฐาน ตัวเลขประกอบด้วย 0 และ 1 และแต่ละ 1 หมายถึงตัวเลขมีหมายเลข Fibonacci ที่สอดคล้องกันและ 0 หมายถึงไม่มี
ตัวอย่างเช่นลองแปลงจำนวนธรรมชาติทั้งหมด <= 10 เป็นเบสฟีโบนักชี
1 จะกลายเป็น 1 เพราะมันคือผลรวมของ 1 ซึ่งเป็นตัวเลขฟีโบนักชี
2 จะกลายเป็น 10 เพราะมันคือผลรวมของ 2 ซึ่งเป็นจำนวนฟีโบนักชีและมันไม่จำเป็นต้อง 1 เพราะเราได้ผลรวมที่ต้องการไปแล้ว
3 จะกลายเป็น 100 เพราะมันคือผลรวมของ 3 ซึ่งเป็นตัวเลขฟีโบนักชีและมันไม่จำเป็นต้อง 2 หรือ 1 เพราะเราได้ผลรวมที่ต้องการแล้ว
- 4 จะกลายเป็น 101 เพราะเป็นผลรวมของ [3,1] ซึ่งทั้งคู่เป็นตัวเลขฟีโบนักชี
- 5 จะกลายเป็น 1,000 เพราะมันคือผลรวมของ 5 ซึ่งเป็นตัวเลขฟีโบนักชีและเราไม่ต้องการตัวเลขอื่นใด
- 6 จะกลายเป็น 1001 เพราะเป็นผลรวมของฟีโบนักชีหมายเลข 5 และ 1
- 7 จะกลายเป็น 1,010 เพราะเป็นผลรวมของฟีโบนักชีหมายเลข 5 และ 2
- 8 จะกลายเป็น 10,000 เพราะเป็นหมายเลขฟีโบนักชี
- 9 จะกลายเป็น 1,0001 เพราะเป็นผลรวมของฟีโบนักชีหมายเลข 8 และ 1
- 10 จะกลายเป็น 1,1010 เพราะเป็นผลรวมของฟีโบนักชีหมายเลข 8 และ 2
ลองแปลงตัวเลขฐานฟีโบนักชีสุ่มเป็น 10101001010 เป็นทศนิยม: อันดับแรกเราเขียนตัวเลขฟีโบนักชีที่เกี่ยวข้องกัน จากนั้นเราคำนวณผลรวมของตัวเลขที่ต่ำกว่า 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.
อ่านเพิ่มเติมเกี่ยวกับหมายเลขฐาน Fibonacci: ลิงก์นอกจากนี้ยังมีเครื่องมือที่แปลงจำนวนเต็มปกติเป็นฐานฟีโบนักชี คุณสามารถทดลองกับมัน
ตอนนี้คำถาม:
งานของคุณคือการใช้ตัวเลขในการเป็นตัวแทน Zeckendorf และส่งออกค่าทศนิยม
อินพุตเป็นสตริงที่มีเพียง 0 และ 1 เท่านั้น (แม้ว่าคุณจะสามารถป้อนข้อมูลในแบบที่คุณต้องการ)
เอาท์พุทหนึ่งตัวเลขเป็นทศนิยม
กรณีทดสอบ: (ในรูปแบบอินพุต -> เอาต์พุต)
1001 -> 6
100101000 -> 73
1000000000 -> 89
1001000000100100010 -> 8432
1010000010001000100001010000 -> 723452
นี่คือโค้ดกอล์ฟดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
หมายเหตุ: การป้อนข้อมูลจะไม่ประกอบด้วยผู้นำ 0 หรือ 1 ต่อเนื่องกัน