Chess-olition Derby


16

สิ่งที่อาจจะเป็นขั้วตรงข้ามมากกว่าหมากรุกและดาร์บี้รื้อถอน คุณจะคิดว่าไม่มีใครที่สนุกกับคนหนึ่งจะเพลิดเพลินไปกับคนอื่น ... จนกระทั่งวันนี้

กฎระเบียบ

ตำแหน่งเริ่มต้นคือกระดานหมากรุกมาตรฐาน:

RNBQKBNR
PPPPPPPP 





PPPPPPPP 
RNBQKBNR

ดูปกติพอจนกว่าคุณจะพบว่ามันเป็นชิ้นส่วนของตัวเองทุกชิ้นสุดท้ายการแข่งขันยืนอยู่ :

  • ในทุกเทิร์นแต่ละชิ้นบนกระดานจะทำการสุ่มหนึ่งครั้ง * - เลือกที่ถูกต้อง (โดยใช้กฎการย้ายแบบมาตรฐาน) อย่างไรก็ตามการเรียงลำดับชิ้นส่วนจะถูกสุ่มทุกเทิร์น
  • ชิ้นส่วนสามารถจับภาพชิ้นใดก็ได้ก็ได้แม้ว่าจะเป็นสีเดียวกันกับมันแม้กระทั่งราชา
  • ผู้รับจำนำสามารถจับภาพไปข้างหน้าเช่นเดียวกับในแนวทแยง ยิ่งไปกว่านั้นเช่นเดียวกับปกติหากมีช่องว่างด้านหน้าตัวรับจำนำสามารถย้ายช่องว่างสองช่องในการเคลื่อนไหวครั้งแรก (พวกเขาสามารถจับได้ด้วยวิธีนั้น) นอกจากนี้การจำนำจะเลื่อนไปที่ชิ้นส่วนสุ่ม (รวมถึงกษัตริย์) นอกเหนือจาก จำนำ.
  • ผู้ชนะคือชิ้นสุดท้ายที่ยืน อย่างไรก็ตามหากหลังจาก1,000 รอบมีมากกว่าหนึ่งชิ้นส่วนที่เหลือทั้งหมดเป็นผู้ชนะ
  • ไม่มีผู้โดยสาร, ตรวจสอบ, ปราสาท ฯลฯ

เอาท์พุต

ทุกเทิร์นจะแสดงหมายเลขเทิร์นตามที่คณะกรรมการกำหนด หลังจากชิ้นส่วนถูกฆ่ามันจะถูกลบออกจากกระดาน หลังจากรอบแรกคณะกรรมการอาจมีลักษณะเช่นนี้:

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

หลังจากย้าย 1,000 ครั้งกระดานอาจมีลักษณะเช่นนี้:

1000.
  Q  K


P  N R

 R  B N   

  Q

และเกมจะจบลง

หรืออาจหลังจาก 556 ให้คณะกรรมการมีลักษณะดังนี้:

556


     R





ดังนั้นเกมจะจบลงที่นั่น

* โปรดตรวจสอบให้แน่ใจว่าการสุ่มตัวอย่างทั้งหมดที่ทำในความท้าทายนี้มีความสม่ำเสมอ


หากจำนำสามารถจับภาพได้โดยไม่ต้องเคลื่อนที่ในแนวทแยงมุมก็สามารถย้ายแนวทแยงมุมโดยไม่ต้องจับ?
trichoplax

1
@tri no มันลาดเท
geokavel

ผู้จำนำสามารถจับภาพสองชิ้นพร้อมกันได้หรือไม่เมื่อทำการขยับซ้ำ
orlp

1
@ หรือไม่ฉันควรชี้แจงว่า คุณสามารถย้ายสองเท่านั้นถ้ามีพื้นที่ว่างอยู่ข้างหน้าคุณ
geokavel

1
นอกจากนี้ในตัวอย่างของคุณคุณจำเป็นต้องแยกแยะจำนำเป็นสีดำหรือสีขาวpสีดำและPสีขาวเป็นมาตรฐานในFEN ) เพราะพวกเขาย้ายทิศทางที่แตกต่างกัน
mbomb007

คำตอบ:


3

Python 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 ไบต์ขอบคุณ Jonathan Frech


855 ไบต์ (ไม่ผ่านการทดสอบอย่างสมบูรณ์)
Jonathan Frech

847 ไบต์
Jonathan Frech

ผมคิดว่า...]+[(a+b)]*2อาจเป็นหรือ...]+[a+b]*2 ...,a+b,a+b]
Jonathan Frech

0

PHP, 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 ครั้งทำ) นอกจากนี้ฉันคิดว่าสิ่งเดียวที่ฉันเห็นที่มีขีด จำกัด 1,000 ตัวนั้นคือบิชอปสองตัวที่ใช้สีต่างกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.