Considere uma sequência não vazia de parênteses corretamente balanceados:
(()(()())()((())))(())
Podemos imaginar que cada par de parênteses representa um anel em uma construção telescópica em colapso . Então, vamos estender o telescópio:
( )( )
()( )()( ) ()
()() ( )
()
Outra maneira de ver isso é que os parênteses na profundidade n são movidos para a linha n , mantendo sua posição horizontal.
Sua tarefa é pegar uma série de parênteses equilibrados e produzir a versão estendida.
Você pode escrever um programa ou função, obtendo entrada via STDIN (ou equivalente mais próximo), argumento da linha de comando ou parâmetro de função e produzindo saída via STDOUT (ou equivalente mais próximo), valor de retorno ou parâmetro de função (saída).
Você pode assumir que a sequência de entrada é válida, ou seja, consiste apenas de parênteses, que estão corretamente equilibrados.
Você pode imprimir espaços à direita em cada linha, mas não mais espaços à esquerda do que o necessário. No total, as linhas não devem exceder o dobro do comprimento da sequência de entrada. Opcionalmente, você pode imprimir uma única nova linha à direita.
Exemplos
Além do exemplo acima, aqui estão mais alguns casos de teste (entrada e saída são separadas por uma linha vazia).
()
()
(((())))
( )
( )
( )
()
()(())((()))(())()
()( )( )( )()
() ( ) ()
()
((()())()(()(())()))
( )
( )()( )
()() ()( )()
()
Desafios relacionados:
- Topographic Strings , que solicita que você produza o que é essencialmente o complemento da saída nesse desafio.
- Code Explanation Formatter , uma ampla generalização das idéias nesse desafio, publicada recentemente pela PhiNotPi. (De fato, a descrição original de PhiNotPi de sua ideia foi o que inspirou esse desafio.)
Classificação
Huh, isso teve muita participação, então aqui está um snippet de pilha para gerar um placar regular e uma visão geral dos vencedores por idioma.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes