Buat program yang membutuhkan panjang dan daftar interval dan output penggaris dengan panjang itu untuk setiap interval menggunakan karakter menggambar garis ┌ ┬ ┐ │ ╵
- Baris pertama dari output harus dimulai dengan tanda centang untuk 0 dengan
┌
dan diakhiri dengan tanda centang untuk panjang dengan┐
, dengan┬
yang digunakan untuk setiap karakter di antaranya. Akan ada totallength
+1 karakter gambar garis di baris pertama ini. - Centang harus diperpanjang secara vertikal dengan penambahan setengah karakter menggunakan
╵
dan│
berdasarkan interval input. - Interval terdaftar dari terkecil ke terbesar, relatif terhadap interval sebelumnya. Untuk menguraikan:
- Interval pertama memberitahu berapa banyak kutu dasar (baris pertama - satu karakter per kutu) berada dalam interval kedua-terkecil (interval terkecil adalah 1). Misalnya, [3] akan memperpanjang setiap centang ketiga dengan setengah karakter.
- Interval kedua dan selanjutnya dalam hal interval terkecil berikutnya. Misalnya [3, 5] akan memperpanjang setiap tick dasar ke-15 dengan karakter penuh dan [3, 5, 2] akan memperpanjang setiap tick dasar ke-30 dengan karakter setengah.
- Sub-interval 1 adalah valid dan efektif berarti bahwa garis interval terakhir diperpanjang oleh karakter penuh dan bukan setengah karakter.
- Contoh kasus uji harus membantu menjelaskan cara kerjanya.
Contoh / Kasus Uji
3, []:
┌┬┬┐
9, [3]:
┌┬┬┬┬┬┬┬┬┐
╵ ╵ ╵ ╵
30, [5, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │
32, [4, 2, 2, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │ ╵ │
│ ╵ │
48, [5, 3, 2]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │ ╵ ╵ │ ╵ ╵ │
╵ ╵
24, [7, 3]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │
17, [3, 2, 1]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵
╵ ╵ ╵
1, [23, 19, 13, 11, 7, 5, 3, 2, 1]
┌┐
│
│
│
│
╵
Aturan / Catatan Lainnya
- Input dan output dapat menggunakan format apa pun yang nyaman
- Penguasa tidak harus berakhir pada tanda centang utama
- Daftar interval mungkin kosong
- Zeroth tick selalu dalam semua interval.
- Anda dapat mengasumsikan panjang dan interval penggaris akan selalu menjadi bilangan bulat positif kurang dari 120
- Trailing whitespace baik-baik saja, tetapi memimpin whitespace tidak baik.
- Setiap ruang tetap-tunggal-lebar diizinkan sebagai karakter spasi jika Anda, karena alasan tertentu, ingin menggunakan sesuatu selain ruang ASCII.
Selamat Golf!
Jawaban:
JavaScript (Node.js) , 123 byte
Cobalah online!
Gunakan fungsi ini sebagai
f(20)([5, 2])
.Terima kasih Arnauld, menghemat 4 byte.
sumber
Perl 6 ,
130 122 10292 byte-10 byte terima kasih kepada nwellnhof!
Cobalah online!
Ah ya, jauh lebih pendek dari metode saya sebelumnya. Ini adalah blok kode anonim yang mengembalikan daftar baris.
Penjelasan:
sumber
Dyalog APL,
66645852 byteCobalah online!
¯2¯8¯14 bytes berkat ngn !sumber
∊'┌'(1↓⍵⍴'┬')'┐'
->'┌┬┐'/⍨2⍵2-1
+⌿0=(×\⍺)∘.|⍳1+⍵
->⊥¨⍨0=(⍵+1)⍴⍳⌽⍺
. menerima⍺
dalam urutan terbalik telah diizinkan secara eksplisit sekarang, jadi Anda juga dapat menghapus⌽
('┌┬┐'/⍨2⍵2-1)
->'┌┬┐'[2,⍨×⍳⍵]
('┌┬┐'/⍨2⍵2-1)⍪⍉
->'┌┐'@0⍵@0⍉'┬',
Python 3 ,
173172 byteCobalah online!
sumber
05AB1E , 51 byte
Tidak terlalu senang dengan
I¯Qiεõ}}
pekerjaan-sekitar untuk daftar input kosong .. Dan pasti bisa bermain golf di beberapa bagian lain juga ..CATATAN: Menggunakan bilangan bulat terkompresi yang dikonversi ke karakter yang diperlukan, karena menggunakan karakter yang diperlukan secara langsung berarti saya harus menghitung seluruh program dalam UTF-8, meningkatkannya terlalu banyak untuk semua karakter bawaan 05AB1E juga.
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Lihat tip tambang 05AB1E ini (bagian Cara mengompres bilangan bulat besar? ) Untuk memahami mengapa
•5·W4•
ada94749589
dan•áΣ=Yô•
tidak948495169488
.sumber
×S
bisa jadiи
sиS
tidak bekerja, tapi sayangnya itu satu byte lebih lama daripada lebih pendek. Itu karena bilangan bulat berada di tumpukan pertama, dan string setelahnya. Dengan×
itu tidak masalah apakah ituint,string
ataustring,int
, tetapi denganи
itu mengharapkanstring,int
.и
! Itu bagus untuk diketahui di masa depan, saya belum pernah melihatnya digunakan sebelum salah satu jawaban Anda yang lain.Arang , 50 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Karakter kotak-gambar memiliki representasi 3 byte di Charcoal, jadi string di atas hanya 40 karakter. Penjelasan:
Hitung produk kumulatif dari interval.
Cetak baris pertama tanda centang. Karakter kiri dan kanan adalah jalan yang salah karena hasilnya tercermin kemudian.
Hitung jumlah interval yang merupakan faktor dari setiap tanda centang. Hasilkan string
│
s dari setengah panjangnya dan tambahkan╵
untuk panjang aneh. Cetak setiap string ke bawah dengan string berikutnya dalam kolom sebelumnya, yaitu urutan terbalik.Refleksikan semuanya untuk mendapatkan penggaris dalam urutan kiri-ke-kanan.
sumber
Kanvas ,
424140 byteCoba di sini! ( dengan font yang menampilkan output )
sumber
Emacs Lisp , 303 byte
Gunakan fungsi ini sebagai
(f '(30 (5 2)))
.Versi lebih mudah dibaca:
sumber
Jelly ,
4241 byteProgram lengkap.
Cobalah online!
Atau lihat test-suite
Catatan: kode ini telah diubah dari program lengkap -
ñ
(tautan selanjutnya sebagai angka dua) telah diganti dengan1ŀ
(tautan pada indeks 1 sebagai angka dua) untuk memungkinkannya dipanggil beberapa kali oleh catatan kaki .Bagaimana?
sumber
Ruby , 126 byte
Cobalah online!
Tampak agak bertele-tele dengan semua
each_slice
hal itu, tetapi akan dilakukan untuk saat ini, kecuali saya berhasil menemukan pendekatan golf.Mengambil input
l
untuk panjang dani
untuk interval, mengembalikan array string.sumber
R ,
175170 byteCobalah online!
Mengambil interval kosong sebagai
0
, mengembalikan matriks karakter. TIO link menampilkan output yang tercetak cantik.sumber
Haskell ,
167164149 byteCobalah online! Pendekatan golf sedikit berbeda oleh Οurous .
Cobalah online! Masih ada beberapa redudansi yang sepertinya dapat dieksploitasi, tetapi sejauh ini mereka menahan semua upaya bermain golf lebih lanjut.
Solusi 167 byte sebelumnya adalah sama, terlepas dari penanganan baris baru dan mungkin sedikit lebih baik dibaca:
Cobalah online!
sumber
PowerShell , 152 byte
Cobalah online!
Belum dibuka:
sumber
C # (Visual C # Interactive Compiler) , 204 byte
Cobalah online!
Output, tetapi macet di loop tak terbatas.
sumber
Bersih ,
221201195162 byteCobalah online!
Mengembalikan daftar daftar karakter UTF-8 (sebagai string, karena Clean tidak memiliki dukungan UTF-8 bawaan).
Bekerja dengan membuat baris pertama, kemudian mengambil produk dari awalan daftar yang disediakan dalam kelompok dua, dan memeriksa tanda yang akan ditarik berdasarkan apakah produk membagi posisi karakter saat ini.
Tidak Disatukan:
sumber