Tengo un programa que genera código Brainfuck formateado. Ejecuto mi programa
./example "S"
y la salida es
+[>+
<
+++
]
>--.
que imprime S en Brainfuck.
Su objetivo es escribir un programa que acepte una cadena como entrada y salida del código fuente en otro idioma que imprima esa cadena.
- El código fuente que genera su programa debe formatearse de tal manera que represente la cadena en el arte ASCII (impreso horizontalmente, no verticalmente).
- El código fuente no puede contener la cadena (sin embargo, puede contener letras que aparecen en la cadena, pero no secuencialmente)
De otra manera,
- Se aplican lagunas estándar .
- El código más corto gana.
Titula tu envío con el idioma en el que está escrito, el idioma que genera y el tamaño total en bytes. Incluya la salida de su programa cuando ingrese la cadena UNCOPYRIGHTABLE.
¡Gracias!
Respuestas:
C -> Brainfuck 556 Bytes
Excluyendo espacios en blanco innecesarios. Podría ahorrar fácilmente otros cien cambiando los datos de la fuente
d[]
de hexadecimal a una cadena entre comillas.Utiliza una fuente de calculadora (para baja entropía, solo un byte por letra) y un compilador Brainfuck muy ingenuo inspirado en https://codegolf.stackexchange.com/a/35801/15599 (excepto que uso más en lugar de menos). primer
for
bucle compila el texto ena
la cadenab
y también calcula el número de trazos necesarios para dibujar el código formateado, utilizando el número mágico hexadecimal de 13 dígitos (todos los caracteres son 5-8 trazos).Dada la longitud total del programa y el recuento de trazos, se calcula el número de caracteres por trazo (esto puede ser muy pequeño si los caracteres son iguales o en orden ascendente, y muy grande si los caracteres están en orden descendente).
La mayor parte del resto del programa se dedica a decidir si se debe imprimir un espacio en blanco o uno de los trazos. Si el cursor está sobre un cuadrado de trazo, la función
f
se llama con el número de ese trazo como argumento. Devuelve un espacio si ese trazo no es necesario para la letra actual, o un carácter del programa si lo es. Debido a que el número de caracteres necesarios para completar el arte ASCII puede ser mayor que los caracteres en el programa, ocasionalmente se inserta un espacio, de ahí el cálculob[i * v/u]
.Hay cuatro trazos simples y cuatro trazos dobles en la fuente, numerados de la siguiente manera, que están presentes o ausentes, dependiendo de la letra.
Salida
Prueba en http://copy.sh/brainfuck/
A B C
DEF
GHIJK
LMNOP
QRSTU
V W X Y Z
COPIAABLE
Con la mayoría de las cadenas con letras en orden aleatorio (no ascendente), el tamaño de la letra es mucho mayor y las letras se ven mucho mejor. Lamentablemente, el tamaño de los archivos es bastante grande. No puedo cargar la palabra completa UCOPYRIGHTABLE aquí, COPYABLE es la palabra más larga que se me permite.
fuente
Perl → Befunge, 868 bytes
OK, voy a hacer rodar la pelota. Esto podría reducirse un poco más, pero mi cabeza está empezando a doler ...
Ejemplos:
Los ejemplos más cortos se pueden copiar y pegar en intérpretes en línea como este , pero UNCOPYRIGHTABLE parece dar como resultado un programa que es demasiado largo para todos los intérpretes en línea.
Nota:
El
@
personaje al final de la primera línea de salida le dice a Befunge que deje de correr. Sin él, el programa seguiría repitiendo la misma palabra para siempre.fuente
C → Brainfuck, 855 bytes
Se agregaron algunas líneas nuevas para mejorar la legibilidad. Observe que está predeterminado en letras minúsculas y símbolos. Prueba la salida aquí .
Ejemplos
Se ve mucho mejor en una terminal :(
Y finalmente,
fuente