Un "soporte de triplete" (que inventé para este desafío) es uno de los siguientes:
(...+...)
[...:...]
{...|...}
<...-...>
Una cadena de corchetes triples equilibrada (BTBS para abreviar) es una cadena vacía, dos BTBS concatenados o uno de los corchetes ...
triples anteriores, cada uno reemplazado por un BTBS.
Su tarea es escribir un programa o función que verifique si una cadena que consta de solo (+)[:]{|}<->
está equilibrada. El código más corto gana.
Ejemplos
Su programa debe devolver la verdad para las siguientes cadenas:
(+)(+)(+)
[[[:]:]:(+(+))]{<->|<(+)->[:]}(+)
<<<<<<<<<<<<->->->->->->->->->->->->
{|(+[:<-{|(+[:<->])}>])}
[[[:]:[:]]:[[:]:[:]]]
{[:](+)|<->{|}}[(+)<->:{|}(+)]
Su programa debe devolver falsedad para las siguientes cadenas:
:[
<|>
(+(+)
[:][:](+[[:]):]
{|{|{|(+{|{|{|}}}}}+)}[:]{|}
{{||}}
<<->-<->-<->>
[(+):((+)+)+(+(+))]
<<<<<->->->->->->
code-golf
string
balanced-string
jimmy23013
fuente
fuente
(|)
valido. No lo creo, pero no estoy seguro<|>
en los ejemplos falsos.Respuestas:
Japt, 25 bytes
¡Pruébalo en línea!
e
en cadenas es una función de reemplazo recursivo. El segundo parámetro predeterminado es la cadena vacía, lo que significa que esto elimina recursivamente las coincidencias de la expresión regular de Japt"%(%+%)|%[:]|\{%|}|<->"
(en términos regulares/\(\+\)|\[:]|{\|}|<->/
). Esto devuelve una cadena vacía para cadenas de triplete balanceadas y una cadena no vacía para cadenas no balanceadas, por lo que el valor de retorno correcto es el NOT lógico de esto.fuente
JavaScript (ES6),
77585756 bytesCasos de prueba
Mostrar fragmento de código
fuente
perl -lpe 's/<->|\(\+\)|{\|}|\[:]//&&redo;$_=!$_'
.0
un BTBS. Use este 38 en su lugar:perl -pe 's/<->|\(\+\)|{\|}|\[:]//&&redo;$_=/^$/'
f=s=>s==(s=s.replace(...))?!s:f(s)
?sed,
2827 bytessed no tiene un concepto de verdad / falsedad, así que estoy considerando una cadena vacía de verdad y una cadena no vacía de falsedad. Esto verifica si consideramos el condicional
/^$/
.¡Gracias a @Neil por jugar golf en 1 byte!
Pruébalo en línea!
fuente
\]
o es]
suficiente?Python, 77 bytes
Utiliza la idea de reemplazo de Arnauld . Genera y evalúa una cadena larga como
para alternar entre la sustitución de todos los tipos de soporte. Luego, verifica si el resultado es la cadena vacía.
fuente
Mathematica, 55 bytes
Función anónima. Toma una cadena como entrada y devuelve
True
oFalse
como salida. Utiliza el método estándar para hacer esto.fuente
Grime , 39 bytes
Pruébalo en línea! Lamentablemente, la versión TIO se queda sin memoria en la mayoría de los casos de prueba.
Explicación
Nada muy lujoso aquí.
_
es una forma abreviada de todo el patrón, yv*
es igual que*
, pero con menor prioridad.fuente
J, 48 bytes
Al igual que los demás, esto también se basa en el método de Arnauld .
Uso
Explicación
fuente
Scala, 96 bytes
Esta es básicamente la misma idea que las otras respuestas, pero con un poco de escala scala.
sin robar ideas de otros (188 bytes):
fuente
Pip , 26 bytes
Pruébalo en línea!
Bucles len (a) veces, reemplazando todas las apariciones de corchetes triples vacíos (
"(+)[:]{|}<->"<>3
, donde<>
está el operador "grupo", =>["(+)"; "[:]"; "{|}"; "<->"]
) con una cadena vacía (x
). Esta cantidad de iteraciones es exagerada, pero siempre será más que suficiente para reducir completamente todos los corchetes de triplete correctamente formados a nada. Una vez que se completa el ciclo, sale!a
:0
sia
es verdadero (todavía tiene algunos caracteres),1
sia
es falso (vacío).fuente