เป็นจำนวนเต็มบวกnสามารถแสดงเป็นรูปสี่เหลี่ยมที่มีด้านจำนวนเต็ม , ขดังกล่าวที่n = * ข นั่นคือพื้นที่แสดงถึงจำนวน โดยทั่วไปและขจะไม่ซ้ำกันสำหรับให้n
ในฐานะที่เป็นที่รู้จักกันดีสี่เหลี่ยมผืนผ้าเป็นพิเศษเจริญตา (หรือมันคือสมอง?) เมื่อด้านข้างอยู่ในอัตราส่วนทองคำ , φ = (sqrt (5) +1) / 2 ≈ 1.6180339887 ...
รวมทั้งสองข้อเท็จจริงวัตถุประสงค์ของความท้าทายนี้คือการย่อยสลายเป็นจำนวนเต็มnลงในผลิตภัณฑ์ของทั้งสองจำนวนเต็ม, Bซึ่งเป็นอัตราส่วนที่ใกล้ที่สุดเท่าที่เป็นไปได้ที่จะφ (โดยปกติตัวชี้วัดในℝ) ความจริงที่ว่าφนั้นไม่ลงตัวหมายความว่ามีคู่ของการแก้ปัญหาที่ไม่ซ้ำกัน ( a , b )
ความท้าทาย
รับจำนวนเต็มบวกnส่งออกจำนวนเต็มบวกa , bเช่น a * b = nและความแตกต่างที่แน่นอนระหว่างa / bและφถูกย่อให้เล็กสุด
เป็นตัวอย่างให้พิจารณาn = 12 คู่ ( a , b ) ที่ตรงกับ a * b = nคือ: (1, 12), (2,6), (3,4), (4,3), ( 6,2), (12,1) คู่ที่อัตราส่วนใกล้เคียงกับφมากที่สุดคือ (4,3) ซึ่งให้ 4/3 = 1.333
กฎระเบียบ
ฟังก์ชั่นหรือโปรแกรมเป็นที่ยอมรับ
เศษ ( ) ควรจะปรากฏขึ้นเป็นครั้งแรกในการส่งออกและหาร ( ข ) สอง นอกจากนั้นรูปแบบอินพุตและเอาต์พุตมีความยืดหยุ่นตามปกติ ตัวอย่างเช่นตัวเลขสองตัวสามารถส่งออกเป็นสตริงที่มีตัวคั่นที่เหมาะสมหรือเป็นอาร์เรย์
รหัสควรทำงานในทฤษฎีสำหรับจำนวนมากโดยพล ในทางปฏิบัติอาจถูก จำกัด โดยหน่วยความจำหรือข้อ จำกัด ชนิดข้อมูล
มันเพียงพอที่จะพิจารณารุ่นโดยประมาณของφตราบใดที่มันขึ้นอยู่ที่ถูกต้องกับทศนิยมที่สามหรือดีกว่า นั่นคือความแตกต่างแน่นอนระหว่างความจริงφและมูลค่าโดยประมาณไม่ควรเกิน 0.0005 ตัวอย่างเช่น 1.618 เป็นที่ยอมรับ
เมื่อใช้ประมาณรุ่นเหตุผลของφมีโอกาสเล็ก ๆ ว่าการแก้ปัญหาที่ไม่ซ้ำกัน ในกรณีนั้นคุณสามารถส่งออกคู่ใด ๆa , bที่เป็นไปตามเกณฑ์ของการย่อขนาดให้เล็กที่สุด
รหัสที่สั้นที่สุดชนะ
กรณีทดสอบ
1 -> 1 1
2 -> 2 1
4 -> 2 2
12 -> 4 3
42 -> 7 6
576 -> 32 18
1234 -> 2 617
10000 -> 125 80
199999 -> 1 199999
9699690 -> 3990 2431
|a/b-b/a-1|
นั้นมีแนวโน้มดีแม้ว่าจะมีข้อพิสูจน์ว่าเป็นไปได้
a/b
หมายถึง การถอดหน่วยตารางใบสี่เหลี่ยมเล็ก ๆ b/a
บนขวาซึ่งหมายถึง สี่เหลี่ยมสีทองจึงมีความแตกต่าง 1