No son unas cuantas preguntas en este sitio sobre el equilibrio entre paréntesis, corchetes y comprobar si están equilibrados. ¡Propongo que es hora de usar esos soportes equilibrados para algo!
En matemáticas y programación, los corchetes son como burbujas, aislando todo lo que está dentro de todo lo que está afuera para que lo que esté adentro pueda hacer sus cosas en paz y lo que esté afuera solo vea un objeto. Sin embargo, una serie de paréntesis es unidimensional, mientras que las burbujas generalmente son al menos bidimensionales. Eso significa que las burbujas son libres de moverse entre sí, siempre y cuando nunca se toquen o crucen entre el interior y el exterior de cualquier otra burbuja.
Reto
La entrada es una cadena de corchetes coincidentes de un solo tipo, ya sea redondo ()
, cuadrado []
, rizado {}
o en ángulo <>
. Depende de usted qué tipo desea que acepte su programa, y se acepta un programa que solo acepta un solo tipo de paréntesis. (Bonificación imaginaria si su programa puede manejar cualquiera de ellos, puntos de bonificación imaginarios masivos si puede manejarlos a todos en la misma entrada.) La entrada no puede contener nada entre los corchetes, aunque se permiten espacios en blanco finales.
La salida es todas las posibles reorganizaciones (en orden arbitrario, e incluyendo la entrada original) de esos corchetes que producen la misma configuración de burbujas, sin dos cadenas idénticas. Eso significa que con una entrada de ()()
, la salida también es justa ()()
, aunque técnicamente son dos burbujas que podrían intercambiar lugares. Para el bono imaginario masivo, una entrada de {}[]()
, por supuesto, dará lugar a una salida de 6 elementos / cadenas / líneas diferentes.
Dos configuraciones de burbujas son "iguales" si puede hacer una en la otra moviendo las burbujas, sin permitir que ninguna burbuja se cruce desde el interior de otra burbuja hacia afuera, o desde afuera hacia adentro. Si compara los paréntesis anidados con los árboles (cada par coincidente es un nodo, y cada par coincidente dentro es un subnodo, y cada par coincidente dentro hay un subnodo de esos nuevamente, y así sucesivamente) donde se ordenan los subnodos de cualquier nodo dado , entonces una única configuración de burbujas es un árbol donde los nodos están desordenados.
Cualquier formato de salida razonable servirá, como devolver una lista de cadenas o una lista de caracteres individuales o una sola cadena con algún tipo de espacio en blanco, o imprimir stdout
o stderr
con algún tipo de carácter de espacio en blanco visible (más comúnmente nueva línea o espacio) entre cada reorganización
Espacios finales para cada reorganización y elementos de nueva línea / lista vacía anteriores y posteriores antes y después de que se permita la salida real. Debe usar el mismo tipo de corchetes en su salida que acepta en su entrada. Aparte de los corchetes, las nuevas líneas y los espacios como se especifica aquí, y cualquier separador que use, no se debe imprimir nada (incluidos los caracteres invisibles / de ancho cero).
El puntaje es el número de bytes en el código; La cuenta más baja para cada idioma gana. Puede observar si obtiene un bono imaginario, ya sea regular o masivo, pero no afecta su puntaje. Las bonificaciones reales son demasiado difíciles de equilibrar correctamente.
Ejemplos de entrada-salida
Ejemplo 1:
Entrada:
()(())
Salida:
()(())
(())()
Ejemplo 2
Entrada:
(()())()()
Salida:
(()())()()
()(()())()
()()(()())
Ejemplo 3
Entrada:
(()(()))()
Salida:
((())())()
()((())())
(()(()))()
()(()(()))
((()))
en el ejemplo 1? o()()()
? Parece que le faltan permutaciones para cada entrada.