Diberi dua bilangan bulat positif, W dan H, menghasilkan kotak ASCII-art yang perbatasannya terbuat dari garis miring ( /
dan \
) dengan "paku" W di tepi atas dan bawah, dan H "paku" di tepi kiri dan kanan. Interior kotak dipenuhi dengan ruang.
"Spike" hanyalah dua garis miring yang bergabung membentuk bentuk panah:
/\ \/
/ \
\ /
Jadi hasilnya W = 4, H = 3
adalah
/\/\/\/\
\ /
/ \
\ /
/ \
\/\/\/\/
karena ada 4 paku di atas menunjuk ke atas, 4 di bawah menunjuk ke bawah, 3 di kiri menunjuk ke kiri, dan 3 di kanan menunjuk ke kanan.
Berikut adalah beberapa pasangan input / output lainnya:
W H
[spiky slash box]
1 1
/\
\/
1 2
/\
\/
/\
\/
2 1
/\/\
\/\/
2 2
/\/\
\ /
/ \
\/\/
1 3
/\
\/
/\
\/
/\
\/
3 1
/\/\/\
\/\/\/
2 3
/\/\
\ /
/ \
\ /
/ \
\/\/
3 2
/\/\/\
\ /
/ \
\/\/\/
10 1
/\/\/\/\/\/\/\/\/\/\
\/\/\/\/\/\/\/\/\/\/
10 2
/\/\/\/\/\/\/\/\/\/\
\ /
/ \
\/\/\/\/\/\/\/\/\/\/
4 5
/\/\/\/\
\ /
/ \
\ /
/ \
\ /
/ \
\ /
/ \
\/\/\/\/
Tidak ada garis dalam output yang harus memiliki spasi awal atau akhir. Secara opsional mungkin ada satu baris tambahan.
Kode terpendek dalam byte menang.
Jawaban:
Arang , 9 byte
Cobalah online!
Penjelasan
sumber
F²«↷P…\/N»‖M¬
(mengambil input tinggi, urutan lebar).MATL , 18 byte
Cobalah di MATL Online!
Penjelasan
Pertimbangkan input
W = 4
,H = 3
. Kode membangun vektor baris[1 2 3 4 5 6 7 8]
(mulai dari1
ke2*W
) dan[1 2 3 4 5 6]
(mulai dari1
ke2*H
). Transposing yang terakhir dan menambahkan ke yang pertama dengan siaran memberikan matriksPengindeksan modular ke dalam string
\/
menghasilkan hasil yang diinginkan di perbatasan matriks:Untuk menghapus nilai-nilai non-perbatasan, kami atur ke
0
(ketika diartikan sebagai char, ditampilkan sebagai spasi):Kode yang dikomentari:
sumber
Python 2 ,
6968 byte-1 terima kasih kepada Kevin Cruijssen
Cobalah online!
sumber
\\%s
bisa menjadi\%s
dan\\/
bisa menjadi\/
.Haskell ,
90888782 byte16 byte disimpan berkat LynnCobalah online!
Masih terasa sangat panjang, saya akan melihat apa yang bisa saya lakukan.
sumber
a#b=[a..b]
dan mengganti semua kejadian menghemat satu byte:a#b=[a..b];x!y|i<-2#x>>" "=(1#x>>"/\\"):(2#y>>['\\':i++"/",'/':i++"\\"])++[1#x>>"\\/"]
a#b=[1..a]>>b;x!y|i<-(x-1)#" "=x#"/\\":(y-1)#['\\':i++"/",'/':i++"\\"]++[x#"\\/"]
sebenarnya menghemat 6 ~05AB1E , 14 byte
Cobalah online!
Penjelasan
Ini hanya membuat sudut kiri atas, lebar x karakter dan tinggi karakter y. Kemudian mencerminkan ini pada kedua sumbu:
sumber
JavaScript (ES6), 84 byte
Mengambil input dalam sintaks currying
(w)(h)
.Demo
Tampilkan cuplikan kode
sumber
Swift 3 , 166 byte
Paket tes lengkap.
Versi penutupan sedikit lebih lama, sayangnya (175 byte):
Test suite dengan versi penutupan.
sumber
Retina ,
7773 byteCobalah online! Tautan termasuk kasus uji. Mengambil input dalam format
<height> <width>
. Penjelasan:Konversikan input ke unary.
Lipat gandakan input, tetapi tambahkan baris baru sehingga hasilnya adalah persegi panjang.
Buat bagian atas yang runcing.
Gandakan setiap baris runcing, tetapi dengan paku diimbangi di baris kedua.
Hapus baris baru yang tertinggal.
Hapus bagian dalam kotak. (Catat ruang pada baris terakhir.)
sumber
Excel, 95 byte
sumber
APL (Dyalog) ,
4139 byteMeminta daftar
[H,W]
Cobalah online!
⎕-1
meminta input (mnemonic: konsol bergaya) dan kurangi 12×
kalikan dengan dua''⍴⍨
gunakan itu untuk membentuk kembali string kosong (bantalan dengan spasi)⊢
hasilkan itu (berfungsi untuk memisahkannya dari4
){
...}⍣4
terapkan fungsi berikut empat kali:≢⍵
tally (panjang) argumen'/\'⍴⍨
siklis r eshape"/\"
untuk panjang yang⍵,
tambahkan itu ke sisi kanan argumen⌽⍉
transpos dan cermin (yaitu putar 90 °)¯1⌽1
siklis memutar 1 st baris satu langkah ke kanan⊢
hasilkan itu (berfungsi untuk memisahkannya dari1
)'\'@2@1
menempatkan garis miring terbalik di 2 nd posisi 1 st item yang besar.sumber
C (gcc) ,
170166158155108105-3 byte berkat cleblanc
Cobalah online!
Saya pikir ini bisa bermain golf lebih lanjut dengan pendekatan yang tidak langsung, saya akan melihat apa yang bisa saya lakukan ketika saya menemukan waktu.Oke, saya tidak bisa menemukan cara lain untuk mengurangi jumlah byte untuk kode itu.
Penjelasan: pencetakan loop-sederhana dua kotak char by char.
Saat mencetak batas: jika koordinat x dan y baik genap atau ganjil, ini akan menampilkan a
/
, jika tidak, a\
ditampilkanJika bukan perbatasan, karakter spasi malah ditampilkan
sumber
puts("")
menjadi yang pertama untuk loop seperti inix,y;f(w,h){for(y=h*=2;y--;puts(""))for(x=w*2;x--;)putchar(!x|x==w*2-1|!y|y==h-1?x&y&1|~x&~y&1?47:92:32);}
/// ,
172117 byteJadi, karena output terdiri dari
///
s danwhitespace
s, harus ada pengiriman dalam 2 bahasa tersebut.Masukkan input setelah kode
W,H
sebagai nomor unary (unary untuk /// diizinkan , terima kasih kepada Challenger5 untuk saran) (gunakan*
untuk mewakili,
format digit, pisahkan dengan ).Cobalah online! (dengan input
W=4, H=3
)sumber
Python 3 ,
8782 byteSunting: Disimpan 5 byte berkat @officialaimm , @ Mr.Xcoder dan @tsh
Cobalah online!
sumber
*(b-1)
bisa jadi*~-b
, untuk -2 byte." "*2*~-a
? Adil"__"*~-a
.J, 48 byte
ungolfed
penjelasan
Cobalah online!
sumber
' '(<,~<<0 _1)}'\/'{~=/&(2|i.)&+:
. Amend sangat bagus di sini.'/\ '{~2(<,~<<0 _1)}2|+/&i.&+:
dengan beberapa refactoring05AB1E , 19 byte
Cobalah online!
Membawa argumen terbalik.
sumber
Haskell ,
8479 byteCobalah online! Contoh penggunaan:
3%6
menghasilkan daftar garis. GunakanmapM putStrLn $ 3%6
untuk mencetak kotak dengan cantik.sumber
Java 8, 141 byte
Lambda kari dari lebar ke tinggi ke keluaran.
Coba Online (tidak,
return t+i+o;
tidak disengaja)Lambda yang tidak tersentuh
Solusi ini biasanya pilih-pilih tentang ukuran input karena a
char
digunakan untuk menghitung hingga lebar input. Untungnya, algoritme ini cukup buruk sehingga pada ukuran tersebut penyelesaian program mungkin sudah menjadi masalah. Saya memilih untuk menggunakanchar
untuk indeks loop sehingga saya bisa menggunakannya kembali nanti sebagai alias murah untuk'\n'
.sumber
SOGL V0.12 ,
222113 byteCoba Di Sini! (mengharapkan kedua input pada stack jadi
..
(dan"
karena string belum dimulai secara eksplisit) - ambil input nomor dua kali ditambahkan untuk kemudahan penggunaan)Penjelasan:
sumber
Mathematica, 87 byte
Cobalah dalam Matematika (mencetak ruang ekstra di awal sebagian besar garis untuk beberapa alasan), atau di kotak pasir Wolfram ! Mengambil dua bilangan bulat sebagai input.
Ini solusi yang cukup naif, tetapi semua hal pintar yang saya coba memiliki lebih banyak byte. Sesuatu yang hampir berhasil adalah
kecuali gagal jika salah satu dimensi adalah 1 (input adalah daftar yang berisi dimensi).
sumber
Pyth ,
40 3938 byteIni mengambil dua bilangan bulat yang dipisahkan oleh baris baru.
Paket tes lengkap.
sumber
Ruby ,
62 6160 byte-1 byte terima kasih kepada Arnauld
Cobalah online!
sumber
Sebenarnya , 38 byte
Cobalah online!
sumber
J , 39 byte
Cobalah online!
Membawa dua argumen seperti
height
pada LHS danwidth
pada RHS.sumber
VBA (Excel), 161 Bytes
sumber
Sub b
c=[2*A1]
r=[2*B1]
For i=1To r
For j=1To c
Debug.?IIf(i=1Or j=1Or i=r Or j=c,IIf((i + j)Mod 2,"\","/")," ");
Next
Debug.?
Next
End Sub
c=[2*A1]:r=[2*B1]:For i=1To r:For j=1To c:?IIf(i=1Or j=1Or i=r Or j=c,IIf((i + j)Mod 2,"\","/")," ");:Next:?:Next
R,
160 byte152 byteCobalah online!
Terima kasih BLT untuk mencukur 8 byte.
sumber
s
fungsi ini?s=
bit. Fungsi anonim diizinkan.dc , 123 byte
Ini jauh dari yang terpendek, tetapi, jika seseorang mengambil dua baris terakhir dan memutarnya
pi/2
radian searah jarum jam ke posisi "tegak", itu terlihat seperti tiang totem .Mengambil input sebagai dua bilangan bulat yang dipisahkan oleh spasi.
Cobalah online!
sumber
Mathematica, 116 byte
sumber
Rotate[w,Pi]
adalah setara denganw~Rotate~Pi
, sepertio["/\\",#]
untuk"/\\"~o~#
V , 18 byte
Jawaban tidak akan memerlukan kolom char
ll
jika<M-h>ollow
dibiarkan sendiri :(Cobalah online!
sumber
C # (.NET Core) , 188 byte
Hitungan byte juga mencakup:
Cobalah online!
Saya mulai membuat penjelasan perintah demi perintah tetapi berhenti masuk akal di tengah ... Inti dasar adalah membuat kotak penuh runcing, dan kemudian melubangi tengah. Saya menggunakan Linq demi menggunakan Linq, mungkin bisa lebih pendek hanya menggunakan iterasi standar.
Berikut ini penjelasan cara keluar-ke-tengah (perintah paling-dalam dulu):
Pertama, buat baris untuk kotak penuh, dan gabungkan menjadi satu string
Lalu dapatkan setiap karakter dalam satu baris, dan jika itu bukan garis besar kotak, ganti dengan spasi, gabungkan mereka kembali menjadi satu string untuk setiap baris
Akhirnya, dapatkan setiap baris dan gabungkan mereka bersama-sama dengan baris baru (juga termasuk menghasilkan koleksi untuk baris)
sumber
Perl 5 , 83 + 1 (-n) = 84 byte
Cobalah online!
sumber