Lý lịch
Hex là một trò chơi chiến lược trừu tượng hai người chơi được chơi trên một K×K
hình thoi của các hình lục giác. Hai mặt đối diện của hình thoi có màu trắng và hai mặt còn lại màu đen và hai người chơi, đen và trắng, lần lượt đặt mã thông báo màu của chúng lên một ô không có người. Người chơi đầu tiên quản lý để xây dựng một con đường giữa các mặt đối diện của màu sắc của họ là người chiến thắng. Được biết, trò chơi không thể kết thúc với tỷ số hòa và người chơi đầu tiên có chiến lược chiến thắng bất kể quy mô bảng (xem trang Wikipedia để biết chi tiết).
Nhiệm vụ
Trong thử thách này, chúng tôi sửa kích thước bảng tại K = 4
và đại diện cho bảng dưới dạng lưới sau. Các đường dày biểu thị gạch liền kề.
Nhiệm vụ của bạn là tạo ra một chiến lược chiến thắng cho người chơi đầu tiên, bạn có thể chọn màu đen hoặc trắng. Điều này có nghĩa là bất cứ điều gì hợp pháp di chuyển người chơi đối phương thực hiện, chơi của bạn phải dẫn đến một chiến thắng. Đầu vào của bạn là một vị trí trò chơi (sắp xếp các mã thông báo trên bảng) và đầu ra của bạn là một bước đi hợp pháp, theo định dạng được chỉ định bên dưới. Nếu bạn muốn tự mình tìm một chiến lược chiến thắng, đừng đọc spoiler này:
Phác thảo một chiến lược có thể chiến thắng, giả sử màu trắng đi trước. Đầu tiên chọn 5. Sau đó, nếu bạn có một đường dẫn từ 5 đến hàng dưới cùng HOẶC màu đen chọn 0 hoặc 1 tại bất kỳ điểm nào, hãy trả lời bằng cách chọn bất kỳ 0 hoặc 1 nào trống. Nếu màu đen chọn 9 hoặc 13, chọn 10 và tùy theo số 14 hoặc 15 là trống. Nếu màu đen không chọn 9, 13 hoặc 14, thì chọn 9 và tiếp theo tùy theo số 13 hoặc 14 là trống. Nếu màu đen chọn 14, trả lời bằng cách chọn 15. Tiếp theo, chọn 10 nếu nó trống; nếu màu đen chọn 10, trả lời bằng 11. Nếu màu đen thì chọn 6, trả lời bằng 7 và tiếp theo là 2 hoặc 3 bị bỏ trống. Nếu màu đen không chọn 6, hãy chọn nó, vì vậy bạn có một đường dẫn từ 5 đến hàng dưới cùng.
Đầu vào và đầu ra
Đầu vào của bạn là một chuỗi gồm 16 ký tự WBE
, viết tắt của màu trắng, đen và trống. Họ đại diện cho gạch của bảng, như liệt kê ở trên. Bạn có thể chọn phương thức nhập (cũng xác định phương thức đầu ra của bạn) từ các mục sau:
- Đầu vào từ STDIN, đầu ra đến STDOUT.
- Nhập dưới dạng một đối số dòng lệnh, xuất ra STDOUT.
- Nhập dưới dạng 16 đối số dòng lệnh một ký tự, xuất ra STDOUT.
- Đầu vào là đối số của hàm được đặt tên, đầu ra là giá trị trả về.
Đầu ra của bạn đại diện cho ô mà bạn đặt mã thông báo tiếp theo, vì đến lượt bạn di chuyển. Bạn có thể chọn từ các định dạng đầu ra sau:
- Một chỉ số dựa trên không (như được sử dụng trong hình trên).
- Một chỉ số dựa trên một.
- Chuỗi đầu vào với một chuỗi được
E
thay thế bởi bất kỳW
hoặcB
bạn đã chọn cho trình phát của mình.
Quy tắc
Chiến lược của bạn phải mang tính quyết định. Bạn không cần phải xử lý chính xác các vị trí trò chơi không thể truy cập được từ bảng trống bằng chiến lược của bạn hoặc các vị trí đã giành chiến thắng cho một trong hai người chơi và bạn có thể gặp sự cố với họ. Ngược lại, trên các bảng có thể truy cập bằng chiến lược của bạn, bạn phải trả lại một động thái hợp pháp.
Đây là môn đánh gôn, vì vậy số byte thấp nhất sẽ thắng. Sơ hở tiêu chuẩn là không được phép.
Kiểm tra
Tôi đã viết một bộ điều khiển Python 3 để xác nhận các mục, vì nó sẽ cực kỳ tẻ nhạt khi làm bằng tay. Bạn có thể tìm thấy nó ở đây . Nó hỗ trợ ba định dạng đầu vào và các hàm Python 3 (các chức năng trong các ngôn ngữ khác phải được gói vào các chương trình), cả ba định dạng đầu ra và cả hai trình phát. Nếu một chiến lược không chiến thắng, nó sẽ tạo ra một trò chơi thua mà nó tìm thấy, vì vậy bạn có thể điều chỉnh chương trình của mình.
Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.
Lẽ ra tôi đã thắng từ lâu, hay tôi sai?