Tiền thưởng
Số 1 ( trao giải )
Tôi sẽ ném vào 50 rep cho câu trả lời hợp lệ đầu tiên
Số 2 ( trao giải )
Tôi sẽ gửi thêm 100 đại diện cho câu trả lời hợp lệ ngắn nhất.
Số 3 ( mở để gửi )
Tôi sẽ gửi 200 rep cho người đầu tiên với câu trả lời hợp lệ ngắn hơn đáng kể. Đáng kể nhất là 45% câu trả lời ngắn nhất hiện tại ( 564 byte x 0,45 = tối đa 254 byte ).
Tro choi
Bạn có nhớ trò chơi kinh điển " Nine Men Morris " hay đơn giản là " Mill "? Có một biến thể gọi là Three Men Morris , hơi giống một tic-tac-toe có thể thay đổi.
Quy tắc
Đây là bảng trống của trò chơi:
a b c
1 [ ]–[ ]–[ ]
| \ | / |
2 [ ]–[ ]–[ ]
| / | \ |
3 [ ]–[ ]–[ ]
[ ]
là một trường và |–/\
đại diện cho các tuyến giữa các trường đó.
Trò chơi được chơi bởi hai người chơi 1
và 2
mỗi người đặt 3 token trên bảng. Điều này thực sự đã xảy ra và chúng tôi đang ở trong trò chơi. Trò chơi được chiến thắng nếu một người chơi có thể tạo thành một mill
hàng dọc hoặc ngang trong 3 mã thông báo của người chơi.
Mã thông báo có thể được di chuyển trên bảng dọc theo các đường kết nối, theo quy tắc này:
Đến bất kỳ vị trí trống liền kề nào (nghĩa là từ vị trí cạnh đến trung tâm hoặc từ vị trí trung tâm đến vị trí cạnh hoặc từ vị trí cạnh đến vị trí cạnh liền kề
Người chơi phải thực hiện di chuyển trừ khi không có vị trí trống liền kề, trong trường hợp đó di chuyển bị bỏ qua.
Các thách thức
Bạn là người chơi 1
và di chuyển của bạn là tiếp theo. Viết chương trình hoặc hàm, xác định xem:
- bạn có thể buộc một chiến thắng với 2 hoặc ít hơn di chuyển ( thắng chắc chắn )
- bạn có thể giành chiến thắng với 2 hoặc ít hơn các động tác, nếu đối thủ của bạn mắc lỗi ( có thể thắng )
- bạn không thể giành chiến thắng với 2 hoặc ít hơn các lần di chuyển, bởi vì bạn sẽ cần nhiều nước đi hơn hoặc bởi vì các động tác bắt buộc sẽ khiến đối thủ của bạn giành chiến thắng ( không thể thắng )
Yêu cầu
- Mặc dù bạn chắc chắn giành chiến thắng khi bạn chán đối thủ đến chết, chương trình của bạn phải kết thúc trong thời gian hữu hạn.
- Bạn có thể viết một chương trình hoặc một chức năng.
Đầu vào
Các cầu thủ được đại diện bởi 1
và 2
. 0
định nghĩa một trường tự do. Bạn có thể lấy đầu vào dưới dạng ma trận hoặc một mảng.
Xác định
A B C D
2 1 0 | 2 1 0 | 1 0 1 | 1 2 2
2 1 2 | 0 1 0 | 1 0 2 | 2 1 O
0 0 1 | 2 2 1 | 0 2 2 | O O 1
A: [2,1,0,2,1,2,0,0,1]
B: [2,1,0,0,1,0,2,2,1]
C: [1,0,1,1,0,2,0,2,2]
D: [1,2,2,2,1,0,0,0,1]
Khả thi
A B C
1 0 1 | 1 0 1 | 1 2 2
1 2 2 | 1 2 0 | 0 0 1
2 0 0 | 2 0 2 | 2 1 0
A: [1,0,1,1,2,2,2,0,0]
B: [1,0,1,1,2,0,2,0,2]
C: [1,2,2,0,0,1,2,1,0]
Không thể nào
A B
1 0 0 | 1 2 0
1 2 2 | 2 1 0
2 0 1 | 1 2 0
A: [1,0,0,1,2,2,2,0,1]
B: [1,2,0,2,1,0,1,2,0]
Đầu ra
Chương trình của bạn sẽ xuất / trả lại một mặt cười:
- Chiến thắng chắc chắn:
:)
- Chiến thắng có thể:
:|
- Không thể thắng:
:(
Ví dụ
Chiến thắng chắc chắn trong hai nước đi:
[2][1][ ] 1. [2][1][ ]
[2][1][2] -> [2][1][2]
[ ][ ][1] [ ][1][ ]
[2][1][ ] 1. [2][1][ ] [ ][1][ ] 2. [ ][ ][1]
[ ][1][ ] -> [ ][ ][1] -> [2][ ][1] -> [2][ ][1]
[2][2][1] [2][2][1] [2][2][1] [2][2][1]
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][ ][2] -> [1][ ][2] -> [1][ ][2] -> [ ][ ][2]
[ ][2][2] [ ][2][2] [2][ ][2] [2][ ][2]
Chiến thắng có thể có trong hai nước đi:
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][2][ ] -> [1][2][ ] -> [1][2][2] -> [ ][2][2]
[2][ ][2] [2][ ][2] [2][ ][ ] [2][ ][ ]
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][2][ ] -> [1][2][ ] -> [1][2][2] -> [ ][2][2]
[2][ ][2] [2][ ][2] [2][ ][ ] [2][ ][ ]
[1][2][2] 1. [ ][2][2] [2][ ][2] 2. [1][2][2]
[ ][ ][1] -> [1][ ][1] -> [1][ ][1] -> [1][1][1]
[2][1][ ] [2][1][ ] [2][1][ ] [2][ ][ ]
Không thể thắng trong hai nước đi:
[1][ ][ ]
[1][2][2]
[2][ ][1]
Tặng kem
Trong trường hợp có thể giành chiến thắng nhất định và chương trình của bạn đưa ra các bước di chuyển theo một cách để thành công cũng như a1:a2
(1 di chuyển) hoặc a1:a2,a3:b2
(2 di chuyển), bạn có thể rút 30% số byte của mình.
Đây là mã golf - vì vậy câu trả lời ngắn nhất trong byte thắng. Sơ hở tiêu chuẩn là không được phép.
Cảm ơn Peter Taylor , người đã sửa một số lỗi và cải thiện từ ngữ trong Sandbox .
[1,0,0,2,1,0,2,2,1]
người chơi 2 không thể di chuyển - đây có phải là chiến thắng cho người chơi 1 không?