Tujuan Anda adalah untuk menghasilkan spiral Fibonacci dengan angka.
Contoh Input / Output
1 -> 1
2 -> 1 1
3 -> 1 1
2 2
2 2
6 -> 8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 1 1 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
Input Input dapat diambil melalui argumen fungsi atau STDIN. Itu akan menjadi satu nomor
Keluaran Keluaran dapat dari STDOUT atau nilai pengembalian fungsi. Itu harus berupa string tunggal.
Ruang kosong ekstra di bagian paling akhir baris tidak diperbolehkan. Output dapat berisi digit, umpan baris (baris baru), dan spasi.
Orientasi tidak masalah, ini berarti rotasi dan refleksi. Selama itu mengikuti pola spiral Fibonacci yang valid.
Angka dengan jumlah digit yang berbeda (mis. 1 dan 13) harus sejajar satu sama lain. Sebuah ruang mungkin perlu ditambahkan ke bagian paling awal dari sebuah garis sehingga semuanya dapat berbaris.
1 1 1 1
100 100 should actually be 100 100
Anda dapat melihat contohnya di sini
Ini adalah kode-golf sehingga kode terpendek dalam byte menang!
Numbers with different amounts of digits (e.g. 1 and 13) should be aligned to the left side of the digit a space may need to be added to the very beginning of a line so everything can line up.
Ini terdengar seperti mungkin lebih jelas sebagai dua kalimat.Jawaban:
APL, 23
Penjelasan:
Cobalah di tryapl.org
sumber
⌸
atau⍤
) hilang dari rangkaian karakter itu dan tidak dapat digunakan ketika Anda ingin membangkitkan aturan itu.Matlab, 84 byte
Fungsi digunakan. Output ada di stdout.
Contoh:
Matlab, 78 byte
Sama seperti di atas kecuali fitur Matlab dieksploitasi, yaitu, ia secara otomatis menampilkan fungsi keluaran (sebagai string) di stdout. Ini menghindari konversi ke string dalam pendekatan di atas.
sumber
Python 2, 121 byte
Aturan santai pada rotasi membuat ini jauh lebih sederhana.
Saya belum pernah menggunakan backticks sebagai ganti di
str(a)
sini karena saya tidak yakin apakah kita diperbolehkan lebih banyak ruang terdepan daripada yang diperlukan, jika kita pernah mencapai yang lama. Meskipun, bahkan jika kita melakukannya, menggunakana
itu sendiri akan lebih pendek.sumber
Ruby,
243242236233222170130 bytesumber
t==value
kondisi menjadit>value
. Misalnya,(t=x%4)>2?s.times{r<<[s]*s}:t>1?s.times{r.map!{|w|w.unshift s}}:t>0?s.times{r.unshift [s]*s}:r.map!{|w|w+=[s]*s}}
Python -
189179174sumber
J, 36 byte
Pemakaian:
Metode:
Fungsi memutar kuadrat saat ini dan menambahkan kuadrat baru ke saat ini satu
input-1
kali. Ukuran kotak dan nilai elemen dikumpulkan dari ukuran persegi panjang sebelumnya.Penjelasan kode:
Cobalah online di sini.
sumber
Haskell,
183176171163 byteFungsinya adalah
f
, yang mengambil angka dan mengembalikan satu string:sumber
Pyth, 34 byte
Anehnya, lebih dari separuh kode adalah pencetakan / padding, daripada menghasilkan matriks.
Generasi dari matriks sangat sederhana namun terdiri dari transpos dan pembalikan, dan menambahkan garis N yang berisi salinan N dari N, di mana N adalah jumlah garis saat ini.
Contoh output untuk 7:
sumber
Perl,
289 277257 bytesumber
K, 48 byte
Dan beraksi:
Mungkin masih ada beberapa peluang bagus untuk bermain golf.
Program ini pada dasarnya terdiri dari dua bagian - menghasilkan matriks gabungan dan memformatnya untuk keluaran. Yang pertama cukup sederhana:
Dimulai dengan matriks 1x1 yang berisi 1, buat vektor T-length dari T di mana T adalah panjang dari matriks awal pada dimensi pertama (
t#t:#x
) dan tempelkan ke setiap baris dari matriks asli (x,\:
). Membalik dan memindahkan hasilnya (+|
) memutarnya 90 derajat. Kami melakukan ini N-1 kali.Memformat cukup kikuk, karena pendekatan alami K untuk mencetak matriks tidak akan menyelaraskan kolom angka seperti yang kita butuhkan:
Ide dasarnya adalah untuk mengambil elemen maksimum dari matriks (
|//x
), mengubahnya menjadi string (unary$
), mengambil panjangnya ditambah satu (1+#
) dan kemudian memformat elemen-elemen dari matriks untuk menyelaraskan string ukuran itu. Kemudian untuk merapikan, gabungkan string-string itu (,/'
) dan letakkan spasi yang dihasilkan (1_'
).sumber
CJam, 48 byte
Cobalah online
Bagian inti dari menghasilkan pola tampaknya cukup mudah. Putar persegi panjang yang dibuat sejauh ini, dan tambahkan kuadrat nilai di bagian bawah.
Kode untuk padding hasilnya terlihat buruk. Saya mencoba banyak kombinasi
f
dan:
operator untuk menerapkan padding ke daftar bersarang, tetapi tidak ada yang berhasil. Jika ada yang punya saran yang lebih baik, mereka dipersilahkan.sumber
Wf%
. Juga, apakah Anda dapat melakukan sesuatu seperti{Se[}ff%
daripada:U;{USe[}f%
untuk bantalan? (Itu mungkin tidak berfungsi sebagaimanaPyth, 29 byte
Demonstrasi.
Jika padding gratis / implisit, seperti di APL, atau output matriks diizinkan, ini akan menjadi 14 byte:
sumber
Ruby, 129 byte
Saya mengedit jawaban ruby lainnya, tetapi perubahan saya yang terbaru tidak diterima atau semacamnya, jadi ini dia:
sumber
ES6, 248 byte
Dimana
\n
mewakili karakter baris baru literal.Mengganggu format membutuhkan potongan besar kode.
f
adalah fungsi pembantu yang membuat array yang diisi. Ini digunakan sebagian besar untuk membuat kotak diisi tetapi juga dengan mudah menggandakan untuk menghasilkan kasing dasar untuk rekursi.g
adalah kerja keras utama. Secara rekursif menghasilkan solusi terakhir tapi satu, memutarnya 180 derajat, lalu menambahkan dua kotak berikutnya.sumber