... อย่างน้อยสำหรับคำจำกัดความของ "การดัดแปลงตนเอง"
งาน
ในความท้าทายนี้งานของคุณคือการเขียนสามสายA
, B
และC
ที่ตอบสนองคุณสมบัติดังต่อไปนี้
สตริง
B
มีความยาวอย่างน้อย 1สำหรับทุก ๆ
n ≥ 0
สตริงเป็นโปรแกรมที่ถูกต้อง (หมายถึงโปรแกรมที่รันได้เต็มหรือนิยามฟังก์ชัน) ในภาษาการเขียนโปรแกรมที่คุณเลือก ยกหมายถึงการทำซ้ำเพื่อให้ที่นี้หมายถึงสตริง, , , ฯลฯ แต่ละโปรแกรมจะใช้เวลาหนึ่งสตริงเป็น input และผลตอบแทนที่หนึ่งสายเป็นผลผลิตABnC
AC
ABC
ABBC
ABBBC
สำหรับการใด ๆ
m, n ≥ 0
ถ้าโปรแกรมจะดำเนินการด้วยการป้อนข้อมูลก็จะส่งกลับ สำหรับอินพุตที่ไม่ใช่แบบฟอร์มนี้โปรแกรมอาจทำสิ่งใดก็ได้รวมถึงข้อขัดข้องABmC
ABnC
ABm*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
ในคำตอบของคุณในบางวิธีและเป็นกำลังใจที่จะอธิบายถึงวิธีการแก้ปัญหาของคุณ