Un diagramme d'état de pile montre comment les valeurs d'une pile sont changées dans l'autre. Par exemple, il s'agit d'un diagramme d'état de pile:
3 0 2 1 0
Cela signifie qu'il existe une pile contenant initialement 3 valeurs (le 3
partie). Ces valeurs sont indexées de 0 à 2, avec 0 en haut: 2 1 0
. La partie suivante 0 2 1 0
décrit l'état final de la pile: la valeur qui était à l'origine au-dessus de la pile a également été copiée à l'arrière.
Ces transformations se produisent sur une pile prenant en charge plusieurs types de données:
- Le type "valeur", qui est à l'origine sur la pile. Il peut s'agir d'une chaîne, d'un entier, etc. mais sa valeur n'a pas besoin d'être connue.
- Le type "liste", qui est une liste contenant des valeurs de n'importe quel type de données.
Pour modéliser cette transformation, les opérations suivantes sont autorisées:
S
: Échangez les deux valeurs en haut de la pile:2 1 0
→2 0 1
D
: Dupliquez la valeur en haut de la pile:1 0
→1 0 0
R
: Supprimez la valeur supérieure de la pile.2 1 0
→2 1
L
: Transformer la première valeur en une liste à un élément contenant cette valeur:2 1 0
→2 1 (0)
C
: Concaténer les deux premières listes de la pile:2 (1) (0)
→2 (1 0)
U
: Placer toutes les valeurs d'une liste sur la pile:2 (1 0)
→2 1 0
Celles-ci sont équivalentes aux commandes Underload~ : ! a * ^
, à condition qu'aucune autre commande ne soit utilisée.
S
, D
, R
Et L
peut être utilisé avec toutes les valeurs au - dessus de la pile, mais C
et U
doit avoir des listes sur le dessus de la pile de fonctionner. Une soumission dont les séquences générées tentent d'effectuer des opérations invalides (comme D
sur une pile vide ou U
sur une non-liste) est incorrecte et doit être punie corrigée.
Pour résoudre un diagramme d'état de pile, recherchez une séquence de commandes qui transformera correctement l'état de pile initial en un nouveau. Par exemple, une solution 3: 0 2 1 0
est 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
Votre tâche consiste à écrire un programme qui prend un diagramme d'état de pile et génère une solution.
Cas de 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
Il s'agit de code-golf , donc la réponse valide la plus courte (en octets) l'emporte.
C
besoin répertorie- t-il la première et la deuxième position de la pile? ou l'élément en deuxième position pourrait être ajouté à une liste en haut?
C
a besoin de listes sur les deux postes. Il n'est pas logique de concaténer une valeur et une liste.