Latar Belakang
Saya memiliki banyak kotak berbentuk persegi dengan ukuran yang sama, dan karena saya orang yang rapi, saya ingin mengatur semuanya menjadi formasi persegi. Namun, jumlah mereka belum tentu kuadrat sempurna, jadi saya mungkin harus mendekati bentuk persegi. Saya ingin Anda menemukan pengaturan yang paling menyenangkan bagi saya - secara terprogram, tentu saja.
Memasukkan
Input Anda adalah bilangan bulat positif tunggal k
, mewakili jumlah kotak.
Keluaran
Program Anda harus memilih dua bilangan bulat positif m, n
yang m*(n-1) < k ≤ m*n
berlaku. Mereka mewakili lebar dan tinggi dari bentuk persegi besar seperti yang kita atur. Karena kita mencari bentuk yang secara estetika menyenangkan, jumlahnya harus minimal, sehingga bentuknya dekat dengan kotak, dan luasnya dekat . Jika masih ada beberapa kandidat untuk pasangan , pilih salah satu yang lebarnya maksimal.(m - n)2 + (m*n - k)2
k
(m, n)
m
Sekarang, hasil aktual Anda tidak akan menjadi angka m
dan n
. Sebagai gantinya, Anda harus mencetak susunan kotak, menggunakan karakter #
untuk mewakili kotak. Lebih khusus lagi, Anda harus mencetak n-1
baris, yang masing-masing terdiri dari m
karakter #
, dan kemudian satu baris k - m*(n-1)
karakter #
. Perhatikan bahwa output mengandung k
karakter yang tepat #
.
Aturan dan Penilaian
Tidak akan ada spasi putih terdepan atau tertinggal dalam output, kecuali bahwa baris terakhir dapat diisi dengan spasi tambahan m
, jika diinginkan. Mungkin ada satu trailing newline, tetapi tidak ada newlines sebelumnya. Anda dapat menggunakan karakter ASCII yang dapat dicetak sebagai pengganti #
, jika diinginkan.
Anda dapat menulis program lengkap, atau mengembalikan string dari suatu fungsi. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Uji Kasus
Berikut adalah output yang benar untuk beberapa nilai input.
1
#
2
##
3
##
#
4
##
##
8
###
###
##
13
#####
#####
###
17
######
######
#####
18
#####
#####
#####
###
20
#####
#####
#####
#####
21
######
######
######
###
22
######
######
######
####
23
#####
#####
#####
#####
###
sumber
:
hilang pada baris 5. Koma adalah yang mendefinisikan tupel, tanda kurung()
dapat dihapus pada baris 6. Spasi antara)
dan (if
ataufor
) juga.max
bisa mendapatkan generator sebagai parameter, sehingga tanda kurung[]
redundan. Anda beralih padad
kunci, sehingga Anda dapat menggunakan dengan amand[i]
.(i+1)*x
menjadi-~i*x
ataui*x+x
.(i*x+x
...CJam (
4442 bytes)Demo online
Saya agak berharap ada solusi sederhana yang melibatkan akar kuadrat, tetapi sama sekali tidak sesederhana itu. Misalnya untuk input
31
, lebar baris dua lebih besar dari plafon akar kuadrat; untuk273
(akar kuadrat lebih dari 16,5) kuadrat perkiraan terbaik adalah persegi panjang 21x13 sempurna.sumber
CJam, 42 byte
Cobalah online
Penjelasan:
sumber