क्या संभावना है कि शतरंज की बिसात पर एक स्टेयर्स रहता है?


16

शतरंज बोर्ड के आकार और शूरवीर की प्रारंभिक स्थिति को देखते हुए, इस संभावना की गणना करें कि kचालों के बाद शूरवीर बोर्ड के अंदर होगा।

ध्यान दें:

  • नाइट समान संभावना के साथ अपनी सभी 8 संभव चालें बनाता है।

  • एक बार जब शतरंज शतरंज बोर्ड के बाहर होता है तो वह वापस अंदर नहीं आ सकता है।

यहाँ छवि विवरण दर्ज करें

इनपुट

इनपुट कॉमा के रूप में अलग किए गए हैं:

l,k,x,y

जहां lशतरंज बोर्ड की लंबाई और चौड़ाई होती है, kवही शूरवीर की चाल की संख्या है, जो शूरवीर xकी प्रारंभिक स्थिति की x- स्थिति है, और शूरवीर की प्रारंभिक स्थिति की yy- स्थिति है। ध्यान दें कि 0,0बोर्ड के नीचे-बाएँ कोने और बोर्ड l-1,l-1के ऊपरी-दाएँ कोने है।

कलन विधि:

नाइट के प्रारंभिक निर्देशांक के साथ शुरू करें। इस स्थिति के लिए सभी संभव कदम उठाएं और इन चालों को उनकी संभावना के साथ गुणा करें, प्रत्येक चाल के लिए पुनरावर्ती कॉल फ़ंक्शन को इस प्रक्रिया को तब तक जारी रखें जब तक कि समाप्ति की स्थिति पूरी नहीं हो जाती। टर्मिनेटिंग कंडीशन यह है कि अगर नाइट शतरंज बोर्ड के बाहर है, तो इस स्थिति में वापसी 0, या वांछित संख्या में चालें समाप्त हो जाती हैं, इस स्थिति में वापसी 1।

जैसा कि हम देख सकते हैं कि पुनरावृत्ति की वर्तमान स्थिति केवल वर्तमान समन्वय और अब तक किए गए चरणों की संख्या पर निर्भर है। इसलिए हम इस जानकारी को सारणीबद्ध रूप में याद कर सकते हैं।

श्रेय

यह चुनौती मूल रूप से CC BY-NC-ND 2.5 IN लाइसेंस के तहत प्रकाशित Crazyforcode.com के ब्लॉग पोस्ट से है । इसे थोड़ा और चुनौतीपूर्ण बनाने के लिए इसे थोड़ा संशोधित किया गया था।


14
आप एक सटीक एल्गोरिथ्म क्यों लिखते हैं? मुझे यकीन नहीं है कि अगर वास्तव में अधिक सुरुचिपूर्ण विकल्प है, लेकिन एक विशिष्ट एल्गोरिथ्म की आवश्यकता होती है, तो संभवतः अन्य चतुर दृष्टिकोणों को रोका जा सकता है। इसके अलावा, मुझे नहीं लगता कि आपको समन्वय प्रणाली को इतने विस्तार से निर्दिष्ट करने की आवश्यकता है - यह संभावना को बिल्कुल प्रभावित नहीं करता है।
मार्टिन एंडर

2
"इनपुट को अल्पविराम से अलग किया जाता है: एल, के, एक्स, वाई" - तो इनपुट एक स्ट्रिंग है जिसे हमें पार्स करना है? क्या यह एक फ़ंक्शन लिखने के लिए स्वीकार्य नहीं है जो 4 पैरामीटर लेता है?
क्रिस्टियन लुपस्क्यू

3
@ ईडी ने एक उत्तर को 'स्वीकार' के रूप में चिह्नित नहीं किया है, अगर अन्य लोगों के लिए इसे आज़माने का समय नहीं है - किसी चीज़ को स्वीकार किए जाने के रूप में चिह्नित करना, जो मूल रूप से कह रहा है कि 'चुनौती खत्म हो गई है' - जबकि दुनिया के अधिकांश लोगों ने शायद नहीं किया है यहां तक ​​कि यह देखने के लिए समय था!
Sanchises

3
@Edi कृपया वेब पर मिलने वाली यादृच्छिक चुनौतियों को पोस्ट करना बंद करें। हमारे समुदाय पर साहित्यिक चोरी होती है। चल रही प्रोग्रामिंग प्रतियोगिताओं की चुनौतियों का यहाँ कोई व्यवसाय नहीं है, क्योंकि वे इस प्रतियोगिता को जीतने में किसी की मदद कर सकते हैं। और चुनौतियां हैं, जो इस शतरंज की चुनौती ( मूल स्रोत ) की तरह एक ब्लॉग पोस्ट में चर्चा की गई हैं , यहां अच्छी तरह से प्राप्त नहीं किया जाएगा। एक कारण यह है, कि मूल स्रोत में किसी प्रकार का कॉपीराइट हो सकता है।
जकुबे

