Il y a quelques questions sur ce site concernant l'équilibrage des supports et la vérification de l'équilibre des supports. Je propose qu'il soit maintenant temps d'utiliser ces supports équilibrés pour quelque chose!
En mathématiques et en programmation, les parenthèses sont comme des bulles, isolant tout à l'intérieur de tout à l'extérieur de sorte que tout ce qui est à l'intérieur puisse faire son travail en paix et tout ce qui est à l'extérieur ne voit qu'un seul objet. Cependant, une chaîne de parenthèses est unidimensionnelle, tandis que les bulles sont généralement au moins bidimensionnelles. Cela signifie que les bulles sont libres de se déplacer les unes les autres tant qu'elles ne se touchent jamais ou ne se croisent pas entre l'intérieur et l'extérieur d'autres bulles.
Défi
L'entrée est une chaîne de crochets assortis d'un seul type, soit ronde ()
, carrée []
, bouclée {}
ou angulaire <>
. C'est à vous de décider quel type vous voulez que votre programme accepte, et un programme qui n'accepte qu'un seul type de parenthèses est accepté. (Bonus imaginaire si votre programme peut gérer l'un d'eux, des points bonus imaginaires massifs s'il peut tous les gérer dans la même entrée.) L'entrée ne peut rien contenir entre les crochets, bien que les espaces de fin soient autorisés.
La sortie est toutes les réorganisations possibles (dans un ordre arbitraire, et y compris l'entrée d'origine) de ces crochets qui donne la même configuration de bulles, sans deux chaînes identiques. Cela signifie qu'avec une entrée de ()()
, la sortie est également juste ()()
, même si ce sont techniquement deux bulles qui pourraient changer de place. Pour le bonus imaginaire massif, une entrée de {}[]()
volonté conduira bien sûr à une sortie de 6 éléments / cordes / lignes différents.
Deux configurations de bulles sont "les mêmes" si vous pouvez les faire l'une dans l'autre en déplaçant les bulles, sans laisser aucune bulle passer de l'intérieur d'une autre bulle à l'extérieur, ou de l'extérieur à l'intérieur. Si vous comparez des parenthèses imbriquées à des arbres (chaque paire correspondante est un nœud, et chaque paire correspondante à l'intérieur est un sous-nœud, et chaque paire correspondante à l'intérieur est à nouveau un sous-nœud de ceux-ci, etc.) où les sous-nœuds d'un nœud donné sont ordonnés , alors une seule configuration de bulles est un arbre où les nœuds ne sont pas ordonnés.
Tout format de sortie raisonnable fera l'affaire, comme renvoyer une liste de chaînes ou une liste de liste de caractères uniques ou une seule chaîne avec une sorte d'espace blanc, ou imprimer vers stdout
ou stderr
avec une forme de caractère d'espace blanc visible (le plus souvent une nouvelle ligne ou un espace) entre chaque réorganisation.
Les espaces de fin pour chaque réorganisation et les éléments de liste / vides de fin et de précédant avant et après la sortie réelle sont autorisés. Vous devez utiliser le même type de parenthèses dans votre sortie que vous acceptez dans votre entrée. Hormis les crochets, les retours à la ligne et les espaces spécifiés ici, et quel que soit le séparateur que vous utilisez, rien ne doit être imprimé (y compris les caractères invisibles / de largeur nulle).
Le score est le nombre d'octets dans le code; le décompte le plus bas pour chaque langue gagne. Vous pouvez noter si vous obtenez un bonus imaginaire, régulier ou massif, mais cela n'affecte pas votre score. Les bonus réels sont trop difficiles à équilibrer correctement.
Exemples d'entrées-sorties
Exemple 1:
Contribution:
()(())
Sortie:
()(())
(())()
Exemple 2:
Contribution:
(()())()()
Sortie:
(()())()()
()(()())()
()()(()())
Exemple 3:
Contribution:
(()(()))()
Sortie:
((())())()
()((())())
(()(()))()
()(()(()))
((()))
dans l'exemple 1? ou()()()
? Il semble que vous manquiez de permutations pour chaque entrée.