Виростаючи, моєю першою консольною ігровою системою був Atari 2600, і я завжди буду любити деякі з тих ігор, які мені так сподобалися в дитинстві. Багато графіки все ще запам'ятовуються, можливо, навіть знакові.
Виявляється, ці спрайти - це дуже спрощені растрові зображення, шириною 8 пікселів із змінною висотою, де двійкове представлення - це розташування пікселів.
Наприклад, шістнадцяткові байти 0x18, 0x24, 0x18 намалювали б так сире коло:
0x18: 00011000
0x24: 00100100
0x18: 00011000
Оскільки ширина 8 пікселів створює досить малу графіку (навіть за стандартами Atari 2600), було звичайно подвоїти або вчетверо збільшити висоту, ширину або обидва, щоб створити більшу (хоча і більш блоковану та спотворену) версію одного зображення. Вони, як правило, перевертаються вертикально або горизонтально як для спрайтів гравців, так і для ігрових полів. Гра Combat є хорошим прикладом цього.
Завдання полягає в тому, щоб написати код для відображення цих спрайтів як "графічних" у формі ASCII, включаючи можливість розтягування або перевертання їх по вертикалі, горизонталі або обом. Це повинно бути у формі або повної програми, або функції дзвінка.
Вхід:
- Масив байтів, кожен з яких представляє горизонтальні біти для цього рядка.
- Ненульове ціле число для кожного напрямку, горизонтальне та вертикальне, що представляє коефіцієнт масштабування для цього виміру.
- Від'ємне значення вказує на те, що розмір також слід перевернути вздовж своєї осі.
Вихід:
- Представлення ASCII для STDOUT або рядка, розділеного новою лінією, використовуючи пробіл для чорних (0) пікселів та будь-який друкований, непробільний символ на ваш вибір для білих (1) пікселів.
Дані тесту:
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]
Примітка. Наведені вище приклади вхідних масивів байтів надаються у вигляді шістнадцяткових значень. Якщо ваша платформа не приймає шістнадцяткові літерали для представлення байтів, ви можете перетворити їх у нативний еквівалентний байт.
Приклад Вихід:
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
--------------------------------
Примітка: горизонтальні лінії вгорі та внизу повинні показувати початок та кінець результату. Вони не потрібні у висновку, однак порожні рядки (представлені усіма нулями / пробілами) на початку та / або в кінці потрібні, як показано.
Примітка 2: ці тестові растрові файли були натхнені та перероблені / кодовані на основі скріншотів гри, позначених як «добросовісне використання» у Вікіпедії.