11
การคูณด้วยการดัดแปลงตัวเอง
... อย่างน้อยสำหรับคำจำกัดความของ "การดัดแปลงตนเอง" งาน ในความท้าทายนี้งานของคุณคือการเขียนสามสาย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) -> …