Steiner Chains เป็นกลุ่มของ N วงกลมที่แต่ละวงสัมผัสกับวงกลมที่ไม่มีการตัดกัน 2 วงรวมถึงวงกลมก่อนหน้าและถัดไปของโซ่ดังที่เห็นในภาพด้านล่าง:
ในการท้าทายนี้คุณจะเขียนโปรแกรม / ฟังก์ชั่นที่ดึงโซ่ Steiner วนซ้ำนั่นคือวงกลมของห่วงโซ่ที่กำหนดจะเป็นวงกลมฐานของโซ่ที่ซ้ำอีกครั้ง:
ท้าทาย
เขียนโปรแกรม / ฟังก์ชั่นที่ยอมรับขนาดภาพและรายการจำนวนเต็มเพื่อแสดงระดับของวงกลมในแต่ละการวนซ้ำที่ต่อเนื่องของโซ่และเอาท์พุทของภาพด้วยโซ่ Steiner แบบเรียกซ้ำ
อินพุต
โปรแกรม / ฟังก์ชั่นของคุณจะยอมรับ 2 ข้อโต้แย้ง:
s
- ความกว้างและความสูงของภาพls
- รายการจำนวนเต็มบวกแสดงถึงจำนวนของวงกลมที่มีอยู่ในการวนซ้ำของโซ่ต่อเนื่องซึ่งเรียงลำดับจากเชนบนสุดไปยังเชนล่างสุด
เอาท์พุต
โปรแกรม / ฟังก์ชั่นของคุณจะแสดงภาพขนาดs
x s
แสดงห่วงโซ่สทิเนอร์
- วงกลมฐานระดับบนสุดจะมีขนาดใหญ่เท่ากับภาพที่มีเส้นผ่านศูนย์กลาง
s
อยู่กึ่งกลางภาพ - เพื่อทำให้สิ่งต่าง ๆ ง่ายขึ้น 2 ฐานวงกลมของห่วงโซ่สทิเนอร์จะเป็นศูนย์กลางกล่าวคือจุดศูนย์กลางของวงกลมพื้นฐาน 2 วงจะเหมือนกัน
- กำหนดรัศมีภายนอก
R
และจำนวนวงกลมในห่วงโซ่N
สูตรสำหรับรัศมีภายในR'
คือR' = (R-R*sin(pi/N))/(sin(pi/N)+1)
- วงกลมของโซ่เช่นเดียวกับวงกลมฐานด้านในจะเป็นวงกลมฐานด้านนอกของการทำซ้ำของโซ่ต่อไป
- ในขณะที่วนรอบวงกลมซ้ำคำสั่งของห่วงโซ่ถัดไปควรสอดคล้องกับค่าถัดไป
ls
- ในขณะที่วนซ้ำผ่านวงในของห่วงโซ่การเรียงลำดับควรจะเหมือนกับลำดับของผู้ปกครอง (ตัวอย่าง [5,2]):
- โซ่ทั้งหมดควรสิ้นสุดการเรียกซ้ำที่ความลึกของความยาว
ls
- การหมุนของโซ่ไม่สำคัญ:
- อย่างไรก็ตามการหมุนของสายวนซ้ำที่สัมพันธ์กับจุดศูนย์กลางของพ่อแม่ควรจะเหมือนกัน:
- วงกลมทั้งหมดควรวาดด้วยโครงร่างหรือการเติมที่มั่นคง
- ตัวเลือกสีจะถูกนำไปใช้งาน, ประหยัดช่องโหว่ (ตัวอย่างเช่นเติมทุกอย่างด้วยสีเดียวกัน)
ตัวอย่างรัน
(depth of the recursion)^4
ในตัวอย่างต่อไปสีจะถูกกำหนดโดย
chain(600,[5,4,3])
chain(600,[11,1,1,1,1,1,1])
chain(600,[5,6,7,8,9])