ลำดับสเติร์น-Brocotเป็น Fibonnaci เหมือนลำดับซึ่งสามารถสร้างดังนี้
- เริ่มต้นลำดับด้วย s(1) = s(2) = 1
- ตั้งเคาน์เตอร์ n = 1
- ผนวกs(n) + s(n+1)เข้ากับลำดับ
- ผนวกs(n+1)เข้ากับลำดับ
- เพิ่มขึ้นnกลับไปยังขั้นตอนที่ 3
นี่เทียบเท่ากับ:
ในบรรดาคุณสมบัติอื่น ๆ ลำดับ Stern-Brocot สามารถใช้เพื่อสร้างจำนวนตรรกยะเชิงบวกที่เป็นไปได้ทั้งหมด จำนวนตรรกยะทุกตัวจะถูกสร้างขึ้นหนึ่งครั้งและจะปรากฏในเงื่อนไขที่ง่ายที่สุดเสมอ ตัวอย่างเช่น1/3เป็นจำนวนตรรกยะที่ 4 ในลำดับ แต่ตัวเลขที่เทียบเท่า2/6และ3/9อื่น ๆ จะไม่ปรากฏเลย
เราสามารถกำหนดจำนวนตรรกยะที่ n เป็นr(n) = s(n) / s(n+1)โดยที่s(n)หมายเลขสเติร์น - โบรคต์ดังที่อธิบายไว้ข้างต้น
ความท้าทายของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่จะส่งออกจำนวนเหตุผลที่ n ที่สร้างขึ้นโดยใช้ลำดับ Stern-Brocot
- อัลกอริทึมที่อธิบายไว้ข้างต้นได้รับการจัดทำดัชนี 1 ชุด ถ้ารายการของคุณถูกจัดทำดัชนี 0 โปรดระบุคำตอบของคุณ
- อัลกอริธึมที่อธิบายไว้มีวัตถุประสงค์เพื่อเป็นตัวอย่างเท่านั้นเอาต์พุตสามารถได้มาในแบบที่คุณชอบ (นอกเหนือจากการเข้ารหัสแบบฮาร์ด)
- อินพุตสามารถผ่าน STDIN พารามิเตอร์ฟังก์ชันหรือกลไกอินพุตที่เหมาะสมอื่น ๆ
- Ouptut สามารถไปที่ STDOUT คอนโซลค่าส่งคืนฟังก์ชันหรือสตรีมเอาต์พุตอื่น ๆ ที่สมเหตุสมผล
- ผลลัพธ์จะต้องเป็นสตริงในรูปแบบa/bที่ไหนaและbเป็นรายการที่เกี่ยวข้องในลำดับ Stern-Brocot การประเมินเศษส่วนก่อนส่งออกจะไม่ได้รับอนุญาต ตัวอย่างเช่นสำหรับการป้อนข้อมูล12การส่งออกควรจะเป็นไม่ได้2/50.4
- ช่องโหว่มาตรฐานไม่ได้รับอนุญาต
นี่คือcode-golfดังนั้นคำตอบที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ
กรณีทดสอบ
กรณีทดสอบที่นี่มีการจัดทำดัชนี 1
n    r(n)
--  ------
1    1/1
2    1/2
3    2/1
4    1/3
5    3/2
6    2/3
7    3/1
8    1/4
9    4/3
10   3/5
11   5/2
12   2/5
13   5/3
14   3/4
15   4/1
16   1/5
17   5/4
18   4/7
19   7/3
20   3/8
50   7/12
100  7/19
1000 11/39
รายการ OEIS: A002487
 
วิดีโอจำนวนนับที่ยอดเยี่ยมพูดคุยถึงลำดับ: เศษส่วนไม่สิ้นสุด
True/2ไม่ใช่เศษส่วนที่ถูกต้อง (เท่าที่ฉันกังวล) เช่นกันTrueไม่ได้เสมอ1- บางภาษาใช้-1แทนเพื่อหลีกเลี่ยงความผิดพลาดที่อาจเกิดขึ้นเมื่อมีการใช้ผู้ประกอบการระดับบิต [จำเป็น]
                Trueเทียบเท่ากับ1และจะเป็นTrue/2 1/2
                
Trues แทน1s ได้หรือไม่?