... อย่างน้อยสำหรับคำจำกัดความของ "การดัดแปลงตนเอง"
งาน
ในความท้าทายนี้งานของคุณคือการเขียนสามสายA, BและCที่ตอบสนองคุณสมบัติดังต่อไปนี้
สตริง
Bมีความยาวอย่างน้อย 1สำหรับทุก ๆ
n ≥ 0สตริงเป็นโปรแกรมที่ถูกต้อง (หมายถึงโปรแกรมที่รันได้เต็มหรือนิยามฟังก์ชัน) ในภาษาการเขียนโปรแกรมที่คุณเลือก ยกหมายถึงการทำซ้ำเพื่อให้ที่นี้หมายถึงสตริง, , , ฯลฯ แต่ละโปรแกรมจะใช้เวลาหนึ่งสตริงเป็น input และผลตอบแทนที่หนึ่งสายเป็นผลผลิตABnCACABCABBCABBBCสำหรับการใด ๆ
m, n ≥ 0ถ้าโปรแกรมจะดำเนินการด้วยการป้อนข้อมูลก็จะส่งกลับ สำหรับอินพุตที่ไม่ใช่แบบฟอร์มนี้โปรแกรมอาจทำสิ่งใดก็ได้รวมถึงข้อขัดข้องABmCABnCABm*n+1C
ตัวอย่างบางส่วนในรูปแบบprogram(input) -> output:
AC(AC) -> ABC
ABC(AC) -> ABC
ABBBBBC(AC) -> ABC
AC(ABC) -> ABC
AC(ABBBBC) -> ABC
ABC(ABC) -> ABBC
ABBC(ABC) -> ABBBC
ABBBBC(ABBBC) -> ABBBBBBBBBBBBBC
ABBBC(ABBBBBBC) -> ABBBBBBBBBBBBBBBBBBBC
กฎและเกณฑ์การให้คะแนน
คะแนนของคุณคือความยาวรวมAและCคะแนนที่ต่ำกว่าดีกว่า โปรดทราบว่าในขณะที่Bไม่ได้นับรวมคะแนนจะต้องสร้างโดยAและCในตัวอย่างแรก
ช่องโหว่มาตรฐานไม่ได้รับอนุญาต โปรแกรมไม่ได้รับอนุญาตให้เข้าถึงซอร์สโค้ดของตนเองโดยตรงหรือโดยอ้อม (ยกเว้นเมื่อได้รับเป็นอินพุต) คุณจะต้องระบุสตริงA, BและCในคำตอบของคุณในบางวิธีและเป็นกำลังใจที่จะอธิบายถึงวิธีการแก้ปัญหาของคุณ