Você é um gerente de projeto. Um dia, um de seus programadores enlouqueceu ( não foi sua culpa ) e pegou todas as expressões na base de código e adicionou colchetes aleatórios a eles, antes de sair no local, reclamando sobre sua incompetência ( também não é sua culpa ). Isso seria uma solução fácil, no entanto, por algum motivo, você não está usando o controle de revisão ( totalmente não é sua culpa ). E, por alguma razão, nenhum dos outros programadores deseja passar por todas as expressões para corrigir os colchetes incompatíveis ( a propósito, isso não é culpa sua ). Programadores hoje em dia, você pensa consigo mesmo. Você terá que fazer isso sozinho. O horror! Essas tarefas deveriam estar abaixo de você ...
A entrada será uma linha única, que conterá um número de colchetes esquerdo ( ( [ {
) e colchetes direito ( ) ] }
). Também pode, mas nem sempre, conter comentários ( /* */
) e literais de sequência ( " "
ou ' '
) e vários números, letras ou símbolos.
Haverá pelo menos um colchete (fora de um comentário ou literal de cadeia) que não possui um oposto de corrosão (fora de um comentário ou literal de cadeia). Por exemplo, um errante }
sem um {
prior. Outro exemplo: um (
que não possui um )
depois. Seu programa substituirá por um espaço o número mínimo de colchetes necessário para fazer com que os colchetes correspondam.
Exemplos:
(4 + (2 + 3))]
==> (4 + (2 + 3))
(o colchete no final)
][][[]]
==> [][[]]
(o colchete no início)
("Hel(o!"))
==> ("Hel(o!")
(o parêntese no final)
( /* )]*/
==> /* )]*/
(o parêntese no início)
{()]
==> ()
(o colchete e o colchete)
- A entrada pode ser obtida da maneira que for mais conveniente (STDIN, argumento da linha de comando, leitura de um arquivo etc.)
- Se houver mais de uma maneira de resolver a incompatibilidade com o mesmo número de remoções, qualquer uma delas é aceitável.
- Haverá apenas incompatibilidades entre colchetes. Literais e comentários de strings sempre serão formados corretamente.
- O título vem deste tópico SO
- Nunca haverá aspas nos comentários, aspas nas aspas, comentários nos comentários ou comentários nas aspas.
Este é o código golf, portanto, o número mínimo de bytes vence. Faça perguntas nos comentários se a especificação não estiver clara.
("foo (\") bar")
)?
{{(})
deveria ser { }
ou equivalente, já que o cenário de abertura implica que o código estava trabalhando para começar e {(})
conta como colchetes incompatíveis em todas as linguagens de programação que eu conheço (ou seja, "causa estase" ??). Mas, então, eu já escrevi uma resposta, então sou tendenciosa.