Brain-flak faz um ano amanhã! Em homenagem ao seu aniversário, estamos tendo uma festa de aniversário no estilo PPCG, na qual vários usuários postam perguntas relacionadas ao cérebro! Ajude-nos a celebrar! :)
Brain-flak é uma linguagem esotérica que escrevi, onde todos os comandos são colchetes e todos os colchetes devem ser totalmente compatíveis. Para emprestar minha própria definição :
Para o propósito deste desafio, um "suporte" é qualquer um desses caracteres:
()[]{}<>
.Um par de colchetes é considerado "correspondente" se os colchetes de abertura e fechamento estiverem na ordem correta e não tiverem caracteres dentro deles, como
() []{}
Ou se todos os subelementos dentro dele também corresponderem.
[()()()()] {<[]>} (()())
Os subelementos também podem ser aninhados com várias camadas de profundidade.
[(){<><>[()]}<>()] <[{((()))}]>
Uma cadeia é considerada "Totalmente compatível" se e somente se:
Cada caractere é um colchete,
Cada par de suportes possui o suporte de abertura e fechamento correto e na ordem correta
Em comemoração ao primeiro aniversário do brain-flak, o desafio de hoje é pegar um conjunto desequilibrado de parênteses e determinar que tipos de operações são necessárias para torná-lo válido.
Por exemplo,
((
não é um código de quebra-cabeça válido, mas se acrescentamos))
a ele, ele se torna(())
totalmente equilibrado e, portanto, válido. Isso torna essa entrada anexável .Da mesma forma,
>}
não é válido, mas podemos acrescentar{<
a ele o make{<>}
, que é válido. Isso torna essa entrada pré-selecionável .Algumas entradas são um pouco mais complicadas. Por exemplo,
)][({
não é possível validar puramente anexando ou anexando. Mas isso pode ser validado[(
acrescentando e acrescentando})]
. Portanto, essa entrada é tanto prependable e appendable .Por fim, algumas entradas nunca podem ser tornadas válidas como uma combinação de anexos ou anexos. Por exemplo,
(>
nunca pode ser válido. (Anexar<
cria<(>
e anexa)
cria(>)
, nenhuma das quais é válida) Portanto, essa entrada não é nem anexável nem pré-selecionável.
Para o desafio de hoje, você deve escrever um programa ou função que use uma sequência de colchetes e determine se a sequência é
appendable
prependable
both
neither
Você pode escolher quais valores você usa para representar para cada caso. Por exemplo, saída 1, 2, 3, 4
, ou 'a', 'p', 'b', 'n'
, ou 1, 'foo', 3.1415, -17
, ou o que estiver bom. Contanto que cada saída seja distinta e consistente , tudo bem. No entanto, você deve especificar claramente qual saída corresponde a qual caso.
Você pode retornar esse valor no formato que for mais conveniente (por exemplo, retornar de uma função, imprimir em STDOUT, modificar argumentos, gravar em um arquivo etc.).
Você pode supor que a entrada nunca será válida e não funcionará.
Exemplos
As seguintes entradas são todas pré - selecionáveis :
))
(((()()())))}
)>}]
()[]{}<>)
Estes são todos anexáveis :
(({}{})
((((
([]()())(
{<<{
Estes são todos os dois :
))((
>()[(()){
>{
E estes são todos nem :
)(}
{(((()()()))>
[}
((((((((((>
((((((((((<>()]
Como de costume, isso é código-golfe , então as brechas padrão se aplicam e a resposta mais curta em bytes vence!
Esse desafio é particularmente difícil no cérebro, então o máximo de brownie aponta para toda e qualquer resposta escrita no cérebro. :)
][
é anexável, pois nada que você possa anexar pode torná-la válida. Da mesma forma, não é pré-aplicável. É ... 'inserível'! Você pode inseri-lo em uma string para tornar todo o Brainflak válido.
You can assume that the input will never be valid brain-flak or empty.
maximum brownie points
Eu acho que a oferta de pontos e brownies máximos encorajaria esse desafio mais do que apenas pontos brownie, já que eu não acho que seja trivial em nenhum idioma, muito menos no Brain-Flak. : P