2
@ ईडीई उदाहरण के लिए इस चुनौती का स्रोत नकल और पुनर्वितरण की अनुमति देता है, लेकिन केवल अगर आप उचित क्रेडिट देते हैं।
जकुबे

जवाबों:


10

पायथ, 38 बाइट्स

M?smcgtGd8fq5sm^-Fk2C,TH^UhQ2G1g@Q1>Q2

इसे ऑनलाइन आज़माएँ: प्रदर्शन

स्पष्टीकरण:

                                        implicit: Q = evaluated input
M                                       define a function g(G,H): //G=depth, H=current cell
                         UhQ              the list [0,1,...,Q[0]-1]
                        ^   2             Cartesian product, gives all cells
          f                               filter for numbers numbers T, which satisfy:
                    C,TH                    zip(T,H)
              m                             map the two pairs k to:
                -Fk                           their difference
               ^   2                          squared
             s                              sum (distance squared)
           q5                               == 5           
   m                                      map each valid cell d to:
     gtHd                                   g(G-1,d)
    c    8                                  divided by 8
  s                                       return sum
 ?                           G          if G > 0 else
                              1           return 1

                               g@Q1>Q2  call g(Q[1],Q[2:]) and print

मुझे लगता है कि यदि हम गोल्फ के एकमात्र उद्देश्य के लिए सुपर-संक्षिप्त भाषा बनाने जा रहे हैं, तो हम आवश्यक एल्गोरिथ्म को एक आदिम के रूप में लागू कर सकते हैं।
mc0e

3
@ mc0e नहीं, यह एक मानक निषिद्ध शिथिलता होगी। देखें यहाँ
जकुबे

हम गैर-गोल्फ कोड pls प्राप्त कर सकते हैं?
यश चौधरी

1
@YaShChaudhary क्या आपका मतलब 39 बाइट्स वाले वर्जन या 40 बाइट्स वाले वर्जन से है। :-P मुझे डर है कि वास्तव में गैर-गोल्फ संस्करण कभी मौजूद नहीं था। मैंने इस कोड को सीधे Pyth में लिखा है, और Pyth प्रोग्राम हमेशा छोटे होते हैं।
जकुबे

@ जक़ाब ओहक एनपी :)
याश चौधरी

8

रूबी 134

->l,m,x,y{!((r=0...l)===x&&r===y)?0:m<1?1:(0..7).map{|i|a,b=[1,2].rotate i[2]
P[l,m-1,x+a*(i[0]*2-1),y+b*(i[1]*2-1)]/8.0}.inject(:+)}

इसे ऑनलाइन आज़माएं: http://ideone.com/ZIjOmP

बराबर गैर-गोल्फ कोड:

def probability_to_stay_on_board(board_size, move_count, x, y)
  range = 0...board_size
  return 0 unless range===x && range===y
  return 1 if move_count < 1

  possible_new_locations = (0..7).map do |i|
    dx, dy = [1,2].rotate i[2]
    dx *= i[0]*2-1
    dy *= i[1]*2-1

    [x+dx, y+dy]
  end

  possible_new_locations.map do |new_x, new_y| 
    probability_to_stay_on_board(board_size, move_count-1, new_x, new_y) / 8.0 
  end.inject :+
end

5

हास्केल - 235

fमापदंडों के साथ एक फ़ंक्शन लागू करता हैl k x y

import Data.List
g[]=[]
g((a,b):r)=[(a+c,b+d)|(c,d)<-zip[-2,-1,1,2,-2,-1,1,2][1,2,-2,-1,-1,-2,2,1]]++g r
h _ 0 a=a
h l a b=h l(a-1)$filter(\(a,b)->(elem a[0..l])&&(elem b[0..l]))$g b
f l k x y=(sum$map(\x->1.0) (h l k [(x,y)]))/(8**k)

5

मतलाब, 124 119

वास्तव में वर्णित एल्गोरिथ्म को लागू करता है।

मैं इसे @ सहायता के कुछ मदद के साथ 5 बाइट्स से छोटा करने में सक्षम था, धन्यवाद!

