¡Probado óptimo!
((([()][()][()])))
Pruébalo en línea!
Explicación
Brain-Flak, Brain-Flueue, Miniflak y Fλak
([()][()][()]) Push -3
( ) Copy
( ) Copy
Esto imprime:
-3
-3
-3
(Hay una nueva línea al final)
Brain-Flak Classic
Brain-Flak Classic es la versión original de Brain-Flak y tiene algunas diferencias importantes con respecto a Brain-Flak moderno. En BFC [...]
imprime su contenido en lugar de negarlo.
[()] Print 1
[()] Print 1
[()] Print 1
( ) Push 3
( ) Push 3
( ) Push 3
Al final de la ejecución 3 3 3
se imprime el contenido de la pila ( ).
Esto imprime:
1
1
1
3
3
3
(Hay una nueva línea al final)
Flakcats
Flakcats es bastante diferente de los otros 4 flaks y me sorprende que esto funcione en Flakcats. Los tres operadores aquí son casi los mismos que utiliza Brain-Flak.
La principal diferencia en este programa particular entre Flakcats es el (...)
operador que en Flakcats es equivalente a ([{}]...)
Brain-Flak. Sin embargo, esto no hace una diferencia para nosotros porque capta ceros y, por lo tanto, funciona de la misma manera que Brain-Flak.
Aquí está ese programa compilado en Brian-Flak:
([{}]([{}]([{}][()][()][()])))
Esto imprime:
-3
-3
-3
(Hay una nueva línea al final)
Prueba de optimización en Brain-Flak y Miniflak
Esta no es una prueba formal, sino más bien una prueba informal que debería ampliarse para ser más rigurosa.
Debido a las restricciones de que los programas Brain-Flak deben ser una cadena equilibrada y la longitud del programa debe ser un múltiplo de 3, cualquier envío válido debe ser un múltiplo de 6 de longitud. Esto significa que cualquier solución menor de 18 debe tener una longitud de 12.
Debido a que las salidas siguen a la nueva línea, la altura final de la pila debe ser un múltiplo de tres o romperemos las restricciones de salida.
Cualquier presentación válida de longitud 12 debe tener 2 tipos de llaves (tener menos rompería las restricciones en el número de caracteres distintos y más significaría más de 12 caracteres). Como el programa produce resultados, debe tener un impulso.
Esto nos deja para seleccionar nuestro otro conjunto de llaves. Las opciones son:
<...>/<>
Esto falla porque necesitamos generar un "valor" para crear cualquier número que no sea cero, debemos renunciar a un ()
para crear uno que hace imposible empujar más de dos veces.
[...]/[]
Esto falla por la misma razón que la última falla. Los corchetes son realmente malos para hacer valor. La []
mónada puede crear valor, pero primero debemos presionar los números y luego no tenemos suficientes parentes para presionar tres veces.
{...}/{}
Este es prometedor, podríamos crear un bucle y usar uno ()
para presionar varias veces, pero lamentablemente no es posible.
Para que el ciclo finalice, debe haber un cero en la pila en algún momento y para que tengamos la salida correcta, debemos tener algo distinto de cero en la pila al final del programa. Como no tenemos []
ni <>
el cero al final del ciclo, debe ser un cero implícito desde el fondo de la pila. Esto significa que el ciclo no puede agregar ningún número nuevo a la pila, por lo que es inútil.
Como ninguna de las opciones de llaves puede crear un programa de longitud 12, ninguna puede existir.
Dado que Miniflak es un subconjunto de Brain-Flak, cualquier programa Miniflak más corto también sería un programa Brain-Flak más corto y, por lo tanto, no existe.
Brain-Flueue es un lenguaje de broma basado en Brain-Flak. Los dos son tan similares que sus intérpretes son idénticos en todas partes excepto en dos líneas. La diferencia entre los dos es, como sugieren sus nombres, Brain-Flueue almacena sus datos en colas mientras Brain-Flak almacena sus datos en pilas.
Para comenzar, tenemos las mismas restricciones en el tamaño del programa creado por Brain-Flak, por lo que estamos buscando un programa de tamaño 12. Además, necesitaremos un (...)
para crear cualquier salida y otro par. los pares <>
y []
no funcionan en Brain-Flueue por la misma razón por la que no funcionan en Brain-Flak.
Ahora sabemos que nuestro programa debe consistir en los personajes ((())){{{}}}
.
Mediante los mismos métodos utilizados en la prueba anterior, podemos demostrar que debe haber un bucle en el programa final.
Ahora aquí es donde las pruebas difieren, porque Brain-Flueue opera en colas en lugar de pilas, el programa puede salir de un bucle con valores en la cola.
Para salir del bucle, necesitaremos un cero en la cola (o una cola vacía, pero si la cola está vacía tenemos el mismo problema que Brain-Flak), esto significa que tendremos que abrir nuestro programa ({})
para crear el cero. Necesitaremos un empuje dentro del bucle para empujar la cantidad necesaria de elementos a la cola. También necesitaremos empujar un número distinto de cero antes del ciclo para que podamos ingresar al ciclo; Esto nos costará al mínimo absoluto (())
. Ahora hemos usado más parens que los que tenemos.
Por lo tanto, no existe un programa Brain-Flueue para realizar la tarea que tenga 12 bytes, y además nuestro programa es óptimo.
La siguiente solución es óptima en Flakcats y Brain-Flak Classic.
((([][][])))
Explicación
[][][] -3
((( ))) push 3 times
Soluciones alternativas de 24 bytes Brain-Flak
(<((<((<(())>)())>)())>)
Pruébalo en línea!
((<((<((<>)())>)())>)())
Pruébalo en línea!
((((((()()()){}){}){})))
Pruébalo en línea!