Mengingat ukuran papan catur dan posisi awal ksatria, hitung probabilitas bahwa setelah k
bergerak ksatria akan berada di dalam papan catur.
catatan:
Knight itu membuat 8 gerakan yang mungkin dengan probabilitas yang sama.
Begitu ksatria berada di luar papan catur, ia tidak bisa kembali ke dalam.
Memasukkan
Input dipisahkan koma dalam bentuk:
l,k,x,y
di mana l
panjang dan lebar papan catur, k
adalah jumlah gerakan ksatria akan membuat, x
adalah posisi-x dari posisi awal ksatria, dan y
adalah posisi-y dari posisi awal ksatria. Perhatikan bahwa itu 0,0
adalah sudut kiri bawah papan dan l-1,l-1
merupakan sudut kanan atas papan.
Algoritma:
Mulailah dengan koordinat awal ksatria. Buat semua gerakan yang mungkin untuk posisi ini dan gandakan gerakan ini dengan probabilitasnya, untuk setiap gerakan secara rekursif memanggil fungsi untuk melanjutkan proses ini sampai kondisi terminasi terpenuhi. Kondisi penghentian adalah jika ksatria berada di luar papan catur, dalam hal ini mengembalikan 0, atau jumlah gerakan yang diinginkan habis, dalam hal ini pengembalian 1.
Seperti yang dapat kita lihat bahwa kondisi rekursi saat ini hanya bergantung pada koordinat saat ini dan jumlah langkah yang dilakukan sejauh ini. Karena itu kami dapat mengingat informasi ini dalam bentuk tabel.
Kredit
Tantangan ini berasal dari posting blog crazyforcode.com yang diterbitkan di bawah lisensi CC BY-NC-ND 2.5 IN . Itu sedikit dimodifikasi untuk membuatnya sedikit lebih menantang.
Jawaban:
Pyth, 38 byte
Cobalah online: Demonstrasi
Penjelasan:
sumber
Ruby 134
Cobalah online: http://ideone.com/ZIjOmP
Kode non-golf yang setara:
sumber
Haskell - 235
Menerapkan fungsi
f
dengan parameterl k x y
sumber
Matlab,
124119Tepatnya mengimplementasikan algoritma yang dijelaskan.
Saya dapat mempersingkat 5 byte dengan bantuan @sanchises, terima kasih!
Diperluas:
Versi lama
sumber
s
diinisialisasi oleh MATLAB, jadi Anda bisa melakukannyas(l,l)=0
; Sayang sekali MATLAB tidak memiliki fibonnaci sebagai fungsi bawaan, itu akan menjadi optimasi yang bagus untuknyam
.m
dekomposisi matriks ...m+m'+fliplr(m+m')
tampaknya merupakan peningkatan bytecount, dan begitu juga semua pilihan saya yang lain.Mathematica - 137
Pemakaian:
Keluaran:
sumber
MATLAB - 106
Memperbaiki solusi @ flawr dengan menjadi lebih MATLAB-y.
Diperluas:
sumber
> <> - 620 (tidak termasuk spasi putih)
Tumpukan awal seharusnya
l,k,x,y
Uji itu
sumber