พื้นหลัง
Stack Catsเป็นภาษาลึกลับที่สามารถย้อนกลับได้โดย Martin Ender แต่ละคำสั่งใน Stack Cats เป็นทั้งการผกผันของตัวเอง (แสดงเป็นตัวอักษรสมมาตรเช่น-_:T|
) หรือมีคำสั่งผกผันของมัน (แสดงเป็นภาพสะท้อนในกระจกเช่น()
{}
[]
<>
) Stack Cats มีความต้องการด้านไวยากรณ์ที่แข็งแกร่งซึ่งโปรแกรมทั้งหมดควรเป็นภาพสะท้อนของตัวมันเอง โปรดทราบว่านี้หมายถึงการที่ถูกต้องโปรแกรมใด ๆ Stack แมวเป็นแอมบิแกรมภาพกระจกสะท้อนธรรมชาติ
นี่คือชุดคำสั่งทั้งหมดของ Stack Cats:
- Self-สมมาตร:
!*+-:=ITX^_|
- คู่สมมาตร:
()
{}
[]
<>
\/
อักขระอื่น ๆ ไม่ถูกต้อง อินพุตใด ๆ ที่มีอักขระที่ไม่ได้อยู่ในชุดอักขระด้านบนควรเอาต์พุตเท็จ
ภาษามีข้อ จำกัด เพิ่มเติมที่()
และ{}
คู่ต้องสมดุลเสมอ แต่เพื่อความเรียบง่ายคุณไม่จำเป็นต้องตรวจสอบเงื่อนไขนี้
ต่อไปนี้เป็นตัวอย่างของโปรแกรมStack Cats ที่ถูกต้อง (อีกครั้งโปรดทราบว่าคุณไม่ได้ตรวจสอบการล้อเลียนที่สมดุล):
{[+]==[+]}
[)>^<(]
({T)}|{(T})
<(*]{[:!-_:>}<[<)*(>]>{<:_-!:]}[*)>
สิ่งเหล่านี้ไม่ใช่:
b<+>d
())(
({[<++<]})
ท้าทาย
เขียนโปรแกรมหรือฟังก์ชันที่กำหนดว่าสตริงที่กำหนดเป็นโปรแกรม Stack Cats ที่ถูกต้อง รหัสของคุณควรเป็นภาพสะท้อนในกระจกเงาตามธรรมชาติซึ่งหมายถึง:
- รหัสของคุณควรเป็นภาพสะท้อนของตัวมันเอง
- รหัสของคุณอาจมีการขึ้นบรรทัดใหม่อย่างน้อยหนึ่งบรรทัดตราบใดที่รหัสทั้งหมดแสดงตามธรรมชาติเป็นภาพสะท้อนของตัวเอง
- คุณสามารถละเว้นหรือเพิ่มช่องว่างที่ต่อท้ายในแต่ละบรรทัดได้เนื่องจากจะไม่เปลี่ยนการแสดงผล
- ไม่อนุญาตให้ใช้อักขระแท็บเนื่องจากมีความคลุมเครือบนหน้าจอ
หมายเหตุ:รหัสของคุณไม่จำเป็นต้องเป็นโปรแกรม Stack Cats ที่ถูกต้อง มันอาจมีอักขระพิเศษบางตัวที่ไม่ได้รับอนุญาตใน Stack Cats (ดูด้านล่างสำหรับรายการทั้งหมด)
ตัวอย่างเช่นสองโปรแกรมต่อไปนี้เป็นแบบสมมาตร (และการส่งที่ถูกต้อง ) ในขณะที่โปรแกรมที่สามไม่ใช่:
({bTd})
[<q|p>]
({bTd})
IXI
({bTd})
IXI
- เกี่ยวกับ "mirror symmetry" จะมีการพิจารณาความสมมาตรสไตล์ Stack Cats เท่านั้น (เช่น
({IH})
ไม่ใช่การส่งที่ถูกต้องแม้ว่าจะมีความสมมาตรของกระจกก็ตาม) - รหัสของคุณสามารถมีชุดอักขระเหล่านี้เท่านั้นและขึ้นบรรทัดใหม่:
- สมมาตรด้วยตนเอง: space (
0x20
) +!"'*+-.8:=AHIMOTUVWXY^_ovwx|
- คู่สมมาตร:
()
/\
<>
[]
bd
pq
{}
- สมมาตรด้วยตนเอง: space (
ชุดอักขระถูกเลือกให้เป็นแบบสมมาตรหรือแบบสมมาตรอย่างเคร่งครัดเมื่อแสดงเป็นรหัสใน SE
อินพุตและเอาต์พุต
ช่วงอินพุตเป็นสตริงหนึ่งบรรทัดของอักขระ ASCII ที่พิมพ์ได้
คุณสามารถเลือกที่จะรับเข้าเป็นสตริงรายการตัวอักษรหรือรายการค่า ASCII
คุณสามารถเลือกที่จะส่งออกอย่างใดอย่างหนึ่ง:
- ค่าความจริง / เท็จใด ๆ ตามที่กำหนดโดยภาษาที่คุณเลือก
- ค่าผลลัพธ์ที่แท้จริงอาจแตกต่างกันไประหว่างอินพุต (เช่นเอาท์พุท 1 สำหรับอินพุตจริงและ 2 สำหรับอีกอันหนึ่ง)
- ไม่อนุญาตให้สลับค่าความจริงและเท็จ
- ค่าคงที่สองค่าใด ๆ สำหรับจริง / เท็จตามลำดับ
- ในกรณีนี้ค่าผลลัพธ์ควรเป็นหนึ่งในสองค่าคงที่
คุณควรระบุวิธีการป้อนข้อมูลและค่าผลลัพธ์ในการส่งของคุณ
สภาพการชนะ
นี่คือcode-golfดังนั้นไบต์ต่ำสุดในแต่ละภาษาจะชนะ
หมายเหตุ
- ช่องโหว่มาตรฐานเป็นสิ่งต้องห้ามตามปกติ
- แน่นอนว่าคุณสามารถแก้ปัญหานี้ได้ใน Stack Cats แต่โอกาสคือคุณไม่สามารถใช้การตั้งค่าสถานะที่อนุญาตให้ลดขนาดรหัสลงครึ่งหนึ่ง และเป็นภาษาที่ใช้ยากมากในการรับ: P
#
ไม่อนุญาตให้มีคม