(Terinspirasi oleh respons Helka terhadap pemasangan acak tag "catur" dan "Fibonacci" dalam obrolan)
Fibonacci
The angka Fibonacci adalah salah satu urutan lebih terkenal dalam matematika, di mana setiap nomor terdiri dengan menambahkan dua angka sebelumnya bersama-sama. Di bawah ini adalah definisi dari urutan tanpa indeks:
f(0) = 0
f(1) = 1
f(n) = f(n-1) + f(n-2)
Ini menghasilkan urutan 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
( tautan OEIS ). Dalam tantangan ini, kami hanya akan berfokus pada nilai-nilai yang benar-benar positif (jadi 1, 1, 2, 3, ...
), dan Anda dapat memilih pengindeksan-nol atau pengindeksan-tunggal, tetapi harap sebutkan yang mana dalam kiriman Anda.
Angka-angka Fibonacci dapat digunakan untuk ubin bidang, dengan menggunakan kotak yang berturut-turut f(n)
dalam ukuran, dan meluruskan ujungnya bersama-sama. Ubin dilakukan secara berlawanan arah jarum jam, dengan menempatkan kotak dalam pola "kanan-kiri-bawah" dari kotak saat ini. Contoh ubin parsial ini untuk f(8)=21
, dengan kuadrat awal disorot dengan warna biru, adalah sebagai berikut:
Anda dapat melihat f(1)=1
sebagai kotak awal (disorot dengan warna biru), f(2)=1
kotak ditempatkan di sebelah kanannya , f(3)=2
kotak ditempatkan di atas sana, f(4)=3
kotak ditempatkan di kiri dan seterusnya. Kotak berikutnya adalah f(9)=21+13=34
dan akan ditempatkan di bagian bawah. Ini adalah metode ubin parsial yang akan kami gunakan dalam tantangan ini.
Para ratu
Dalam permainan catur , bagian yang paling kuat adalah ratu karena ia dapat memindahkan sejumlah ruang secara horizontal, vertikal, atau diagonal. Dalam diagram papan di bawah ini, kotak dengan lingkaran hitam menunjukkan tempat ratu dapat bergerak:
Kami akan mendefinisikan istilah cakupan sebagai
Persentase kuadrat yang dapat dipindahkan oleh ratu dibandingkan dengan jumlah kuadrat, mengingat posisi khusus ratu di papan kosong, dan termasuk posisi awal ratu sendiri.
Sebagai contoh bergerak di atas, cakupan ratu adalah 28/64 = 43.75%
. Jika ratu berada di h8
alun - alun kanan atas , cakupannya akan 22/64 = 34.375%
. Jika sang ratu ada di dalam e7
, cakupan akan 24/64 = 37.5%
.
Tantangan
Kami akan menggunakan ubin Fibonacci yang ditunjukkan di atas sebagai papan catur kami untuk tantangan ini. Anda akan diberi dua bilangan bulat positif sebagai input, n
dan x
:
- Ini
n
mewakili seberapa besar ubin itu. Contoh ubin di atas, dengan21
kotak di sebelah kiri, adalah papan ukurann = 8
sejakf(8) = 21
(ketika nol-diindeks). - Yang
x
mewakili kuadrat Fibonacci yang digunakan untuk penempatan ratu, untuk menghitung cakupan. Ratu ditempatkan satu per satu pada setiap kotak di kotak persegi Fibonacci tertentu, dan cakupan total adalah penjumlahan dari cakupan individu (unik).
Sebagai contoh, berikut adalah gambar dari n = 8
(ubin yang sama seperti di atas) dan x = 4
(sesuai dengan f(4) = 3
kotak, biru yang diarsir). Dengan menempatkan seorang ratu satu per satu ke masing-masing sembilan kotak biru itu, para ratu dapat (digabungkan) menutupi setiap kotak yang berwarna oranye. Karenanya, cakupan total dalam contoh ini 309/714 = 43.28%
.
Jelas sekali, kapan saja n = x
, cakupannya akan menjadi 100%
(misalnya, dengan n=8
dan x=8
, Anda dapat melihat bahwa setiap kotak di seluruh papan akan dibahas setidaknya satu kali). Sebaliknya, dengan cakupan yang cukup besar n
dan x=1
atau x=2
, cakupan akan mendekati (tetapi tidak pernah mencapai) 0%
(misalnya, dengan n=8
dan x=1
, cakupannya sangat kecil 88/714 = 12.32%
).
Dengan dua nomor input seperti itu, Anda harus menampilkan persentase cakupan, akurat ke dua tempat desimal. Silakan tentukan bagaimana kode Anda menangani pembulatan.
Aturan
- Input dan output dapat diberikan dalam format apa pun yang mudah , tetapi harus akurat untuk dua tempat desimal. Silakan tentukan bagaimana kode Anda menangani pembulatan.
- Asumsikan tidak ada bagian lain di papan tulis atau mengganggu gerakan.
- 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.
Contohnya
n = 8, x = 4
43.28
n = 8, x = 8
100 or 100.00
n = 8, x = 1
12.32
n = 4, x = 1
66.67
n = 4, x = 2
60 or 60.00
n = 5, x = 3
75 or 75.00
n = 5, x = 1
47.5 or 47.50
Jawaban:
VB.NET, (.NET 4.5),
12381229 byte-9 byte terima kasih kepada @totallyhuman
Simulasi pernyataan masalah. Saya mulai dengan membuat kisi, mengulang-ulang setiap nomor Fibonacci baru untuk meningkatkan ukuran kuadrat. Saya menyimpan indeks di setiap sel, sehingga mudah untuk menemukan ke mana ratu akan pergi pada langkah berikutnya.
Kemudian, saya menemukan setiap sel yang seharusnya memiliki ratu di dalamnya, dan menandai setiap kotak yang terancam dengan nol. Saya melewatkan sel di mana ratu berada sehingga saya tidak perlu khawatir tentang mundur.
Pada akhirnya, saya menghitung sel-sel yang dibersihkan, dan sel-sel dengan ratu, dan kemudian membaginya dengan jumlah total ruang. Kalikan dengan 100 untuk mendapatkan persen, dan bulatkan ke dua tempat desimal terdekat.
sumber
hits
ke nama variabel yang lebih pendek? Saya tidak tahu VB.NET, tapi saya berasumsi itu variabel.Python 2 ,
524499 byteCobalah online!
Menentukan fungsi yang menggunakan ukuran ubin
n
dan nomor kuadrat Ratu ratux
. Persentase ouput dibulatkan dengan sempurna ke dua tempat desimal (dalam catatan kaki, tempat semua output berlangsung).f
adalah array dua dimensi yang berisi informasi papan yang diinisiasi0
. Kemudian, papan catur fibonacci dihitung dan diisi dengan ratu di mana ratu akan berada. Para ratu itu kemudian dipindahkan ke setiap tempat mereka dapat dipindahkan; semua posisi dihitung dan dicetak sebagai persentase dari seluruh papan.sumber
Mathematica 11.1, 336 byte, berbasis 1
Penggunaan:
k[n, x]
. Perhatikan bahwa fungsi ini berbasis 1. Pembulatan dicapai olehRound[100x,0.01]
Pada dasarnya,
p[i]
adalah fungsi menentukan posisi setiap kotak. Dan daerah dihitung dengan-tingkat atas fungsi sepertiRegionIntersection
,RegionUnion
,RegionMeasure
sumber