Crescendo, il mio primo sistema di gioco per console è stato un Atari 2600 e avrò sempre l'amore per alcuni di quei giochi che mi sono divertiti tanto da bambino. Molte grafiche sono ancora memorabili, forse anche iconiche.
Si scopre che questi sprite sono bitmap molto semplicistiche, larghe 8 pixel con altezza variabile in cui la rappresentazione binaria è la disposizione dei pixel.
Ad esempio, i byte esadecimali 0x18, 0x24, 0x18 disegnerebbero un cerchio grezzo in questo modo:
0x18: 00011000
0x24: 00100100
0x18: 00011000
Poiché la larghezza di 8 pixel crea una grafica abbastanza piccola (anche secondo gli standard Atari 2600) era comune raddoppiare o quadruplicare l'altezza, la larghezza o entrambi per creare una versione più grande (anche se più bloccata e distorta) della stessa immagine. Normalmente sarebbero anche capovolti verticalmente o orizzontalmente sia per gli sprite dei giocatori che per i campi di gioco. Il gioco Combat ne è un buon esempio.
La sfida è scrivere codice per visualizzare questi sprite come "grafici" in forma ASCII, inclusa la possibilità di allungarli o capovolgerli verticalmente, orizzontalmente o entrambi. Questo deve essere sotto forma di un programma completo o di una funzione richiamabile.
Ingresso:
- Una matrice di byte, ognuno dei quali rappresenta i bit orizzontali per quella linea.
- Un valore intero diverso da zero per ciascuna direzione, orizzontale e verticale che rappresenta il fattore di ridimensionamento per quella dimensione.
- Un valore negativo indica che anche la dimensione deve essere capovolta lungo il suo asse.
Produzione:
- Rappresentazione ASCII in STDOUT o una stringa separata da una nuova riga, usando un carattere spazio per i pixel neri (0) e qualsiasi carattere non spaziale stampabile di tua scelta per i pixel bianchi (1).
Dati di test:
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: sopra l'esempio, gli array di input di byte sono forniti come esadecimali. Se la tua piattaforma non accetta valori letterali esadecimali per la rappresentazione di byte, puoi convertirli in valori letterali nativi equivalenti a byte.
Esempio di output:
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: le linee orizzontali sopra e sotto mostrano l'inizio e la fine dell'output. Non sono richiesti nell'output, tuttavia sono richieste righe vuote (rappresentate da tutti gli zeri / spazi) all'inizio e / o alla fine, come mostrato.
Nota 2: queste bitmap di prova sono state ispirate e rielaborate / codificate sulla base di schermate di gioco contrassegnate come "fair use" su Wikipedia.
Criteri vincenti
- Questo è code-golf , quindi vince il codice più breve in byte per lingua.
- Sono vietate le scappatoie standard .

