Une chaîne équilibrée est une chaîne de parenthèses ()
afin que chaque parenthèse puisse être mise en correspondance avec une autre. Plus rigoureusement, ce sont les chaînes couvertes par cette grammaire:
S → (S)S | ε
Nous pouvons transformer une chaîne "à l'envers" en:
Commutation de toutes les occurrences de
(
et)
entre ellesDéplacement des caractères de l'avant de la chaîne vers l'arrière jusqu'à ce que la chaîne soit à nouveau équilibrée.
Faisons un exemple.
Nous commençons par la chaîne équilibrée:
(()(())())
On change ensuite les parens pour faire
))())(()((
Déplacez ensuite les caractères de l'avant de la chaîne vers l'arrière de la chaîne jusqu'à ce que la chaîne soit équilibrée.
))())(()((
)())(()(()
())(()(())
))(()(())(
)(()(())()
(()(())())
C'est notre résultat!
Notez que certaines chaînes peuvent être retournées de plusieurs manières, par exemple la chaîne
(()())
Lorsqu'elle est retournée, elle peut être:
()(())
ou
(())()
Cependant, chaque chaîne a au moins une solution .
Tâche
Écrivez un programme pour prendre une chaîne équilibrée comme entrée et sortie de cette chaîne retournée. Dans les cas où il peut y avoir plusieurs sorties valides, vous n'avez besoin que d'en sortir une seule. Vous pouvez utiliser un autre type d'accolade ( <>
, []
ou {}
) si vous le souhaitez.
Il s'agit d'une compétition de code-golf , vous devez donc viser à minimiser la taille de votre code source, mesurée en octets.
Cas de test
(()()) -> ()(()), (())()
(()(())()) -> (()(())())
((())())() -> (()(()()))