En esta fuente pixelada de letras mayúsculas del alfabeto, todos los caracteres tienen 5 unidades de ancho y 5 de alto.
███ ████ ███ ████ █████ █████ ████ █ █ █████ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ██ ██
█████ ████ █ █ █ ████ ████ █ ██ █████ █ █ ███ █ █ █ █
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ ████ ███ ████ █████ █ ████ █ █ █████ ███ █ █ █████ █ █
█ █ ███ ████ ███ ████ ████ █████ █ █ █ █ █ █ █ █ █ █ █████
██ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ █ █ █ ████ █ █ ████ ███ █ █ █ █ █ █ █ █ █ █ █
█ ██ █ █ █ █ ██ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █ ███ █ ████ █ █ ████ █ ███ █ █ █ █ █ █ █████
También hay 1 unidad de espacio entre letras y entre líneas, como se puede ver. Por lo tanto, cada letra puede ocupar hasta 6 × 6 unidades de espacio.
Supongamos que en lugar de usar el carácter de bloque completo (█
) para formar directamente las formas de las letras, deseamos utilizar otras letras en la misma fuente . Esto implica aumentar las dimensiones del texto 6 veces para que las letras hechas de bloques completos se puedan usar como reemplazos de bloques completos en el texto más grande.
Si eso no tiene sentido, espero que este ejemplo lo haga. Aquí hay una A hecha de B usando la fuente pixelada:
████ ████ ████
█ █ █ █ █ █
████ ████ ████
█ █ █ █ █ █
████ ████ ████
████ ████
█ █ █ █
████ ████
█ █ █ █
████ ████
████ ████ ████ ████ ████
█ █ █ █ █ █ █ █ █ █
████ ████ ████ ████ ████
█ █ █ █ █ █ █ █ █ █
████ ████ ████ ████ ████
████ ████
█ █ █ █
████ ████
█ █ █ █
████ ████
████ ████
█ █ █ █
████ ████
█ █ █ █
████ ████
Las B están hechas de bloques completos y la A está hecha de B. Observe que las B todavía tienen una unidad entre ellas horizontal y verticalmente.
Podemos extender esta idea usando palabras en lugar de solo letras. Aquí está "AGUA" hecha de "FUEGO":
█████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████ █ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █
█████ █████ ████ █████ █████ █████ ████ █████
█ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████
█ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████
█████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████ █████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████ █
█████ █████ ████ █████ █████ █████ ████ █████ █████
█ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████
█ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █
█████ █████ ████ █████ █████ █████ ████ █████ █████ █████ ████ █████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █
████ █ ████ ████ ████ █ ████ ████ ████ █ ████ ████
█ █ █ █ █ █ █ █ █ █ █ █ █ █ █
█ █████ █ █ █████ █ █████ █ █ █████ █ █████ █ █ █████
Observe cómo aparece "FUEGO" repetidamente en cada línea, y siempre en orden, sin importar cuánto espacio haya entre las letras. Tres de los casos más correctos de "FUEGO" se cortaron temprano debido a la forma en que se forman las letras de "AGUA".
Esta idea se puede ampliar aún más, usando estas palabras hechas de palabras para hacer palabras hechas de palabras hechas de palabras , o incluso palabras hechas de palabras hechas de palabras hechas de palabras . No hay límite teóricamente.
Otro ejemplo pondría esta publicación por encima del límite de 30k caracteres, pero puede ver lo que se entiende por "palabras hechas de palabras hechas de palabras" ejecutando este ingenioso fragmento de pila. Simplemente deje los parámetros en sus valores predeterminados y presione "Ir". Debería ver la palabra "PERRO" hecha de la palabra "GATO" hecha de la palabra "RATÓN".
Escribir cualquier lista de palabras separadas por espacios que contengan solo letras mayúsculas en el cuadro de texto, se producirá la primera palabra hecha de la segunda palabra hecha de la tercera, hecha de la cuarta, hecha de ... etc.
ADVERTENCIA: Ingresar más de 4 o incluso 3 palabras producirá MUCHO texto y TOMARÁ MUCHO tiempo. Puede bloquear su navegador / computadora / automóvil.
Desafío
El objetivo de este desafío es reflejar lo que hace el Fragmento de pila en la menor cantidad de personajes.
Debe escribir un programa que tome una cadena de palabras separadas por espacios que contengan solo letras mayúsculas, y genere la primera palabra "hecha de" la segunda "hecha de" la tercera y así sucesivamente, utilizando la fuente pixelada dada anteriormente.
La casilla de verificación "ASCII simple" y las características de tamaño de fuente del fragmento no necesitan ser compatibles con su programa. Reflejar la transformación de listas de palabras a palabras hechas de palabras es el punto principal y el único requisito.
Detalles
La entrada debe provenir de stdin, la línea de comando, o simplemente puede escribir una función que tome una cadena.
Puede suponer que la entrada siempre es válida, es decir, una cadena de palabras hechas con mayúsculas, separadas exactamente por un espacio, sin espacios iniciales ni finales.
La salida debe ir a stdout (o una alternativa similar) o a un archivo con el nombre de su elección.
La salida debe consistir enteramente en caracteres de espacio vacío , caracteres de espacio completo , y saltos de línea.
- Los caracteres vacíos / de espacio completo deben ser espacio y bloque completo (
,
█
) respectivamente, o punto y X (.
,X
) respectivamente.
- Los caracteres vacíos / de espacio completo deben ser espacio y bloque completo (
La salida no debe contener ninguna columna inicial que contenga solo caracteres de espacio vacío , aunque se permite cualquier combinación de caracteres finales de espacio vacío en cualquier línea.
Entonces esto está permitido:
X...X.XXXXX.. X...X.X X.X.X.XXXX.... X.X.X.X.. .X.X..XXXXX..
Pero esto no es:
.X...X.XXXXX.. .X...X.X .X.X.X.XXXX.... .X.X.X.X.. ..X.X..XXXXX..
No debe haber filas iniciales o finales que contengan solo caracteres de espacio vacío . Opcionalmente, se permite una nueva línea final.
Aquí hay una versión de la fuente más amigable con las cadenas:
.XXX.
X...X
XXXXX
X...X
X...X
XXXX.
X...X
XXXX.
X...X
XXXX.
.XXX.
X...X
X....
X...X
.XXX.
XXXX.
X...X
X...X
X...X
XXXX.
XXXXX
X....
XXXX.
X....
XXXXX
XXXXX
X....
XXXX.
X....
X....
.XXXX
X....
X..XX
X...X
.XXXX
X...X
X...X
XXXXX
X...X
X...X
XXXXX
..X..
..X..
..X..
XXXXX
....X
....X
....X
X...X
.XXX.
X...X
X..X.
XXX..
X..X.
X...X
X....
X....
X....
X....
XXXXX
X...X
XX.XX
X.X.X
X...X
X...X
X...X
XX..X
X.X.X
X..XX
X...X
.XXX.
X...X
X...X
X...X
.XXX.
XXXX.
X...X
XXXX.
X....
X....
.XXX.
X...X
X...X
X..XX
.XXXX
XXXX.
X...X
XXXX.
X..X.
X...X
.XXXX
X....
.XXX.
....X
XXXX.
XXXXX
..X..
..X..
..X..
..X..
X...X
X...X
X...X
X...X
.XXX.
X...X
X...X
.X.X.
.X.X.
..X..
X...X
X...X
X.X.X
X.X.X
.X.X.
X...X
.X.X.
..X..
.X.X.
X...X
X...X
.X.X.
..X..
..X..
..X..
XXXXX
...X.
..X..
.X...
XXXXX
Puntuación
Este es el código de golf, por lo que gana el envío más corto en bytes . Cualquier instancia de un bloque completo ( █
) se puede contar como 1 byte en lugar de 3, por lo que los envíos que se usan X
no tienen una ventaja.
fuente
javascript:
En la barra de URL y pegarlo) para hacer que el arte ASCII aquí mucho, mucho más fácil de leer:$('#question pre').css('line-height',1)
. Resultado: i.stack.imgur.com/XmB8C.png$('#question pre, .answer pre').css('line-height',1)
Respuestas:
CJam,
171 165 162161 bytesEstoy tratando
█
como 1 byte. El resto todos los caracteres están dentro del rango ASCII, por lo que también los trata como 1 byte.Puedes usar este pastebin para el código exacto
Ejemplo de salida para entrada:
Cómo funciona
Ante todo
es simplemente el patrón para cada uno de los 27 caracteres (
A-Z
y espacio) que se compone de0
(en lasX
posiciones) y1
(en las.
posiciones). Después de la decodificación, esto proporciona una matriz de 27 elementos de matrices 2D de 5 filas y 5 columnas que representanX
y.
para cada uno de los 27 caracteres. Llamemos a esta matriz comoL
.Ahora el código restante:
Pruébalo en línea aquí
fuente
Python 3, 437 bytes
Las formas de los caracteres están codificadas en ASCII. Cada byte ASCII corresponde a una fila de un carácter, con bits que representan bloques de unidades. No es un esquema muy eficiente, pero es fácil de descomprimir en máscaras de bits NumPy para cada personaje.
Comenzamos con una matriz 2d de 1s. Tiene una columna para cada carácter en la primera palabra y una sola fila. Luego, para cada palabra, creamos una nueva matriz de 0, seis veces más alta y seis veces más ancha que la matriz anterior. Cuando la matriz anterior tenía un 1, la sección correspondiente de 6x6 de la nueva matriz se llena con la máscara de bits del personaje apropiado.
Aquí hay un ejemplo (con una fuente extremadamente pequeña):
fuente
CJam,
181174170 bytesTodos esos caracteres no ASCII todavía están dentro del rango ASCII extendido, por lo que todos pueden codificarse en un solo byte. (Excepto por el
█
, pero ese es tratado especialmente de acuerdo con la especificación de desafío.) Por lo tanto, cuento cada personaje como un byte.Stack Exchange probablemente ha destrozado algunos de los caracteres no imprimibles, por lo que es posible que deba copiar el código de este pastebin .
Pruébalo aquí.
Toma entrada a través de STDIN como una lista de palabras separadas por espacios. La primera palabra es la escala más grande. Por ejemplo:
rendimientos
Explicación
Primero, almacenamos una tabla de búsqueda para formas de letras en
L
:La primera cadena es solo un número comprimido. Tratamos los puntos de código como dígitos de base 257, luego convertimos el número resultante a binario.
YYb
is 2 está en la base 2, entonces da[1 0]
. Usamos sustitución de elementos con" █"
para convertir los dígitos en espacios y bloquear caracteres. Por último, dividimos la cadena en filas de 5 caracteres, y nuevamente en bloques de 5 filas. El resultado se almacenaL
y se descarta de la pila.Ahora, la idea general es comenzar con una sola línea
█
de la longitud de la palabra de mayor escala. Y luego, para cada palabra, pasamos por la cuadrícula existente y expandimos todos los bloques al carácter correspondiente en la siguiente escala más pequeña (al insertar filas y columnas vacías para la separación). Aquí está la preparación de entrada:Veamos primero la estructura más externa del programa restante. El siguiente bloque
{...}/
se ejecuta para cada palabra y expande cada uno de los caracteres del bloque.Por último, veamos cómo se expande una sola línea:
El resultado se imprime automáticamente al final del programa.
fuente