Diagram keadaan tumpukan menunjukkan bagaimana nilai pada satu tumpukan diubah menjadi yang lain. Sebagai contoh, ini adalah diagram status tumpukan:
3 0 2 1 0
Ini berarti ada tumpukan yang awalnya berisi 3 nilai ( 3
bagian). Nilai-nilai ini diindeks dari 0 sampai 2, dengan 0 di bagian atas: 2 1 0
. Bagian selanjutnya 0 2 1 0
menjelaskan keadaan akhir stack: nilai yang semula di atas stack telah disalin ke belakang juga.
Transformasi ini terjadi pada tumpukan yang memiliki dukungan untuk beberapa tipe data:
- Jenis "nilai", yang merupakan aslinya pada tumpukan. Ini bisa berupa string, integer, dll. Tetapi nilainya tidak perlu diketahui.
- Tipe "daftar", yang merupakan daftar yang berisi nilai dari semua tipe data.
Untuk memodelkan transformasi ini, operasi berikut diizinkan:
S
: Tukar kedua nilai di atas tumpukan:2 1 0
→2 0 1
D
: Gandakan nilai di atas tumpukan:1 0
→1 0 0
R
: Hapus nilai teratas pada tumpukan.2 1 0
→2 1
L
: Ubah nilai teratas menjadi daftar satu elemen yang berisi nilai itu:2 1 0
→2 1 (0)
C
: Menggabungkan dua daftar teratas di tumpukan:2 (1) (0)
→2 (1 0)
U
: Tempatkan semua nilai dari daftar ke tumpukan:2 (1 0)
→2 1 0
Ini sama dengan perintah Underload~ : ! a * ^
, asalkan tidak ada perintah lain yang digunakan.
S
, D
, R
, Dan L
dapat digunakan dengan nilai-nilai di atas tumpukan, namun C
dan U
harus memiliki daftar di atas tumpukan untuk fungsi. Kiriman yang urutan urutannya dihasilkan mencoba untuk membentuk operasi yang tidak valid (seperti D
pada tumpukan kosong atau U
pada non-daftar) salah dan harus dihukum diperbaiki.
Untuk memecahkan diagram keadaan tumpukan, temukan urutan perintah yang akan mengubah keadaan tumpukan awal dengan benar menjadi yang baru. Sebagai contoh, salah satu solusinya 3: 0 2 1 0
adalah 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
Tugas Anda adalah menulis sebuah program yang mengambil diagram status tumpukan dan menghasilkan solusi.
Uji Kasus
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
Ini adalah kode-golf , sehingga jawaban terpendek yang valid (dalam byte) menang.
C
daftar kebutuhan berada di posisi teratas dan kedua stack? atau elemen di posisi kedua dapat ditambahkan ke daftar di atas?
C
perlu daftar di kedua posisi. Tidak masuk akal untuk menggabungkan nilai dan daftar.