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. :)
fonte
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][
é 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.
Respostas:
Geléia ,
33 32 37 3534 bytesbug encontrado, correção horrível +5 bytes, melhor correção - 2 bytes, usando um truque de Adnan que eu vi aqui por -1 a mais.
Valores de retorno:
(Entrada inválida retorna resultados espúrios, embora válido Brain-flack, retorna
[]
.)Experimente online! - um conjunto de testes (gravuras mushed representações, então
20
para[2,0]
, e ignora as linhas contendo qualquer-
).fonte
Retina ,
414041 bytes1 byte salvo graças a @MartinEnder
Experimente online!
1
0
10
01
Edições
fonte
[]})>]
salva um byte.(][)
. Eu acho que pode ser corrigido ao custo de um byte, alterando101
para...+
.Both
bem10
é a única combinação válida paraBoth
.Lote, 337 bytes
Saídas
]
para pré-anexar,[
para anexar,][
para ambos,[]
para nenhum.fonte
Haskell ,
115108 bytesEDITAR:
Experimente online!
Use como
(""#) "))"
. Os resultados são apresentados como:Como funciona
s#d
analisa uma sequência restanted
, considerando uma sequência / pilhas
de colchetes esperados.s#""
linha verifica se todos os colchetes de fechamento foram encontrados no final da cadeia, caso contrário é necessário anexar.s#(c:d)
verificações se o próximo caracterec
é um colchete de abertura e, se houver, deixa o colchete de fechamento correspondente na pilha para a recursão.fonte
Japonês , 44 bytes
Saídas
1
para prependable,3
para appendable,13
para ambos, e31
para nenhum.Teste online! ou Verifique todos os casos de teste de uma só vez.
Como funciona
fonte
PHP, 137 bytes
1 => anexável,
2 => prependível,
12 => ambos,
0 => nenhum
Casos de teste
fonte