Teorema Nichomachus mengaitkan kuadrat dari jumlah ke jumlah kubus:
dan memiliki visualisasi geometris yang indah:
Tantangan: Buat bagian 2d dari visualisasi ini di ascii.
Anda perlu memastikan bahwa semua demarkasi visual ditegakkan oleh diagram Anda. Ini paling sederhana untuk dilakukan dengan empat "warna," meskipun mungkin dicapai hanya dengan tiga (lihat contoh terakhir di bawah ini untuk mengetahui bagaimana). Dengan empat warna, Anda menggunakan dua untuk membedakan wilayah dalam "strip" (yaitu, bagian berbeda yang membentuk kubus tunggal), dan dua untuk membedakan antara strip yang berdekatan. Anda juga dapat menggunakan lebih dari empat warna jika suka. Jika salah satu dari ini membingungkan, contoh hasil di bawah ini harus menjelaskan.
Input output
Input adalah bilangan bulat tunggal yang lebih besar dari 0. Output adalah kisi ascii yang mirip dengan contoh di bawah ini, sesuai dengan kisi rata untuk nomor input pada gambar di atas. Whitespace terkemuka dan tertinggal ok.
Ini golf kode, dengan aturan standar.
Output sampel
N = 1
#
N = 2
#oo
o@@
o@@
N = 3
#oo+++
o@@+++
o@@+++
+++###
+++###
+++###
N = 4
#oo+++oooo
o@@+++oooo
o@@+++@@@@
+++###@@@@
+++###@@@@
+++###@@@@
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
N = 5
#oo+++oooo+++++
o@@+++oooo+++++
o@@+++@@@@+++++
+++###@@@@+++++
+++###@@@@+++++
+++###@@@@#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
Tiga versi warna untuk N = 4, terima kasih kepada @BruceForte:
#oo+++oooo
o##+++oooo
o##+++####
+++ooo####
+++ooo####
+++ooo####
oo####++++
oo####++++
oo####++++
oo####++++
Jawaban:
MATL ,
302827 byteCobalah online!
Fitur bonus:
Untuk 26 byte , versi modifikasi berikut menghasilkan output grafis :
Cobalah di MATL Online!
Gambar memohon beberapa warna , dan harganya hanya 7 byte:
Cobalah di MATL Online!
Atau gunakan versi yang lebih panjang (37 byte) untuk melihat bagaimana matriks karakter dibangun secara bertahap :
Cobalah di MATL Online!
Keluaran contoh
Untuk input
8
, berikut ini menunjukkan versi dasar, output grafis, dan output grafis warna.Penjelasan
Prosedur umum
Matriks numerik dibangun dari lapisan luar ke dalam dalam
N
langkah-langkah, di manaN
inputnya. Setiap langkah menimpa bagian dalam (kiri-atas) dari matriks sebelumnya. Pada akhirnya, angka-angka dalam matriks yang diperoleh diubah menjadi karakter.Contoh
Untuk input
4
, matriks pertama adalahSebagai langkah kedua, matriks
ditimpa ke bagian atas yang terakhir. Kemudian hal yang sama dilakukan dengan
dan akhirnya dengan
Matriks yang dihasilkan adalah
Terakhir,
30
ditambahkan ke setiap entri dan angka yang dihasilkan diinterpretasikan sebagai codepoint dan dikonversi ke karakter (dengan demikian dimulai dari33
, sesuai dengan!
).Konstruksi matriks perantara
Untuk input
N
, pertimbangkan penurunan nilaik
dariN
ke1
. Untuk masing-masingk
, vektor bilangan bulat dari1
kek*(k+1)
dihasilkan, dan kemudian setiap entri dibagi dengank
dan dibulatkan ke atas. Sebagai contoh, untukk=4
ini memberi (semua blok memiliki ukurank
kecuali yang terakhir):sedangkan untuk
k=3
hasilnya adalah (semua blok memiliki ukurank
):Vektor ini ditambahkan, elemen-bijaksana dengan siaran, ke salinan dirinya sendiri; dan kemudian
k
ditambahkan ke setiap entri. Untukk=4
ini memberiIni adalah salah satu dari matriks perantara yang ditunjukkan di atas, kecuali bahwa ia dibalik secara horizontal dan vertikal. Jadi yang tersisa adalah membalikkan matriks ini dan menuliskannya di sudut kiri atas matriks "terakumulasi" sejauh ini, diinisialisasi ke matriks kosong untuk langkah pertama (
k=N
).Kode
sumber
Python 2 ,
187178164162152 byte-8 byte terima kasih kepada Mr.Xcoder
-1 byte terima kasih kepada Stephen
-10 byte terima kasih kepada Jonathan Frech
Cobalah online!
sumber
sum(range(y))%y
->y*~-y/2%y
Arang ,
5046 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Versi 50-byte sebelumnya dengan penjelasan: Cobalah online!
Catatan: Saya mengulangi karakter daripada mencoba untuk menetapkan karakter secara langsung
l
karena Anda tidak bisa langsung menetapkan hasil pengindeksan string ke variabel karena ini merupakan konstruksi yang ambigu di Charcoal. Untungnya jumlah byte sama.sumber
C (gcc) ,
135128120 byteCobalah online!
Hanya menggunakan tiga warna.
Secara konseptual, bekerja pada grid yang diputar 180 derajat:
Dan menghitung warna sesuai dengan rumus:
sumber
gcc -O2
.g(i%m,i/m,n)%3
)?x/k&&y/k
alih-alihx>=k&y>=k
R ,
131126123 byte3 byte disimpan berkat @Giuseppe
Cobalah online!
Ini menggunakan algoritma yang sama dengan jawaban MATL @LuisMendo . Satu-satunya perbedaan adalah bahwa alih-alih mengkonversi ke karakter, matriks adalah output dengan semua nilai mod4 untuk memastikan bahwa setiap elemen adalah karakter ascii tunggal.
sumber
for
loop kembali untuk -1 byte :)Python 2 ,
176175 byteCobalah online!
sumber
J="".join;
(+10 byte) dan mengganti keduanya"".join
s (-2 * 7 = -14 byte) denganJ
(+2 byte), Anda dapat menyimpan byte (karena harus ada ruang tambahan setelahprint
; +1 byte) .