ปริศนา MUเป็นปริศนาที่คุณพบว่าคุณสามารถเปิดMIเข้าไปMUให้การดำเนินงานดังต่อไปนี้:
หากสตริงของคุณสิ้นสุดลง
Iคุณสามารถเพิ่ม aUถึงท้าย (เช่นMI -> MIU)หากสตริงของคุณเริ่มต้นด้วย
Mคุณสามารถผนวกสำเนาของส่วนหลังจากMที่สตริง
(เช่นMII -> MIIII)ถ้าสายของคุณมีสามติดต่อกันของคุณอาจมีการเปลี่ยนแปลงให้เป็น
I(เช่น)UMIII -> MUหากสตริงของคุณมีสองรายการติดกัน
Uคุณสามารถลบออกได้ (เช่นMUUU -> MU)
งานของคุณคือการสร้างโปรแกรมที่กำหนดว่าสิ่งนี้สามารถทำได้สำหรับสตริงเริ่มต้นและสิ้นสุด
โปรแกรมของคุณจะใช้สองสายเป็นอินพุต แต่ละสตริงจะประกอบด้วยสิ่งต่อไปนี้:
Mหนึ่งสตริงถึงยี่สิบเก้า
I'และU' s
โปรแกรมของคุณจะส่งคืนtrue(หรือเป็นตัวแทนของภาษาการเขียนโปรแกรมของมัน / YPLRT) หากสตริงที่สองสามารถเข้าถึงได้จากสตริงแรกและfalse(หรือ YPLRT) หากไม่ใช่
ตัวอย่างอินพุตและเอาต์พุต:
MI MII
true
MI MU
false
MIIIIU MI
true
รหัสที่สั้นที่สุดในภาษาใด ๆ เพื่อทำสิ่งนี้ชนะ
MIนั้นเป็นM(I|U)*จำนวนที่Iไม่เท่ากับ 3 อย่างแน่นอนและการตรวจสอบโดยตรงนั้นจะทำให้รหัสสั้นลงอย่างแน่นอน นอกจากนี้ฉันไม่ทราบเกี่ยวกับ a-Priori เกี่ยวกับความยาวของสตริงที่จำเป็นสำหรับขั้นตอนกลางดังนั้นการค้นหาโดยตรงอาจไม่สามารถทำได้
MIสตริงที่เข้าถึงได้
IMเป็นที่จัดทำหรือMUMMI?