Mengkuadratkan Alun-Alun adalah proses ubin persegi hanya menggunakan kotak lainnya. Jika ubin ini hanya menggunakan kotak dengan ukuran berbeda, maka itu dianggap sempurna . Kotak kuadrat sempurna terkecil yang mungkin adalah ubin 112x112 persegi menggunakan 21 kotak yang berbeda.
Saya telah membuat versi seni ascii dari kotak ini di bawah:
################################################################################################################
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ############################
# ## ############################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ############################################# #
# ############################################# #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###############################
# ## ## ###############################
# ## ## ## ## #
# ## ## ## ## #
################################################################## ## ## #
################################################################## ## ## #
# ## ## ########################### #
# ## ## ########################### #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ################## ## #
# ## ################## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###########################################
# ## ## ###########################################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ########################################### #
# ########################################### #
# ## ## ## #
# ## ## ## #
################################## ## #
################################## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
################################################################################################################
Kiriman Anda harus mencetak kotak di atas. Anda dapat mencetak refleksi dan / atau rotasi kotak di atas jika Anda mau. Baris baru yang tertinggal di baris terakhir diizinkan. Ini adalah kode-golf , jadi pengiriman terkecil menang!
code-golf
kolmogorov-complexity
Nathan Merrill
sumber
sumber
#
sebagai gantinyaX
Jawaban:
CJam,
888483 byteUji di sini.
Penjelasan
Inilah ide dasarnya: mulailah dengan kotak "kosong" 112x112. Sekarang pergi melalui kotak dalam urutan membaca (kiri ke kanan, atas ke bawah). Tambahkan setiap kotak ke posisi pertama yang tersedia. Setelah itu, cetak semua baris yang sudah selesai - ini memastikan bahwa kita hanya perlu memeriksa baris pertama (yang tersisa) untuk mencari tahu ke mana persegi selanjutnya berjalan.
Kotak kosong diinisialisasi ke
p
s, karena saya membutuhkan karakter dengan kode karakter lebih besar dari ruang dan#
, dan karena saya bisa menggunakan kembali kode karakternya sendiri112
untuk ukuran kotak awal. Saya memanfaatkan beberapa trik seni ASCII Dennis di sini untuk mengisi kotak-kotak kecil ke dalam kotak.sumber
Mathematica
360426Kode ini bekerja dengan terlebih dahulu menggambar kuadrat kotak yang sempurna, rasterising dan binarizing gambar, dan kemudian mengonversi 0 menjadi "#" dan 1 menjadi "".
Output dikembalikan sebagai karakter ASCII biasa dalam sebuah tabel.
Saya lebih suka rendering ini, diperoleh dengan menghapus
Thickness[.015]
sumber
#
's. Itu bertabrakan dengan kotak lain di kanan dan bawah, yang ditarik dengan cara yang sama. Di mana dua kotak yang memiliki#
semua bulat di luar bertemu, karena itu Anda mendapatkan ganda#
untuk garis dalam, Dan kotak memang persegi, mereka memiliki jumlah karakter yang sama secara vertikal dan horizontal, Masalahnya adalah font. Jawaban ini tidak sesuai dengan spesifikasi, Jika diterima, pertanyaannya akan tertutup untuk kemenangan yang tidak objektif.Ruby, 180 byte
Versi golf berdasarkan pada versi ungolfed di bawah ini. Kami mengambil keuntungan dari kenyataan bahwa biasanya ada 2 atau 3 kotak dengan yang sama
y
koordinat yang untuk sudut kiri atas.String sulap pertama berisi kode ASCII untuk
square sidelength+70
dany increment +40
. Ketika menemukan sidelength kuadrat (kode Ascii> 67) kita mengasumsikan kuadrat berikutnya berada pada koordinat y yang sama, dan koordinat x dapat diperoleh dengan menambah koordinat x saat ini dengansidelength+2
. Ketika menjumpai kenaikan bertahap (kode Ascii <67) kami menambah koordinat y sesuai dan mengatur ulang koordinat x ke angka yang dikodekan dalam string sihir kedua.Versi asli
Solusi ini (sepenuhnya ungolfed) mengandung 315 byte, tidak termasuk baris dan indentasi kosong. Ini hanya menciptakan sebuah array 112 string 112
#
's lalu menggantikan bagian dalam kotak dengan spasi.sumber
C, 198 byte
(Tidak disatukan)
Semua ini dilakukan dengan memindai melalui array 112 × 112 byte (diinisialisasi ke nol). Setiap kali bertemu dengan byte nol, ia mengambil nilai dari array
i
dan menambahkan kotak ukuran yang sesuai. Byte tambahan di setiap baris bertindak sebagai terminator string sehingga kita dapat menggunakanputs()
untuk menghasilkan seluruh baris alih-alih menggunakanputchar()
untuk menghasilkan karakter secara individual.Ini mungkin bisa bermain golf sedikit lagi, tapi saya rasa tidak banyak peluang mengalahkan jawaban steveverrill .
(tautan ideone)
sumber
#
ketika!(p%(n-1)&&q%(n-1))
saya juga akan mengurangi jumlahfor
loop dari empat menjadi dua, menggunakanx=i%113
dan y =i/113 etc
.R,
293291287282 byteSetelah saya melakukan ini, saya menyadari bahwa saya telah melakukan proses yang hampir sama dengan @steveverrill. Array '#' dan kosongkan interior kuadrat. Mungkin bisa memeras lebih banyak dari ini. Pengembalian carriage untuk saluran ke-3 signifikan. Terima kasih kepada AlexA untuk beberapa.
sumber
s
sekali, jadi tidak bisakah Anda melakukanfor(g in list(...))
daripada menentukans
secara terpisah sebelumnya? Saya pikir itu akan menghemat 2-3 byte.MS-DOS Binary, 137
Kode berikut akan berjalan dalam MS-DOS jika Anda menulisnya ke dalam file bernama square.com, tidak diperlukan kompilasi lebih lanjut (tetapi karena diberikan dalam hex, Anda harus "unhex" terlebih dahulu):
Output akan tidak dapat dikenali di sebagian besar terminal, tetapi Anda dapat mengarahkannya ke file (
square.com > output.txt
) dan melihatnya di editor teks. Jika Anda menginginkan sesuatu yang lebih mudah dibaca, kode berikut ini akan menghasilkan square.com yang berfungsi jika dimasukkan ke debug.exe (debug.exe < square.asm
):sumber
Matlab / Oktaf, 258
Seperti biasa, Matriks. Saya mencatat kode baris dan indeks kolom masing-masing persegi serta ukurannya. Saya bisa menggunakan ini untuk mengisi kotak 'kosong' besar
#
.sumber
Bash, 252
Setiap codegolfer harus dapat mengalahkan algoritma kompresi tujuan umum:
Terima kasih kepada Toby Speight untuk petunjuk untuk menggunakan input yang lebih pendek (konyol saya digunakan
gzip
alih-alihgzip -9
untuk kompresi) dan string di sini.sumber
base64 -d<<<H4sIAP9YuVUAA+3XQQrDIBAF0H1PUfD+d+yq0FA7GirGie/vdEZfkCy0lLl5lOfJlPaKoAUIBAKBQCAQCLwzOP3mfdFVv9IKBM4BTyQpGA0PE0AgcB8wzC3A6vS7egH4d5YH64WPtVGh/zvygj8agcCvQuufzA+2GoFA4AZgd9KCwS7Hzu3B7qQFO09rbXDEaa0NjtgLCAQCgUAgEAgEAoHz34dj8wLKvMUNbzEAAA==|gunzip
base64 -d<<<H4sIADyFv1UCA+3ZOw6EMAwFwH5PgeT735EOUSyfQAgOmVeCxUgusAkRbfOLqTARd0qAQCAQCAQCgcAvg80375dW/T+lQGAbsCCdgvsdXl0AAoHjgM8e7mUA92bKG+DtpAevDPflRsko7BXcKAQCD9+X3wOPCoFA4ABgnZ/OmcHTS+bw4PXzkV7Ak93KDdboVm6wxrOAQCAQCAQCgUAgENj++7BuZsq8xQ1vMQAA|gunzip
gunzip: command not found
. Saya bisa membuatnya bekerja menggunakan subshell:,(base64 -d|gunzip)<<<...
tapi itu masih menggunakan 258 byte.