Vous regardez une avenue, et quelqu'un a laissé la poubelle! Vous devez écrire un programme pour aider à résoudre le problème, en mettant la corbeille dans des poubelles.
La tâche
L'avenue est constituée d'une chaîne de caractères ASCII imprimables, par exemple:
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)
Certains des crochets ici sont inégalés; ce ne sont que des leurres. Ce qui nous intéresse, ce sont les jeux de supports assortis.
Une poubelle est une chaîne commençant par [et se terminant par ], et avec des crochets et des parenthèses correspondant en interne. Par exemple, []et [[](dust)[]]sont des poubelles dans la chaîne ci-dessus.
Un sac poubelle est une chaîne commençant par (et se terminant par ), et avec des parenthèses et des parenthèses correspondant en interne. Par exemple, (dust)est un sac poubelle dans la chaîne ci-dessus.
Il est possible que certains sacs à ordures soient déjà dans des poubelles. Cependant, au moins un aura été laissé de côté, et nous devons déplacer les sacs poubelles afin qu'ils soient tous à l'intérieur des poubelles. Plus précisément, pour chaque sac poubelle qui n'est pas actuellement à l'intérieur d'une poubelle (c'est-à-dire une sous-chaîne de cette poubelle), nous devons le supprimer de son emplacement actuel dans la chaîne et l'insérer dans un emplacement qui se trouve à l'intérieur d'une poubelle .
Il y a une règle supplémentaire ici. Parce que nous ne voulons pas dépenser trop d'argent pour les ramasseurs d'ordures, et que leur itinéraire les mène le long de l'avenue de droite à gauche, nous voulons déplacer chaque sac poubelle vers la gauche (critère le plus important, en supposant que nous devons le déplacer à tous) et la distance la plus courte possible (tant qu'elle est déplacée vers la gauche). Ainsi, par exemple, la seule sortie correcte pour
[can1](bag)[can2]
est
[can1(bag)][can2]
(en déplaçant le sac d'un seul caractère vers la gauche). De plus, les sacs doivent rester dans le même ordre relatif:
[can](bag1)(bag2)
doit devenir
[can(bag1)(bag2)]
(c'est-à-dire que vous ne pouvez pas mettre (bag2)à gauche de (bag1).)
Clarifications
- Il n'y aura pas de sacs poubelle à gauche de la poubelle la plus à gauche; il sera toujours possible de mettre toutes les poubelles en le déplaçant vers la gauche.
- Il y aura toujours au moins un sac à déplacer. Il pourrait y en avoir plus d'un.
- Il n'y aura jamais de poubelle à l'intérieur d'un sac poubelle (les boîtes sont trop précieuses pour être jetées).
- Si un sac est déjà à l'intérieur d'une boîte, laissez-le tranquille.
- Il est normal que l'entrée et la sortie diffèrent dans les espaces de fin (y compris les retours à la ligne).
Exemples:
Contribution:
[[](dust)[]] car ((paper)vomit) (broken(glass)) [[] (rotten) fence (dirty)Production:
[[](dust)[]((paper)vomit)(broken(glass))] car [[(rotten)(dirty)] fenceContribution:
[]] (unusable) door (filthy) carProduction :
[(unusable)(filthy)]] door car