Suportes normais ( ()
, []
, <>
e {}
) são agradáveis e inequívoca, no entanto alguém pensou que seria uma boa idéia usar caracteres não suporte como suportes. Esses caracteres |
e "
são ambíguos. Por exemplo,
""""
Corresponde a
(())
ou
()()
É impossível dizer.
As coisas começam a ficar interessantes quando você mistura tipos de colchetes ambíguos, por exemplo
"|""||""|"
Pode ser um dos seguintes
([(([]))]),([()[]()]),([()][()])
Tarefa
Sua tarefa é pegar uma sequência de caracteres ambíguos e gerar todas as sequências equilibradas possíveis que o autor poderia ter pretendido.
Mais concretamente, você produz todas as cordas balanceadas que podem ser feitas substituindo |
por um [
ou outro ]
e "
por um (
ou outro )
. Você não deve emitir nenhuma string balanceada duas vezes.
IO
Como entrada, você deve usar uma string composta por |
e "
. Se você gostaria de selecionar outros de dois personagens distintos |
e "
para servir como substitutos você pode fazê-lo. Você deve produzir um contêiner de cadeias equilibradas. Você pode optar por substituir []
e ()
na saída com outros dois pares de suporte ( ()
, []
, <>
ou {}
) que você deseja. Seu formato de saída deve ser consistente entre as execuções.
Pontuação
Isso é código-golfe, então as respostas serão pontuadas em bytes, com menos bytes sendo melhores.
Casos de teste
"" -> ["()"]
"|"| -> []
||| -> []
"""" -> ["(())","()()"]
""|| -> ["()[]"]
"|"||"|" -> ["([([])])"]
"|""||""|" -> ["([(([]))])","([()[]()])","([()][()])"]