แรงบันดาลใจ
คำถามนี้เป็นแรงบันดาลใจด้วยบัตรห้องบัลลังก์กษัตริย์และศาลจากความนิยมดาดฟ้าอาคารเกมการ์ดปกครอง

ในฐานะที่เป็นส่วนหนึ่งของหนึ่งเราเล่นลำดับของการกระทำ การกระทำเฉพาะสองอย่างนี้ทำให้การกระทำถัดไปที่เล่นซ้ำสองหรือสามครั้ง * การกระทำ "ทั่วไป" อื่น ๆ ทำให้เกิดเอฟเฟกต์เกมเฉพาะ แต่เราจะไม่สนใจรายละเอียดใด ๆ เพียงแค่ติดป้ายกำกับด้วยตัวอักษร
กรณีที่น่าสนใจคือเมื่อห้องบัลลังก์หรือราชสำนักมีผลต่อห้องบัลลังก์อีกแห่งของศาลทำให้เกิดเอฟเฟกต์สองเท่าหรือสามเท่าให้ตัวเองเป็นสองเท่าหรือสามเท่า โซ่ยาวของห้องบัลลังก์กษัตริย์และการกระทำที่หลากหลายสามารถสร้างความสับสนให้กับผู้เล่นที่มีประสบการณ์
เป้าหมายของคุณคือการเขียนโค้ดที่สามารถแก้ไขเชนเหล่านี้ได้อย่างถูกต้องโดยใช้จำนวนไบต์น้อยที่สุด ฉันจะอธิบายข้อกำหนดของโปรแกรมก่อนที่จะอธิบายวิธีการแก้ไขปัญหาโซ่ในกฎ Dominion
* ในทางเทคนิคคุณเลือกการกระทำที่ได้รับผลกระทบซึ่งเป็นส่วนหนึ่งของการแก้ไข Throne Room หรือ King's Court แต่มุมมองนี้สะอาดกว่าสำหรับความท้าทายนี้
ข้อกำหนดของโปรแกรม
เขียนโปรแกรมหรือฟังก์ชั่นการตั้งชื่อ มันควรใช้ในห่วงโซ่ของการกระทำที่เล่น (STDIN หรือฟังก์ชั่นอินพุต) และเอาท์พุทหรือพิมพ์ห่วงโซ่ของการกระทำจากผลของการเสแสร้งและสามเท่า ไบต์ที่น้อยที่สุดจะเป็นผู้ชนะ
อินพุต
สตริงที่แทนลำดับของการดำเนินการที่เล่น การกระทำทั่วไปจะแทนด้วยตัวอักษรทุนผ่านA Zห้องบัลลังก์แอ็คชั่นสองเท่าเป็นพิเศษแสดงโดยตัวละคร2และแอ็คชั่นสามเท่าของคิงส์คอร์ต3 ,
จำนวนอักขระ (การกระทำ) จะอยู่ระหว่าง 1 ถึง 30 โดยรวม คุณอาจมีจุดสิ้นสุดการป้อนข้อมูลในบรรทัดใหม่หากคุณต้องการ
อินพุตตัวอย่าง: WA23G3GA
เอาท์พุต
สตริงตัวอักษรพิมพ์ใหญ่AถึงZที่จะนี่ควรเป็นลำดับของการกระทำทั่วไปที่เป็นผลมาจากการแก้ไขเอฟเฟกต์สองเท่าและสามเท่าตามลำดับที่เกิดขึ้น
คุณอาจมีผลลัพธ์สิ้นสุดในการขึ้นบรรทัดใหม่ถ้าคุณต้องการ ไม่ควรมีอักขระอื่นเพิ่มเติม
ตัวอย่างผลลัพธ์: WAGGGGGGAAA.
การเสแสร้งและสามเท่าทำงานอย่างไรใน Dominion
ที่นี่ฉันจะไปดูว่าเชนของบัลลังก์ (ห้อง2) และศาลของกษัตริย์3ทำงานอย่างไรตามกฎการปกครอง
หลังจากที่คุณเล่น a 2การกระทำต่อไปที่จะได้รับการแก้ไขจะเกิดขึ้นสองครั้ง ดังนั้นถ้าคุณเล่นครั้งแรก2แล้วAคุณจะได้รับAสิ่งที่เกิดขึ้นเป็นครั้งที่สอง
2A -> AA
ในทำนองเดียวกัน
A2BC -> ABBC
3DE -> DDDE
3N2BC3XY2 -> NNNBBCXXXY
โปรดสังเกตในตัวอย่างสุดท้ายว่าสุดท้าย2ไม่มีอะไรที่จะเพิ่มเป็นสองเท่าดังนั้นจึงไม่มีผลกระทบ
สิ่งที่น่าสนใจเกิดขึ้นเมื่อเพิ่มเอฟเฟกต์เป็นสองเท่าหรือสามเท่า ตัวอย่างเช่น,
22AB -> AABB
2ครั้งแรกที่คุณเล่น จากนั้นคุณเล่นอีกซึ่งเป็นสองเท่าจากก่อนหน้านี้2 2ด้วยเหตุนี้การกระทำสองอย่างถัดไปจึงเป็นสองเท่า ครั้งแรกที่ทั้งสองสำเนาของการAแก้ไข จากนั้นสำเนาของการBแก้ไข
โปรดทราบว่าAไม่ได้ปากต่อปาก: หลังจากที่คัดลอกแรกของ2การกระทำในครั้งแรกคัดลอกต่อไปทำหน้าที่เกี่ยวกับการดำเนินการยังไม่ได้แก้ไขต่อไปซึ่งเป็นA BหากปราศจากBเราก็จะมี
22A -> AA
โดยที่สำเนาที่สอง2กำลังรอการดำเนินการถัดไปเป็นสองเท่า แต่ไม่มีการกระทำใดเกิดขึ้น
สุดท้ายเรามาดูตัวอย่างที่ซับซ้อน
223BCDE -> BBBCCCDDE
อย่างที่เคยเป็นมาก่อน2สาเหตุที่สอง2จะเพิ่มเป็นสองเท่า ดังนั้นสองแอ็คชั่นถัดไปจะถูกเพิ่มเป็นสองเท่า สำเนาแรกของ2คู่ดำเนินการต่อไปซึ่งจะต้องได้รับการแก้ไขก่อนที่จะแก้ไขสำเนาต่อไปของ3 2สำเนาแรกของ3อเนกประสงค์และอเนกประสงค์สำเนาที่สองB Cตอนนี้สำเนาที่สองยังคงรอคอยของคู่การกระทำที่ยังคงได้รับการแก้ไขต่อไปซึ่งเป็น2 Dหลังจากนี้จะไม่มีเอฟเฟกต์เพิ่มขึ้นสองเท่าหรือสามเท่าและการกระทำขั้นสุดท้ายEก็เกิดขึ้น
กรณีทดสอบ
(input,output)เหล่านี้จะได้รับเป็น
(FY, FY)
(A2BC, ABBC)
(3DE, DDDE)
(3N2BC3XY2, NNNBBCXXXY)
(WA23G3GA, WAGGGGGGAAA)
(32, )
(33RST, RRRSSSTTT)
(2A32B2CDEFG, AABBCCDDEEFG)
(A2A323AB2CD2D2E3ABC, AAAAAABBBCCDDDDEEAAABBBC)
(P22LL3Q2Q22T, PLLLLQQQQQTT)
(322322ABCDEFGHIJKLMN, AABBCCDDEEEFFGGHHIJKLMN)
1อยู่ในกองซ้อนเพื่อปฏิบัติกับการกระทำที่ไม่คูณเช่นเดียวกับที่คูณ คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับวิธีที่คุณเล่นปาหี่กองต่าง ๆ ได้อย่างไร โดยเฉพาะอย่างยิ่ง \ do ทำอะไร "นำตัวแทนสแต็คไปด้านบน"