Al crecer, mi primer sistema de consola fue un Atari 2600 y siempre me encantarán algunos de esos juegos que tanto disfruté cuando era niño. Muchos de los gráficos siguen siendo memorables, quizás incluso icónicos.
Resulta que estos sprites son mapas de bits muy simplistas, de 8 píxeles de ancho con altura variable, donde la representación binaria es la disposición de los píxeles.
Por ejemplo, los bytes hexadecimales 0x18, 0x24, 0x18 dibujarían un círculo burdo así:
0x18: 00011000
0x24: 00100100
0x18: 00011000
Como 8 píxeles de ancho crea gráficos bastante pequeños (incluso para los estándares Atari 2600) era común duplicar o cuadruplicar la altura, el ancho o ambos para crear una versión más grande (aunque más bloqueada y distorsionada) de la misma imagen. Comúnmente, también serían volteados vertical u horizontalmente para los sprites y campos de juego de los jugadores. El juego Combat es un buen ejemplo de esto.
El desafío es escribir código para mostrar estos sprites como "gráficos" en forma ASCII, incluida la capacidad de estirarlos o voltearlos verticalmente, horizontalmente o ambos. Esto debe ser en forma de programa completo o función invocable.
Entrada:
- Una matriz de bytes, cada uno representando los bits horizontales para esa línea.
- Un valor entero distinto de cero para cada dirección, horizontal y vertical que representa el factor de escala para esa dimensión.
- Un valor negativo indica que la dimensión también debe invertirse a lo largo de su eje.
Salida:
- Representación ASCII a STDOUT o una cadena separada por una nueva línea, utilizando un carácter de espacio para píxeles negros (0) y cualquier carácter imprimible que no sea espacio de su elección para píxeles blancos (1).
Datos de prueba:
bmp1 = [ 0x06, 0x0F, 0xF3, 0xFE, 0x0E, 0x04, 0x04, 0x1E, 0x3F, 0x7F, 0xE3, 0xC3, 0xC3, 0xC7, 0xFF, 0x3C, 0x08, 0x8F, 0xE1, 0x3F ]
bmp2 = [ 0x07, 0xFD, 0xA7 ]
bmp3 = [ 0x00, 0x8E, 0x84, 0xFF, 0xFF, 0x04, 0x0E, 0x00 ]
bmp4 = [ 0x00, 0xFC, 0xFC, 0x38, 0x3F, 0x38, 0xFC, 0xFC]
Nota: Las matrices de entrada de bytes del ejemplo anterior se proporcionan como hexadecimales. Si su plataforma no acepta literales hexadecimales para la representación de bytes, puede convertirlos a un literal nativo equivalente a bytes.
Salida de ejemplo:
f( bmp1, 1, 1 ) =>
--------
XX
XXXX
XXXX XX
XXXXXXX
XXX
X
X
XXXX
XXXXXX
XXXXXXX
XXX XX
XX XX
XX XX
XX XXX
XXXXXXXX
XXXX
X
X XXXX
XXX X
XXXXXX
--------
f( bmp1, -2, 1 ) =>
----------------
XXXX
XXXXXXXX
XXXX XXXXXXXX
XXXXXXXXXXXXXX
XXXXXX
XX
XX
XXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXX XXXXXX
XXXX XXXX
XXXX XXXX
XXXXXX XXXX
XXXXXXXXXXXXXXXX
XXXXXXXX
XX
XXXXXXXX XX
XX XXXXXX
XXXXXXXXXXXX
----------------
f( bmp2, 1, 2 ) =>
--------
XXX
XXX
XXXXXX X
XXXXXX X
X X XXX
X X XXX
--------
f( bmp2, 2, 1 ) =>
----------------
XXXXXX
XXXXXXXXXXXX XX
XX XX XXXXXX
----------------
f( bmp2, -2, -2 ) =>
----------------
XXXXXX XX XX
XXXXXX XX XX
XX XXXXXXXXXXXX
XX XXXXXXXXXXXX
XXXXXX
XXXXXX
----------------
f( bmp3, 1, -1 ) =>
--------
XXX
X
XXXXXXXX
XXXXXXXX
X X
X XXX
--------
f( bmp3, 3, 3 ) =>
------------------------
XXX XXXXXXXXX
XXX XXXXXXXXX
XXX XXXXXXXXX
XXX XXX
XXX XXX
XXX XXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXX
XXX
XXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
------------------------
f( bmp4, -1, -1 ) =>
--------
XXXXXX
XXXXXX
XXX
XXXXXX
XXX
XXXXXX
XXXXXX
--------
f( bmp4, 4, 2 ) =>
--------------------------------
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX
--------------------------------
Nota: las líneas horizontales arriba y abajo deben mostrar el comienzo y el final de la salida. No se requieren en la salida, sin embargo, se requieren líneas vacías (representadas por todos los ceros / espacios) al principio y / o al final, como se muestra.
Nota 2: estos mapas de bits de prueba se inspiraron y se volvieron a dibujar / codificar en base a capturas de pantalla del juego etiquetadas como "uso justo" en Wikipedia.
Criterios ganadores
- Este es el código de golf , por lo que gana el código más corto en bytes por idioma.
- Las lagunas estándar están prohibidas.