Nhà vua có thể bắt được con tốt không?


26

Cho đầu vào gồm bốn số nguyên x 1 , y 1 , x 2y 2 , xuất ra liệu một vị vua trắng trong cờ vua (có tọa độ ( x 1 , y 1 )) có thể bắt được một con tốt màu đen (với tọa độ ( x 2 , y 2 )) và chụp nó nếu con tốt đang di chuyển để thăng cấp cho nữ hoàng càng nhanh càng tốt.

Các tọa độ của bảng như sau:

       first coordinate (x)
             12345678

           1 .#.#.#.#
           2 #.#.#.#.
           3 .#.#.#.#
  second   4 #.#.#.#.
coordinate 5 .#.#.#.#
    (y)    6 #.#.#.#.
           7 .#.#.#.#
           8 #.#.#.#.

Giả sử nó có màu trắng để di chuyển (lượt của nhà vua) và cả hai người chơi đều chơi tối ưu (nhà vua sẽ di chuyển nhanh nhất có thể để bắt được con tốt, và con tốt sẽ di chuyển nhanh nhất có thể để thăng cấp). Các tọa độ đầu vào sẽ luôn khác biệt và cầm đồ sẽ không bao giờ bắt đầu với tọa độ y là 8.

Nhà vua di chuyển một hình vuông theo bất kỳ hướng nào mỗi lượt (nó có thể di chuyển theo đường chéo) và con tốt chỉ có thể di chuyển một không gian về phía trước (giảm tọa độ y), trừ khi nó ở vị trí ban đầu (với hệ tọa độ của chúng ta, tọa độ y của 7), trong trường hợp đó, nó có thể di chuyển hai không gian về phía trước.

Đầu vào có thể được cung cấp dưới dạng một chuỗi được phân tách bằng khoảng trắng / dấu phẩy, một chuỗi các chuỗi / số nguyên hoặc bốn đối số hàm / dòng lệnh / vv. Các tọa độ có thể được cung cấp theo bất kỳ thứ tự nào thuận tiện nhất / golfy (vì vậy, chấp nhận đầu vào là [y 2 , y 1 , x 1 , y 2 ] là ổn miễn là phù hợp). Đầu ra phải là một giá trị trung thực hoặc giả .

Vì đây là , mã ngắn nhất tính bằng byte sẽ thắng.

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

5 3 3 2

6 1 1 7

3 3 3 2

4 1 4 7

7 7 1 7

1 8 1 7

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

6 4 3 2

8 8 1 7

3 4 3 2


Chúng ta có thể chọn thứ tự của tọa độ hay nó phải là x1 y1 x2 y2?
Dennis

11
Tôi đề nghị trường hợp thử nghiệm 1 8 1 7, nơi nhà vua bắt giữ trước khi con tốt có thể di chuyển hai không gian. Tôi nghĩ rằng tất cả các câu trả lời bây giờ đã sai. Tình trạng này làm cho vấn đề khó khăn hơn rất nhiều.
xnor

1
@Neil vì việc chuyển đổi thành số chỉ nhàm chán và không thêm gì cả
edc65

1
@Neil Đã có rất nhiều bài viết ở đây liên quan đến ký hiệu đại số, và tôi muốn tập trung vào thử thách thực tế.
Doorknob

2
@kaine Người cầm đồ không gây ra mối đe dọa đáng kể cho nhà vua trừ khi nhà vua không thể thực hiện hoặc trước khi di chuyển. Nhà vua không cần phải kiểm tra vì luôn có một động thái tốt tương đương mà nó có thể thực hiện.
Neil

Câu trả lời:


3

Thạch , 33 byte

‘»Ɠ_2<®
Ɠ©<7
:5+Ɠ>7$¤<1.4
Ɠ_ƓA2£Ŀ

Chương trình này đọc tọa độ như x2\nx1\ny2\ny1từ STDIN. Hãy thử trực tuyến!

Phiên bản không cạnh tranh

