Soportes normales ( ()
, []
, <>
y {}
) son agradables y sin ambigüedades, sin embargo alguien pensó que sería una buena idea de utilizar caracteres no soporte como soportes. Estos personajes |
y "
son ambiguos. Por ejemplo hace
""""
corresponden a las
(())
o
()()
Es imposible de decir.
Las cosas comienzan a ponerse interesantes cuando mezclas tipos de paréntesis ambiguos, por ejemplo
"|""||""|"
Podría ser cualquiera de los siguientes
([(([]))]),([()[]()]),([()][()])
Tarea
Su tarea es tomar una cadena hecha de caracteres ambiguos y generar todas las cadenas equilibradas posibles que el autor podría haber pensado.
Más concretamente que todas las cadenas de salida equilibradas que se pueden hacer en sustitución |
, ya sea con [
o ]
y "
, ya sea con (
o )
. No debe generar ninguna cadena equilibrada dos veces.
IO
Como entrada, debe tomar una cadena que consta de |
y "
. Si desea seleccionar dos caracteres distintos además de |
y "
servir como reemplazos, puede hacerlo. Debe generar un contenedor de cadenas equilibradas. Usted puede optar por sustituir []
y ()
en la salida con otras dos pares de soportes ( ()
, []
, <>
o {}
) que desee. Su formato de salida debe ser coherente en todas las ejecuciones.
Puntuación
Este es el código de golf, por lo que las respuestas se puntuarán en bytes con menos bytes mejor.
Casos de prueba
"" -> ["()"]
"|"| -> []
||| -> []
"""" -> ["(())","()()"]
""|| -> ["()[]"]
"|"||"|" -> ["([([])])"]
"|""||""|" -> ["([(([]))])","([()[]()])","([()][()])"]
fuente
Respuestas:
Python 2 , 135 bytes
Pruébalo en línea!
Espera entradas como en
2002
lugar de"||"
, y entre comillas.Itera sobre las 2 N posibles asignaciones de "abrir" y "cerrar" a la cadena, creando cadenas
c
como:Si
eval
-ing esta cadena arroja una excepción, no tiene comparación. Si no, imprimimosc[::2]
, dando:fuente
Retina ,
595655 bytesPruébalo en línea! Desafortunadamente, las pruebas para dos conjuntos de paréntesis coincidentes exceden el nivel de golf de una única expresión regular .NET, por lo que ahorra 15 bytes para verificar manualmente. Editar: Guardado
34 bytes gracias a @ H.PWiz. Explicación:Encuentra ay
"
haz dos copias de la línea, una con a<
y otra con a>
. Haga esto uno"
a la vez, para que cada uno"
duplique el número de líneas.Lo mismo ocurre con
'
,{
y}
. Luego, siga reemplazando hasta que todos"
los'
sys de todas las copias hayan sido reemplazados.Haga un duplicado de los corchetes, separados por a
_
.En el duplicado, elimine repetidamente los corchetes coincidentes, hasta que no quede ninguno, en cuyo caso elimine
_
también.Eliminar todas las líneas que todavía tienen un
_
.Retina ,
747170 bytesPruébalo en línea! Explicación: Las dos primeras etapas son como las anteriores. La tercera etapa imprime directamente el resultado de unir dos conjuntos de corchetes coincidentes. Esto utiliza los grupos de equilibrio de .NET. En cada etapa de la partida, la expresión regular intenta hacer coincidir un personaje, luego mirar hacia atrás para ver un par de paréntesis coincidentes, luego verificar que la parte superior de la pila coincida con el paréntesis abierto. Si puede hacer esto, significa que el soporte se equilibra y el soporte abierto se saca de la pila. De lo contrario, se supone que estamos en un paréntesis abierto que necesita ser empujado a la pila. Si estos supuestos no se cumplen, la pila no estará vacía al final y la coincidencia fallará.
Enfoque alternativo, también
7471 bytes:Aquí, miramos hacia adelante para
<
...>
o{
...}
, luego miramos hacia atrás para empujar el soporte de cierre hacia la pila. De lo contrario, debemos hacer coincidir y abrir el corchete de cierre que capturamos anteriormente. En esta versión, es posible que la expresión regular ni siquiera llegue al final de la cadena, pero algunas cadenas<<<>
se deslizarían a través de la red si no verificamos si hay una pila vacía.fuente
|
la entradaCasco , 19 bytes
Pruébalo en línea! Utiliza los caracteres
ds
en la entrada y los pares de paréntesis correspondientesde
yst
en la salida.Explicación
La idea es generar todos los corchetes posibles de la entrada y mantener aquellos que se reducen a la cadena vacía cuando eliminamos repetidamente los corchetes adyacentes. El
¨÷₂¨
es una cadena comprimida que se expande en"dest"
, que fue elegida porque tiene una forma comprimida corta y consiste en pares de caracteres con puntos de código adyacentes. Por lo tanto, el programa es equivalente a lo siguiente.fuente
Perl,
565553 bytesIncluye
+1
paran
usos
[
para[]
y{
para{}
Genera todas las posibilidades de 2 ^ N, luego usa perl
eval
para verificar si una cadena como '+ [+ {}]' es un código válido y, de ser así, elimina+
e imprime el resultadofuente
APL (Dyalog Classic) ,
5553 bytesPruébalo en línea!
fuente
Limpio ,
203186179 bytesPruébalo en línea!
Utiliza solo la coincidencia de patrones y las comprensiones.
fuente
Perl, 56 bytes
Incluye
+
paran
Utiliza entrada
[
para salida[
o]
Utiliza entrada
{
para salida{
o}
Utiliza una expresión regular extendida de Perl para hacer coincidir los aparatos ortopédicos mientras realiza un seguimiento de las elecciones realizadas durante el retroceso. Esto puede ser mucho más eficiente que generar todos los candidatos 2 ^ N, ya que ya rechaza muchas tareas imposibles mientras se encuentra en la mitad de la cadena de entrada.
fuente
Kotlin ,
240236234 bytesEmbellecido
Prueba
Ediciones
true
->1>0
y== 0
->< 1
fuente
C (gcc) , 315 bytes
Pruébalo en línea!
C (gcc) , 334 bytes (versión anterior)
Pruébalo en línea!
Explicación (versión anterior)
Pruébalo en línea!
fuente
*s++
en algunos lugares.char S[n],*s=S
es aún más corto quechars*s=calloc(n,1)