¡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. :)
fuente
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][
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.
Respuestas:
Jalea ,
33 32 37 3534 byteserror encontrado, corrección horrible +5 bytes, mejor solución - 2 bytes, usando un truco de Adnan que vi aquí por -1 más.
Valores de retorno:
(La entrada no válida devuelve resultados espurios, aunque es válido Brain-flack, vuelve
[]
)Pruébalo en línea! - un conjunto de pruebas (imprime representaciones desordenadas,
20
porlo tanto[2,0]
, e ignora las líneas que contienen alguna-
).fuente
Retina ,
414041 bytes1 byte guardado gracias a @MartinEnder
Pruébalo en línea!
1
0
10
01
Ediciones
fuente
[]})>]
Guarda un byte.(][)
. Creo que se puede arreglar a un costo de un byte cambiando101
a...+
.Both
así10
es la única combinación válida paraBoth
.Lote, 337 bytes
Salidas
]
para anteponer,[
para agregar,][
para ambos,[]
para ninguno.fuente
Haskell ,
115108bytesEDITAR:
Pruébalo en línea!
Utilizar como
(""#) "))"
. Los resultados se dan como:Cómo funciona
s#d
analiza una cadena restanted
, dada una cadena / pilas
de corchetes de cierre esperados.s#""
línea verifica si se han encontrado todos los corchetes de cierre al final de la cadena; de lo contrario, es necesario agregarlos.s#(c:d)
cheques si el siguiente carácterc
es un paréntesis de apertura, y si es así, deja el paréntesis de cierre correspondiente en la pila para la recursividad.fuente
Japt , 44 bytes
Salidas
1
para prependable,3
para appendable,13
para ambos y31
para ninguno.¡Pruébelo en línea! o Verifique todos los casos de prueba a la vez.
Cómo funciona
fuente
PHP, 137 bytes
1 => anexable,
2 => prependable,
12 => ambos,
0 => ninguno
Casos de prueba
fuente