Anda akan diberikan bilangan bulat positif N
sebagai input. Tugas Anda adalah membangun Semi-Zigzag, N
sisi, masing-masing panjangnya N
. Karena relatif sulit untuk menggambarkan tugas dengan jelas, berikut adalah beberapa contoh:
N = 1
:HAI
N = 2
:HAI OO
N = 3
:OO OO OOO
N = 4
:OOOOO OO OO OOOO
N = 5
:OOOOOO OOO OOO OOO OOOOOO
N = 6
:OOOOOOO OOO OOO OOO OOO OOOOOOOOOOOO
N = 7
:OOOOOOOOO OOOO OOOO OOOO OOOO OOOO OOOOOOOOOOOOOO
Seperti yang Anda lihat, Semi-Zigzag terbuat dari garis diagonal dan horizontal bergantian, dan selalu dimulai dengan garis diagonal kiri atas ke kanan. Perhatikan bahwa karakter pada garis horizontal dipisahkan oleh spasi.
Aturan
Anda dapat memilih karakter non-spasi putih alih-alih
O
, bahkan mungkin tidak konsisten.Anda dapat menampilkan / mengembalikan hasilnya sebagai String atau sebagai daftar String, masing-masing mewakili satu baris .
Anda mungkin memiliki baris tambahan atau baris baru.
Berlaku celah default .
Anda dapat mengambil input dan memberikan output dengan cara standar apa pun .
Jika memungkinkan, harap tambahkan tautan pengujian ke kiriman Anda. Saya akan menjawab setiap jawaban yang menunjukkan upaya bermain golf dan memiliki penjelasan.
Ini adalah kode-golf , jadi kode terpendek dalam byte di setiap bahasa menang!
Jawaban:
Arang , 24 byte
Cobalah online!
Terima kasih kepada Neil .
AST:
sumber
FN§⟦↘→↗→⟧ι⁻Iθ¹→
(hanya 15 byte), tetapi daftar arah tampaknya tidak berfungsi dengan baik di Charcoal. Sayang sekali.FN✳§⟦↘→↗→⟧ι⁻θ¹O
akan bekerja setelah Dennis menarik,✳
dilemparkan ke arahPython 2 ,
157153 byteCobalah online!
n*3/2*~-n+1
adalah lebar setiap baris: ⌊3n / 2⌋ · (n − 1) + 1 karakter.q*n+s*(4*n-6)
mewakili baris atas dan bawah. Jika kita mengulanginya dan mengiris[2*(n-1):]
kita mendapatkan baris paling atas; jika kita mengiris[5*(n-1):]
kita mendapatkan baris paling bawah. Oleh karena itu definisip
dan panggilan kep(2)
danp(5)
. Tetapi karena kita membutuhkan pengulangan dan pengirisan panjang garis untuk semua jalur lain, kita menggunakan kembalip
dalam loop.i*s+s+o+…
hanya ekspresi yang membosankan untuk baris tengah.n>1>p(5)
akan korsleting jikan≯1
, menyebabkanp(5)
tidak dievaluasi. Oleh karena itu, singkatan untukif n>1:p(5)
.sumber
Mathematica,
1261251211121048986 byte#
adalah nomor input untuk fungsi anonim (diakhiri oleh final&
).m=" "&~Array~{#,#^2-#+1};
membuat matriks karakter ruang dengan ukuran yang tepat dengan mengisi array dimensi yang diberikan#,#^2-#+1
dengan output dari fungsi anonim konstan "menghasilkan spasi"" "&
.Do[foo,{j,#},{i,#}]
adalah sepasang do loop bersarang, di manaj
berkisar dari1
ke#
dan di dalam itui
berkisar dari1
ke#
.m[[1[i,#,-i][[j~Mod~4]],j#-#+i+1-j]]="X"
menetapkan bagian yang sesuai dari matriks menjadi karakterX
berdasarkanj
dani
. The-i
menggunakan pengindeksan negatif untuk menyelamatkan byte dari#-i+1
. (Saya lupa menulisMod[j,4]
sepertij~Mod~4
dalam versi asli kode ini.) Jenny_mathy menunjukkan bahwa kita dapat menggunakan residu modular untuk mengindeks ke dalam daftar secara langsung (daripada menggunakanSwitch
) untuk menghemat 9 byte, dan JungHwan Min menunjukkan bahwa kita tidak melakukannya t perlu digunakanReplacePart
karena kita dapat mengatur bagian dari array dan yang1[i,#,-i][[j~Mod~4]]
menggunakan perilaku aneh dan generalitas[[foo]]
untuk menyimpan byte{1,i,#,-i}[[j~Mod~4+1]]
Anda dapat menguji ini di kotak pasir Wolfram Cloud dengan menempelkan kode seperti berikut ini dan menekan Shift + Enter atau Enter numpad:
sumber
ReplacePart
sini.m=ReplacePart[...]
bisam[[{1,i,#,-i}[[j~Mod~4+1]],j#-#+i+1-j]]="X"
- Anda dapatSet
suatuPart
daftar. Itu menghilangkan 15 byte.{1,i,#,-i}[[j~Mod~4+1]]
bisa juga1[i,#,-i][[j~Mod~4]]
. Trik ini berfungsi karena[[0]]
mengembalikanHead
ekspresi.C ++,
321234 byte-87 byte terima kasih kepada Zacharý
Mengembalikan vektor string
sumber
Mathematica, 179 byte
edit untuk @JungHwanMin
sumber
Mod[z,4]==0
digantiMod[z,4]<1
?Mod[#,4]
dengan#~Mod~4
untuk -1 byte?05AB1E ,
212019 byteKode
Menggunakan mode kanvas baru:
Menggunakan penyandian 05AB1E . Cobalah online!
Penjelasan:
Untuk input 6 , ini memberikan argumen berikut (dalam urutan yang sama) untuk kanvas:
Untuk menjelaskan apa yang dilakukan kanvas, kami memilih kumpulan argumen pertama dari daftar di atas.
Angka 6 menentukan panjang string yang akan ditulis ke kanvas. Pengisi digunakan untuk menulis di atas kanvas, yang dalam hal ini adalah
O
. Secara siklikal berjalan melalui string pengisi. Arah string ditentukan oleh argumen terakhir, arah. Arahannya adalah:Ini berarti bahwa 3 menetapkan arah ke tenggara , yang juga dapat dicoba online .
sumber
SOGL V0.12 , 36 byte
Coba Di Sini!
Ide dasarnya adalah untuk setiap nomor rentang input pilih menambahkan diagonal atau bagian bertitik horisontal, dalam hal ini akan membalikkan array agar lebih mudah ditambahkan. Penjelasan:
Jika input 1 tidak diizinkan, maka
ο.∫2%?.╝}F2\?№@.┌Ο};1w⁄Hh1ž}.4%1>?№
akan berfungsi juga. Jika angka acak yang melayang diizinkan.∫2%?.╝}F2\?№@.┌Ο};1w⁄Hh1ž}.4%1>?№
akan bekerja juga. Jika saya tidak malas dan diimplementasikan‼
,}F2%?
bisa diganti dengan‼
-4 bytesumber
Mathematica,
10687 byteMengembalikan
SparseArray
objekString
s. Untuk memvisualisasikan output, Anda dapat menambahkanGrid@
. Melempar kesalahan untuk kasus1
, tetapi aman untuk diabaikan.Penjelasan
Atur
i
danj
ke 1.Setel
k
ke input - 1.Setel
l
kek*input + 1
Ulangi
l
waktu, mulai dari0
, bertambah1
setiap kali ...Tambahkan komponen imajiner
i
kej
...Jika iterasi saat ini dapat dibagi dengan
k
, kalikani
dengan unit imajiner ...Buat
Rule
objek yang mengubah elemen di posisi{j, current iteration + 1}
ke"o"
Buat
SparseArray
objek menggunakan objek yang dihasilkanRule
, dengan dimensi{input, l}
, gunakan" "
sebagai kosong.Cobalah di Wolfram Sandbox!
sumber
SparseArray
sebuah array? Dapat divisualisasikan menggunakanGrid
atauMatrixForm
, tapi saya biasanya tidak akan menghitungnya sebagai "daftar string" di sini. Jika array 2D karakter sudah mencukupi, itu memotong 8 byte dari solusi saya (12 sebelum bantuan Jenny_mathy), misalnya.SparseArray
tanggapan, jadi saya kira itu baik-baik saja.Python 3 ,
228 226 224 215 197195 byte-11 byte Terima kasih kepada @Mr. Xcoder
-2 byte Terima kasih kepada @Mr. Xcoder
Cobalah online!
Penjelasan dan kode kurang golf:
sumber
c+=i%(n-1)<1
denganc+=i%~-n<1
untuk -2 byteif 2>n:return'o'
cukup berlebihan. Saya membuat penyelesaian denganc+=i%[~-n,n][2>n]<1
bukannyac+=i%~-n<1
.Haskell , 197 byte
Cobalah online!
Terima kasih kepada @Lynn: memperbaiki spasi antara
O
s pada segmen horizontal zigzag, tetapi harganya sangat mahal!Beberapa penjelasan:
r
adalah deretan output: ia memiliki0 y y y y y 0 x x x 0 y ...
format, jumlahx
dany
tergantung pada baris dan inisialn
x='0'
dany=' '
x=' '
dany=' '
x=' '
dany='0'
take(div(3*n)2*(n-1)+1)
memotong baris tanpa batas di tempat yang tepatn=1
:take n
menangani case ini.sumber
replicate n x
bisa diganti denganx<$[1..n]
. Juga, jawaban Anda tidak memiliki spasi antaraO
s pada segmen horizontal zigzag.Python 2 ,
155151146137 byteCobalah online!
sumber
`L`[2::5]
menghemat satu byte lebih''.join(L)