দাবা-ওলিশন ডার্বি


16

দাবা এবং ধ্বংস ডার্বির চেয়ে পোলার বিপরীতে আর কী হতে পারে । আপনি ভাবতেন যে একজনকে উপভোগ করে সে অন্যটিকে উপভোগ করতে পারে না ... আজ অবধি?

বিধি

শুরুর অবস্থানটি একটি স্ট্যান্ডার্ড দাবা বোর্ড:

RNBQKBNR
PPPPPPPP 





PPPPPPPP 
RNBQKBNR

যথেষ্ট স্বাভাবিক দেখায়, যতক্ষণ না আপনি এটি নিজের জন্য সর্বশেষ টুকরো, শেষ পয়েন্ট স্ট্যান্ডিং প্রতিযোগিতা:

  • প্রতিটি ঘুরে, বোর্ডের প্রতিটি টুকরোটি এলোমেলোভাবে একটি * * নির্বাচিত বৈধ পদক্ষেপ (এটি স্ট্যান্ডার্ড সরানোর নিয়ম ব্যবহার করে) তৈরি করে। যাইহোক, টুকরাগুলি যে ক্রমটি সরানো হয় তা প্রতি বারে এলোমেলোভাবে তৈরি হয়।
  • কোনও টুকরো যে কোনও পাইকে ক্যাপচার করতে পারে, এমনকি এটি একই রঙ এমনকি রাজা এমনকি।
  • বন্ধকরা ক্যাপচার করতে পারেন FORWARD এর পাশাপাশি তির্যক হিসাবে। তদুপরি, স্বাভাবিকের মতো, যদি এর সামনে কোনও ফাঁকা জায়গা থাকে, তবে একটি গিরি তার প্রথম পদক্ষেপে দুটি স্থান সরিয়ে ফেলতে পারে (তারা সেই উপায়েও ক্যাপচার করতে পারে)) তদ্ব্যতীত, प्याরা একটি ব্যতীত অন্য যেকোন এলোমেলো টুকরো (রাজা সহ) প্রচার করে গুটি।
  • বিজয়ী দাঁড়িয়ে শেষ টুকরা। তবে পরে যদি 1000 টার্ন , একাধিক টুকরো অবশিষ্ট থাকে, বাকি সমস্ত টুকরা বিজয়ী।
  • এন পাসেন্টস, চেকস, ক্যাসেলস ইত্যাদি নেই

আউটপুট

প্রতিটি টার্ন আউটপুট পরে টার্ন নম্বর এবং বোর্ডটি কেমন দেখাচ্ছে। একটি টুকরা মারা যাওয়ার পরে এটি বোর্ড থেকে সরানো হয়। প্রথম মোড়ের পরে, বোর্ডটি এর মতো দেখতে পারে:

1.
   K    
RBQ N BR  
NP  P P
  PP P P
R PP
BPN PNP
    K  R 
       Q

1000 পদক্ষেপের পরে বোর্ডটি এর মতো দেখতে পারে:

1000.
  Q  K


P  N R

 R  B N   

  Q

এবং খেলা শেষ হয়।

বা 556 বোর্ড চালু হওয়ার পরে সম্ভবত এটি দেখতে হবে:

556।


     আর





খেলাটি এখানেই শেষ হয়।

* দয়া করে নিশ্চিত করুন যে এই চ্যালেঞ্জটিতে করা সমস্ত র্যান্ডমাইজেশন অভিন্ন (প্রতিটি সম্ভাবনার সমান সম্ভাবনা রয়েছে)।


যদি কোনও পিয়াণ তির্যকভাবে সরানো ছাড়াই ক্যাপচার করতে পারে, তবে এটিও ক্যাপচার না করে তির্যকভাবে স্থানান্তর করতে পারে?
ট্রিকোপ্লাক্স

1
@ ত্রি না, এটা ক্যান্ট
জিওকাভেল

যখন একটি ডুবুরি একবার ডাবল স্থানান্তরিত করে তখন কি একবারে মোহরানা দুটি টুকরো ক্যাপচার করতে পারে?
orlp

1
@ অর্পল নং, আমার এটি পরিষ্কার করা উচিত। আপনার সামনে যদি খালি জায়গা থাকে তবে আপনি কেবল দুটি স্থানান্তর করতে পারবেন।
জিওকাভেল

1
এছাড়াও, আপনার উদাহরণগুলিতে, আপনাকে পতিদের কালো বা সাদা হিসাবে আলাদা করতে হবে ( pকালো এবং Pসাদা FEN এ স্ট্যান্ডার্ড ), কারণ তারা বিভিন্ন দিককে সরিয়ে দেয়।
mbomb007

উত্তর:


3

পাইথন 2 , 862 846 844 বাইট

from random import*
A=-1;a,b=[(0,1),(0,A),(A,0),(1,0)],[(A,A),(A,1),(1,A),(1,1)]
r=range(8)
C='RNBQK';q=C+'BNR'
def m(x,y,B,t):
 P=B[y][x];M=[]
 for w,z in dict(zip('pP'+C,[[],[],a,zip([A,1,-2,2]*2,[2,2,1,1,-2,-2,A,A]),b]+[a+b]*2))[P]:
	for i in r[1:]:
	 X,Y=x+z*i,y+w*i;M+=(X,Y),
	 if P in'NK'or 1-(8>X>A<Y<8)or' '<B[Y][X]:break
 if P in'pP':d=[A,1][P<'p'];M=zip((x-1,x,x+1)[B[y+d][x-1]<'!':2+(B[y+d][-~x%8]>' ')],(y+d,)*3)+[(x,y+2*d)]*(t*B[y+d][x]<'!')
 return choice([(X,Y)for X,Y in M if-1<X<8>Y>A])
