ปัญหา
ลองกำหนดคันทอร์ทั่วไปที่ตั้งค่าโดยการลบเซกเมนต์ความยาวแบบมีเหตุผลบางส่วนออกจากช่วงกลางของช่วงเวลาทั้งหมดที่ยังไม่ถูกลบโดยเริ่มจากช่วงเวลาต่อเนื่องเดียว
กำหนดความยาวสัมพัทธ์ของเซกเมนต์ที่จะลบหรือไม่และจำนวนการวนซ้ำที่ต้องทำปัญหาคือการเขียนโปรแกรมหรือฟังก์ชันที่เอาต์พุตความยาวสัมพัทธ์ของเซกเมนต์ที่มีหรือไม่ถูกลบหลังจากn
การวนซ้ำ
ตัวอย่าง: ลบซ้ำอันดับที่ 4 และ 6 อย่างซ้ำ ๆ
การป้อนข้อมูล:
n
- จำนวนการวนซ้ำการทำดัชนีเริ่มต้นจาก 0 หรือ 1
l
- รายการความยาวเซกเมนต์เป็นจำนวนเต็มบวกที่มีgcd(l)=1
และความยาวคี่แทนความยาวสัมพัทธ์ของส่วนต่าง ๆ ที่คงอยู่หรือถูกลบเริ่มต้นจากเซกเมนต์ที่ไม่ถูกลบ เนื่องจากความยาวของรายการเป็นเลขคี่กลุ่มแรกและกลุ่มสุดท้ายจะไม่ถูกลบ ตัวอย่างเช่นสำหรับคันทอร์ปกติตั้งค่านี้จะเป็น [1,1,1] สำหรับหนึ่งในสามที่อยู่หนึ่งในสามที่จะถูกลบและอีกหนึ่งในสามที่ไม่
เอาท์พุท:
รายการจำนวนเต็มo
, gcd(o)=1
ของความยาวส่วนญาติในn
การทำซ้ำ TH l
เมื่อกลุ่มที่ไม่ได้ถูกลบในการทำซ้ำก่อนหน้านี้จะถูกแทนที่ด้วยสำเนาลดขนาดลงของรายการ [1]
ย้ำเป็นเพียงครั้งแรก คุณสามารถใช้วิธีการแสดงผลที่ไม่คลุมเครือใด ๆได้
ตัวอย่าง
n=0, l=[3,1,1,1,2] → [1]
n=1, l=[3,1,1,1,2] → [3, 1, 1, 1, 2]
n=2, l=[3,1,1,1,2] → [9,3,3,3,6,8,3,1,1,1,2,8,6,2,2,2,4]
n=3, l=[5,2,3] → [125,50,75,100,75,30,45,200,75,30,45,60,45,18,27]
n=3, l=[1,1,1] → [1,1,1,3,1,1,1,9,1,1,1,3,1,1,1]
คุณสามารถสันนิษฐานว่าอินพุตนั้นถูกต้อง นี่คือโค้ดกอล์ฟดังนั้นโปรแกรมที่สั้นที่สุดที่วัดเป็นไบต์จะเป็นผู้ชนะ
[0, 1, 2, 4, 6, 7]
แทนที่จะเป็น[3, 1, 1, 1, 2]
?