Alguien nos ha dado una cadena, pero todos los caracteres parecidos a corchetes se han cambiado a los normales, y no sabemos cuál, o incluso cuántos, había. Todo lo que sabemos es que si L1,L2,L3,...,LN
fueran diferentes tipos de corchetes izquierdos y R1,R2,R3,...,RN
fueran diferentes tipos correspondientes de corchetes derechos, todos ellos distintos (2N caracteres de corchetes distintos), una cadena sería válida si es uno de (+ es la concatenación de cadena normal):
L1+X+R1
,L2+X+R2
, ...,LN+X+RN
, dondeX
es una cadena válida,X+Y
, dondeX
yY
son cadenas válidas,Cualquier carácter único que no sea un carácter de paréntesis.
La cadena vacía
Sabemos que comenzaron con una cadena válida antes de cambiar los corchetes, y no los cambiaron a ningún carácter que ya existiera en la cadena. También existía al menos un par para cada soporte. ¿Puedes reconstruir qué caracteres eran originalmente pares de paréntesis izquierdo y derecho (encuentra las siguientes condiciones Li
y las Ri
siguientes)?
Salida de los pares de caracteres que fueron corchetes. Por ejemplo, si (){}[]
en realidad fueron entre paréntesis caracteres, es posible que la salida (){}[]
o {}[]()
, o [](){}
, etc. Puede haber varias maneras de hacer esto para una cadena, solo tiene que devolver uno de tal manera que no hay una asignación de soporte con más pares (ver ejemplos). Tenga en cuenta que la cadena de salida siempre debe tener una longitud par.
Ejemplos:
abcc
- c
no puede ser un paréntesis, ya que no hay otro carácter con dos ocurrencias, pero ab
puede ser un par de paréntesis, por lo que se generará exactamente ab
.
fffff
- cualquier cadena con un carácter como máximo no puede tener corchetes, por lo que devolvería la cadena vacía o no generaría nada.
aedbedebdcecdec
- esta cadena no puede tener corchetes porque hay 1 a, 2 bs, 3 cs, 4 ds y 5 es, por lo que no hay dos caracteres el mismo número de veces, lo cual es un requisito para tener corchetes.
abcd
- asignaciones posibles son ab
, cd
, abcd
, cdab
, adbc
, bcad
, ac
, ad
, bc
y bd
, (así como la asignación de vacío, que todos ellos tienen), pero debe devolver una de las tareas más largas, por lo que debe regresar abcd
, cdab
, adbc
, o bcad
.
aabbcc
, abc
- estos dos tienen ab
, ac
y bc
como pares válidos. Debe devolver uno de estos pares, no importa cuál.
abbac
- ayb tienen el mismo número de caracteres, pero en realidad no pueden funcionar, ya que uno de ellos ocurre tanto a la izquierda como a la derecha de todos los sucesos del otro. No devuelvas nada.
aabcdb
- cd
y ab
son los dos pares de paréntesis exactos, por lo tanto, imprima cdab
o abcd
.
abcdacbd
- sólo un par se puede lograr a la vez, pero ab
, ac
, bd
, cd
, y ad
son todos los pares posibles que puede devolver. No importa qué par elijas, tiene una instancia en la que hay un único personaje dentro de él, lo que prohíbe cualquier otro par, excepto en el caso de ad
que los otros pares bc
y cb
tampoco sean posibles solos, por lo que no puede ser posible con ad
.
Este es el código de golf, por lo que gana el código más corto en bytes. La entrada es de STDIN si es posible para su idioma. Si no es posible, indique el método de entrada en su respuesta.
fuente
abcd
, la salidaadbc
también sería aceptable, ¿verdad?Respuestas:
Rubí, 373 bytes
Esto usa una versión de golf del analizador de pila aquí .
Probablemente se pueda simplificar aún más, pero no creo que mi cerebro pueda soportar más.
Todos los casos de prueba: http://ideone.com/gcqDkK
Con espacios en blanco: http://ideone.com/pLrsHg
Sin golf (principalmente): http://ideone.com/oM5gKX
fuente