เมื่อวงกลมสามวงสัมผัสกันเราสามารถหาได้วงกลมเพิ่มอีกสองวงซึ่งแทนเจนต์ของวงกลมทั้งสามนี้ สองคนนี้จะเรียกว่าวงการสุขุม โปรดทราบว่าหนึ่งในแวดวง Apollonian อาจอยู่ในวงกลมเริ่มต้นสามวง
เริ่มจากวงกลมแทนเจนต์สามวงเราสามารถสร้างเศษส่วนที่เรียกว่า ปะเก็น Apollonianโดยกระบวนการต่อไปนี้:
- เรียกวงกลม 3 วงเริ่มต้นเป็นวงกลมหลัก
- ค้นหาวงกลม Apollonian วงกลมสองวง
- สำหรับแต่ละวงกลม Apollonian:
- สำหรับแต่ละคู่ของวงกลมหลักสามคู่:
- เรียกวงกลม Apollonian และวงกลมหลักสองชุดคือชุดวงกลมหลักและเริ่มต้นใหม่จากขั้นตอนที่ 2
- สำหรับแต่ละคู่ของวงกลมหลักสามคู่:
เช่นเริ่มต้นด้วยวงกลมที่มีขนาดเท่ากันเราจะได้รับ:
พบรูปภาพใน Wikipedia
มีอีกหนึ่งบิตของสัญกรณ์ที่เราต้องการ ถ้าเรามีวงกลมรัศมีRมีศูนย์(x, y)เราสามารถกำหนดมันโค้งเป็นk = ± 1 / R โดยปกติkจะเป็นค่าบวก แต่เราสามารถใช้ค่าลบkเพื่อแสดงวงกลมที่ล้อมรอบวงกลมอื่น ๆ ทั้งหมดในปะเก็น (เช่นแทนเจนต์ทั้งหมดสัมผัสวงกลมนั้นจากด้านใน) จากนั้นเราสามารถระบุวงกลมด้วยหมายเลข triplet: (k, x * k, y * k)k)
สำหรับจุดประสงค์ของคำถามนี้เราจะถือว่าจำนวนเต็มบวกkและ rational xและy y ที่
ตัวอย่างเพิ่มเติมสำหรับแวดวงดังกล่าวสามารถพบได้ในบทความ Wikipediaในบทความวิกิพีเดีย
นอกจากนี้ยังมีสิ่งที่น่าสนใจเกี่ยวกับปะเก็นหนึ่งในบทความนี้ (ในหมู่สิ่งอื่น ๆ สนุกกับวงกลม)
ความท้าทาย
คุณจะได้รับ4(14, 28/35, -112/105)
ข้อกำหนดวงกลมซึ่งแต่ละจะมีลักษณะเช่น คุณสามารถใช้รูปแบบรายการและตัวดำเนินการหารที่สะดวกเช่นที่คุณสามารถทำได้eval
ป้อนข้อมูลได้อย่างง่ายดายหากคุณต้องการ คุณอาจสันนิษฐานว่าวงกลมทั้งสี่นั้นมีการสัมผัสกันและแน่นอนว่าวงกลมวงแรกมีความโค้งเป็นลบ นั่นหมายความว่าคุณได้รับวงกลม Apollonian ที่ล้อมรอบแล้วอีกสามแห่ง สำหรับรายการอินพุตตัวอย่างที่ถูกต้องให้ดูที่ด้านล่างของความท้าทาย
เขียนโปรแกรมหรือฟังก์ชั่นซึ่งรับอินพุตนี้ดึงปะเก็น Apollonian
คุณสามารถรับอินพุตผ่านฟังก์ชันอาร์กิวเมนต์ ARGV หรือ STDIN และแสดงเศษส่วนบนหน้าจอหรือเขียนลงในไฟล์ภาพในรูปแบบที่คุณต้องการ
หากภาพที่ได้มีการแรสเตอร์จะต้องมีอย่างน้อย 400 พิกเซลในแต่ละด้านโดยมีช่องว่างภายในน้อยกว่า 20% รอบวงกลมที่ใหญ่ที่สุด คุณอาจหยุดการเรียกซ้ำเมื่อถึงวงกลมที่มีรัศมีน้อยกว่า 400 ของวงกลมที่ใหญ่ที่สุดหรือวงกลมที่เล็กกว่าหนึ่งพิกเซลแล้วแต่ว่าสิ่งใดจะเกิดขึ้นก่อน
คุณต้องวาดโครงร่างวงกลมเท่านั้นไม่ใช่ดิสก์เต็ม แต่สีของพื้นหลังและเส้นเป็นทางเลือกของคุณ โครงร่างจะต้องไม่กว้างเกินกว่า 200 เส้นผ่านศูนย์กลางวงกลมด้านนอก
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ
อินพุตตัวอย่าง
นี่คือปะเก็นครบถ้วนจากบทความ Wikipedia ที่แปลงเป็นรูปแบบอินพุตที่กำหนด:
[[-1, 0, 0], [2, 1, 0], [2, -1, 0], [3, 0, 2]]
[[-2, 0, 0], [3, 1/2, 0], [6, -2, 0], [7, -3/2, 2]]
[[-3, 0, 0], [4, 1/3, 0], [12, -3, 0], [13, -8/3, 2]]
[[-3, 0, 0], [5, 2/3, 0], [8, -4/3, -1], [8, -4/3, 1]]
[[-4, 0, 0], [5, 1/4, 0], [20, -4, 0], [21, -15/4, 2]]
[[-4, 0, 0], [8, 1, 0], [9, -3/4, -1], [9, -3/4, 1]]
[[-5, 0, 0], [6, 1/5, 0], [30, -5, 0], [31, -24/5, 2]]
[[-5, 0, 0], [7, 2/5, 0], [18, -12/5, -1], [18, -12/5, 1]]
[[-6, 0, 0], [7, 1/6, 0], [42, -6, 0], [43, -35/6, 2]]
[[-6, 0, 0], [10, 2/3, 0], [15, -3/2, 0], [19, -5/6, 2]]
[[-6, 0, 0], [11, 5/6, 0], [14, -16/15, -4/5], [15, -9/10, 6/5]]
[[-7, 0, 0], [8, 1/7, 0], [56, -7, 0], [57, -48/7, 2]]
[[-7, 0, 0], [9, 2/7, 0], [32, -24/7, -1], [32, -24/7, 1]]
[[-7, 0, 0], [12, 5/7, 0], [17, -48/35, -2/5], [20, -33/35, 8/5]]
[[-8, 0, 0], [9, 1/8, 0], [72, -8, 0], [73, -63/8, 2]]
[[-8, 0, 0], [12, 1/2, 0], [25, -15/8, -1], [25, -15/8, 1]]
[[-8, 0, 0], [13, 5/8, 0], [21, -63/40, -2/5], [24, -6/5, 8/5]]
[[-9, 0, 0], [10, 1/9, 0], [90, -9, 0], [91, -80/9, 2]]
[[-9, 0, 0], [11, 2/9, 0], [50, -40/9, -1], [50, -40/9, 1]]
[[-9, 0, 0], [14, 5/9, 0], [26, -77/45, -4/5], [27, -8/5, 6/5]]
[[-9, 0, 0], [18, 1, 0], [19, -8/9, -2/3], [22, -5/9, 4/3]]
[[-10, 0, 0], [11, 1/10, 0], [110, -10, 0], [111, -99/10, 2]]
[[-10, 0, 0], [14, 2/5, 0], [35, -5/2, 0], [39, -21/10, 2]]
[[-10, 0, 0], [18, 4/5, 0], [23, -6/5, -1/2], [27, -4/5, 3/2]]
[[-11, 0, 0], [12, 1/11, 0], [132, -11, 0], [133, -120/11, 2]]
[[-11, 0, 0], [13, 2/11, 0], [72, -60/11, -1], [72, -60/11, 1]]
[[-11, 0, 0], [16, 5/11, 0], [36, -117/55, -4/5], [37, -112/55, 6/5]]
[[-11, 0, 0], [21, 10/11, 0], [24, -56/55, -3/5], [28, -36/55, 7/5]]
[[-12, 0, 0], [13, 1/12, 0], [156, -12, 0], [157, -143/12, 2]]
[[-12, 0, 0], [16, 1/3, 0], [49, -35/12, -1], [49, -35/12, 1]]
[[-12, 0, 0], [17, 5/12, 0], [41, -143/60, -2/5], [44, -32/15, 8/5]]
[[-12, 0, 0], [21, 3/4, 0], [28, -4/3, 0], [37, -7/12, 2]]
[[-12, 0, 0], [21, 3/4, 0], [29, -5/4, -2/3], [32, -1, 4/3]]
[[-12, 0, 0], [25, 13/12, 0], [25, -119/156, -10/13], [28, -20/39, 16/13]]
[[-13, 0, 0], [14, 1/13, 0], [182, -13, 0], [183, -168/13, 2]]
[[-13, 0, 0], [15, 2/13, 0], [98, -84/13, -1], [98, -84/13, 1]]
[[-13, 0, 0], [18, 5/13, 0], [47, -168/65, -2/5], [50, -153/65, 8/5]]
[[-13, 0, 0], [23, 10/13, 0], [30, -84/65, -1/5], [38, -44/65, 9/5]]
[[-14, 0, 0], [15, 1/14, 0], [210, -14, 0], [211, -195/14, 2]]
[[-14, 0, 0], [18, 2/7, 0], [63, -7/2, 0], [67, -45/14, 2]]
[[-14, 0, 0], [19, 5/14, 0], [54, -96/35, -4/5], [55, -187/70, 6/5]]
[[-14, 0, 0], [22, 4/7, 0], [39, -12/7, -1/2], [43, -10/7, 3/2]]
[[-14, 0, 0], [27, 13/14, 0], [31, -171/182, -10/13], [34, -66/91, 16/13]]
[[-15, 0, 0], [16, 1/15, 0], [240, -15, 0], [241, -224/15, 2]]
[[-15, 0, 0], [17, 2/15, 0], [128, -112/15, -1], [128, -112/15, 1]]
[[-15, 0, 0], [24, 3/5, 0], [40, -5/3, 0], [49, -16/15, 2]]
[[-15, 0, 0], [24, 3/5, 0], [41, -8/5, -2/3], [44, -7/5, 4/3]]
[[-15, 0, 0], [28, 13/15, 0], [33, -72/65, -6/13], [40, -25/39, 20/13]]
[[-15, 0, 0], [32, 17/15, 0], [32, -161/255, -16/17], [33, -48/85, 18/17]]