Se le dará una cadena (posiblemente vacía) que contiene corchetes ( [{()}]
) y cualquier otro carácter ( A
- Z
, a
- z
, 0
- 9
, puntuación). Debe verificar si cumple con las siguientes reglas:
- Los caracteres sin corchetes se ignoran.
- Cada soporte abierto
[{(
tiene un soporte de cierre)}]
. Entonces[](
no está permitido. - Los corchetes están anidados correctamente.
[(])
No se permite. - Los corchetes no pueden contener corchetes dentro de ellos. Los corchetes simples no pueden contener corchetes ni corchetes dentro de ellos. Entonces
[({})]
,[{[]}]
y({})
no están permitidos. Los corchetes se pueden anidar con corchetes similares, por lo que[[{((()))}{{(())}}]()]{()}
está permitido.
La salida es un único valor verdadero / falso según su elección.
El código más corto gana.
Casos de prueba
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
fantasmas_en_el_código
fuente
fuente
Respuestas:
Retina , 84 bytes
Pruébalo en línea.
Esta es una extensión bastante directa (pero desarrollada) de la expresión regular de comprobación de paréntesis .NET .
Si bien esto es bastante posible con grupos de equilibrio, la recurrencia de Perl definitivamente tiene la ventaja aquí . Sin embargo, cualquiera de los dos enfoques se supera al abandonar la elegancia de una sola combinación de expresiones regulares en favor de reducir la entrada gradualmente a través de sustituciones repetidas, como lo hace la respuesta sed de Digital Trauma . Esto se puede implementar en 34 bytes en Retina, pero dudo en publicar el código yo mismo, ya que no se me ocurrió la idea.
fuente
Retina, 34
En primer lugar, crédito donde se debe:
Independientemente (más tarde) se me ocurrió el mismo enfoque en sed , así que espero no pisar ningún dedo del pie ( grande o no) al publicar esto:
Así que ahora con una
sudo apt-get install mono-complete
ygit clone https://github.com/mbuettner/retina.git
tengo una retina trabajando en mi Ubuntu VM. Aquí está la salida de prueba:fuente
Sed, 53
Aquí estoy afirmando que, dado
sed
que realmente no tiene un concepto de verdad / falsey, entonces estoy definiendo la cadena vacía para que signifique la verdad y todas las demás cadenas para que signifiquen falsey.Si eso no es aceptable, entonces podemos agregar un par de líneas, por lo tanto:
Sed, 66
Esto genera 0 para falso y 1 para verdadero.
fuente
0
o1
). No puedo decir quién debería publicarlo, pero probablemente debería ser uno de ustedes dos.CJam,
2726 bytesEsto imprime 1 (verdad) o 0 (falso). Pruébalo en línea! o verificar todos los casos de prueba.
Cómo funciona
fuente
𝔼𝕊𝕄𝕚𝕟, 43 caracteres / 62 bytes
Try it here (Firefox only).
No
Sin embargo, si uso características recientemente implementadas, puedo bajar a 28 caracteres / 47 bytes:
fuente
Japt ,
4237 bytesGuarde 5 bytes con una función que no sabía que tenía mi propio idioma ... ¡Gracias por agregarlo, @Downgoat!
Japt realmente necesita un mejor soporte de RegExp ...
Pruébalo en línea!
Cómo funciona
fuente
C99,
226208207 BytesEsta es la primera vez que intento jugar golf
Legible:
Hay un desbordamiento del búfer, pero no parece afectar nada. Creo que esto se debe a la alineación.
fuente
char* s
Perl, 50 + 1 = 51 bytes
Requiere la
-p
bandera y las huellas1
de verdad y nada de resultados falsos. Estoy contando-p
como uno, porque se puede combinar con-e
:El código es básicamente una simple coincidencia de expresiones regulares contra la entrada, utilizando la ingeniosa función de expresiones regulares recursivas de Perl.
Gracias a Dennis por ayudarme a probar esto y jugar al golf en Perl.
fuente
Python 3: 120 bytes
Sobre la base de la respuesta de @ Adnan , resultó ser más corto de usar:
fuente
Python 3,
196170160154 bytesTorpemente largo, gracias a Mego por guardar 6 bytes:
fuente