Ascii Cube (PAC 1) pertama yang selesai dengan Predecessor-selesai adalah kubus sederhana dengan panjang sisi 1 dan terlihat seperti ini:
/////\
///// \
\\\\\ /
\\\\\/
The PAC 2 adalah bentuk geometris seperti yang menggabungkan dengan pendahulunya (yang PAC 1 ) melengkapi panjang sisi 2 kubus:
front back
/////////\ /////////\
///////// \ ///////// \
/////\\\\\ \ ///////// \
///// \\\\\ \ ///////// \
\\\\\ ///// / \\\\\\\\\ /
\\\\\///// / \\\\\\\\\ /
\\\\\\\\\ / \\\\\\\\\ /
\\\\\\\\\/ \\\\\\\\\/
Karena tampilan belakang agak membosankan, kami hanya tertarik pada tampilan depan .
Hal yang sama berlaku untuk PAC 3 : Dengan beberapa pemikiran visual, PAC 2 dapat diputar dan dicolokkan ke PAC 3 untuk membentuk kubus panjang sisi 3:
/////////////\
///////////// \
/////\\\\\\\\\ \
///// \\\\\\\\\ \
///// /////\\\\\ \
///// ///// \\\\\ \
\\\\\ \\\\\ ///// /
\\\\\ \\\\\///// /
\\\\\ ///////// /
\\\\\///////// /
\\\\\\\\\\\\\ /
\\\\\\\\\\\\\/
Dan seterusnya dengan PAC 4 :
/////////////////\
///////////////// \
/////\\\\\\\\\\\\\ \
///// \\\\\\\\\\\\\ \
///// /////////\\\\\ \
///// ///////// \\\\\ \
///// /////\\\\\ \\\\\ \
///// ///// \\\\\ \\\\\ \
\\\\\ \\\\\ ///// ///// /
\\\\\ \\\\\///// ///// /
\\\\\ \\\\\\\\\ ///// /
\\\\\ \\\\\\\\\///// /
\\\\\ ///////////// /
\\\\\///////////// /
\\\\\\\\\\\\\\\\\ /
\\\\\\\\\\\\\\\\\/
Tugas:
Tulis program atau fungsi lengkap yang mengambil bilangan bulat positif n sebagai input dan mengembalikan atau mencetak tampilan depan PAC yang sesuai n persis seperti yang ditunjukkan di atas. Ruang tambahan trailing putih dapat diterima.
Ini adalah kode-golf , jadi coba gunakan sesedikit mungkin byte dalam bahasa pilihan Anda.
Jawaban:
JavaScript (ES6), 229 byte
sumber
Batch,
559432400 bytePenjelasan: Bagian bawah kubus ditarik dengan mencerminkan bagian atas. Bagian dibagi lebih lanjut menjadi
tujuhenamtiga bagianstrip, sesuai diagram ini menunjukkan bagian atas:Sunting: Disimpan lebih dari 20% dengan meningkatkan kode yang mencerminkan bagian atas ke bawah. Menghemat hampir 10% dengan menggabungkan dua strip kiri dan tiga tengah.
sumber
Kanvas , 36 byte
Coba di sini!
sumber
SOGL V0.12 , 32 byte
Coba di sini!
Penjelasan sederhana:
1. iterate untuk masing-masing 1..x
2. buat
⌐
bentuk dengan lebari*4+1
dan tinggi =(0-indexed)i // 2
3. padatkan sehingga terlihat seperti
⦧
4. tambahkan bentuk "\" ke arah itu secara horizontal
5. masukkan langkah sebelumnya di dalam itu terbalik 6. setelah semuanya, mirror secara vertikal
program lengkap:
sumber
Haskell ,
232227224187183180175 byteFungsi anonim di baris terakhir mengambil argumen integer dan menghasilkan garis yang akan dicetak untuk kubus sebesar itu.
Idenya adalah menggunakan rekursi untuk menggambar kubus yang lebih besar dari yang lebih kecil. Mari kita lihat setengah bagian atas dari kubus ukuran 1. Kemudian kita mendapatkan bagian atas dari kubus ukuran 2 dengan mencerminkan bagian sebelumnya dan menambahkan pola garis miring dan spasi di sekitarnya:
Jadi algoritma untuk menggambar kubus ukuran n adalah
/
s dan\
s), dan pad////
dan\
sekitarnya.////
n plus/\
dan/ \
.sumber
g=
.(\l->r l++k(k m)l)
sama denganliftM2 (++) r (k(k m))
, yang lagi bisa disingkat(++).r<*>k(k m)
. Cobalah online!Ruby ,
174 167 169167 byteCobalah online!
menciptakan serangkaian
n*4
string yang diisi dengan spasi, lalu menimpanya dengan kubus yang lebih kecil secara berturut-turut.Kode yang dikomentari
sumber
Python 2 ,
254234226203201199 byteAkhirnya sub 200!
Trik:
Fungsi ini digunakan untuk bertukar semua
\
dengan/
dan sebaliknyaAgak panjang di Python2 - hanya bekerja dengan unicode
Lihat ini untuk cara kerjanya
Menghasilkan dua baris teratas baru untuk setiap iterasi
Untuk saat ini saya tidak dapat menemukan cara yang ringkas untuk menerima baris ini dari iterasi sebelumnya
Membalikkan semua baris iterasi sebelumnya dan menukar garis miring
Salin bagian atas, dibalik dengan baris, bertukar garis miring
Metode rapi untuk string padding tengah
Cobalah online!
sumber
Stax , 36 byte
Jalankan dan debug itu
Pendekatan ini membangun setengah bagian atas output secara iteratif. Itu mengeksekusi blok utama beberapa kali yang ditentukan. Di blok itu, setiap baris dicerminkan dan memiliki awalan dan akhiran yang ditambahkan. Dua baris teratas baru ditambahkan secara terpisah. Ketika semua baris dibangun, mereka berpusat, dan kemudian bagian bawahnya dicerminkan secara vertikal.
Inilah programnya membongkar, tidak berkhasiat, dan berkomentar.
Jalankan yang ini
sumber
Haskell, 193 byte
Lebih panjang dari pemenang, tetapi pendekatannya mungkin menarik - menggunakan even
cos
andpi
:)Kode:
Jalankan seperti ini:
Program ini pada dasarnya 'menggambar' banyak berlian seperti ini:
Berfungsi
i s e f
'menggambar' satu ukuran berlians
, di manae, f
berada(abs$z-y)(abs$z+y-1)
.Fungsi
w
memindahkan berlian yang ditarik olehi
ke tempat yang benar.head
digunakan dalam definisinya bertanggung jawab untuk melihat lapisan paling atas saja.Coba di sini
sumber
Arang , 42 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Gambar kubus dari yang terkecil hingga yang terbesar. (Menggambar dari yang terbesar ke yang terkecil berarti saya berakhir dengan gambar cermin untuk angka ganjil yang membutuhkan terlalu banyak byte untuk diperbaiki.)
Cetak satu baris
/
s. (Ini akan menjadi\
huruf s di sebelah kanan, tetapi gambarnya selesai dicerminkan karena lebih indah untuk dicerminkan di akhir perulangan.)Cetak dua baris atas
\
s. (Menggambar semua\
s dalam satu poligon berarti kursor berakhir pada posisi yang canggung yang memerlukan terlalu banyak byte untuk diperbaiki.)Cetak empat baris kiri
\
s. (Baris kelima berasal dari kubus sebelumnya.)Pindah ke awal kubus berikutnya.
Merefleksikan siap secara horizontal untuk kubus berikutnya.
Cermin semuanya secara vertikal untuk menyelesaikan kubus.
sumber