Un diagramma dello stato dello stack mostra come i valori di uno stack vengono modificati nell'altro. Ad esempio, questo è un diagramma dello stato dello stack:
3 0 2 1 0
Ciò significa che esiste inizialmente uno stack contenente 3 valori (la 3parte). Questi valori sono indicizzati da 0 a 2, con 0 in alto: 2 1 0. La parte successiva 0 2 1 0descrive lo stato finale dello stack: anche il valore originariamente in cima allo stack è stato copiato sul retro.
Queste trasformazioni avvengono su uno stack che supporta diversi tipi di dati:
- Il tipo "valore", che è ciò che è originariamente nello stack. Potrebbe essere una stringa, un numero intero, ecc. Ma non è necessario conoscerne il valore.
- Il tipo "elenco", che è un elenco contenente valori di qualsiasi tipo di dati.
Per modellare questa trasformazione, sono consentite le seguenti operazioni:
S: Scambia i due valori in cima alla pila:2 1 0→2 0 1D: Duplica il valore in cima allo stack:1 0→1 0 0R: Rimuove il valore più alto dallo stack.2 1 0→2 1L: Trasforma il valore più alto in un elenco di un elemento contenente quel valore:2 1 0→2 1 (0)C: Concatena le prime due liste in pila:2 (1) (0)→2 (1 0)U: Posiziona tutti i valori di un elenco nello stack:2 (1 0)→2 1 0
Questi sono equivalenti ai comandi Underload~ : ! a * ^ , a condizione che non vengano utilizzati altri comandi.
S, D, R, E Lpuò essere utilizzato con qualsiasi valore in cima alla pila, ma Ce Udeve avere liste in cima alla pila di funzionare. Un invio le cui sequenze generate tentano di eseguire operazioni non valide (come Dsu uno stack vuoto o Usu un non elenco) è errato e deve essere sanzionato .
Per risolvere un diagramma dello stato dello stack, trova una sequenza di comandi che trasformerà correttamente lo stato dello stack iniziale in quello nuovo. Ad esempio, una soluzione 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
Il tuo compito è quello di scrivere un programma che prende un diagramma di stato dello stack e genera una soluzione.
Casi test
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
Questo è code-golf , quindi vince la risposta valida più breve (in byte).
Celenchi di necessità nella prima e nella seconda posizione dello stack? o l'elemento in seconda posizione potrebbe essere aggiunto a un elenco in alto?
Celenchi di necessità in entrambe le posizioni. Non ha senso concatenare un valore e un elenco.