Đây là một vấn đề thú vị mà tôi nghĩ đến vào một ngày khác, liên quan đến các bit mã cạnh tranh với các bit mã khác không chỉ trong một thuộc tính mà mã có, mà bằng cách chơi một trò chơi với các bit mã khác.
Nhiệm vụ của bạn là xây dựng một chương trình lấy trạng thái hiện tại của bảng Go và xác định di chuyển nào để thực hiện hoặc vượt qua.
Chương trình của bạn sẽ chấp nhận như sau:
19 dòng, mỗi dòng có 19 ký tự, đại diện cho các mảnh hiện có trên bảng Go. Một nhân vật
0
đại diện cho một hình vuông trống,1
màu đen và2
màu trắng.Hai số đại diện cho số lượng tù nhân mà mỗi người chơi có (đen, rồi trắng).
Một số đại diện cho lượt của nó là di chuyển (đen hoặc trắng). Như trên,
1
là màu đen, và2
là màu trắng.
và đầu ra một trong những điều sau đây:
Một cặp tọa độ
a b
đại diện cho tọa độ mà tại đó di chuyển.1 1
là hình vuông trên cùng bên trái và các số thứ nhất và thứ hai tương ứng di chuyển xuống và sang phải.Chuỗi
pass
, đại diện cho một di chuyển để vượt qua.
Ví dụ, chương trình có thể nhận được đầu vào sau:
0000000000000000000
0000000000000000000
0000000000000000000
0001000000000002000
0000000000000000000
0000000000000000000
0001210000000000000
0000100000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0002000000000001000
0000000000000000000
0000000000000000000
0000000000000000000
0 0 1
đại diện cho một trò chơi trong đó chỉ có một vài di chuyển đã được chơi.
Sau đó, chương trình có thể xuất ra 6 5
, có nghĩa là "đặt một viên đá đen ở điểm thứ 6 từ trên xuống và thứ 5 từ bên trái". Điều này sẽ chụp đá trắng tại 7 5
. Trạng thái của hội đồng sau đó sẽ thay đổi thành:
0000000000000000000
0000000000000000000
0000000000000000000
0001000000000002000
0000000000000000000
0000100000000000000
0001010000000000000
0000100000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0002000000000001000
0000000000000000000
0000000000000000000
0000000000000000000
1 0 2
(Lưu ý rằng mặc dù một viên đá trắng đã bị bắt, nó được tính là tù nhân cho màu đen.)
Mã của bạn phải đáp ứng thêm các thuộc tính sau:
Nếu chương trình của bạn được đưa ra cùng một trạng thái đầu vào, nó phải luôn tạo ra cùng một đầu ra. Đây là yếu tố quyết định của AI đi. Nó không được có một thành phần ngẫu nhiên.
Chương trình của bạn không được mất hơn 60 giây để xác định di chuyển sẽ thực hiện. Quy tắc này sẽ không được áp dụng nghiêm ngặt do sự thay đổi trong khả năng tính toán, nhưng nó phải thực hiện một bước đi trong một khoảng thời gian hợp lý.
Mã nguồn chương trình của bạn không được vượt quá tổng số 1 megabyte (1.048.576 byte).
Chương trình của bạn phải luôn luôn thực hiện các động thái hợp pháp. Chương trình của bạn không thể thực hiện di chuyển nơi một viên đá đã tồn tại và không thể đặt một mảnh dẫn đến một nhóm đá của chính nó bị bắt giữ. (Một ngoại lệ đối với các quy tắc cho mục đích của thử thách này là chương trình được phép tạo một vị trí ban đầu ở đó - bởi vì nó chỉ được trao cho vị trí hiện tại của một bảng, nên không thể dự đoán được việc di chuyển đã được thực hiện trước.)
Bài dự thi của bạn sau đó sẽ chơi trong một giải đấu toàn chơi với tất cả các bài dự thi khác, trong trò chơi cờ vây, trong đó trạng thái của bảng bắt đầu trống rỗng, và mỗi chương trình thay phiên nhau được đưa vào vị trí của bảng và di chuyển .
Mỗi cặp bài nộp sẽ chơi hai vòng - một vòng với mỗi người chơi có màu đen. Bởi vì các AI trong vấn đề này hoàn toàn mang tính quyết định, hai trong số các AI giống nhau chơi cùng nhau sẽ luôn dẫn đến kết quả chính xác cùng một trò chơi đang được chơi.
Điều kiện để giành chiến thắng là như vậy:
Nếu chương trình của bạn chơi đến hết trò chơi, quy tắc tính điểm của người Trung Quốc sẽ được sử dụng để xác định người chiến thắng. Không có komi sẽ được áp dụng.
Nếu chương trình của bạn phát đến điểm đạt đến trạng thái trước đó, do đó gây ra một vòng lặp vô hạn, hai chương trình sẽ được tuyên bố là đã kết nối.
Bài nộp của bạn sẽ được tính bằng số điểm mà bài đó ghi được. Một chiến thắng có giá trị 1 điểm, và một cà vạt có giá trị một nửa điểm. Bài nộp có nhiều điểm nhất là người chiến thắng chung cuộc.
Đây là một thử thách trên đỉnh đồi, trong đó bất kỳ ai cũng có thể đăng một mục mới bất cứ lúc nào và bảng xếp hạng sẽ được đánh giá lại định kỳ khi điều này xảy ra.