GolfScript, 59 ตัวอักษร
~:N..*.,2>{:P{(.P\%}do(!},{{N-.*}$0=}:C~[1.{.@+.N<}do]C+++4/
สคริปต์นี้ไม่เป็นไปตามข้อกำหนดบางประการ:
- ทำงานได้อย่างถูกต้องสำหรับอินพุต
n >= 2เท่านั้นมิฉะนั้นจะขัดข้อง
- เอาต์พุตถูกปัดเศษเป็นจำนวนเต็ม
- ประสิทธิภาพที่ยอดเยี่ยมสำหรับขนาดใหญ่พอสมควร
n
คำแนะนำสั้น ๆ ของรหัส:
~:N..*อินพุตถูกเก็บไว้ใน N และเรากดทั้งสองnและสี่เหลี่ยมn*nทันที
.,2>[2..n*n]เราจะสร้างรายการของจำนวนเฉพาะโดยการกรองอาร์เรย์ เราใช้การคำนวณก่อนหน้าของเราn*nว่าเป็นขอบเขตที่แย่มากสำหรับการค้นหานายกที่มีขนาดใหญ่กว่า n
{:P{(.P\%}do(!},อาร์เรย์ก่อนหน้าของเราถูกกรองโดยแผนกทดลอง จำนวนเต็ม P แต่ละตัวจะถูกทดสอบกับทุกจำนวนเต็ม [P-1..1]
{{N-.*}$0=}:C~เรียงลำดับอาร์เรย์ก่อนหน้าตามระยะทางnและจับองค์ประกอบแรก ตอนนี้เรามีนายกที่ใกล้ที่สุด
[1.{.@+.N<}do]Cเราสร้าง Fibonnacis จนกว่าเราจะได้มากกว่าnหนึ่ง โชคดีที่อัลกอริทึมนี้ติดตาม Fibonnaci ก่อนหน้านี้ตามธรรมชาติดังนั้นเราจึงโยนมันลงในอาร์เรย์และใช้การเรียงลำดับระยะทางก่อนหน้าของเรา ตอนนี้เรามี Fibonnaci ที่ใกล้เคียงที่สุด
+++4/เฉลี่ย. โปรดทราบว่า GolfScript ไม่รองรับการลอยดังนั้นผลลัพธ์จะถูกตัดทอน
GolfScript, 81 ตัวอักษร
นี่คือตัวแปรที่ตอบสนองความต้องการทั้งหมด
~:N..*2N*,3,|2,^{:P{(.P\%}do(!},{{N-.*}$0=}:C~[0.1{.@+.N<}do]C+++100:E*4/.E/'.'@E%
เพื่อให้แน่ใจว่าพฤติกรรมที่เหมาะสมสำหรับn<2ผมหลีกเลี่ยง2<(แฮงค์เมื่ออาร์เรย์ที่มีขนาดเล็ก) 3,|2,^และแทนที่จะใช้ ซึ่งทำให้แน่ใจอาร์เรย์ตัวเต็งเป็นเพียงเมื่อ[2] n < 2ฉันเปลี่ยนขอบเขตบนสำหรับไพรม์ถัดไปจากn*nเป็น2*n( สมมุติของเบอร์แทรนด์ ) นอกจากนี้ 0 ถือว่าเป็นหมายเลข Fibonnaci ผลลัพธ์จะถูกคำนวณในคณิตศาสตร์จุดคงที่ในตอนท้าย น่าสนใจดูเหมือนว่าผลลัพธ์จะเป็นที่สี่เสมอ (0, .25, .5, .75) ดังนั้นฉันหวังว่าความแม่นยำทศนิยม 2 ตำแหน่งนั้นเพียงพอแล้ว
รอยแตกครั้งแรกของฉันเมื่อใช้ GolfScript ฉันแน่ใจว่ามีพื้นที่สำหรับการปรับปรุง!