Não são algumas perguntas sobre este site sobre o equilíbrio entre parênteses, e verificar se os suportes estão equilibradas. Proponho que agora é hora de usar esses colchetes equilibrados para alguma coisa!
Em matemática e programação, os colchetes são como bolhas, isolando tudo de dentro, forma tudo de fora, para que tudo o que está dentro possa fazer suas coisas em paz e o que estiver fora veja apenas um objeto. No entanto, uma série de colchetes é unidimensional, enquanto as bolhas geralmente são pelo menos bidimensionais. Isso significa que as bolhas são livres para se movimentar, desde que nunca se toquem ou se cruzem entre o interior e o exterior de quaisquer outras bolhas.
Desafio
A entrada é uma sequência de colchetes correspondentes de um único tipo, redondo ()
, quadrado []
, ondulado {}
ou angular <>
. Depende de você o tipo que você deseja que seu programa aceite, e um programa que aceita apenas um único tipo de colchete é aceito. (Bônus imaginário se o seu programa puder lidar com qualquer um deles, pontos de bônus imaginários maciços se ele puder lidar com todos eles na mesma entrada.) A entrada não pode conter nada entre os colchetes, embora espaços em branco à direita sejam permitidos.
A saída é todas as reorganizações possíveis (em ordem arbitrária e incluindo a entrada original) daqueles colchetes que produzem a mesma configuração de bolhas, sem duas seqüências idênticas. Isso significa que, com uma entrada de ()()
, a saída também é justa ()()
, apesar de serem tecnicamente duas bolhas que poderiam trocar de lugar. Para o bônus imaginário maciço, {}[]()
é claro que uma entrada de vontade leva a uma saída de 6 elementos / strings / linhas diferentes.
Duas configurações de bolhas são "iguais" se você puder se transformar uma na outra movendo as bolhas, sem deixar nenhuma bolha passar de dentro de outra bolha para fora dela ou de fora para dentro. Se você comparar parênteses aninhados a árvores (cada par correspondido é um nó e todo par correspondido dentro de um subnó, e cada par correspondido dentro de um subnó desses novamente, e assim por diante) em que os subnós de qualquer nó são ordenados , uma única configuração de bolhas é uma árvore na qual os nós não são ordenados.
Qualquer formato de saída razoável funcionará, como retornar uma lista de cadeias de caracteres ou uma lista de caracteres únicos ou uma única string com algum tipo de espaço em branco ou imprimir em stdout
ou stderr
com alguma forma de caractere visível do espaço em branco (geralmente nova linha ou espaço) entre cada reorganização.
Espaços finais para cada reorganização e linhas novas / elementos à esquerda e à lista vazias anteriores e anteriores à saída real são permitidas. Você deve usar o mesmo tipo de colchetes na saída que aceita na entrada. Além dos colchetes, das novas linhas e dos espaços especificados aqui, e do separador usado, nada deve ser impresso (incluindo caracteres invisíveis / largura zero).
A pontuação é o número de bytes no código; a contagem mais baixa para cada idioma vence. Você pode observar se recebe um bônus imaginário, regular ou massivo, mas isso não afeta sua pontuação. Os bônus reais são muito difíceis de equilibrar corretamente.
Exemplos de entrada e saída
Exemplo 1:
Entrada:
()(())
Saída:
()(())
(())()
Exemplo 2:
Entrada:
(()())()()
Saída:
(()())()()
()(()())()
()()(()())
Exemplo 3:
Entrada:
(()(()))()
Saída:
((())())()
()((())())
(()(()))()
()(()(()))
((()))
no exemplo 1? ou()()()
? Parece que faltam permutações para cada entrada.