¡Brain-Flak cumple un año mañana! En honor a su cumpleaños, tenemos una fiesta de cumpleaños al estilo PPCG, ¡donde varios usuarios publican preguntas relacionadas con el cerebro! ¡Ayúdanos a celebrar! :)
Brain-flak es un lenguaje esotérico que escribí donde todos los comandos son paréntesis y todos los paréntesis deben coincidir completamente. Para tomar prestada mi propia definición :
A los efectos de este reto, un "soporte" es cualquiera de los siguientes caracteres:
()[]{}<>
.Un par de paréntesis se considera "coincidente" si los paréntesis de apertura y cierre están en el orden correcto y no tienen caracteres dentro de ellos, como
() []{}
O si cada subelemento dentro de él también coincide.
[()()()()] {<[]>} (()())
Los subelementos también se pueden anidar en varias capas de profundidad.
[(){<><>[()]}<>()] <[{((()))}]>
Una cadena se considera "Totalmente coincidente" si y solo si:
Cada personaje es un paréntesis,
Cada par de soportes tiene el soporte de apertura y cierre correcto y en el orden correcto
Para celebrar el primer cumpleaños de Brain-Flak, el desafío de hoy es tomar un par de paréntesis desequilibrados y determinar qué tipos de operaciones son necesarias para que sea válido.
Por ejemplo,
((
no es un código válido de ataque cerebral, pero si lo agregamos))
, se convierte en(())
un equilibrio completo y, por lo tanto, un ataque cerebral válido. Eso hace que esta entrada sea accesible .Del mismo modo,
>}
no es válido, pero podemos anteponerlo{<
a hacer{<>}
, que es válido. Eso hace que esta entrada sea prependable .Algunas entradas son un poco más complicadas. Por ejemplo,
)][({
no puede hacerse válido simplemente agregando o anteponiendo. Pero puede hacerse válido anteponiendo[(
y agregando})]
. Por lo tanto, esta entrada es a la vez prependable y appendable .Por último, algunas entradas nunca se pueden convertir en un código válido de brain-flak mediante una combinación de agregar o anteponer. Por ejemplo,
(>
nunca se puede hacer válido. (Prepending<
crea<(>
, y anexar)
crea(>)
, ninguno de los cuales son válidos) Por lo tanto, esta entrada no es ni agregar nada o prependable.
Para el desafío de hoy, debe escribir un programa o función que tome una cadena de corchetes y determine si la cadena es
appendable
prependable
both
neither
Puede elegir qué valores usar para representar para cada caso. Por ejemplo, generar 1, 2, 3, 4
, o 'a', 'p', 'b', 'n'
, o 1, 'foo', 3.1415, -17
, o lo que sea que esté bien. Mientras cada salida sea distinta y consistente , está bien. Usted debe , sin embargo, especificar claramente lo que corresponde a la salida cuyo caso.
Puede devolver este valor en el formato que sea más conveniente (por ejemplo, regresar de una función, imprimir en STDOUT, modificar argumentos, escribir en un archivo, etc.).
Puede suponer que la entrada nunca será válida para el cerebro o vacía.
Ejemplos
Las siguientes entradas son todas prependable :
))
(((()()())))}
)>}]
()[]{}<>)
Todos estos son anexables :
(({}{})
((((
([]()())(
{<<{
Estos son todos los dos :
))((
>()[(()){
>{
Y estos son todos no :
)(}
{(((()()()))>
[}
((((((((((>
((((((((((<>()]
Como de costumbre, este es el código de golf , por lo que se aplican las lagunas estándar, ¡y gana la respuesta más corta en bytes!
Este desafío es particularmente difícil en brain-flak, por lo que el máximo brownie apunta a todas y cada una de las respuestas escritas en brain-flak. :)
][
es , no puede agregar nada, como nada puede anexar puede hacer que sea válida. Del mismo modo, no es prependable. ¡Es ... 'insertable'! Puede insertarlo en una cadena para hacer que todo Brainflak sea válido.
You can assume that the input will never be valid brain-flak or empty.
maximum brownie points
Creo que ofrecer máximos puntos de brownie y galletas en su lugar alentaría Brain-Flaking este desafío más que solo puntos de brownie, ya que no creo que sea trivial en ningún idioma, y mucho menos Brain-Flak. : P