Stack Catsเป็นภาษาที่สามารถย้อนกลับได้ ธรรมชาติที่พลิกกลับได้ของมันทำให้เกิดวงวนที่ค่อนข้างแปลก (...)ความท้าทายนี้เป็นเรื่องเกี่ยวกับห่วงเงื่อนไข เมื่อลูปเหล่านี้ซ้อนในบางวิธีคุณสามารถแปลงรหัสเพื่อลดความลึกในการซ้อน ต่อไปนี้เป็นกฎ (ตำแหน่งAและBตัวอย่างของตัวอย่าง):
- เมื่อหนึ่งในวงเริ่มต้นด้วยวงอื่นเราสามารถดึงภายในวงไปด้านหน้า: กลายเป็น
((A)B)(A)(B) - เมื่อหนึ่งในห่วงจบลงด้วยวงอื่นเราสามารถดึงภายในวงที่สิ้นสุด: กลายเป็น
(B(A))(B)(A) ()สามารถลบลูปที่ว่างเปล่าออกจากโปรแกรมทั้งหมด ในฐานะที่เป็นข้อพิสูจน์ (ร่วมกับกฎระเบียบอื่น ๆ ) เทียบเท่ากับ((A))(A)
ลูปซ้อนกันเท่านั้นที่จะยังคงอยู่ในรูปแบบ(A(B)C)ที่A, BและCมีไม่ว่างเปล่า
ความท้าทาย
คุณได้รับโปรแกรม Stack Cats ที่ถูกต้องและงานของคุณคือลดระดับการซ้อนของลูปมากที่สุดเท่าที่จะเป็นไปได้โดยไม่ทิ้งลูปว่างไว้โดยใช้การแปลงด้านบน
โปรแกรม Stack Cats ที่ถูกต้อง ...
- ... ประกอบด้วยอักขระ
()/\<>[]{}!"*+-:=ITX^_|เท่านั้น - ... มีมิเรอร์สมมาตร (เช่น
\(]{}!{}[)/เป็นโปรแกรมที่ถูกต้อง แต่/|/ไม่มี) - ... ได้อย่างถูกต้องและตรงกับการซ้อนกัน
()และ{}([],<>และ\/ไม่จำเป็นต้องมีการจับคู่ตามปกติแม้ว่าพวกเขาจะปรากฏในคู่เนื่องจากความต้องการกระจกสมมาตร)
คุณสามารถใช้สตริงหรือรายการอักขระเป็นอินพุตได้ แต่เอาต์พุตจะต้องแสดงในรูปแบบเดียวกัน
คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นและใช้วิธีการมาตรฐานใด ๆ ของเราในการรับอินพุตและให้เอาต์พุต โปรดทราบว่าช่องโหว่เหล่านี้เป็นสิ่งต้องห้ามโดยค่าเริ่มต้น
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดที่ถูกต้อง - วัดเป็นไบต์ - ชนะ
กรณีทดสอบ
กรณีทดสอบคือสองบรรทัดแต่ละบรรทัด (อินพุตและเอาต์พุต) คั่นด้วยบรรทัดว่าง โปรดทราบว่าหนึ่งเอาต์พุตว่างเปล่า คุณต้องสนับสนุนอินพุตว่าง (ซึ่งควรทำให้เอาต์พุตว่าง)
(((=+|+=)))
(=+|+=)
({(=+|+=)})
({(=+|+=)})
((\)/)I(\(/))
(\)(/)I(\)(/)
(()()(())()())
((<|>((X((T)))[_]))\^/(([_](((T))X))<|>))
(<|>)(X)(T)([_])(\^/)([_])(T)(X)(<|>)
(...)-type loops เท่านั้น
\^/ในวงเล็บ?
(<|>((X((T)))[_])) (([_](((T))X))<|>)
((A)B(C))จะกลายเป็น(A)(B)(C)เพราะทั้งกฎ 1 และ 2 ต่อมา: ((A)B(C))→ (A)(B(C))(กฎ 1) → (A)(B)(C)(กฎ 2)
()เท่านั้นดังนั้นอินพุต{{A}B}จะยังคงเป็นอยู่และจะไม่ถูกแยกออกมา{A}{B}ด้วยหรือไม่