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.
la source
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.Réponses:
Python 3, 84 octets
Usage:
Explication: Pour commencer, nous dupliquons le zéro et l'enveloppons dans une liste:
Ceci est notre base. Je vais maintenant expliquer un algorithme général qui se transforme
... 1 0 (x)
en... 1 0 (i x)
entier arbitrairei
. Je vais utiliser comme exemplei = 2
, et nous avons une liste arbitraire(x)
. Nous commençons par envelopper notre liste actuelle(x)
dans une autre liste:Maintenant, nous répétons les
i
temps de séquence suivants :Nous sommes maintenant prêts à insérer le 2 dans la liste
(x)
. Cela se passe comme suit:Notez que nous continuons à pousser de nouveaux entiers sur la gauche. Donc, le tout premier,
(0)
nous avons commencé par rester sur la droite.Après avoir inséré chaque entier dont nous avons besoin dans la liste, nous supprimons le reste de la pile en échangeant et en supprimant n time (
SR
). Enfin, nous décompressons notre liste et supprimons la première que0
nous avons insérée pour démarrer notre liste (UR
).la source
s
plutôtl
?l
c'était défini sur mon REPL.DLLSLSCSLSCSLSCSLSCLSLSCDURLCULCULSCLSLSCSLSCSLSCLSLSCDURLCULCULSCLSLSCSLSCLSLSCDURLCULCULSCLSLSCLSLSCDURLCULCULSCLLSLSCDURLCULCULSCSRSRSRSRUR
). Il essaie d'exécuter uneS
instruction lorsqu'il n'y a qu'une seule valeur sur la pile.CJam, 54 octets
Juste une traduction de la solution Python d'orlp dans CJam. Il n'y a rien de nouveau ici.
Explication:
la source