নাইট দাবাবোর্ডে থাকার সম্ভাবনা কী?


16

দাবা বোর্ডের আকার এবং নাইটের প্রাথমিক অবস্থান প্রদত্ত, সম্ভাবনাটি গণনা করুন যে kসরানোর পরে নাইট দাবা বোর্ডের মধ্যে থাকবে।

বিঃদ্রঃ:

  • নাইট সমান সম্ভাবনার সাথে তার সমস্ত 8 টি সম্ভাব্য পদক্ষেপ করে।

  • একবার নাইট দাবা বোর্ডের বাইরে গেলে এটি আর ফিরে আসতে পারে না।

এখানে চিত্র বর্ণনা লিখুন

ইনপুট

ইনপুটগুলি ফর্মে কমাটি পৃথক করা হয়েছে:

l,k,x,y

lদাবা বোর্ডের দৈর্ঘ্য এবং প্রস্থটি কোথায় kনাইট তৈরি করবে তার সংখ্যা, এটি নাইটের xপ্রাথমিক অবস্থানের এক্স-অবস্থান এবং এটি নাইটের প্রাথমিক অবস্থানের yy- অবস্থান y নোট করুন যে 0,0বোর্ডের নীচে-বাম কোণ এবং বোর্ডের l-1,l-1উপরের-ডানদিকে corner

অ্যালগরিদম:

নাইটের প্রাথমিক স্থানাঙ্কগুলি দিয়ে শুরু করুন। এই অবস্থানের জন্য সমস্ত সম্ভাব্য পদক্ষেপ করুন এবং এই পদক্ষেপগুলি তাদের সম্ভাব্যতার সাথে গুণিত করুন, প্রতিটি পদক্ষেপের জন্য ক্রমবর্ধমানভাবে বলা হয় যে সমাপ্তি শর্তটি পূরণ না হওয়া অবধি এই প্রক্রিয়াটি চালিয়ে যান। অবসান শর্তটি হ'ল যদি নাইট দাবা বোর্ডের বাইরে থাকে, তবে এই ক্ষেত্রে 0 প্রদান করুন বা পছন্দসই সংখ্যাটি শেষ হয়ে গেছে, এক্ষেত্রে 1 ফিরে আসুন।

যেহেতু আমরা দেখতে পাচ্ছি যে পুনরাবৃত্তির বর্তমান অবস্থা কেবল বর্তমান স্থানাঙ্ক এবং এ পর্যন্ত করা পদক্ষেপের সংখ্যার উপর নির্ভরশীল। অতএব আমরা এই তথ্যটি একটি সারণী আকারে মুখস্থ করতে পারি।

ধার

এই চ্যালেঞ্জটি মূলত সিসি বিওয়াই-এনসি-এনডি 2.5 আইএন লাইসেন্সের আওতায় প্রকাশিত ক্রেগফোরকোড.কমের একটি ব্লগ পোস্ট থেকে । এটিকে কিছুটা চ্যালেঞ্জিং করতে কিছুটা সংশোধন করা হয়েছিল।


14
আপনি কেন একটি সঠিক অ্যালগরিদম লিখেছেন? আমি নিশ্চিত নই যে এখানে আরও একটি মার্জিত বিকল্প আছে কিনা তবে নির্দিষ্ট অ্যালগরিদমের প্রয়োজন হলে সম্ভাব্যভাবে অন্যান্য চালাক দৃষ্টিভঙ্গি আটকাতে পারে। এছাড়াও, আমি মনে করি না যে আপনাকে এত বেশি সমন্বয়মূলক সিস্টেমের নির্দিষ্টকরণের প্রয়োজন - এটি সম্ভবত সম্ভাবনার কোনও ক্ষতি করে না।
মার্টিন এন্ডার

2
"ইনপুটগুলি কমা আকারে পৃথক করা হয়েছে: l, কে, এক্স, ওয়াই" - সুতরাং ইনপুটটি এমন একটি স্ট্রিং যা আমরা পার্স করতে পারি? 4 পরামিতি লাগে এমন কোনও ফাংশন লিখতে কি গ্রহণযোগ্য নয়?
ক্রিশ্চিয়ান লুপাস্কু 25:58

