Hoy su desafío es producir todos los paréntesis completos posibles de una expresión.
Su entrada es una sola línea de ASCII imprimible que contiene uno o más términos separados por operadores. La entrada también puede contener espacios; debe ignorarlos. Un término es [a-zA-Z0-9]
, un operador es [^ ()a-zA-Z0-9]
. Puede suponer que la entrada siempre es válida.
Imprima todas las formas posibles de paréntesis completos de la expresión dada, separados por nuevas líneas con una nueva línea final opcional.
Hacer no :
- Términos entre paréntesis: solo entre paréntesis alrededor de los operadores.
- Reordenar los términos.
- Salida de cualquier espacio.
Ejemplo de entrada / salida:
N
N
a * b
(a*b)
x_x_0
(x_(x_0))
((x_x)_0)
a * b|c|d
(a*(b|(c|d)))
(a*((b|c)|d))
((a*b)|(c|d))
((a*(b|c))|d)
(((a*b)|c)|d)
El código más pequeño en bytes gana.
!
un operador? ¿Qué hay de↑
?!
se ajusta a la expresión regular, también lo hace↑
, sin embargo, no↑
puede ser parte de la entrada porque no es ASCII imprimible.Respuestas:
Pyth, 38 bytes
Pruébalo en línea.
Define una función recursiva que:
Luego se llama a la función con la cadena de entrada con espacios eliminados y los resultados se unen mediante nuevas líneas.
fuente
JavaScript (ES6),
208197 bytesExplicación
Utiliza una función recursiva que toma una matriz
[ t, o, t, o, etc... ]
y paréntesis de cada par de dos términos consecutivos,[ (tot), o, etc... ]
y repite este proceso hasta que solo haya un elemento en la matriz, luego filtra los valores duplicados.Prueba
Mostrar fragmento de código
fuente