Trọng tài cờ vua nhỏ nhất


8

Viết một chương trình, khi nhìn vào bàn cờ, có thể nói liệu có séc hay séc.

Đầu vào : một bàn cờ ở dạng văn bản, dòng cuối cùng của đầu vào là thứ hạng đầu tiên (dòng bắt đầu của Trắng)

Vị trí bắt đầu trong đầu vào này sẽ trông như thế này (không gian là một hình vuông trống, chữ in hoa màu trắng): tại sao không có không gian được hiển thị ở đây?

rnbqkbnr
pppppppp




PPPPPPPP
RNBQKBNR

Chương trình nên in một hoặc nhiều nội dung sau (tất nhiên không có dấu ngoặc kép), tùy thuộc vào tình huống:

  • "Vua trắng đang trong tầm kiểm soát!" (nếu đã có trong checkmate, đừng hiển thị cái này!)
  • "Vua đen đang kiểm tra!" (nếu đã có trong checkmate, đừng hiển thị cái này!)
  • "Vua trắng đang ở trong tù!"
  • "Vua đen đang ở trong tù!"
  • "Trắng đang bế tắc!" (Sẽ có bế tắc nếu Trắng di chuyển - tùy chọn )
  • "Đen đang bế tắc!" (Sẽ có bế tắc nếu Đen di chuyển - tùy chọn )
  • "Cả hai vị vua đều an toàn cho đến bây giờ." (nếu không áp dụng ở trên)

Đầu vào được đảm bảo là chính xác và là một vị trí cờ hợp pháp (không có hai vị vua cùng màu, không có hai vị vua trong kiểm tra, v.v.).

Ghi bàn:

Điểm số là số lượng nhân vật, chiến thắng thấp nhất, không sớm hơn 10 ngày sau câu trả lời hợp lệ đầu tiên. Nếu việc đánh giá bế tắc tùy chọn được thực hiện, kích thước sẽ giảm 20% (đối với tình huống này, giả sử không thể thực hiện en-passant).


Tôi tin rằng bế tắc có thể phụ thuộc vào người sẽ di chuyển (nghĩa là tôi có thể rời khỏi vị trí kiểm tra vào vị trí sẽ bế tắc ngoại trừ việc bây giờ đối thủ của tôi chuyển sang di chuyển và anh ta sẽ phải thay đổi điều gì đó). Tôi sẽ cố gắng tạo ra một trạng thái như vậy.
dmckee --- ex-moderator mèo con

@dmckee: Đây là lý do tại sao tôi tách màu trắng và đen. Bạn phải in "màu trắng đang bế tắc" nếu có bế tắc nếu màu trắng di chuyển. Tôi sẽ chỉnh sửa nó để làm cho nó rõ ràng hơn.
vsz

Thế còn bế tắc vô điều kiện (ví dụ chỉ có các vị vua còn lại trên bảng)? Chỉnh sửa: ah, "một hoặc nhiều". Tuy nhiên, sẽ rất tốt nếu bao gồm điều này trong các trường hợp thử nghiệm mà tôi chắc chắn rằng bạn sẽ thêm.
Peter Taylor

1
@PeterTaylor: Vâng, về mặt kỹ thuật, chúng không phải là bế tắc. Một lần đó, chúng ta sẽ phải bao gồm Vua + một Hiệp sĩ hoặc Giám mục vs Vua, đó cũng là một trận hòa. Và sau đó là kiểm tra vĩnh cửu. Và như thế. Ok, nếu bạn muốn thực hiện nó (và người bạn đời không thể tránh khỏi trong x cũng vậy?) Bạn có thể tự do làm điều đó, nhưng tôi sẽ không đưa ra yêu cầu nghiêm ngặt. Vì vậy, trong trường hợp đó tôi sẽ chấp nhận "Cả hai vị vua đều an toàn cho đến bây giờ." đầu ra trong trường hợp chỉ còn lại các vị vua trên tàu.
vsz

3
Điều gì sẽ xảy ra nếu séc được thực hiện bởi một con tốt đủ điều kiện để bắt người qua đường ? Có an toàn để giả định điều này không xảy ra?
Steven Rumbalski

Câu trả lời:


5

C, 837-20% = 669,6 ký tự

Dựa trên câu trả lời này . Bạn có thể thấy một số giải thích về việc thực hiện ở đó.
Bản gốc được chơi golf khá tốt, các sửa đổi không quá nhiều, vì vậy có chỗ để cải thiện.
Tôi cũng sẽ không ngạc nhiên khi thấy lỗi, QA của tôi không quá nghiêm ngặt.

char*r=" KPNBRQ  kpnbrq $ ,&)$wxy()879()8(6:GI(",B[256],*b=B,i,Q,s,*X[]={"Stalemate","Checkmate","","Check"};
e(x,d,m,V,c,r,n,p){
    p=b[x];
    return(m/r?
        n=x+d*r,
        p-2-8*(d<0)&&!(n&136)&&(b[n]?r=8,p&8^b[n]&8&&c&65^64:c&65^65)&&
        ((V?v(n,x):b[n]%8==1&&(s&=~((b[n]>7?8:2)))),e(x,d,m,V,c,r+1))
    :0)||d>0&&e(x,-d,m,V,c,1);
}
d(x,v,m,i)char*m;{
    (i=*m-40)? e(x,i%64,b[x]%8-2?b[x]&4?7:1:(x/16-1)%5|i%2?1:2,v,i,1),d(x,v,m+1):0;
}
v(t,f){
    b[t]%8-1?
        (s&(b[f]>7?8:2))==0?
            bcopy(B,b+=128,128),
            s|=(b[f]>7?8:2),
            b[f]^=b[t]=b[f],
            a(b[t]<8,63),
            b=B
        :0
    :
        (s|=b[f]>7?1:4);
}
a(c,n){
    b[i=n*2-n%8]&&b[i]/8==c?d(i,!Q++,r+r[b[i]%8+15]-10),Q--:0;n--&&a(c,n);
}
p(c,t){
    return(t=c?s%4:s/4)!=2&&printf("%s%s%s is in %s\n",t?"The ":"",c?"White":"Black",t?" king":"",X[t]);
}
main(){
    for(;gets(b);b+=8)for(;*b;b++)*b=strchr(r,*b)-r;b=B;
    a(0,63);
    a(1,63);
    p(0)||p(8)||puts("Both kings are safe for now");
}
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.