Um "suporte tripleto" (que eu compus para esse desafio) é um dos seguintes:
(...+...)
[...:...]
{...|...}
<...-...>
Uma sequência de colchetes triplos balanceados (BTBS para abreviar) é uma sequência vazia, dois BTBSes concatenados ou um dos colchetes tripletos acima, sendo que cada ...
um deles é substituído por um BTBS.
Sua tarefa é escrever um programa ou função que verifique se uma sequência que consiste apenas (+)[:]{|}<->
é equilibrada. O menor código vence.
Exemplos
Seu programa deve retornar verdadeiramente para as seguintes seqüências de caracteres:
(+)(+)(+)
[[[:]:]:(+(+))]{<->|<(+)->[:]}(+)
<<<<<<<<<<<<->->->->->->->->->->->->
{|(+[:<-{|(+[:<->])}>])}
[[[:]:[:]]:[[:]:[:]]]
{[:](+)|<->{|}}[(+)<->:{|}(+)]
Seu programa deve retornar falso para as seguintes seqüências de caracteres:
:[
<|>
(+(+)
[:][:](+[[:]):]
{|{|{|(+{|{|{|}}}}}+)}[:]{|}
{{||}}
<<->-<->-<->>
[(+):((+)+)+(+(+))]
<<<<<->->->->->->
code-golf
string
balanced-string
jimmy23013
fonte
fonte
(|)
válido. Eu acho que não, mas não tenho certeza #<|>
nos exemplos falsos.Respostas:
Japt, 25 bytes
Teste online!
e
on strings é uma função de substituição recursiva. O segundo parâmetro é o padrão da string vazia, o que significa que isso remove recursivamente correspondências do regex Japt"%(%+%)|%[:]|\{%|}|<->"
(em termos regulares/\(\+\)|\[:]|{\|}|<->/
). Isso retorna uma cadeia vazia para cadeias triplas balanceadas e uma cadeia não vazia para não balanceadas, portanto, o valor de retorno correto é o NOT lógico disso.fonte
JavaScript (ES6),
77585756 bytesCasos de teste
Mostrar snippet de código
fonte
perl -lpe 's/<->|\(\+\)|{\|}|\[:]//&&redo;$_=!$_'
.0
um BTBS. Use este 38:perl -pe 's/<->|\(\+\)|{\|}|\[:]//&&redo;$_=/^$/'
f=s=>s==(s=s.replace(...))?!s:f(s)
?sed,
2827 bytessed não tem um conceito de verdade / falsidade, então estou considerando uma verdade de cadeia vazia e uma falsidade de cadeia não vazia. Isso verifica se considerarmos o condicional
/^$/
.Obrigado a @ Nee por jogar fora um byte!
Experimente online!
fonte
\]
ou é]
suficiente?Python, 77 bytes
Usa a ideia de substituição de Arnauld . Gera e avalia uma cadeia longa como
para alternar entre a substituição de todos os tipos de colchetes. Em seguida, verifica se o resultado é a sequência vazia.
fonte
Mathematica, 55 bytes
Função anônima. Toma uma string como entrada e retorna
True
ouFalse
como saída. Usa o método padrão para fazer isso.fonte
Grime , 39 bytes
Experimente online! Infelizmente, a versão TIO fica sem memória na maioria dos casos de teste.
Explicação
Nada muito chique aqui.
_
é uma abreviação para todo o padrão ev*
é o mesmo que*
, mas com menor precedência.fonte
J, 48 bytes
Semelhante aos outros, isso também é baseado no método de Arnauld .
Uso
Explicação
fonte
Scala, 96 bytes
Essa é basicamente a mesma idéia que as outras respostas, mas com algumas informações básicas da Scala.
sem roubar idéias de outras pessoas (188 bytes):
fonte
Pip , 26 bytes
Experimente online!
Loops len (a) vezes, substituindo todas as ocorrências de colchetes vazios de trigêmeos (
"(+)[:]{|}<->"<>3
, onde<>
é o operador "group", =>["(+)"; "[:]"; "{|}"; "<->"]
) por string vazia (x
). Essas muitas iterações são um exagero, mas sempre será mais do que suficiente para reduzir completamente todos os colchetes tripletos adequadamente formados para nada. Após a conclusão do loop, gera!a
:0
ifa
é verdade (ainda possui alguns caracteres),1
sea
é falsey (vazio).fonte