แรงบันดาลใจ
คำถามนี้เป็นแรงบันดาลใจด้วยบัตรห้องบัลลังก์กษัตริย์และศาลจากความนิยมดาดฟ้าอาคารเกมการ์ดปกครอง
ในฐานะที่เป็นส่วนหนึ่งของหนึ่งเราเล่นลำดับของการกระทำ การกระทำเฉพาะสองอย่างนี้ทำให้การกระทำถัดไปที่เล่นซ้ำสองหรือสามครั้ง * การกระทำ "ทั่วไป" อื่น ๆ ทำให้เกิดเอฟเฟกต์เกมเฉพาะ แต่เราจะไม่สนใจรายละเอียดใด ๆ เพียงแค่ติดป้ายกำกับด้วยตัวอักษร
กรณีที่น่าสนใจคือเมื่อห้องบัลลังก์หรือราชสำนักมีผลต่อห้องบัลลังก์อีกแห่งของศาลทำให้เกิดเอฟเฟกต์สองเท่าหรือสามเท่าให้ตัวเองเป็นสองเท่าหรือสามเท่า โซ่ยาวของห้องบัลลังก์กษัตริย์และการกระทำที่หลากหลายสามารถสร้างความสับสนให้กับผู้เล่นที่มีประสบการณ์
เป้าหมายของคุณคือการเขียนโค้ดที่สามารถแก้ไขเชนเหล่านี้ได้อย่างถูกต้องโดยใช้จำนวนไบต์น้อยที่สุด ฉันจะอธิบายข้อกำหนดของโปรแกรมก่อนที่จะอธิบายวิธีการแก้ไขปัญหาโซ่ในกฎ 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 ทำอะไร "นำตัวแทนสแต็คไปด้านบน"