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.
sumber
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.Jawaban:
Python 3, 84 byte
Pemakaian:
Penjelasan: Untuk memulai, kami menduplikasi nol dan membungkusnya dalam daftar:
Ini basis kami. Sekarang saya akan menjelaskan algoritma umum yang berubah
... 1 0 (x)
menjadi... 1 0 (i x)
bilangan bulat acaki
. Saya akan gunakan sebagai contohi = 2
, dan kami memiliki beberapa daftar arbitrer(x)
. Kami mulai dengan membungkus daftar kami saat ini(x)
ke daftar lain:Sekarang kita ulangi urutan
i
waktu berikut :Sekarang kita siap untuk memasukkan 2 ke dalam daftar
(x)
. Ini berlaku sebagai berikut:Perhatikan bahwa kami terus mendorong bilangan bulat baru di sebelah kiri. Jadi yang pertama
(0)
kami mulai dengan tetap di sebelah kanan.Setelah kami memasukkan setiap bilangan bulat yang kami butuhkan ke dalam daftar, kami menghapus sisa tumpukan dengan menukar dan menghapus waktu n (
SR
). Akhirnya kami membongkar daftar kami dan menghapus yang pertama0
kami masukkan untuk memulai daftar kami (UR
).sumber
s
bukanl
?l
didefinisikan pada REPL saya.DLLSLSCSLSCSLSCSLSCLSLSCDURLCULCULSCLSLSCSLSCSLSCLSLSCDURLCULCULSCLSLSCSLSCLSLSCDURLCULCULSCLSLSCLSLSCDURLCULCULSCLLSLSCDURLCULCULSCSRSRSRSRUR
). Mencoba menjalankanS
instruksi ketika hanya ada 1 nilai pada stack.CJam, 54 byte
Hanya terjemahan dari solusi Python orlp ke CJam. Tidak ada yang baru di sini.
Penjelasan:
sumber