Yığın durumu diyagramı, bir yığındaki değerlerin diğerine nasıl değiştirildiğini gösterir. Örneğin, bu bir yığın durumu diyagramıdır:
3 0 2 1 0
Bu başlangıçta 3 değer ( 3
parça) içeren bir yığın olduğu anlamına gelir . Bu değerler, en az 0 ile 0 ila 2 dizinlenmiştir: 2 1 0
. Bir sonraki bölüm 0 2 1 0
, yığının son durumunu açıklar: başlangıçta yığının üstünde bulunan değer de arkaya kopyalanır.
Bu dönüşümler, çeşitli veri türlerini destekleyen bir yığın üzerinde gerçekleşir:
- Başlangıçta yığında bulunan "değer" türü. Bu bir dize, tamsayı vb. Olabilir, ancak değerinin bilinmesine gerek yoktur.
- Herhangi bir veri türünün değerlerini içeren bir liste olan "liste" türü.
Bu dönüşümü modellemek için aşağıdaki işlemlere izin verilir:
S
: Yığının üstündeki iki değeri değiştirin:2 1 0
→2 0 1
D
: Yığının üstündeki değeri çoğaltın:1 0
→1 0 0
R
: Yığındaki en yüksek değeri kaldırın.2 1 0
→2 1
L
: En üst değeri, bu değeri içeren tek öğeli bir listeye dönüştürün:2 1 0
→2 1 (0)
C
: Yığındaki ilk iki listeyi birleştirin:2 (1) (0)
→2 (1 0)
U
: Bir listedeki tüm değerleri yığına yerleştirin:2 (1 0)
→2 1 0
Bunlar, başka hiçbir komut kullanılmadığı sürece Düşük Yük komutlarına eşdeğerdir ~ : ! a * ^
.
S
, D
, R
Ve L
yığının üstüne herhangi bir değeri ile birlikte kullanılabilir, ancak C
ve U
işlevine yığının en listelerinin olmalıdır. Olan Üretilen diziler (geçersiz şu işlemleri preform girişimi bir gönderme D
boş yığın halinde veya U
olmayan bir listede) olduğu yanlış olmalıdır ve cezalandırılan sabit.
Bir yığın durumu diyagramını çözmek için, ilk yığın durumunu doğru şekilde yenisine dönüştürecek bir komut dizisi bulun. Örneğin, çözümlerden 3: 0 2 1 0
biri 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
Göreviniz, yığın durumu diyagramı alan ve çözüm üreten bir program yazmaktır.
Test Durumları
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
Bu kod golf , bu yüzden en kısa geçerli cevap (bayt cinsinden) kazanır.
C
yığının üst ve ikinci pozisyona ihtiyaç listelerini? veya ikinci konumdaki eleman üstteki listeye eklenebilir mi?
C
her iki konumda da listeler gerekiyor. Bir değeri ve listeyi birleştirmek mantıklı değildir.