แสดงพลังของพีด้วยฟีโบนักชีแม่นยำ


9

เขียนโค้ดบางส่วนที่ใช้เป็นจำนวนเต็มไม่เป็นลบเดียวnและออกผลลัพธ์เป็นที่ nอำนาจของพี (φ, อัตราส่วนทองคำประมาณ 1.61803398874989) ที่มีหมายเลขเดียวกันของทศนิยมเป็นที่ nจำนวนฟีโบนักชี

รหัสของคุณจะต้องสร้างลำดับของตัวเลขที่ถูกต้องสำหรับอินพุตทั้งหมดอย่างน้อย 10 (55 หลักทศนิยม) ผลลัพธ์จะต้องเป็นทศนิยมที่มนุษย์สามารถอ่านได้ คุณสามารถเลือกว่าจะปัดตัวเลขสุดท้ายให้เป็นค่าที่ใกล้เคียงที่สุดหรือตัดทอนค่า โปรดระบุรหัสของคุณที่ใช้

nและผลลัพธ์สูงสุด 10 ปัดเศษลง:

 0   1
 1   1.6
 2   2.6
 3   4.23
 4   6.854
 5  11.09016
 6  17.94427190
 7  29.0344418537486
 8  46.978713763747791812296
 9  76.0131556174964248389559523684316960
10 122.9918693812442166512522758901100964746170048893169574174

nและผลลัพธ์สูงสุด 10 ปัดเศษเป็นค่าที่ใกล้เคียงที่สุด:

 0   1
 1   1.6
 2   2.6
 3   4.24
 4   6.854
 5  11.09017
 6  17.94427191
 7  29.0344418537486
 8  46.978713763747791812296
 9  76.0131556174964248389559523684316960
10 122.9918693812442166512522758901100964746170048893169574174

หมายเลขฟีโบนักชีอันดับที่ 7 คือ 13 ดังนั้นเอาต์พุตสำหรับn = 7, ϕ 7มีตำแหน่งทศนิยม 13 ตำแหน่ง คุณต้องไม่ตัดทอนเลขศูนย์ต่อท้ายที่จะแสดงตัวเลขน้อยเกินไป ดูผลลัพธ์สำหรับ 6 ในตารางแรกซึ่งสิ้นสุดในศูนย์เดียวเพื่อให้ความแม่นยำทศนิยมที่ 8 หลัก

อาจเป็นโบนัสให้บอกว่าโปรแกรมของคุณสามารถส่งออกจำนวนสูงสุดได้อย่างถูกต้อง


แล้วภาษาที่ไม่สามารถจัดการกับทศนิยมหลายตำแหน่งนั้นได้ ฉันได้วิธีแก้ปัญหา 24 ไบต์ Pyth ที่นี่ซึ่งทำงานได้จนถึง n = 7 เนื่องจากฉันไม่สามารถแสดงทศนิยมมากกว่า 15 ตำแหน่ง ฉันควรโพสต์ไว้หรือไม่
Denker

@DenkerAffe แน่นอนว่าคุณสามารถโพสต์ได้ แต่มีข้อความแจ้งว่าไม่ถูกต้องเพราะไม่สามารถทำสามกรณีทดสอบล่าสุด อาจเป็นแรงบันดาลใจให้ใครบางคนเพิ่มความแม่นยำให้กับคำตอบของคุณ!
CJ Dennis

คำตอบ:


3

dc, 26 ไบต์

99k5v1+2/?^d5v/.5+0k1/k1/p

เนื่องจากการเริ่มต้นของความแม่นยำ 99 หลักหลังเครื่องหมายจุลภาคนี้จะทำงานได้ป้อนข้อมูลโย่11 ความแม่นยำแบบไดนามิก (หรือสูงกว่าคงที่) เป็นไปได้ แต่จะยกระดับการนับไบต์

กรณีทดสอบ

$ for ((i = 0; i < 11; i++)) { dc -e '99k5v1+2/?^d5v/.5+0k1/k1/p' <<< $i; }
1
1.6
2.6
4.23
6.854
11.09016
17.94427190
29.0344418537486
46.978713763747791812296
76.0131556174964248389559523684316960
122.9918693812442166512522758901100964746170048893169574174

มันทำงานอย่างไร

เนื่องจากผลลัพธ์ที่ต้องการคือφ nเราสามารถคำนวณหมายเลขฟีโบนักชีF (n)เป็น⌊φ n ÷√5 + 0.5⌋ด้วยความพยายามเพิ่มเติมเล็กน้อย

99k                         Set the precision to 99.
   5v                       Compute the square root of 5.
     1+                     Add 1.
       2/                   Divide by 2.
                            This pushes the golden ratio.
         ?                  Read the input from STDIN.
          ^                 Elevate the golden ratio to that power.
           d                Push a copy.
            5v/             Divide it by the square root of 5.
               .5+          Add 0.5.
                  0k        Set the precision to 0.
                    1/      Divide by 1, truncating to the desired precision.
                            This pushes F(n).
                      k     Set the precision to F(n).
                       1/   Divide by 1, truncating to the desired precision.
                         p  Print.

0

Mathematica ขนาด 50 ไบต์

N[GoldenRatio^#,2^#]~NumberForm~{2^#,Fibonacci@#}&

โซลูชันพื้นฐาน ปัดเศษเป็นค่าใกล้เคียงที่สุด ยังคงยืนยันค่าสูงสุดที่จะไม่ทำให้คอมพิวเตอร์ของฉันมีหน่วยความจำไม่เพียงพอ อินพุตใช้32งานได้ แต่ใช้เวลา 45 นาทีและใช้ RAM 16GiB อย่างไรก็ตามด้วยเวลาและความทรงจำที่ไม่สิ้นสุด


1
คุณจะโพสต์ผลลัพธ์ได้ไหม ฉันต้องโกงและใช้ผลลัพธ์ของคุณเพื่อเพิ่มกรณีทดสอบสองสามครั้งสุดท้าย คุณปัดเศษทางไหน ลงหรือใกล้ที่สุด? "ทรัพยากรที่ไม่มีที่สิ้นสุด" ดีพอ ฉันไม่ต้องการให้คุณหมดความทรงจำ!
CJ Dennis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.