Misalkan ubin tak terbatas segi enam yang terdiri dari |/\
karakter.
/ \ / \ / \ / \
| | | | |
\ / \ / \ / \ / etc.
| | | |
\ / \ / \ /
Diberikan input n > 0
, output bagian segitiga dari ubin yang digambarkan dalam contoh di bawah ini, berlabuh dengan _
di tengah segi enam:
n=1
\_/
n=2
\/ \/
\_/
n=3
\ | /
\/ \/
\_/
n=4
\/ \ / \/
\ | /
\/ \/
\_/
n=5
\ | | /
\/ \ / \/
\ | /
\/ \/
\_/
n=6
\/ \ / \ / \/
\ | | /
\/ \ / \/
\ | /
\/ \/
\_/
n=7
\ | | | /
\/ \ / \ / \/
\ | | /
\/ \ / \/
\ | /
\/ \/
\_/
n=8
\/ \ / \ / \ / \/
\ | | | /
\/ \ / \ / \/
\ | | /
\/ \ / \/
\ | /
\/ \/
\_/
and so on
Aturan
- Leading / trailing newlines atau spasi putih lainnya adalah opsional, asalkan karakternya berbaris dengan tepat.
- Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
- Keluaran bisa ke konsol, disimpan sebagai gambar, dikembalikan sebagai daftar string, dll.
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
Jawaban:
Python 2 , 86 byte
Cobalah online!
Salah satu trik Erik memungkinkan saya bermain golf 3 byte! Disimpan 3 byte berkat Jonathan Allan.
Bagaimana ini bekerja?
Pertama, ini mendapat input dari STDIN dan menugaskannya ke dua variabel terpisah
i
dank
. Kemudian, ketika variabelnyai
benar, kami menurunkannya dan menghasilkan string yang sesuai; ini adalah singkatan untuk pengulangan dari input - 1 hingga 0.Menghasilkan String
Saya akan membagi ini menjadi lebih banyak bagian:
Pertama, mendapatkan jarak memimpin dicapai dengan
" "*(k+~i)
. Karenai
dipetakan melalui rentang (input, 0] , kita harus mengurangkannya darik
(input asli yang disimpan dengan aman), mengurangi dan mengulangi spasi yang berkali-kali.+"\\"
- Menambahkan karakter"\"
ke spasi di atas.' / |\ '[i%2::2]
- Menghasilkan dua string kami, yaitu"/ \ "
dan" | "
, dengan cara berikut:Jika
i
ganjil, i% 2 adalah 1 , dengan demikian[i%2::2]
mengembalikan setiap 2 karakter dari string kami yang lebih besar, mulai dari indeks 1 (0-diindeks).Jika
i
genap, i% 2 adalah 1 , maka mekanisme di atas melakukan hal yang sama kecuali dimulai pada indeks 0 .+~-i*
- Mengulang string yang dihasilkan di atas, baik"/ \ "
atau" | "
, i-1 kali, dan menambahkannya ke string lain. Manfaat dari operator bitwise (~
- Komplemen Bitwise, Setara dengan saya dikurangi -1 ) adalah tidak memerlukan tanda kurung dalam konteks ini.[:k-~i]
- Mendapat semua karakter dari string yang digabungkan di atas sampai indeks k- ~ i = k - (-1 - i) = k + 1 + i .+"_/"[i>0:]
- Ini hanya menambah"/"
jika saya ≥ 1 , kalau tidak ditambahkan_/
.Contoh lengkap / detail eksekusi
Mari kita ambil contoh cara kerja untuk input 4 :
sumber
i-=1
ke awal lingkaran dan gunakan formasi sisi kanan yang sedikit berbeda untuk menurunkannya menjadi 87 byte .Python 2 , 90 byte
Cobalah online!
sumber
05AB1E , 33 byte
Cobalah online!
sumber
Mathematica, 131 byte
mengembalikan daftar string
Cobalah online!
sumber
Retina ,
129119112 byteCobalah online!
sumber
Arang , 26 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode.
sumber
Python 2 ,
1231121101091009896 byteCobalah online!
sumber
-1-a
dengan~a
(seperti yang saya lakukan dalam jawaban saya).Python 2 , 103 byte
Cobalah online!
sumber
APL (Dyalog) ,
9793 byteCobalah online!
sumber
SOGL V0.12 ,
2827 byteCoba Di Sini!
sumber
Haskell ,
9695 byteCobalah online!
0-diindeks dan mengembalikan daftar garis.
sumber
Haskell,
10199 byteMengembalikan daftar garis.
Cobalah online!
Bagaimana itu bekerja:
Sunting: @Laikoni menyimpan dua byte. Terima kasih!
sumber
([1,3..n-1]>>)
bisa digunakan sebagai ganti([1..div n 2]>>)
.Java (OpenJDK 8) ,
315306 byteCobalah online!
sumber
Java (OpenJDK 8) , 198 byte
Akhirnya mendapatkannya di bawah 200 byte. Mungkin akan memposting penjelasan nanti.
Cobalah online!
sumber
JavaScript (ES6),
8985 byteDemo
Tampilkan cuplikan kode
sumber
CJam, 43
Cobalah online
sumber
PHP, 89 +1 byte
Jalankan sebagai pipa dengan
-nR
atau coba online .sumber
Pyth ,
4644 byteCoba di sini!
sumber