Anda tahu rak-rak yang bisa ditumpuk yang pada dasarnya hanya kotak kayu yang bisa ditumpuk bersama? Kita akan mensimulasikan membangun beberapa rak buku dari yang memiliki seni ASCII.
Buku kami semua nyaman seragam dalam ukuran, dan semua terlihat seperti berikut ini:
|X|
|X|
|X|
Rak buku adalah kotak tersendiri, selalu tiga karakter di bagian dalam (cukup untuk membuat buku berdiri tegak), terdiri dari |
karakter di kiri dan kanan, -
karakter untuk atas dan bawah, dan cukup lebar untuk muat X
buku (di mana X
ada input bilangan bulat). Misalnya, berikut ini rak buku berukuran 3
:
|---------|
| |
| |
| |
|---------|
karena Anda dapat memasukkan 3
buku ke dalamnya seperti itu
|---------|
||X||X||X||
||X||X||X||
||X||X||X||
|---------|
Masukan akan menjadi dua bilangan bulat yang benar-benar positif, X
dan Y
, di mana X
lebar rak yang kita miliki (diukur dalam buku), dan Y
berapa banyak buku yang harus kita susun. Jika kita memiliki lebih banyak buku daripada yang muat di satu rak, kita perlu menambahkan lebih banyak rak ke atas. Sebagai contoh, ini adalah input 4 wide / 6 books
:
|------------|
||X||X| |
||X||X| |
||X||X| |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
Jika Y % X > 0
, artinya jumlah buku bukan kelipatan bilangan bulat dari ukuran rak, sisa buku harus berada pada posisi paling atas paling kiri (seperti dalam kasus dengan 4 6
, di atas) dan sisa bagian dari rak yang diisi dengan spasi.
Memasukkan
- Dua bilangan bulat yang benar-benar positif dalam format apa pun , masing-masing
>0
. - Anda dapat mengambil input dalam urutan apa pun (mis., Ukuran rak terlebih dahulu, lalu jumlah buku, atau sebaliknya). Silakan sebutkan dalam kiriman Anda, pesanan input.
- Anda dapat dengan aman berasumsi bahwa input tidak akan lebih besar dari
[int]
ukuran default bahasa Anda (atau setara).
Keluaran
Representasi seni ASCII yang dihasilkan dari buku dan rak buku.
Aturan
- Leading atau trailing newlines atau whitespace semuanya opsional, asalkan karakternya berbaris dengan benar.
- Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
- Jika memungkinkan, harap sertakan tautan ke lingkungan pengujian online agar orang lain dapat mencoba kode Anda!
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
Contoh lebih lanjut
6 wide / 2 books
|------------------|
||X||X| |
||X||X| |
||X||X| |
|------------------|
2 wide / 6 books
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
4 wide / 9 books
|------------|
||X| |
||X| |
||X| |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
Jawaban:
JavaScript (ES6),
1009998 byteMengambil lebar
w
dan jumlah bukub
dalam sintaks currying(w)(b)
.Diformat dan dikomentari
Uji kasus
Tampilkan cuplikan kode
sumber
Bash (+ utilitas),
130,108, 106 byteSatu, terus menerus, pipeline shell untuk membuat rak buku Anda.
Changelog:
printf + seq
dengan mentahprintf
, -10 byteGolf
Cobalah secara Online!
Bagaimana itu bekerja
$./shelf 2 3
printf %$2s\\n
- menghasilkan n karakter spasi putih, satu per buku (ditampilkan sebagai_
)___
fold -$1
- lipat dengan panjang raksed "s/ /|X|/g;"
- ganti_
denganX
, tambahkan sampul buku:;/.\{$[$1*3]\}/!s/$/ /;t
- bantalan kanan dengan spasi (ditampilkan sebagai_
)h;s/./-/gp;x;p;p;p;x
- rangkap tiga setiap baris, dan tambahkan---
sebelum dan sesudahnya.sed 's/.*/|&|/'|tac
- bungkus garis masuk| |
, balikkan dengan tacsumber
t
alih-alihb
Anda tidak perlu{}
. Anda dapat melewatis/./-/g
karena sudah-
s. Cobalah secara Online!Python 2,
133113105 byteSaya yakin ada cara yang lebih baik ...
Masukan diambil
width, books
-20 byte terima kasih kepada @ovs karena memperhatikan fungsi lambda yang tidak perlu!
-8 byte terima kasih kepada @ovs untuk mempersingkat input.
sumber
X,Y=input()
adalah cara yang lebih singkat untuk mengambil nilai.X, Y
, bukan?'|'
sebagai variabel.Batch, 261 byte
Gunakan trik saya dari jawaban Batch saya untuk Ayo bermain tenis untuk dengan mudah mencetak banyak
|
karakter.sumber
Haskell , 100 byte
x#y
mengembalikan string untuk lebarx
dany
buku.Cobalah online!
Fungsi / operator utama adalah
#
. Ketikax<y
membagi buku menjadiy-x
danx
, kemudian berulang. Kapanx>=y
,w
danb
dua tipe garis, minus|
s luar dan baris baru.Operator helper
s?n
merangkain
salinan strings
.sumber
PowerShell ,
149134 byteCobalah online!
Mengambil input
$w
dan input$b
. Setel string$s
menjadi salah satu rak horizontal. Lalu kami memiliki duaif
pernyataan.Yang pertama memeriksa apakah kami memiliki buku "sisa". Jika demikian, kami menampilkan rak, (jumlah buku plus jumlah spasi)
*3
, dan rak lainnya.Selanjutnya, kami melihat apakah kami masih memiliki buku yang tersisa setelah menghapus sisanya (
$a
). Jenis penyiapan yang sama, kecuali kami menggunakan$w
sejumlah buku. Karena pada titik ini,$b
dijamin kelipatan$w
(karena kami menghapus sisanya,$a
), kita tidak perlu khawatir tentang pembulatan.Menghapus
[math]::Floor()
panggilan, menghemat 15 byteSemua string ini ditinggalkan di jalur pipa, dan tersirat
Write-Output
terjadi saat penyelesaian program.sumber
CJam ,
6261 byteMengambil input sebagai
width books
Cobalah online!
Penjelasan
sumber
Python 3, 142 byte
Masih mengerjakannya.
b
untuk 'jumlah buku' danw
untuk lebar rak.sumber
R=b%w
dipindahkan ke baris berikutnya. Selain itu, Anda harus dapat menghapus spasi di sekitar ketiganya=
untuk menghemat beberapa byte.d+3*p+d if R!=0 else ''
denganR and d+3*p+d or''
d+3*p+d
?AHK, 208 byte
Ada beberapa hal yang membuat saya frustrasi karena bermain golf lebih lanjut:
%1%
&%2%
) dalam fungsi matematika karena mereka mengharapkan input variabel atau angka dan itu akan menganggap yang tidak terhapuskan1
menjadi nomor satu daripada nama variabelVersi yang lebih mudah dibaca di atas terlihat seperti ini:
Jika a
Loop
tidak menggunakan tanda kurung{}
, maka hanya baris berikutnya yang merupakan bagian dari loop. Jika menyetel nilai variabel menggunakan:=
alih-alih=
, Anda bisa menjatuhkan karakter keluar tanda persen. Tilde n adalah karakter baris baru.sumber
Java 7,
230224222 bytePenjelasan:
Kode uji:
Coba di sini.
Keluaran:
sumber
.repeat
sungguh, sangat membantu dalam tantangan ini .PowerShell, 109 byte
Skrip uji yang kurang golf:
Keluaran:
PowerShell, 109 byte, alternatif
sumber
Python 2 ,
120118 byteCobalah online!
Berarti sudah mencoba yang satu ini selama beberapa hari terakhir. Sekarang saya akhirnya punya waktu untuk melakukannya, sudah ada jawaban Python yang lebih pendek. Oh well, baru diposting sebagai alternatif.
Input diambil sebagai lebar, buku
sumber
SOGL , 64 byte
Penjelasan: Fungsi pertama:
fungsi kedua:
fungsi ini mengharapkan nomor (jumlah buku) pada tumpukan dan menampilkan buku-buku rak buku
Lebih jauh ke bawah contoh yang diberikan adalah e = 3 (lebar rak buku) dan b = 8 (jumlah buku)
ini adalah rak buku bagian atas / bawah dan selalu berada di tumpukan bagian pertama (rak buku setengah kosong)
Bagian utama pertama
Dan bagian terakhir
sumber
Java (JDK) , 124 byte
Cobalah online!
Kredit
sumber
PHP> = 7.1, 138 Bytes
Versi Online
sumber
Kanvas , 33 byte
Coba di sini!
Penjelasan (beberapa karakter telah diganti untuk terlihat lebih monospace):
sumber
Pip
-n
, 45 byteMengambil lebar dan jumlah buku, masing-masing, sebagai argumen baris perintah. Cobalah online!
Penjelasan
Kami menjalankan loop untuk mencetak rak satu per satu dari atas ke bawah. Pada setiap iterasi, kami memperbarui
b
(jumlah buku yang akan dicetak) dengan mengurangiy
(jumlah buku yang dicetak pada iterasi itu). Ketikab
mencapai 0, loop keluar.Karena itu sedikit terlibat, inilah contoh iterasi pertama ketika
a = 3, b = 8
:yang kemudian dicetak sebagai
sumber
Pyth , 56 byte
Menerima lebar rak, jumlah buku sebagai argumen terpisah dalam urutan itu. Coba online di sini , atau verifikasi semua uji sekaligus di sini .
sumber
Keempat (gforth) , 622 byte (diminimalkan (hapus komentar, indentasi, nama kata 1-char) hingga 303 byte)
Main pertama saya dengan Forth :)
Cobalah online!
Keluaran
sumber