Reto tomado desde aquí y también aquí
Una secuencia de n paréntesis consta de n (
sy n )
s.
Una secuencia de paréntesis válida se define como la siguiente:
Puede encontrar una manera de repetir el borrado de par de paréntesis adyacentes "()" hasta que quede vacío.
Por ejemplo,
(())
es un paréntesis válido, puede borrar el par en la segunda y tercera posición y se convierte()
, luego puede dejarlo vacío.)()(
no es un paréntesis válido, después de borrar el par en la segunda y tercera posición, se convierte en)(
y no puede borrar más
Tarea
Dado un número n , necesita generar toda la secuencia correcta de paréntesis en orden lexicográfico
La salida puede ser una matriz, lista o cadena (en este caso, una secuencia por línea)
Se puede usar un par diferente de paréntesis como {}
, []
, ()
o cualquier signo de apertura y cierre
Ejemplo
n = 3
((())) (()()) (())() ()(()) ()()()
n = 2
(()) ()()
fuente
1
s y-1
s)?Respuestas:
Perl 6 , 36 bytes
Pruébalo en línea!
Encuentra todas las combinaciones ordenadas lexográficamente de sy filtra las que están correctamente. Tenga en cuenta que todas las combinaciones válidas (incluso cosas como ) evalúan a (que es falsey, pero nosotros ( ) para distinguir de regresar )2 n
[]
EVAL
[][]
[]
not
!
try
Nil
Explicación:
fuente
[][]
es la rebanada Zen de una matriz vacía que produce la matriz misma. El segmento se puede aplicar varias veces, por lo que se[][][][]...
evalúa como[]
. Además,[[]]
no construye una matriz anidada sino una matriz vacía debido a la regla de argumento único (tendrías que escribir[[],]
para una matriz anidada). Por lo tanto, cualquier secuencia equilibrada de[]
paréntesis da como resultado una matriz vacía que se convierte en falso.R ,
11210799 bytesEnfoque no recursivo. Usamos "<" y ">" porque evita los caracteres de escape en la expresión regular. Para permitirnos usar una especificación más corta para un rango ASCII, generamos 3 ^ 2n cadenas de 2n caracteres de "<", "=" y ">" usando
expand.grid
(a través de sus códigos ASCII 60, 61 y 62) y luego grep para vea qué combinaciones dan corchetes abiertos y cerrados equilibrados. Las posibilidades "=" serán ignoradas, por supuesto.Vía http://rachbelaid.com/recursive-regular-experession/
Pruébalo en línea!
Explicación
R , 107 bytes
Enfoque recursivo habitual.
-1 gracias @Giuseppe
Pruébalo en línea!
fuente
Map
campo de golf pero no podía entenderlo. No estoy convencido de queparse
+eval
vaya a funcionar desde entonces()()
y similares errores de lanzamiento.C (gcc) , 114 bytes
Pruébalo en línea!
Debería funcionar para n <= 15.
Explicación
fuente
Python 2 ,
91888481 bytesPruébalo en línea!
-3 bytes gracias a pizzapants184
fuente
set(...)
con un conjunto de comprensión ({...}
) para -3 bytes. ¡ Pruébelo en línea!05AB1E , 13 bytes
Pruébelo en línea o verifique algunos casos de prueba más .
Explicación:
fuente
Ruby , 70 bytes
Pruébalo en línea!
fuente
Japt,
1513 bytesIntentalo
Explicación
fuente
K (ngn / k) ,
3635 bytesPruébalo en línea!
+!2|&2*x
todos los vectores binarios de longitud 2 * n(x=+/)#
solo aquellos que suman n(&/-1<+\1-2*)#
solo aquellos cuyas sumas parciales, tratando 0/1 como 1 / -1, no son negativas"()"
use 0/1 como índices en esta cadenafuente
Perl 5
-n
,4139 bytes-2 bytes con paréntesis angulares
Pruébalo en línea!
Puerto de mi Perl 6 respuesta.
fuente
Perl 6 , 42 bytes
Pruébalo en línea!
Utiliza una expresión regular recursiva. Sustitución alternativa:
S/[\(<~~>\)]*//
38 bytes con 0 y 1 como símbolos de apertura / cierre:
Pruébalo en línea!
Explicación
fuente
Retina 0.8.2 , 50 bytes
Pruébalo en línea! Usos
<>
s. Explicación:Convierte a unario.
Duplica el resultado.
Enumere todos los números binarios de 2²ⁿ 2n bits, asignando los dígitos a
<>
.Mantenga solo secuencias equilibradas. Utiliza un truco de paréntesis equilibrado descubierto por @MartinEnder.
fuente
JavaScript (ES6),
112102 bytesEsto se basa en gran medida en la respuesta C de nwellnhof .
Pruébalo en línea!
fuente
Rojo ,
214, 184136 bytesPruébalo en línea!
Utiliza el enfoque de Jo King. Encuentra todos los arreglos posibles de paréntesis utilizando la recursividad (se generan en orden lexicográfico) e imprímelo si el arreglo se evalúa como un bloque válido.
fuente
Jalea , 19 bytes
Pruébalo en línea!
Salida aclarada sobre TIO.
fuente