Desafio retirado daqui e também daqui
Uma sequência de parênteses n consiste em n (
s e n )
s.
Uma sequência de parênteses válida é definida da seguinte maneira:
Você pode encontrar uma maneira de repetir a exclusão do par de parênteses "()" adjacente até que fique vazio.
Por exemplo,
(())
são parênteses válidos, você pode apagar o par na 2ª e na 3ª posição e ele se torna()
, então você pode torná-lo vazio.)()(
não é um parênteses válido, depois de apagar o par na 2ª e 3ª posição, ele se torna)(
e você não pode mais apagar
Tarefa
Dado um número n, você precisa gerar toda a sequência correta de parênteses em ordem lexicográfica
A saída pode ser uma matriz, lista ou sequência de caracteres (neste caso, uma sequência por linha)
Você pode usar um par diferente de parênteses, como {}
, []
, ()
ou qualquer sinal abrir-fechar
Exemplo
n = 3
((())) (()()) (())() ()(()) ()()()
n = 2
(()) ()()
fonte
1
s e-1
s)?Respostas:
Perl 6 , 36 bytes
Experimente online!
[]
EVAL
[][]
[]
not
!
try
Nil
Explicação:
fonte
[][]
é a fatia Zen de uma matriz vazia que produz a própria matriz. A fatia pode ser aplicada várias vezes, então[][][][]...
avalia como[]
. Além disso,[[]]
não constrói uma matriz aninhada, mas uma matriz vazia por causa da regra de argumento único (você precisaria escrever[[],]
para uma matriz aninhada). Portanto, qualquer sequência equilibrada de[]
colchetes resulta em uma matriz vazia que boolifica para false.R ,
11210799 bytesAbordagem não recursiva. Usamos "<" e ">" porque evita caracteres de escape na expressão regular. Para nos permitir usar uma especificação mais curta para um intervalo ASCII, geramos seqüências de caracteres 3 ^ 2n 2n de "<", "=" e ">" usando
expand.grid
(por meio dos códigos ASCII 60, 61 e 62) e depois grep para veja quais combinações oferecem colchetes abertos e fechados equilibrados. As possibilidades "=" serão ignoradas, é claro.Via http://rachbelaid.com/recursive-regular-experession/
Experimente online!
Explicação
R , 107 bytes
Abordagem recursiva usual.
-1 graças @Giuseppe
Experimente online!
fonte
Map
golfe, mas não conseguia entender. Não estou convencido de que oparse
+eval
funcionará desde então()()
e outros erros de lançamento.C (gcc) , 114 bytes
Experimente online!
Deve funcionar para n <= 15.
Explicação
fonte
Python 2 ,
91888481 bytesExperimente online!
-3 bytes graças a pizzapants184
fonte
set(...)
por um conjunto de compreensão ({...}
) por -3 bytes Experimente online!05AB1E , 13 bytes
Experimente online ou verifique mais alguns casos de teste .
Explicação:
fonte
Ruby , 70 bytes
Experimente online!
fonte
Japonês,
1513 bytesTente
Explicação
fonte
K (ngn / k) ,
3635 bytesExperimente online!
+!2|&2*x
todos os vetores binários de comprimento 2 * n(x=+/)#
somente aqueles que somam n(&/-1<+\1-2*)#
apenas aqueles cujas somas parciais, tratando 0/1 como 1 / -1, não são negativas"()"
use 0/1 como índices nessa stringfonte
Perl 5
-n
,4139 bytes-2 bytes com colchetes angulares
Experimente online!
Porto da minha resposta Perl 6.
fonte
Perl 6 , 42 bytes
Experimente online!
Usa um regex recursivo. Substituição alternativa:
S/[\(<~~>\)]*//
38 bytes com 0 e 1 como símbolos de abrir / fechar:
Experimente online!
Explicação
fonte
Retina 0.8.2 , 50 bytes
Experimente online! Usa
<>
s. Explicação:Converta para unário.
Dobrar o resultado.
Enumere todos os números binários de 2² × 2n bits, mapeando os dígitos para
<>
.Mantenha apenas sequências equilibradas. Isso usa um truque de parênteses balanceados descoberto por @MartinEnder.
fonte
JavaScript (ES6),
112102 bytesIsto é fortemente baseado na resposta C do nwellnhof .
Experimente online!
fonte
Vermelho ,
214, 184136 bytesExperimente online!
Usa a abordagem de Jo King. Encontra todos os arranjos possíveis de brackes usando recursão (eles são gerados em ordem lexicográfica) e imprime-o se o arranjo for avaliado como um bloco válido.
fonte
Geléia , 19 bytes
Experimente online!
Saída esclarecida sobre o TIO.
fonte