Thật không may, trình thông dịch Jelly đã có một lỗi khi câu hỏi này được đăng. Lỗi nói đã ngăn nó chấp nhận nhiều hơn hai đối số dòng lệnh. Phiên bản mới nhất của Jelly có thể giải quyết tác vụ đã cho trong 23 byte .

⁶>7×5
_A+⁵>6$¤+¢’»⁶_2<⁵

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


18

Con trăn 2, 53 40

lambda x,y,p,q:y-2<q>=abs(x-p)+q/7+y/8*5

Nhà vua có tọa độ (x, y)và cầm đồ (p, q).

Có ba trường hợp quan trọng:

  1. Con tốt ở hạng 7 và nhà vua ở hạng 8. Để bắt được con tốt, nhà vua phải ở cùng một tập tin hoặc một con liền kề.

    Kết quả: q = 7 ⋀ y = 8 → |x - p| ≤ 1

  2. Con tốt ở hạng 7. Để bắt được con tốt, nhà vua phải ở trong sáu hồ sơ.

    Kết quả: q = 7 → |x - p| ≤ 6

  3. Con tốt ở cấp thấp hơn. Để chiếm được con tốt, nhà vua phải có thể đến quảng trường khuyến mãi nhiều nhất một lần di chuyển sau khi cầm đồ.

    Kết quả: q < 7 → |x - p| ≤ q ⋀ y - 1 ≤ q

Giải pháp của tôi chỉ là những điều kiện chơi golf xuống. Hy vọng lần này không có lỗi.


2
Làm thế nào về việc cắt absvới max(y-1,x-p,p-x)?
xnor

Không nên f(1,8,1,7)được Truevì nhà vua ngay lập tức nắm bắt được cầm đồ? Tôi nghĩ rằng có một sự tinh tế trong đó hàng cầm đồ 7 không thể được coi là hàng 6 nếu nhà vua bắt giữ ngay lập tức.
xnor

@xnor Tôi nghĩ bây giờ nó đã được sửa (theo cách chơi golf tệ).
grc

1
Nếu bạn đảo ngược điều kiện cuối cùng, bạn có thể xóa khoảng trắng giữa or-2.
xsot

@xsot cảm ơn vì tiền boa. Tôi đã thay đổi cách tiếp cận của mình và nhận được nó một chút nữa bây giờ.
grc

2

Prolog, 48 42 byte

Mã số:

p(X,Y,P,Q):-Y-2<Q,Q>=abs(X-P)+Q//7+Y//8*5.

Ví dụ:

p(1,8,1,7).
true

p(3,4,3,2).
false

Một thử thách không tồi cho Prolog so với hầu hết.

Chỉnh sửa: Đã lưu 6 byte bằng cách chuyển sang công thức được sử dụng trong câu trả lời Python 2 của grc .
Thật không may, Prolog không thể so sánh chuỗi như python có thể và phân chia số nguyên dài hơn 1 byte so với phân chia float.

Dùng thử trực tuyến tại đây


0

JavaScript (ES6), 52

(x,y,u,t,d=x>u?x-u:u-x)=>(d>=y?d:y-1)<=(d<2|t<7?t:6)

Tôi hy vọng đã lưu các byte không sử dụng Math.abs, Math.min, Math.max

Con tốt ở hàng bảy có thể thoát khỏi việc di chuyển 2 khoảng trắng, nếu và chỉ khi nhà vua không ở trong một cột gần - đó là lý do tại sao có một kiểm tra dtrước khi thay thế 7 bằng 6.

Trường hợp thử nghiệm để chạy trong giao diện điều khiển:

;[f(5,3,3,2),f(6,1,1,7),f(3,3,3,2),f(1,8,1,7),f(6,4,3,2),f(8,8,1,7),f(3,4,3,2)]

Kết quả: [true, true, true, true, false, false, false]


0

Ruby, 50 byte

def f(a,b,c,d)(a-c).abs<=(d==7?6-b/8*5:d)&&b-d<2;end

Đối số là (king x, king y, pawn x, pawn y), tất cả các số nguyên.

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.