ไดอะแกรมสถานะสแต็กแสดงวิธีที่ค่าบนหนึ่งสแต็กถูกเปลี่ยนเป็นอื่น ตัวอย่างเช่นนี่คือแผนภาพสถานะสแต็ก:
3 0 2 1 0
ซึ่งหมายความว่ามีสแต็กเริ่มแรกประกอบด้วย 3 ค่า ( 3ส่วน) ค่าเหล่านี้ถูกจัดทำดัชนีจาก 0 ถึง 2 โดยมี 0 ที่ด้านบน:2 1 0ที่ด้านบน: ส่วนถัดไป0 2 1 0อธิบายถึงสถานะสุดท้ายของสแต็ก: ค่าที่อยู่ด้านบนสุดของสแต็กถูกคัดลอกไปที่ด้านหลังเช่นกัน
การแปลงเหล่านี้เกิดขึ้นบนสแต็กที่สนับสนุนหลายชนิดข้อมูล:
- ชนิด "value" ซึ่งเป็นค่าเริ่มต้นของสแต็ก นี่อาจเป็นสตริงจำนวนเต็ม ฯลฯ แต่ไม่จำเป็นต้องทราบค่าของมัน
- ชนิด "รายการ" ซึ่งเป็นรายการที่มีค่าของชนิดข้อมูลใด ๆ
เพื่อจำลองการเปลี่ยนแปลงนี้อนุญาตการดำเนินการต่อไปนี้:
S: สลับค่าสองค่าที่ด้านบนสุดของสแต็ก:2 1 0→2 0 1D: ทำซ้ำค่าที่ด้านบนของสแต็ก:1 0→1 0 0R: ลบค่าสูงสุดบนสแต็ก2 1 0→2 1L: เปลี่ยนค่าสูงสุดเป็นรายการองค์ประกอบเดียวที่มีค่านั้น:2 1 0→2 1 (0)C: เชื่อมต่อสองรายการแรกสุดในสแต็ก:2 (1) (0)→2 (1 0)U: วางค่าทั้งหมดจากรายการลงในสแต็ก:2 (1 0)→2 1 0
สิ่งเหล่านี้เทียบเท่ากับคำสั่งUnderload~ : ! a * ^โดยที่ไม่มีการใช้คำสั่งอื่น
S, D, RและLสามารถใช้กับค่าใด ๆ ที่ด้านบนของสแต็ค แต่CและUต้องมีรายชื่ออยู่ด้านบนของสแต็คเพื่อฟังก์ชั่น ส่งที่มีลำดับความพยายามที่จะสร้าง preform การดำเนินงานที่ไม่ถูกต้อง (เช่นDในกองว่างเปล่าหรือUในที่ไม่ใช่รายการ) คือผิดและจะต้องได้รับการลงโทษคงที่
เพื่อแก้ไขไดอะแกรมสถานะสแต็กค้นหาลำดับของคำสั่งที่จะเปลี่ยนสถานะสแต็กเริ่มต้นให้เป็นสถานะใหม่ได้อย่างถูกต้อง ตัวอย่างเช่นทางออกหนึ่ง3: 0 2 1 0คือLSLCSLCULSLCLSLDCSC USLCU:
2 1 0
L 2 1 (0)
S 2 (0) 1
L 2 (0) (1)
C 2 (0 1)
S (0 1) 2
L (0 1) (2)
C (0 1 2)
U 0 1 2
L 0 1 (2)
S 0 (2) 1
L 0 (2) (1)
C 0 (2 1)
L 0 ((2 1))
S ((2 1)) 0
L ((2 1)) (0)
D ((2 1)) (0) (0)
C ((2 1)) (0 0)
S (0 0) ((2 1))
C (0 0 (2 1))
U 0 0 (2 1)
S 0 (2 1) 0
L 0 (2 1) (0)
C 0 (2 1 0)
U 0 2 1 0
งานของคุณคือการเขียนโปรแกรมที่ใช้แผนภาพสถานะสแต็กและส่งออกโซลูชั่น
กรณีทดสอบ
2 1 0 ->
3 2 0 -> SR
9 -> RRRRRRRRR
2 0 1 0 -> LSLCDCUR
2 0 1 1 -> SD
6 2 -> RRSRSRSR
5 0 1 2 3 4 -> LSLCSLCSLCSLCU
4 2 0 1 3 2 -> LSLCSLSCSLCULSLSCSLSCLSLDCSCUSLCU
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่ถูกต้องสั้นที่สุด (เป็นไบต์) ชนะ
Cรายการความจำเป็นในตำแหน่งบนสุดและครั้งที่สองของสแต็ค? หรือองค์ประกอบในตำแหน่งที่สองสามารถเพิ่มลงในรายการด้านบน?
Cต้องการรายการทั้งสองตำแหน่ง มันไม่สมเหตุสมผลที่จะต่อค่าและรายการเข้าด้วยกัน