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)] fence
Contribution:
[]] (unusable) door (filthy) car
Production :
[(unusable)(filthy)]] door car
la source
Réponses:
JavaScript (ES6),
263228209205184177 177173162 octetsToute aide avec le code / les expressions régulières est grandement appréciée.
Une fonction anonyme; prend un
String
paramètre,s
et renvoie la sortie./\[\[][\w()]*\[]]|\[]/g
correspond aux poubelles avec des sacs poubelles imbriqués, mais je ne pense pas que cela puisse vérifier les supports équilibrés dans les sacs poubelle si nécessaire.la source