3
@ এডি উত্তরটি 'গ্রহণযোগ্য' হিসাবে চিহ্নিত করবেন না যদি অন্য লোকেরা চেষ্টা করার মতো সময় না পেয়ে থাকে - কোনও কিছু গৃহীত হিসাবে চিহ্নিত করা হয় তবে মূলত বলা হয় 'চ্যালেঞ্জ শেষ' - যদিও বেশিরভাগ বিশ্বের সম্ভবত এখনও নেই এমনকি এটি দেখার সময় ছিল!
সানচাইজস

3
@ এডি দয়া করে ওয়েবে আপনি এলোমেলো চ্যালেঞ্জগুলি পোস্ট করা বন্ধ করুন। আমাদের সম্প্রদায় কর্তৃক চৌর্যবৃত্তির উপর ভিত্তি করে। চলমান প্রোগ্রামিং প্রতিযোগিতাগুলির চ্যালেঞ্জগুলির এখানে কোনও ব্যবসায় নেই, কারণ তারা এই প্রতিযোগিতায় বিজয়ী কাউকে সহায়তা করতে পারে। এবং চ্যালেঞ্জগুলি, যা এই দাবা চ্যালেঞ্জের ( মূল উত্স ) মতো একটি ব্লগ পোস্টে আলোচিত হয় , এখানে ভালভাবে গ্রহণযোগ্য হবে না। একটি কারণ হ'ল, মূল উত্সটিতে কিছু কপিরাইট থাকতে পারে।
জাকুব

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
@ এমসি0 না, এটি একটি স্ট্যান্ডার্ড নিষিদ্ধ ফাঁস হবে। এখানে দেখুন ।
জাকুব

আমরা কি নন-গল্ফযুক্ত কোডগুলি পেতে পারি?
ইয়াশ চৌধুরী চৌধুরী

1
@ ইয়াশচৌধারি কি আপনি 39 বাইট সহ সংস্করণ বা 40 বাইট সহ সংস্করণ বলতে চান? :-P আমি ভয় করি যে সত্যিকারের অ-গল্ফযুক্ত সংস্করণটি কখনও ছিল না। আমি এই কোডটি সরাসরি পাইথে লিখেছি এবং পাইথ প্রোগ্রামগুলি সর্বদা সংক্ষিপ্ত।
জাকুবে

@ জাকুব ওহক এনপি :)
ইয়াশ চৌধুরী চৌধুরী

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(:));

একটি ইঙ্গিত: sম্যাটল্যাব দ্বারা আরম্ভ করা হয়েছে, তাই আপনি ঠিক করতে পারেন s(l,l)=0; খুব খারাপ ম্যাটল্যাবের কোনও বিল্ট-ইন ফাংশন হিসাবে ফিবনোনাচি নেই, এটির জন্য দুর্দান্ত অপটিমাইজেশন হবে m
সানচাইজস

এটি একটি দুর্দান্ত ভয়ঙ্কর কৌশল, ধন্যবাদ! আমি এখনও mএকটি ম্যাট্রিক্স পচনের দ্বারা তৈরির একটি আরও ছোট উপায় সন্ধান করার চেষ্টা করছি ...
flawr

হ্যাঁ, আমি এটি কিছুক্ষণের জন্যও তাকিয়ে ছিলাম। সম্ভবত কিছু স্মার্ট লজিকাল ইনডেক্সিং, তবে আমি কিছুই ভাবতে পারি না। m+m'+fliplr(m+m')মনে হচ্ছে বাইটোক্যান্টের বৃদ্ধি হ'ল, এবং আমার অন্যান্য বিকল্পগুলিও তাই।
সাংসাইজস

5

গণিত - 137

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

ম্যাটল্যাব - 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)

আরও বেশি ম্যাটল্যাব-ই হয়ে @ ফ্লাওয়ারের সমাধানগুলিতে উন্নতি করে।

সম্প্রসারিত:

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;

এটি পরীক্ষা করে দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.