Pertimbangkan blok 3x3 berikut yang akan diidentifikasi algoritma kotak marching untuk setiap sel (dengan ID berlabel berbasis-0):
0:
...
...
...
1:
...
...
\..
2:
...
...
../
3:
...
---
...
4:
..\
...
...
5:
/..
...
../
6:
.|.
.|.
.|.
7:
/..
...
...
8:
/..
...
...
9:
.|.
.|.
.|.
10:
..\
...
\..
11:
..\
...
...
12:
...
---
...
13:
...
...
../
14:
...
...
\..
15:
...
...
...
Tujuan dari tantangan ini adalah memberikan matriks 2D dari blok ID, menggambar plot kontur penuh dengan menggabungkan sel-sel yang lebih kecil ini. Perhatikan bahwa ada beberapa kasus berulang (mis .: 0 dan 15 secara visual sama)
Memasukkan
Program / fungsi Anda harus mengambil sebagai input matriks persegi panjang 2D bilangan bulat dalam rentang [0+a,15+a]
(di mana a
pergeseran bilangan bulat sewenang-wenang pilihan Anda; ini memungkinkan Anda untuk menggunakan pengindeksan berbasis nol atau pengindeksan berbasis 1 untuk blok). Ini mungkin dari sumber yang diinginkan (stdin, parameter fungsi, dll.).
Keluaran
Program / fungsi Anda harus menampilkan string tunggal yang mewakili plot kontur penuh. Seharusnya tidak ada spasi tambahan spasi jejak / jejak tambahan, tetapi baris baru trailing diizinkan. Seharusnya tidak ada pemisahan antara blok yang berdekatan secara vertikal atau horizontal.
Perhatikan bahwa Anda tidak harus melakukan perlakuan khusus apa pun untuk blok yang memetakan "pelana"; hanya menggambar blok dengan ID yang diberikan apa adanya.
Outputnya mungkin untuk setiap wastafel yang diinginkan (stdout, nilai pengembalian, dll.)
Contohnya
Semua contoh di bawah ini menggunakan ID blok berbasis 0.
case 1:
2 1
4 8
......
......
../\..
..\/..
......
......
case 2:
15 13 12 14 15
13 8 0 4 14
11 1 0 2 7
15 11 3 7 15
...............
......---......
...../...\.....
.../.......\...
...............
../.........\..
..\........./..
...............
...\......./...
.....\.../.....
......---......
...............
case 3:
12 12 12 8 4
0 0 0 0 2
0 0 0 2 7
0 2 3 7 15
........./....\
---------......
...............
...............
...............
............../
............/..
...............
.........../...
........./.....
......---......
...../.........
case 4:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
............
.........---
...\..../...
..\/...|./..
.......|....
...../.|....
/...|...\..\
....|.......
....|.\.....
............
---.........
...../\.....
case 5:
0 0 0 0 6 15 15
0 0 0 0 6 15 15
0 0 0 0 6 15 15
0 0 0 2 7 15 15
0 0 2 5 14 15 15
0 2 5 8 4 12 14
0 4 8 0 0 0 6
0 0 0 0 0 0 4
.............|.......
.............|.......
.............|.......
.............|.......
.............|.......
.............|.......
.............|.......
.............|.......
.............|.......
............/........
.....................
.........../.........
........./...........
.....................
......../../\........
....../../....\......
...............---...
...../../.........\..
.....\/............|.
...................|.
...................|.
....................\
.....................
.....................
Mencetak gol
Ini adalah kode golf; kode terpendek dalam byte menang. Celah standar berlaku.
Jawaban:
Mathematica,
353326 bytememasukkan
sumber
JavaScript (ES6), 195 byte
Uji kasus
Tampilkan cuplikan kode
sumber
Mathematica, 173 byte
Cobalah di kotak pasir Wolfram!
"
\n
" Harus diganti dengan baris baru yang sebenarnya. Input diindeks 1 - sebagai contoh, test case ketiga menjadi{{13,13,13,9,5},{1,1,1,1,3},{1,1,1,3,8},{1,3,4,8,16}}
. Outputnya adalah string.Idenya pada dasarnya sama dengan jawaban Jenny_mathy - buat enam belas kotak dengan mengambil kotak 3x3
"."
dan mengganti beberapa karakter, lalu jahit kotak-kotak bersama - tetapi menggunakan fungsi yang sedikit lebih pendek untuk melakukannya. (Terima kasih kepada alephalpha untuk mengingatkan saya bahwaArrayFlatten
ada!)Mungkin saja ini dapat dilakukan dalam lebih sedikit byte dengan membuat kuadrat secara cerdik alih-alih pada dasarnya meng-hardcoding mereka, tetapi itu akan membutuhkan lebih banyak usaha ...
sumber
{{16,14,13,15,16},{14,9,1,5,15},{12,2,1,3,8},{16,12,4,8,16}}
. Jika Anda mencobanya dan masih tidak berhasil, dapatkah Anda memberi tahu saya masalah apa yang Anda hadapi?Retina , 165 byte
Cobalah online! Tautan termasuk contoh kedua. Penjelasan: Dua tahap pertama mengkonversi dari desimal ke heksadesimal, memungkinkan spasi untuk dihapus. Tahap ketiga kemudian rangkap tiga setiap baris, memberikan setiap baris baru penanda yang terpisah. Marker ini kemudian melintasi digit hex, mengonversinya menjadi plot kontur saat mereka pergi, sampai mereka mencapai ujung garis, di mana titik mereka dihapus.
sumber
Python 2 , 247 byte
Cobalah online!
-1 byte terima kasih kepada LeakyNun
sumber
SOGL V0.12 ,
10689 byteCoba Di Sini! (yang memiliki byte ekstra
→
untuk kemudahan input. Jika tidak, diharapkan array sudah ada di stack)sumber
Python 2,
196191181176 byteCobalah online!
Fungsi yang mengambil array array int dan mengembalikan string:
EDIT: disimpan 5 byte dengan menetapkan J, N; 10 byte lainnya karena saya lupa input sudah dianggap array array ints; dan kemudian 5 byte lainnya disimpan oleh irisan yang lebih cerdas ...
String gabungan dari semua 16 sel 3x3 (144 byte, menghilangkan linebreak) di-run-length-encoded ke string 41 byte:
o!j1cSe!f1g1aAbAbAa1h1iAbAbAc!c!d!iSk1f!k
di mana setiap elemen RLE
(cellType, length)
dikodekan ke karakterchr(32+16*cellType+length)
(berguna bahwa menjalankan maksimum adalah 15; dan yangord(' ')==32
dapat dibagi oleh 16). Saat decoding, kami menganggapnya'\/|-.'[cellType]
sebagai karakter yang dapat dicetak.Tidak ada yang pintar setelah itu ...
sumber
05AB1E , 61 byte
Cobalah online!
Paruh pertama pola dapat dikompresi sebagai:
Babak kedua harus:
Kami hanya dapat secara vertikal mencerminkan paruh pertama, dan masukkan
binary 110 (1101110)
untuk2111111125
.Selanjutnya kita ambil pola ini dan membaginya menjadi lima, lalu padukan dengan yang berikut:
Sekarang kami memiliki blok bangunan kami, bagian terakhir hanya mengganti entri matriks dengan blok bangunan yang sesuai, zip bersama baris dan cetak ke pengguna dengan simbol yang diganti:
Dapat memposting penjelasan operasi formal jika ada yang menginginkannya, terima kasih.
sumber
Jelly , 64 byte
Cobalah online!
Ini menggunakan kompresi naif dan mungkin bisa menyimpan banyak byte dengan pengkodean run-length.
Bagaimana itu bekerja
sumber