Baseado em ESTE questão.
Dada uma sequência, substitua cada suporte ()[]{}<>
por um suporte do tipo apropriado para que os colchetes correspondam e os colchetes aninhados alternem da seguinte maneira:
- Os ultraperiféricos são
()
- Diretamente dentro de
()
deve ser[]
- Diretamente dentro de
[]
deve ser{}
- Diretamente dentro de
{}
deve ser<>
- Diretamente dentro de
<>
será()
novamente (ciclos)
Todos os caracteres sem colchetes devem permanecer exatamente como estão. Os colchetes abertos só podem ser substituídos por colchetes abertos de algum tipo e os colchetes fechados por colchetes fechados.
A entrada sempre tornará isso possível. Isso significa que seus colchetes corresponderam corretamente se seu tipo for ignorado. Então, {ab<)c]
é uma entrada válida, mas ab)(cd
ou ab((cd
não são.
Exemplos:
2#jd {¤>. = 2#jd (¤).
abcdef = abcdef
(3×5+(4-1)) = (3×5+[4-1])
<<<>><<>><<<<<<>>>>>>> = ([{}][{}][{<([{}])>}])
O uso da transformação nativa de entrada dessa maneira (sintaxe automática do idioma) não é permitido.
Como sempre: o código mais curto vence.
code-golf
string
balanced-string
Dirk Reichel
fonte
fonte
Respostas:
JavaScript (ES6), 79 bytes
Casos de teste
Mostrar snippet de código
fonte
Lex, 132 bytes
fonte
flex
como compilador) excluindo as duas ou três últimas linhas, respectivamente, a um custo de um número de bytes (provavelmente 2, 3 ou 4; as regras não são claras) nas penalidades para a-ll
opção de linha de comando ao vincular o arquivo C. resultante. (Ou seja, em vez de compilarlex brackets.l; cc lex.yy.c
, você compilalex brackets.l; cc lex.yy.c -ll
.) Definitivamente, é uma troca que vale a pena fazer nessa situação.Java, 155 bytes
Lambda que leva um
char[]
argumento único. Nós percorremos o array, armazenando sua posição em nossa cadeia de colchetes (s
) em uma variável (k
). Verificamos se é um suporte de abertura ou fechamento (s.indexAt()
) e o substituímos pelo suporte apropriado com base no nível de aninhamento (s.charAt()
), fazendo um loop apropriado com%4
fonte
Haskell, 126 bytes
Experimente em ideone. Uso:
Explicação
f
utiliza três argumentos: Uma sequência que funciona como pilha para fechar colchetes, uma intn
para contar a profundidade de aninhamento e a sequência de entrada.fonte