function s=c(l,k,x,y);m=zeros(5);m([2,4,10,20])=1/8;s(l,l)=0;s(l-y,x+1)=1;for i=1:k;s=conv2(s,m+m','s');end;s=sum(s(:))

विस्तारित:

function s=c(l,k,x,y);
    m=zeros(5);
    m([2,4,10,20])=1/8;
    s(l,l)=0;s(l-y,x+1)=1;
    for i=1:k;
        s=conv2(s,m+m','s');
    end;
    s=sum(s(:))

पुराना संस्करण

function s=c(l,k,x,y);
    m =zeros(5);m([1:3,5,8,10:12]*2)=1/8;
    s=zeros(l);
    s(l-y,x+1)=1;
    for i=1:k
        s=conv2(s,m,'s');
    end
    s=sum(s(:));

एक संकेत: sMATLAB द्वारा आरंभीकृत किया गया है, इसलिए आप बस कर सकते हैं s(l,l)=0; बहुत खराब MATLAB में फाइब्रोनेसी एक अंतर्निहित फ़ंक्शन के रूप में नहीं होता है, जो इसके लिए एक महान अनुकूलन होगा m
Sanchises

यह एक सुपर भयानक चाल है, धन्यवाद! मैं अभी भी बनाने की एक छोटी रास्ता खोज tryting हूँ mएक मैट्रिक्स अपघटन द्वारा ...
flawr

हाँ, मैं इसे थोड़ी देर के लिए भी देख रहा था। शायद कुछ स्मार्ट लॉजिकल इंडेक्सिंग, लेकिन मैं कुछ भी नहीं सोच सकता। m+m'+fliplr(m+m')ऐसा लगता है कि बाइटकाउंट में वृद्धि हुई है, और इसलिए मेरे सभी अन्य विकल्प हैं।
20:15 पर Sanchises

5

गणितज्ञ - १३hem

q = # {1, 2} & /@ Tuples[{-1, 1}, 2]
q = Reverse /@ q~Union~q
g[l_, k_, x_, y_] :=

 Which[
  k < 1,
  1,

  !0 <= x < l || ! 0 <= y < l,
  0,

  0<1,
  Mean[g[l, k - 1, x + #[[1]], y + #[[2]]] & /@ q]
]

उपयोग:

g[5,5,1,2]

आउटपुट:

9/64

2

MATLAB - 106

function s=c(l,k,x,y);m(5,5)=0;m([2,4,10,20])=1/8;s=ones(l);for i=1:k;s=conv2(s,m+m','s');end;s=s(l-y,x+1)

MATLAB-y अधिक होने से @ त्रुटी के समाधान पर सुधार करता है।

विस्तारित:

function s=c(l,k,x,y)
    m(5,5)=0;
    m([2,4,10,20])=1/8;
    s=ones(l);
    for i=1:k
        s=conv2(s,m+m','s');
    end
    s=s(l-y,x+1)

1

> <> - 620 (व्हॉट्सएप की गिनती नहीं)

प्रारंभिक स्टैक होना चाहिए l,k,x,y

{:a2*0p   v
vp0*3a*}:{<
>{1+&a3*0g}v                   >          >       >          >~~01-01-v             >          >       >          >~~01-01-v             >          >       >          >~~01-01-v             >          >       >          >~~01-01-v
           >&1-:&?!v>:@@:@@:0(?^:a2*0g1-)?^2-$:0(?^:a2*0g1-)?^1-      >}}$:@@:@@:0(?^:a2*0g1-)?^2-$:0(?^:a2*0g1-)?^1+      >}}$:@@:@@:0(?^:a2*0g1-)?^2+$:0(?^:a2*0g1-)?^1-      >}}$:@@:@@:0(?^:a2*0g1-)?^2+$:0(?^:a2*0g1-)?^1+      >}}$:@@:@v
v1         ^}       ^!?=g0*3a:~~}}<      +2v?)-1g0*2a:v?(0:$+1v?)-1g0*2a:v?(0:@@:@@:$}}<      -2v?)-1g0*2a:v?(0:$+1v?)-1g0*2a:v?(0:@@:@@:$}}<      +2v?)-1g0*2a:v?(0:$-1v?)-1g0*2a:v?(0:@@:@@:$}}<-2      v?)-1g0*2a:v?(0:$-1v?)-1g0*2a:v?(0:@<
>a3*0g=   ?^\      &              ^-10-10~~<          <       <          <             ^-10-10~~<          <       <          <             ^-10-10~~<          <       <          <             ^-10-10~~<          <       <          <
\         :{/      
v                  >~{~l2,&0
>@:0(?v:a2*0g1-)?v$:0(?v:a2*0g1-)?v1>@~~+l1=?v
      >          >     >          >0^        >&,n;

इसका परीक्षण करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.