Cờ đam


10

Mục tiêu của thử thách này là xác định xem một động thái có phải là một động thái kiểm tra tiếng Anh hợp pháp hay không .

Thử thách này sẽ sử dụng một bảng 8x8. Một mảnh di chuyển nên được coi là một người đàn ông (không phải là một vị vua) chỉ có thể di chuyển theo đường chéo về phía trước. Bảng sẽ có 0 hoặc nhiều mảnh đen và 1 hoặc nhiều mảnh trắng. Một mảnh màu trắng sẽ được di chuyển. Mảnh trắng có thể "nhảy" qua một mảnh màu đen theo đường chéo phía trước nó nếu hình vuông ngay phía sau nó trống. Có thể nhảy xa hơn từ vị trí đó nếu có một mảnh màu đen khác theo hướng chéo ở phía trước nó. Chụp là bắt buộc, vì vậy việc không có một bước nhảy có sẵn là bất hợp pháp. Tuy nhiên, không bắt buộc phải đi một con đường tối đa hóa số lần nhảy. Về cơ bản, điều này có nghĩa là nếu bạn thực hiện một cú nhảy và có một bước nhảy khác có thể từ vị trí kết thúc thì động thái đó là bất hợp pháp. Vị trí mảnh sử dụng sơ đồ đánh số sau:

Đánh số bàn cờ


Quy tắc

Đầu vào:

  • Một danh sách các số đại diện cho các mảnh màu đen.

  • Một danh sách các số đại diện cho các mảnh màu trắng.

  • Vị trí bắt đầu cho mảnh trắng

  • Vị trí kết thúc cho mảnh trắng

Đầu ra:

  • Giá trị trung thực nếu di chuyển là hợp lệ, nếu không thì giá trị falsey


Bạn có thể giả định một mảnh màu trắng sẽ luôn chiếm vị trí bắt đầu.

Nếu thuận tiện, bạn có thể giả sử rằng mảnh trắng đầu tiên trong danh sách mảnh trắng sẽ chứa vị trí bắt đầu thay vì chấp nhận đầu vào 3.

Luật golf tiêu chuẩn. Ít byte nhất sẽ thắng.


Các trường hợp thử nghiệm

Để minh họa, O là vị trí bắt đầu, X là vị trí kết thúc, B là các mảnh màu đen và W là các mảnh màu trắng

Black pieces: []
White pieces: [5]
Move: (5, 1)
Output: True

Single move no jump
 X _ _ _
O _ _ _ 

B: [6]
W: [9]
M: (9, 2)
O: True

Single jump
 _ X _ _
_ B _ _ 
 O _ _ _

B: [2, 6]
M: (9, 2)
O: False

Illegal ending position on top of black piece
 _ X _ _
_ B _ _ 
 O _ _ _

B: [7, 14]
W: [17]
M: (17, 3)
O: True

Double jump
 _ _ X _
_ _ B _ 
 _ _ _ _
_ B _ _ 
 O _ _ _

B: [7, 14]
M: (17, 10)
O: False

Illegal jump, must take the next jump as well
 _ _ _ _
_ _ B _ 
 _ X _ _
_ B _ _ 
 O _ _ _

B: [4]
W: [8]
M: (8, 3)
O: False

Illegal jump across the board
 _ _ _ X
B _ _ _ 
 O _ _ _


B: [6, 7]
W: [6]
M: (10, 1)
O: True

Split decision p1
 X _ _ _
_ B B _ 
 _ O _ _

B: [6, 7]
M: (10, 3)
O: True

Split decision p2
 _ _ X _
_ B B _ 
 _ O _ _


B: [2]
W: [1]
M: (1, 3)
O: False

Sideways Jump
 O B X _

B: [6]
W: [1]
M: (1, 10)
O: False

Backwards Jump
 O _ _ _
_ B _ _ 
 _ X _ _

B: [6]
W: [9, 2]
M: (9, 2)
O: False

Illegal ending position on top of white piece
 _ X _ _
_ B _ _ 
 O _ _ _

B: []
W: [9, 6]
M: (9, 2)
O: False

Illegal jump over white piece
 _ X _ _
_ W _ _ 
 O _ _ _

B: [8, 15, 23, 24]
W: [27]
M: (27, 4)
O: True


Split decision long path
 _ _ _ X
_ _ _ B 
 _ _ _ _
_ _ B _ 
 _ _ _ _
_ _ B B 
 _ _ W _

B: [8, 15, 23, 24]
W: [27]
M: (27, 20)
O: True

Split decision short path
 _ _ _ _
_ _ _ B 
 _ _ _ _
_ _ B _ 
 _ _ _ X
_ _ B B 
 _ _ W _

3
Tôi đề nghị một trường hợp thử nghiệm như B=[8,15,23,24];W=[27]với mỗi M=[27,4]M=[27,20]1. nó sẽ thay đổi hướng. 2 nó sẽ trả lời một câu hỏi tôi có: cả hai đều hợp lệ hoặc phải được thực hiện lâu hơn? ("Chụp là bắt buộc, vì vậy không hợp pháp khi không thực hiện một bước nhảy có sẵn", cả hai đều gợi ý là hợp lệ, mặc dù tôi không biết tại sao bạn lại bắt không hợp pháp nếu có thể, vì vậy có lẽ bạn muốn nhận nhiều mảnh nhất có thể?)
Jonathan Allan

Xin lỗi tôi không biết cách chơi cờ (tiếng Anh) . Bạn có phiền khi thêm một số chi tiết về di chuyển hợp pháp là gì.
tsh


Chụp là bắt buộc, vì vậy việc không có một bước nhảy có sẵn là bất hợp pháp. "nhảy" nghĩa là gì?
Erik the Outgolfer

1
@Jonathan ALLan Tôi nghĩ rằng tôi đã giải quyết câu hỏi của bạn trong phần giải thích và thêm các trường hợp kiểm tra.
aoemica

Câu trả lời:


1

Đó là một thách thức :) * lỗi cố định (thêm byte)

JavaScript (Node.js) , 197 193 191 185 181 186 byte

f=(B,W,S,E,F=1)=>g(S).filter((x,i)=>B[I="includes"](x)&!B[I](t=g(x)[i])&!W[I](t)&&t>0?F+=f(B,W,t,E):0)[0]?F>1:g(S)[I](E)
g=S=>[S--,!(y=~-(e=S-3)/4%2|0)||S%4^3?y?e+1:e:0,S%4||y?y?e:e-1:0]

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


Tôi nghĩ bạn có thể sử dụng >>2&1thay vì /4%2|0.
Arnauld

Testcase: [10, 3], [14], 14, 7thất bại.
tsh

@tsh đã sửa :), nếu nhiều trường hợp kiểm tra thất bại hãy cho tôi biết
DanielIndie
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.