Você receberá uma string (possivelmente vazia) contendo colchetes ( [{()}]
) e quaisquer outros caracteres ( A
- Z
, a
- z
, 0
- 9
, pontuação). Você precisa verificar se ele cumpre as seguintes regras:
- Caracteres sem colchetes são ignorados.
- Todo suporte aberto
[{(
possui um suporte de fechamento)}]
. Então[](
não é permitido. - Os colchetes estão aninhados corretamente.
[(])
não é permitido. - Os colchetes não podem conter colchetes dentro deles. Os colchetes simples não podem conter colchetes encaracolados ou quadrados. Então
[({})]
,[{[]}]
e({})
não é permitido. Os colchetes podem ser aninhados com colchetes semelhantes, portanto,[[{((()))}{{(())}}]()]{()}
é permitido.
A saída é um valor único de verdade / falsey, conforme sua escolha.
O menor código vence.
Casos de teste
b[[a{(/)}(())+={{}-}],]
-> Válido
([h][e][l][l][o])
-> Inválido
[///[{(\/(arg()))}1{{((-)-2)}}]()]{()}
-> Válido
hi
-> Válido
code-golf
string
decision-problem
balanced-string
ghosts_in_the_code
fonte
fonte
Respostas:
Retina , 84 bytes
Experimente online.
Esta é uma extensão bastante direta (mas em golf) da regex .NET básica de verificação de parênteses .
Embora isso seja bem possível com grupos de balanceamento, a recursão de Perl definitivamente tem vantagem aqui . No entanto, qualquer abordagem é derrotada ao abandonar a elegância de uma única correspondência de regex em favor da redução gradual da entrada por meio de substituições repetidas, como faz a resposta sed do Digital Trauma . Isso pode ser implementado em 34 bytes na Retina, mas hesito em postar o código pessoalmente, pois não tive a ideia.
fonte
Retina, 34
Em primeiro lugar, crédito onde o crédito é devido:
Independentemente (mais tarde), criei a mesma abordagem no sed , portanto, espero não estar pisando nos pés ( grande ou não) ao postar isso:
Então agora com a
sudo apt-get install mono-complete
egit clone https://github.com/mbuettner/retina.git
eu tenho uma retina funcional na minha VM do Ubuntu. Aqui está o resultado do teste:fonte
Sed, 53
Aqui estou afirmando que, uma vez
sed
que realmente não tem um conceito de verdade / falsey, estou definindo a string vazia para significar truthy e todas as outras strings para significar falsey.Se isso não for aceitável, podemos adicionar algumas linhas, assim:
Sed, 66
Isso gera 0 para falso e 1 para verdadeiro.
fonte
0
ou1
). Não sei dizer quem deve publicá-lo, mas provavelmente deve ser um de vocês dois.CJam,
2726 bytesImprime 1 (verdadeiro) ou 0 (falso). Experimente online! ou verifique todos os casos de teste.
Como funciona
fonte
43, 43 caracteres / 62 bytes
Try it here (Firefox only).
Não.
No entanto, se eu usar os recursos implementados recentemente, eu posso chegar a 28 caracteres / 47 bytes:
fonte
Japt ,
4237 bytesSalvei 5 bytes com um recurso que eu não sabia que meu próprio idioma tinha ... Obrigado por adicioná-lo, @Downgoat!
O Japt realmente precisa de um melhor suporte ao RegExp ...
Experimente online!
Como funciona
fonte
C99,
226208207 BytesEsta é a minha primeira vez tentando jogar algo
Legível:
Há um estouro de buffer, mas parece não afetar nada - acredito que isso se deva ao alinhamento.
fonte
char* s
Perl, 50 + 1 = 51 bytes
Requer a
-p
bandeira e as impressões1
para a verdade e nada para resultados falsos. Estou contando-p
como um, porque pode ser combinado com-e
:O código é basicamente apenas uma correspondência de regex simples com a entrada, usando o recurso de regex recursivo bacana do Perl.
Agradeço ao Dennis por me ajudar a testar isso e jogar golfe no padrão Perl.
fonte
Python 3: 120 bytes
Com base na resposta de @ Adnan , ficou mais curto o uso:
fonte
Python 3,
196170160154 bytesDesajeitadamente, obrigado ao Mego por salvar 6 bytes:
fonte