Tumbuh dewasa, sistem game konsol pertama saya adalah Atari 2600 dan saya akan selalu memiliki cinta untuk beberapa game yang sangat saya nikmati sebagai seorang anak. Banyak gambar yang masih berkesan, bahkan mungkin ikon.
Ternyata sprite ini adalah bitmap yang sangat sederhana, lebar 8 piksel dengan tinggi variabel di mana representasi biner adalah susunan piksel.
Misalnya, byte heksa 0x18, 0x24, 0x18 akan menggambar lingkaran kasar seperti:
0x18: 00011000
0x24: 00100100
0x18: 00011000
Karena lebar 8 piksel menghasilkan grafik yang cukup kecil (bahkan menurut standar Atari 2600), adalah umum untuk menggandakan atau melipatgandakan tinggi, lebar, atau keduanya untuk membuat versi gambar yang sama lebih besar (meskipun lebih gumpal dan terdistorsi). Mereka umumnya juga dibalik secara vertikal atau horizontal untuk sprite dan playfield pemain. Game Combat adalah contoh yang bagus untuk ini.
Tantangannya adalah, menulis kode untuk menampilkan sprite ini sebagai "grafik" dalam bentuk ASCII termasuk kemampuan untuk merentangkan atau membalikkannya secara vertikal, horizontal atau keduanya. Ini harus dalam bentuk program lengkap, atau fungsi yang dapat dipanggil.
Memasukkan:
- Array byte, masing-masing mewakili bit horizontal untuk garis itu.
- Nilai integer non-nol untuk setiap arah, horizontal dan vertikal mewakili faktor penskalaan untuk dimensi itu.
- Nilai negatif menunjukkan bahwa dimensi juga harus dibalik sepanjang porosnya.
Keluaran:
- Representasi ASCII ke STDOUT atau string yang dipisahkan baris baru, menggunakan karakter spasi untuk piksel hitam (0) dan karakter non-spasi cetak yang dapat dicetak pilihan Anda untuk piksel putih (1).
Data uji:
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]
Catatan: Di atas contoh, array input byte disediakan sebagai hex. Jika platform Anda tidak menerima hex literal untuk representasi byte, Anda dapat mengonversinya menjadi literal setara-byte asli.
Contoh 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
--------------------------------
Catatan: garis horizontal di atas dan di bawah ini menunjukkan awal dan akhir output. Mereka tidak diperlukan dalam output, namun baris kosong (diwakili oleh semua nol / spasi) pada awal dan / atau akhir diperlukan, seperti yang ditunjukkan.
Catatan 2: bitmap uji ini terinspirasi oleh dan digambar ulang / dikodekan berdasarkan tangkapan layar gim yang ditandai sebagai "penggunaan wajar" di Wikipedia.
Jawaban:
Python 2 , 117 byte
Cobalah online!
sumber
05AB1E ,
2726 byteMengambil input sebagai daftar string biner 8-bit, dan output dengan
1
karakter non-space.-1 byte terima kasih kepada @MagicOctopusUrn .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
0‹i
...0‹
.. Kita memang punya 1-byter>=0
, yaitud
. Tetapi kita juga harus memiliki 1-byter untuk memeriksa imo negatif. Sekarang saya hanya menggunakan0‹
ataud_
.„íR³²‚0‹Ï.V
(kode lengkapεε²Ä×}J³Äи0ð:}„íR³²‚0‹Ï.V˜»
) yang bukan merupakan peningkatan, tetapi menyingkirkan salah satu dari cek negatif itu.εS²Ä×J³Äи²0‹ií]³0‹iR}˜0ð:»
menghemat satu byte. Jika Anda dapat mengambil dalam array 2D, Anda dapat menghapusS
seluruhnya untuk 25 byte.S²Ä×
bukanε²Ä×}
. Terima kasih! Hmm, jika kita diizinkan untuk mengambil input biner sebagai daftar 0s dan 1s byte tambahan dapat disimpan dengan menghilangkanS
. Akan menanyakan OP apakah ini diizinkan. Saya suka Anda„íR³²‚0‹Ï.V
di komentar Anda yang lain juga. :)MATL ,
2419 byteInput adalah array angka desimal, skala horizontal, skala vertikal.
Cobalah online!
Penjelasan
sumber
Dyalog APL,
464233 byteCobalah online!
-9 terima kasih kepada ngn!
sumber
{' #'[⊃{⌽⍣(0>⍺)⊢(|⍺)/⍉⍵}/⍺,⊂⍉⍵⊤⍨8/2]}
dfn -> program:' #'[⊃{⌽⍣(0>⍺)⊢(|⍺)/⍉⍵}/⎕,⊂⍉⎕⊤⍨8/2]
' #'[⍉⊃{⊖⍣(0>⍺)⍉⍵/⍨|⍺}/⎕,⊂⎕⊤⍨8/2]
. btw, output untuk tes kedua tampaknya terbalik dalam solusi asli AndaProlog (SWI) , 252 byte
Cobalah online!
Penjelasan
sumber
Arang , 28 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Ulangi daftar byte.
Peta di atas faktor penskalaan vertikal, sehingga melipatgandakan garis keluaran.
Konversikan input ke basis 2, balikkan, petakan digit ke spasi dan
X
, kemudian gandakan setiap karakter dengan faktor penskalaan horizontal.Jika faktor penskalaan horizontal positif, refleksikan untuk mendapatkan gambar dengan cara yang benar lagi.
Refleksikan secara vertikal jika faktor penskalaan vertikal negatif.
sumber
F
(For
) bukannya¿
(If
) untuk cek?else
ini tersirat sehingga satu-satunya waktu yang dapat saya gunakanif
adalah jika itu adalah pernyataan terakhir di blok.If
sini sebenarnya akan menjadiIf ... Else If ...
dua bukan longgarIf
. Hmm, senang tahu.C (dentang) , 120 byte
Cobalah online!
sumber
Common Lisp , 157 byte
Cobalah online!
Penjelasan
sumber
Tcl , 192 byte
Cobalah online!
sumber
8088 kode mesin, IBM PC DOS,
7771 byteDirakit:
Daftar:
Ini ternyata menjadi lebih doozy di ASM daripada yang saya pikir sebelumnya. Beberapa loop bersamaan dan banyak jika / bercabang tentu bisa membuat Anda sakit kepala.
Ini diimplementasikan sebagai MACRO karena memungkinkan melewati parameter seperti fungsi untuk pengujian.
Keluaran
Berikut ini adalah program uji untuk DOS yang meminta faktor penskalaan X dan Y dan menarik ke layar. Catatan, terlalu banyak menskala naga akan menggulir melewati bagian atas karena jendela DOS default hanya 24 baris.
Dan inilah naga kecil kita (bebek):
Cobalah secara Online!
Anda dapat menguji dalam DOS VM menggunakan DOSBox atau VirtualConsoles.com dengan langkah-langkah berikut:
PLANE
,KEY
,TANK
atauDRAGON
.sumber
Perl 5, 105 byte
TIO
Jika input harus berupa hex
126 byte
sumber
Jelly , 21 byte
Cobalah online!
Diasumsikan ada paling banyak satu argumen baris perintah.
sumber
APL (Dyalog Extended) , 23 byte SBCS
metode dzaima
⎕IO←0
Cobalah online!
{
...}/
kurangi dari kanan ke kiri menggunakan lambda anonim berikut:|⍺
besarnya argumen kiri (faktor penskalaan)⍵/⍨
gunakan itu untuk mereplikasi argumen yang benar secara horizontal⍉
mengubah urutan⊖⍣(
...)
balik jika:>⍺
faktor penskalaan kurang dari nol⊃
mengungkapkan (karena reduksi terlampir untuk mengurangi peringkat tensor dari 1 ke 0)' x'⊇⍨
pilih elemen dari string "x" menggunakan matriks itusumber
Ruby , 89 byte
Cobalah online!
sumber
T-SQL, 216 byte
Sebelum menjalankan Manajemen MS-SQL Studio ini, tekan CRTL-t untuk menampilkan data sebagai teks. Ketinggian tidak dapat disesuaikan untuk melebihi jumlah elemen dalam input.
Karena implementasi STRING_AGG yang mengerikan , variabel tinggi hanya akan berfungsi di MSSM. MS seharusnya membuat parameter opsional ketiga untuk memasukkan urutan elemen yang sedang digabungkan.
Versi online hanya dapat mendukung penyesuaian lebar. Tinggi akan menghasilkan hasil yang funky dengan berbagai bentuk susun.
Skrip ini tidak akan menampilkan bentuk yang benar dalam versi online, jadi saya membuat beberapa penyesuaian kecil untuk mengkompensasi. Cobalah online
sumber