B=map(list,[q,'P'*8]+[' '*8]*4+['p'*8,q])
t=0
while t<1e3:
 t+=1;p=[(x,y)for y in r for x in r if' '<B[y][x]];shuffle(p)
 if len(p)<2:break
 while p:x,y=p.pop();Z=X,Y=m(x,y,B,t<2);B[Y][X],B[y][x]=B[y][x],' ';Z in p and p.remove(Z)
 for j in 0,7:
	for i in r:
	 if B[j][i]in'pP':B[j][i]=choice(C)
 print t
 for l in B:print''.join(l).upper()

এটি অনলাইন চেষ্টা করুন!

জোনাথন ফ্রেচের জন্য 18 বাইট সংরক্ষণ করা


855 বাইট (পুরোপুরি পরীক্ষিত নয়)।
জোনাথন ফ্রেচ


আমার মনে ...]+[(a+b)]*2হয় হয় হতে পারে ...]+[a+b]*2বা হয় ...,a+b,a+b]
জনাথন ফ্রেচ

0

পিএইচপি, 1849 বাইট

<?$z=[R,N,B,Q,K,B,N,R];$y=[_,_,_,_,_,_,_,_];$u=shuffle;$b=[$z,[P,P,P,P,P,P,P,P],$y,$y,$y,$y,[p,p,p,p,p,p,p,p],$z];$z=[R,N,B,Q,K];for($i=0;$i<8;$i++)for($j=0;$j<8;$j++)$r[]=[$i,$j];for(;$c++<=999;){for($i=$_=0;$i<8;$i++)for($j=0;$j<8;$j++)if($b[$i][$j]!=_)++$_;if($_<2)break;$u($r);$n=[];foreach($r as$l){list($y,$x)=$l;$a=$y+1;$d=$y-1;$j=$x+1;$t=$x-1;$p=$b[$y][$x];if($n[$y][$x]!=1&&$p!=_){$v=$e=$f=$g=$h=$k=$o=$q=$s=[];if($p==R||$p==K||$p==Q){$m=($p==K)?2:9;for($i=1;$i<$m;$i++){if(!$e&&$y-$i>=0){$v[]=[$y-$i,$x];if($b[$y-$i][$x]!=_)$e=1;}if(!$f&&$y+$i<8){$v[]=[$y+$i,$x];if($b[$y+$i][$x]!=_)$f=1;}if(!$g&&$x-$i>=0){$v[]=[$y,$x-$i];if($b[$y][$x-$i]!=_)$g=1;}if(!$h&&$x+$i<8){$v[]=[$y,$x+$i];if($b[$y][$x+$i]!=_)$h=1;}}}if($p==B||$p==K||$p==Q){$m=($p==K)?2:9;for($i=1;$i<$m;$i++){if(!$k&&$y-$i>=0&&$x-$i>=0){$v[]=[$y-$i,$x-$i];if($b[$y-$i][$x-$i]!=_)$k=1;}if(!$o&&$y-$i>=0&&$x+$i<8){$v[]=[$y-$i,$x+$i];if($b[$y-$i][$x+$i]!=_)$o=1;}if(!$q&&$y+$i<8&&$x-$i>=0){$v[]=[$y+$i,$x-$i];if($b[$y+$i][$x-$i]!=_)$q=1;}if(!$s&&$y+$i<8&&$x+$i<8){$v[]=[$y+$i,$x+$i];if($b[$y+$i][$x+$i]!=_)$s=1;}}}if($p==N){if($y-2>=0&&$t>=0)$v[]=[$y-2,$t];if($y-2>=0&&$j<8)$v[]=[$y-2,$j];if($d>=0&&$x-2>=0)$v[]=[$d,$x-2];if($d>=0&&$x+2<8)$v[]=[$d,$x+2];if($a<8&&$x-2>=0)$v[]=[$a,$x-2];if($a<8&&$x+2<8)$v[]=[$a,$x+2];if($y+2<8&&$t>=0)$v[]=[$y+2,$t];if($y+2<8&&$j<8)$v[]=[$y+2,$j];}if($p==P){if($y==1&&$b[$a][$x]==_)$v[]=[$y+2,$x];if($j<8&&$b[$a][$j]!=_)$v[]=[$a,$j];if($t>=0&&$b[$a][$t]!=_)$v[]=[$a,$t];$v[]=[$a,$x];}if($p==p){if($y==6&&$b[$d][$x]==_)$v[]=[$y-2,$x];if($j<8&&$b[$d][$j]!=_)$v[]=[$d,$j];if($t>=0&&$b[$d][$t]!=_)$v[]=[$d,$t];$v[]=[$d,$x];}$u($v);$v=$v[0];$b[$y][$x]=_;$w=$p;if($w==P&&$v[0]>6&&$u($z)&&$w=$z[0]);if($w==p&&$v[0]<1&&$u($z)&&$w=$z[0]);$b[$v[0]][$v[1]]=$w;$n[$v[0]][$v[1]]=1;}}echo $c.".
";foreach($b as$a)echo str_replace([_,p],[' ',P],join("",$a))."
";}

এটি অনলাইন চেষ্টা করুন!

এটি অবশ্যই আরও গল্ফ করা যেতে পারে, এবং এটি কিছুটা পাগলের মতো কাজ করে (যা আমি মনে করি, এটি হতে পারে)।

আমি কীভাবে দ্রুত এলোমেলো পদক্ষেপগুলি বোর্ড সাফ করতে পারি তাতে আমি মুগ্ধ (আমি 15 টি চাল এটি দেখেছি)। এছাড়াও, আমি মনে করি যে একমাত্র 1000 টি সীমাতে আমি দেখেছি তা হ'ল বিভিন্ন বর্ণের নাচের উপর দুটি বিশপ।

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