Tugas
Tugas Anda adalah menulis program yang akan menampilkan kotak ASCII di lokasi yang ditentukan oleh input.
Memasukkan
Anda akan diberikan daftar angka. Format di sini adalah sedikit fleksibel, karena Anda dapat menggunakan deliminator Anda inginkan (misalnya 1,2,3,4
, 1 2 3 4
, [1,2,3,4]
). Daftar ini dalam kelompok 4 dan menentukan xywh
kotak masing-masing. Lebar dan tinggi setiap kotak minimal 2. x
dan dari width
kiri ke kanan. y
dan dari height
atas ke bawah.
Keluaran
Rendering dapat dianggap sebagai kanan ke kiri, dengan kotak di kanan ditarik terlebih dahulu, dan setiap kotak setelah itu selesai. Ruang trailing diperbolehkan, serta satu trailing newline.
Cara menangani kotak yang tumpang tindih
Kotak di sebelah kiri input adalah kotak teratas, dan tidak ada yang tumpang tindih. Setiap kotak setelah itu diberikan hanya di ruang yang belum terkandung dalam kotak dan tidak akan menggantikan batas kotak yang sudah diberikan.
Gaya
Gaya kotak cukup standar, dengan +
digunakan untuk sudut, -
digunakan untuk garis horizontal, dan |
digunakan untuk garis vertikal.
Contoh:
( >>>
menunjukkan input)
>>>0 0 11 4 7 2 8 4 3 5 8 3
+---------+
| |
| |---+
+---------+ |
| |
+---+------+
| |
+------+
>>>0 3 11 4 7 5 8 4 3 8 8 3 4 0 13 5
+-----------+
| |
| |
+---------+ |
| |-----+
| |---+
+---------+ |
| |
+---+------+
| |
+------+
>>>0 0 2 2
++
++
>>>2 2 5 3 1 1 7 5 0 0 9 7
+-------+
|+-----+|
||+---+||
||| |||
||+---+||
|+-----+|
+-------+
>>>0 0 3 3 2 0 3 3
+-+-+
| | |
+-+-+
4 0 13 5
bukan0 4 13 5
?Jawaban:
APL, 116 byte
Ini adalah fungsi yang mengambil array array dan mengembalikan matriks karakter.
Tes:
Penjelasan:
⎕IO←0
: setel asal indeks ke0
.⌈⌿↑⍵
: temukan nilai terbesar untuk x, y, w, dan h+⌿2 2⍴
: x + w dan y + hK←' '⍴⍨⌽
: buat matriks x + w * y + h spasi dan simpan diK
.{
...}¨⌽⍵
: untuk masing-masing kotak, dalam urutan terbalik,x y W H←⍵-⌊.5×⍳4
: Menetapkan koordinat untukx
,y
,W
, danH
, dan kurangi 1 dari keduaW
danH
. (Koordinat bersifat eksklusif, rentang array APL termasuk.)K[Y←y+⍳H;X←x+⍳W]←' '
: isi kotak saat ini dengan spasiK[Y;A←x+0 W]←'|'
: menggambar sisi vertikalK[B←y+0 H;X]←'-'
: menggambar sisi horisontalK[B;A]←'+'
: setel tepi ke '+'K⊣
: setelah itu, kembaliK
.sumber
ES6,
228223217208 201198 byteMenerima larik array koordinat dan mengembalikan string.
Di mana
\n
mewakili karakter baris baru.Sunting: Disimpan 5 byte dengan membalik kondisi saya. Menyimpan 6 byte lebih lanjut dengan beralih dari array array char ke array string. Menyimpan 9 byte lebih lanjut dengan memperkenalkan variabel sementara. Menyimpan 7 byte lebih lanjut dengan memperkenalkan fungsi pembantu. Menyimpan 3 byte lebih lanjut dengan membatalkan penghematan sebelumnya!
sumber
Ruby,
153143Tidak digabungkan dalam program uji
sumber
SmileBASIC,
128125 byteTangkapan layar (terpotong)
Penjelasan
M
menyimpan apakah itu di baris pertama / terakhir dari kotak (0
=+--+
,1
=| |
). Pada pass pertama melalui loop,M
adalah 0, dan pada semua yang lain sampai yang terakhir, adalah 1.sumber
Pyth,
162145 byteAnda bisa mencobanya di sini
Output dari test suite:
Solusi mengerikan! Hanya menunggu seseorang untuk mengalahkannya
sumber