Défi relevé d' ici et aussi ici
Une séquence de n parenthèses se compose de n (
s et n )
s.
Une séquence de parenthèses valide est définie comme suit:
Vous pouvez trouver un moyen de répéter l'effacement de la paire de parenthèses adjacentes "()" jusqu'à ce qu'elle devienne vide.
Par exemple,
(())
est une parenthèse valide, vous pouvez effacer la paire en 2e et 3e position et elle devient()
, puis vous pouvez la rendre vide.)()(
n'est pas une parenthèse valide, après avoir effacé la paire en 2e et 3e position, elle devient)(
et vous ne pouvez plus effacer
Tâche
Étant donné un nombre n, vous devez générer toutes les séquences de parenthèses correctes dans l' ordre lexicographique
La sortie peut être un tableau, une liste ou une chaîne (dans ce cas, une séquence par ligne)
Vous pouvez utiliser une autre paire de parenthèses, comme {}
, []
, ()
ou tout signe d' ouverture-fermeture
Exemple
n = 3
((())) (()()) (())() ()(()) ()()()
n = 2
(()) ()()
la source
1
s et-1
s)?Réponses:
Perl 6 , 36 octets
Essayez-le en ligne!
Trouve toutes les combinaisons triées lexographiquement de2 n
[]
s et filtre celles qui fonctionnentEVAL
correctement. Notez que toutes les combinaisons valides (même des trucs comme[][]
) évaluent à[]
(ce qui est falsey, mais nousnot
le (!
) pour distinguer dutry
retourNil
)Explication:
la source
[][]
c'est la tranche zen d'un tableau vide qui donne le tableau lui-même. La tranche peut être appliquée plusieurs fois, donc est[][][][]...
évaluée à[]
. De plus,[[]]
ne construit pas un tableau imbriqué mais un tableau vide à cause de la règle d'argument unique (vous devrez écrire[[],]
pour un tableau imbriqué). Ainsi, toute séquence équilibrée de[]
parenthèses se traduit par un tableau vide qui devient booléen.R ,
11210799 octetsApproche non récursive. Nous utilisons "<" et ">" car cela évite les caractères d'échappement dans l'expression régulière. Pour nous permettre d'utiliser une spécification plus courte pour une plage ASCII, nous générons 3 ^ 2n chaînes de 2n caractères de "<", "=" et ">" en utilisant
expand.grid
(via leurs codes ASCII 60, 61 et 62), puis grep pour voir quelles combinaisons donnent des crochets ouverts et fermés équilibrés. Les possibilités "=" seront ignorées, bien sûr.Via http://rachbelaid.com/recursive-regular-experession/
Essayez-le en ligne!
Explication
R , 107 octets
Approche récursive habituelle.
-1 merci @Giuseppe
Essayez-le en ligne!
la source
Map
golf mais je ne pouvais pas en faire le tour. Je ne suis pas convaincu queparse
+eval
fonctionnera depuis()()
et les erreurs de lancement similaires.C (gcc) , 114 octets
Essayez-le en ligne!
Devrait fonctionner pour n <= 15.
Explication
la source
Python 2 ,
91888481 octetsEssayez-le en ligne!
-3 octets grâce aux pizzapants184
la source
set(...)
par un ensemble comprehension ({...}
) pour -3 octets Essayez-le en ligne!05AB1E , 13 octets
Essayez-le en ligne ou vérifiez d'autres cas de test .
Explication:
la source
Ruby , 70 octets
Essayez-le en ligne!
la source
Japt,
1513 octetsEssayez-le
Explication
la source
K (ngn / k) ,
3635 octetsEssayez-le en ligne!
+!2|&2*x
tous les vecteurs binaires de longueur 2 * n(x=+/)#
seulement ceux qui résument à n(&/-1<+\1-2*)#
seuls ceux dont les sommes partielles, traitant 0/1 comme 1 / -1, ne sont nulle part négatives"()"
utiliser 0/1 comme index dans cette chaînela source
Perl 5
-n
,4139 octets-2 octets avec équerres
Essayez-le en ligne!
Port de ma réponse Perl 6.
la source
Perl 6 , 42 octets
Essayez-le en ligne!
Utilise une expression régulière récursive. Substitution alternative:
S/[\(<~~>\)]*//
38 octets avec 0 et 1 comme symboles d'ouverture / fermeture:
Essayez-le en ligne!
Explication
la source
Retina 0.8.2 , 50 octets
Essayez-le en ligne! Utilise l'
<>
art. Explication:Convertissez en unaire.
Doublez le résultat.
Énumérer tous les nombres binaires 2²ⁿ 2n bits, en mappant les chiffres sur
<>
.Ne gardez que des séquences équilibrées. Cela utilise une astuce entre parenthèses équilibrée découverte par @MartinEnder.
la source
JavaScript (ES6),
112102 octetsCeci est fortement basé sur la réponse C de nwellnhof .
Essayez-le en ligne!
la source
Rouge ,
214, 184136octetsEssayez-le en ligne!
Utilise l'approche de Jo King. Recherche tous les arrangements possibles de crochets en utilisant la récursivité (ils sont générés dans l'ordre lexicographique) et l'imprime si l'arrangement est évalué comme un bloc valide.
la source
Gelée , 19 octets
Essayez-le en ligne!
Sortie clarifiée sur TIO.
la source