Aujourd'hui, votre défi est de produire toutes les parenthèses complètes possibles d'une expression.
Votre entrée est une seule ligne ASCII imprimable contenant un ou plusieurs termes séparés par des opérateurs. L'entrée peut également contenir des espaces - vous devez les ignorer. Un terme est [a-zA-Z0-9]
, un opérateur est [^ ()a-zA-Z0-9]
. Vous pouvez supposer que l'entrée est toujours valide.
Afficher toutes les façons possibles de mettre complètement l'expression entre parenthèses, séparées par des retours à la ligne avec un retour à la ligne facultatif.
Ne pas :
- Termes entre parenthèses - entre parenthèses uniquement autour des opérateurs.
- Réorganisez les conditions.
- Sortez tous les espaces.
Exemple d'entrée / sortie:
N
N
a * b
(a*b)
x_x_0
(x_(x_0))
((x_x)_0)
a * b|c|d
(a*(b|(c|d)))
(a*((b|c)|d))
((a*b)|(c|d))
((a*(b|c))|d)
(((a*b)|c)|d)
Le plus petit code en octets gagne.
!
un opérateur? Et alors↑
?!
s'adapte à l'expression régulière, ne le fait pas↑
, cependant, ne↑
peut pas faire partie de l'entrée car elle n'est pas imprimable en ASCII.Réponses:
Pyth, 38 octets
Essayez-le en ligne.
Il définit une fonction récursive qui:
La fonction est ensuite appelée avec la chaîne d'entrée avec des espaces supprimés et les résultats sont joints par des retours à la ligne.
la source
JavaScript (ES6),
208197 octetsExplication
Utilise une fonction récursive qui prend un tableau de
[ t, o, t, o, etc... ]
et parenthèses chaque paire consécutive de deux termes ensemble comme[ (tot), o, etc... ]
et répète ce processus jusqu'à ce qu'il n'y ait qu'un seul élément dans le tableau, puis filtre les valeurs en double.Tester
Afficher l'extrait de code
la source