Nanobot pembuatan rumah otomatis telah dibuat, dan tugas Anda untuk membuat kode.
Ini rumah yang dibuat oleh input 7 4 2
/-----/|
/ / |
|-----| |
| | |
| | /
|_____|/
Input adalah string yang berisi dimensi rumah.
7
adalah lebarnya.
|_____|
---7---
4
adalah tingginya.
|
|
|
|
2
adalah kedalamannya
/
/
Dengan masukan ini, dapatkah Anda membuat rumah?
Kode Anda harus sekecil mungkin agar dapat masuk ke dalam robot.
Catatan
Dimensi terkecil yang akan Anda berikan sebagai input adalah 3 2 2
. Program Anda dapat melakukan apa saja dengan dimensi yang lebih kecil dari3 2 2
.
Testcases
3 2 10
/-/|
/ / |
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
|-| /
|_|/
3 2 10
?Jawaban:
Python 2, 128 byte
Mencetak baris demi baris. Indeks baris
i
dihitung mundur darid
ke-h+1
.sumber
' '*min(d-i,h-1,w+1,h-1+i)
dengan(' '*d)[max(0,i):h-1+i]
Ruby, 145 byte
Mengembalikan daftar string. Setiap elemen dalam daftar sesuai dengan garis. Jika string multiline harus dikembalikan, tambahkan 3 byte untuk ditambahkan
*$/
tepat sebelum braket terakhir.sumber
JavaScript (ES6), 169 byte
Dimana
\n
mewakili karakter baris baru literal. Penjelasan:Sunting: Disimpan 2 byte berkat @jrich.
sumber
,r='repeat'
dari depan dan ganti yang pertama[r]
dengan[r='repeat']
,r=(n,c=` `)=>c.repeat(n)
dan ketika saya mengubah taktik saya mengabaikan kemungkinan pengaturan ulang.Python
224301297 Bytes(Sekarang Berfungsi untuk semua kotak termasuk 1x1x1)
Penjelasan:
Dibawa dalam tiga konstanta: l (panjang), h (tinggi), w (lebar).
Jika kita melihat beberapa kotak sampel kita dapat menemukan pola dalam spasi.
Untuk kotak 3 x 4 x 3, kami akan menggunakan angka untuk mewakili spasi antar bagian.
Baris atas memiliki 4 spasi atau yang merupakan w + 1. Tiga baris berikutnya memiliki w - (1 * x). X menjadi garis.
Ini adalah pola yang berlanjut di seluruh garis di semua kotak. Oleh karena itu, kita dapat dengan mudah memprogram baris ini demi baris, mengalikan jumlah spasi agar sesuai dengan pola.
Berikut adalah contoh untuk kotak 5 x 5 x2.
sumber
w,h,l=input()
atau menjadikannya fungsi.Python 3.5,
328326313305295248 byte( Terima kasih kepada Kevin Lau untuk tip tentang mengurangi ukuran pernyataan ternary! )
Mengambil input sebagai 3 bilangan bulat dalam urutan
width, height, depth
. Akan golf lebih dari waktu ke waktu dimanapun saya bisa.Cobalah online! (Ideone)
Penjelasan:
Untuk keperluan penjelasan ini, asumsikan fungsi dieksekusi dengan argumen di
(3,2,3)
mana 3 adalah lebar (w
), 2 adalah tinggi (h
), dan 3 adalah kedalaman (d
). Yang sedang berkata, izinkan saya mulai dengan menunjukkan bagian utama dari seluruh fungsi:Di sini, dua daftar yang membentuk seluruh "rumah" dibuat dan kemudian bergabung bersama dengan baris baru secara literal (
\n
). Mari kita sebut mereka masing-masinga
daftar dan daftarb
, dan analisis masing-masing:Di sinilah daftar
a
dibuat:Daftar ini berisi
d
baris pertama rumah. Di sini,i
adalah setiap angka dalam kisaran di0=>(d-(d-h))+d-h
manad-h=0
jika negatif atau nol. Untuk memulai,d-i
spasi ditambahkan ke daftar, diikuti oleh a/
dan kemudian apa pun yang dikembalikan oleh pernyataan kondisional terkompresi. Dalam pernyataan bersyarat ini,w-2
jumlah spasi dikembalikan jikai>1
. Kalau tidak, jumlah yang sama-
dikembalikan. Kemudian, ini ditindaklanjuti oleh yang lain/
, dan kemudian spasi, di mana jumlah ruang sekarang tergantung pada apakah atau tidaki<=d-(d-h)-1
. Jika ya, makai
spasi ditambahkan. Jika tidak,h-1
spasi ditambahkan. Akhirnya, ini semua diakhiri dengan baik a/
atau a|
, di mana|
ditambahkan jikai<=d-(d-h)-1
, sebaliknya a/
telah ditambahkan. Dalam kasus3x2x3
prisma, ini akan dikembalikan oleh daftara
:Di sinilah daftar
b
dibuat:Daftar ini berisi sisa garis prisma. Dalam daftar ini,
i
adalah setiap bilangan bulat dalam kisaran di(h-(h-d))+h-d=>0
manah-d=0
jika negatif atau nol. Untuk memulai daftar ini, pertama a|
ditambahkan karena baris ini selalu dimulai dengan a|
. Kemudian, baik spasi,-
atau_
ditambahkan tergantung pada apakah atau tidaki=h
ataui<2
. Jikai<2
, maka a_
ditambahkan. Jika tidak,-
ditambahkan jikai=h
, atau ruang ditambahkan jikai>h
ataui<h
ataui>2
. Setelah keputusan ini dibuat, makaw-2
jumlah karakter yang dipilih ditambahkan. Setelah ini, yang lain|
ditambahkan, dan kemudian salah satui-1
ataud
jumlah ruang ditambahkan. Jikai>h-(h-d)
, maka ad
jumlah spasi ditambahkan. Jika tidak,i-1
jumlah spasi ditambahkan. Akhirnya, ini semua diakhiri dengan a|
atau a/
, di mana a|
ditambahkan jikai>h-(h-d)
, atau a/
ditambahkan jikai<=h-(h-d)
. Dalam kasus3x2x3
prisma, daftarb
mengembalikan:Setelah 2 daftar telah dibuat, mereka akhirnya bergabung dengan baris baru literal (
\n
) menggunakan'\n'.join()
. Ini adalah prisma lengkap Anda, dan dalam hal ini, akan terlihat seperti ini:sumber
'-_'[f<2]
. Akhirnya,R=range;S,V,L=' |/'
bekerja untuk menetapkan variabel awal Anda karena string dengan senang hati akan membongkar diri mereka sendiri untuk Anda dalam situasi itu.a=1 if b<9 else c=5
tidak dapat diekspresikan[a=1,c=5][b<9]
karena Anda akan akhirnya mengubah keduanyaa
danc
. Ini adalah halaman tips golf PPCG Python: codegolf.stackexchange.com/questions/54/…'_'if f<2else' -'[f==h]
,. Ingat booleans mengevaluasi sebagai bilangan bulat, sehingga Anda bisa "rantai" ternary ini ke yang lain yang ingin Anda dapatkan[' -'[f==h],'_'][f<2]
. Anda juga belum menggunakan tip sayaS,V,L=' |/'
.