Stax , 11 ไบต์ (คะแนน 4)
'''cc'~~'dd
เรียกใช้และแก้ไขข้อบกพร่องออนไลน์!
ฉันรู้สึกเป็นเกียรติที่มีคำตอบแรก (ตามลำดับเวลา) สำหรับความท้าทายนี้ด้วยคะแนนที่สูงกว่าหรือเท่ากับ 4 บางทีคะแนนอาจสูงขึ้นแม้ว่า
ในสแตกซ์สตริงตัวอักษรที่ประกอบด้วยอักขระตัวเดียวจะถูกเขียนด้วย'
ดังนั้นจึง'', 'c, 'd, '~
เป็นตัวอักษรสตริงทั้งหมด คำสั่งที่สอดคล้องกันสำหรับc
d
และ~
หมายถึงการทำซ้ำด้านบนของสแต็กหลักป๊อปอัพด้านบนของสแต็กหลักและป๊อปที่ด้านบนของสแต็กหลักและกดไปที่สแต็กอินพุตตามลำดับ สำหรับความท้าทายนี้อินพุตสแต็กไม่มีผลต่อเอาต์พุตและไม่สำคัญดังนั้นเราจึงสามารถพูดd
และ~
เหมือนกันได้
คำอธิบาย
เป็นการดีที่สุดที่จะแบ่งรหัสออกเป็นหลายส่วนและพิจารณาแยกต่างหาก
เมื่อมันไม่ได้ดัดแปลงกับ'''cc
ดันตัวอักษร'
และตัวอักษรc
ที่จะสแต็คหลักและซ้ำด้านบนเพื่อให้สแต็คจะเป็น c,c,'
(จากไปที่ด้านล่าง)
เมื่อไม่ได้ดัดแปลงให้'~~
กดตัวอักษร~
แล้วเปิดมัน (และดันไปที่อินพุตสแต็ก) ซึ่งโดยทั่วไปจะเป็นแบบไม่มี op สำหรับสแต็กหลัก
เมื่อไม่ได้รับการแก้ไขให้'dd
กดตัวอักษรd
แล้วเปิดขึ้นอีกครั้งหนึ่งไม่มีตัวเลือกสำหรับสแต็กหลัก
ในตอนท้ายของโปรแกรมเนื่องจากไม่มีการส่งออกอย่างชัดเจนด้านบนของสแต็กหลักจะถูกพิมพ์ออกมาโดยปริยาย
หากโปรแกรมทำงานตามที่เป็นกองสุดท้ายยังคงเป็นและออกจะc,c,'
c
หากส่วนแรกจะกลายเป็น''cc
แล้วเรามีตัวอักษรและสองคำแนะนำสำเนากองสุดท้ายจะเป็น'
',','
ระบุว่าทั้งสองส่วนอื่น ๆ จะไม่มี-op, '
ผลจะเป็น
หากส่วนแรกกลายเป็น'''c
ผลลัพธ์จะเหมือนกันกับส่วนที่c
ไม่ได้รับการแก้ไข แต่จะไม่ซ้ำกัน c,'
ดังนั้นสแต็คจะเป็น หลังจากที่ทั้งสองไม่มี-op c
เป็นด้านบนของสแต็คเป็น
ดังนั้นเราสามารถตรวจจับรังสีในส่วนแรก
ส่วนที่สองและส่วนที่สามทำงานในลักษณะเดียวกัน ฉันจะเอาส่วนที่สามเป็นตัวอย่าง
หากส่วนที่สามถูกแก้ไขส่วนที่สองจะถูกเก็บไว้ตามเดิมและสแต็กก่อนที่จะเรียกใช้ส่วนที่สามคือ c,c,'
หากส่วนที่สามกลาย'd
เป็นตัวอักษรd
จะถูกผลักไปด้านบนของสแต็คหลักและไม่มีอะไรเพิ่มเติมจะทำ ด้านบนของสแต็กหลักคือตอนนี้d
ซึ่งจะถูกส่งออก
หากส่วนที่สามกลายเป็นdd
สององค์ประกอบจะถูกผุดขึ้นมาจากกองหลักและตอนนี้ด้านบนของสแต็คเป็น'
และเป็นผลลัพธ์
ดังนั้นเราสามารถตรวจจับรังสีในส่วนที่สาม ด้วยเหตุผลเดียวกันเราสามารถตรวจจับรังสีในส่วนที่สอง