Su desafío es minimizar el código Brainfuck , de acuerdo con estas reglas:
- Elimina todo lo que no sea uno de
+-><[].,
. - Para cualquier grupo de consecutiva
+
o-
caracteres, si la cantidad de+
s y-
s es la misma, eliminarlos. - Haga lo mismo que arriba, pero con
>
y<
. - Elimina las secuencias de los
+-><
personajes si no hacen nada. Por ejemplo, debes eliminar+>-<->+<
. (Este puede ser el más complicado y difícil de implementar). Asegúrese de no obtener ningún falso positivo, como+>-<+>-<
, que no debe eliminarse.
Casos de prueba:
Entrada
++++++[->++++++<]>. prints a $
[-]< resets tape
>,[>,]<[.<] reverses NUL terminated input string
++-->><< does nothing
Salida
++++++[->++++++<]>.[-],[>,]<[.<]
Entrada
Should disappear: ++>>+<+++<->-->-<<->-<
Should disappear: +++>-<--->+<
Should stay: +++>-<+>---<
Salida
+++>-<+>---<
Puede aceptar la entrada y salida de la manera que desee: stdin / stdout, una función, etc., pero la entrada puede no estar codificada.
Este es el código de golf , por lo que el código más corto en el recuento de personajes ganará.
+++>-<+>---<
? Se puede acortar para evitar movimientos innecesarios del puntero, pero el resultado esperado lo deja sin cambios. Mi comprensión basada en mirar tanto la pregunta como las respuestas es que Doorknob es genial con la especificación tomada libremente; debemos eliminar cualquier +-><
secuencia contigua no operativa como se indica explícitamente, y más allá de eso, es permisible hacer minificaciones adicionales como en su ejemplo ++>>++<<--
, y también podemos hacer reorganizaciones siempre que no cambien la funcionalidad del código, por ejemplo, >+<+
en +>+<
.
+>-<->+<
. (Este puede ser el más complicado y difícil de implementar). Asegúrate de no obtener ningún falso positivo, como +>-<+>-<
, que no debe eliminarse ". - esto es un poco vago
++>>++<<--
debería salir>>++<<
, y eso no estaba cubierto. Por favor agregue más casos de prueba.