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}
ด้วยหรือไม่