Diberikan tiga bilangan bulat> = 2, buat kubus ASCII dalam proyeksi (kabinet) ortogonal. Tiga bilangan bulat mewakili tinggi, lebar dan kedalaman (diukur dalam karakter yang terlihat) termasuk sudut. Sudut harus 'o's atau' + ', pilihan bebas.
w: 10, h: 5, d: 4 Dengan demikian memberi:
o--------o
/ /|
/ / |
o--------o |
| | o
| | /
| |/
o--------o
Sekarang, untuk membuatnya sedikit lebih sulit, semua wajah bisa menjadi solid, transparan, atau hilang. Kami memesan wajah-wajah seperti ini:
o--------o
/ /|
/ 2 / |
o--------o 3|
| | o
| 1 | /
| |/
o--------o
---
|2|
-------
|5|1|3|
-------
|4|
---
|6|
---
Dan berikan daftar token, S, T atau M. Contoh aslinya adalah sebagai berikut:
w 10
h 5
d 4
S S S S S S
o--------o
/ /|
/ / |
o--------o |
| | o
| | /
| |/
o--------o
Jika satu wajah transparan, kita dapat melihat apa pun yang ada di belakangnya:
T S S S S S
o--------o
/ /|
/ / |
o--------o |
| o-----| o
| / | /
|/ |/
o--------o
T T T T T T
o--------o
/| /|
/ | / |
o--------o |
| o-----|--o
| / | /
|/ |/
o--------o
Untuk pasangan wajah yang hilang, tepi atau sudut yang berdekatan tidak lagi terlihat:
M M S S S S
o--------o
/| /|
/ | / |
o | o |
| o-----| o
| / | /
|/ |/
o--------o
M M S S M S
o--------o
| /|
| / |
| o |
o-----| o
/ | /
/ |/
o--------o
Golf kode, kode terpendek menang! Ruang tambahan dan baris baru baik-baik saja, Anda bebas memilih metode input dan urutan input.
you're free to choose input method and input order
. Dan seperti tidak ada yang mengatakan sebaliknya, salah satu dari metode input / output default dapat digunakan.Jawaban:
Arang ,
190181 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 9 byte dengan mengoptimalkan kondisi saya. Charcoal tidak memiliki
else
token, jadiif
perintah selalu memiliki dua alternatif, kecuali mereka ada di akhir blok atau program. Untuk menghindari hal ini, saya menggunakanfor (<bool>)
bukannyaif (<bool>)
yang memiliki efek yang sama ketika ekspresi hanya dapat memiliki nilai 0 atau 1 tapi menghemat byte. (Untuk mencapai ini saya harus mengubah ekspresi sehingga mereka selalu benar ketika tubuh diperlukan untuk dieksekusi.) Saya juga mampu mengoptimalkanif (<bool>) for (<int>)
dalamfor (And(bool, int))
.sumber
X * Y * Z
kubus ASCII.JavaScript (ES6),
318314308 byteMengambil lebar, tinggi dan kedalaman sebagai bilangan bulat dan wajah sebagai array karakter.
Bagaimana?
Fungsinya M () memproses panggilan balik F yang diberikan pada rentang yang diberikan [0 ... n] .
Variabel a memegang array datar yang mewakili kisi ukuran (w + d) x (h + d-1) . Awalnya diisi dengan barisan ruang yang diakhiri dengan baris baru.
Fungsi D () digunakan untuk 'menggambar' wajah berbentuk kubus.
Dua bit paling signifikan dari parameter t memegang tipe wajah:
Bit # 2 hingga # 4 memiliki indeks wajah berbasis 0.
Wajah digambar dengan urutan sebagai berikut:
Demo
Tampilkan cuplikan kode
sumber
SOGL V0.11 ,
200194193192190 byteMengambil input dalam urutan
Terikat!
Coba Di Sini! (nilai terkompresi diubah menjadi V0.12 yang kompatibel)
sumber