Cờ vua-olition


16

Những gì có thể là đối cực hơn so với trận derby cờ vua và phá hủy . Bạn sẽ nghĩ rằng không ai thích người này sẽ thích người kia ... cho đến hôm nay.

Quy tắc

Vị trí bắt đầu là một bàn cờ tiêu chuẩn:

RNBQKBNR
PPPPPPPP 





PPPPPPPP 
RNBQKBNR

Trông đủ bình thường, cho đến khi bạn phát hiện ra đó là một cuộc thi MỌI THỨ ĐỂ KIẾM TIỀN, cuộc thi TIÊU CHUẨN CUỐI CÙNG :

  • Trên mỗi lượt, mỗi quân cờ trên bảng sẽ thực hiện một bước di chuyển hợp lệ * được chọn ngẫu nhiên (sử dụng quy tắc di chuyển tiêu chuẩn của nó). Tuy nhiên, thứ tự các mảnh di chuyển được ngẫu nhiên mỗi lượt.
  • Một mảnh có thể chụp BẤT K PI PIECE nào , ngay cả khi nó có cùng màu với nó, thậm chí là một vị vua.
  • Chân có thể chụp FORWARD , cũng như đường chéo. Hơn nữa, giống như bình thường, nếu có một khoảng trống ở phía trước nó, một con tốt có thể di chuyển hai khoảng trống trong lần di chuyển đầu tiên của chúng (chúng cũng có thể chụp theo cách đó.) cầm đồ.
  • Người chiến thắng là người đứng cuối cùng. Tuy nhiên, nếu sau 1000 lượt , có nhiều hơn một mảnh còn lại, tất cả các mảnh còn lại là người chiến thắng.
  • Không có En Passant, Séc, Lâu đài, vv

Đầu ra

Sau mỗi lượt xuất ra số lượt, và bảng trông như thế nào. Sau khi một mảnh bị giết, nó được gỡ bỏ khỏi bảng. Sau lượt đầu tiên, bảng có thể trông như thế này:

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

Sau 1000 lần di chuyển, bảng có thể trông như thế này:

1000.
  Q  K


P  N R

 R  B N   

  Q

Và trò chơi kết thúc.

Hoặc có thể sau 556 biến bảng trông như thế này:

556.


     R





Thế là trò chơi kết thúc ở đó.

* Hãy đảm bảo tất cả các ngẫu nhiên được thực hiện trong thử thách này là thống nhất (mọi khả năng đều có cơ hội xảy ra như nhau).


Nếu một con tốt có thể chụp mà không di chuyển theo đường chéo, nó cũng có thể di chuyển theo đường chéo mà không bắt?
trichoplax

1
@tri không, nó không thể.
geokavel

Một con tốt có thể chụp hai mảnh cùng một lúc khi nó di chuyển kép?
orlp

1
@orlp Không, tôi nên làm rõ điều đó. Bạn chỉ có thể di chuyển hai, nếu có một khoảng trống trước mặt bạn.
geokavel

1
Ngoài ra, trong các ví dụ của bạn, bạn cần phân biệt các con tốt là đen hoặc trắng ( pđen và Ptrắng là tiêu chuẩn trong FEN ), bởi vì chúng di chuyển các hướng khác nhau.
mbomb007

Câu trả lời:


3

Python 2 , 862 846 844 byte

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

Hãy thử trực tuyến!

Đã lưu 18 byte nhờ Jonathan Frech


855 byte (chưa được kiểm tra đầy đủ).
Jonathan Frech


Tôi nghĩ rằng ...]+[(a+b)]*2có thể là ...]+[a+b]*2hay ...,a+b,a+b].
Jonathan Frech

0

PHP, 1849 byte

<?$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))."
";}

Hãy thử trực tuyến!

chắc chắn có thể được chơi gôn nhiều hơn, và nó trông giống như hoạt động của một người điên (mà tôi cho rằng, nó có thể).

Tôi rất ấn tượng về cách di chuyển ngẫu nhiên nhanh chóng có thể xóa bảng (Tôi đã thấy 15 di chuyển làm điều đó). Ngoài ra, tôi nghĩ người duy nhất tôi thấy đạt đến giới hạn 1000 là hai giám mục nhảy múa với nhiều màu sắc khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.