Mancala là tên của một gia đình trò chơi cờ thường liên quan đến một loạt các cốc chứa đầy hạt mà người chơi thao tác. Thử thách này sẽ sử dụng một bộ quy tắc cụ thể cho một biến thể solitaire của trò chơi.
Bảng bao gồm một "giỏ" ở một đầu, theo sau là vô số cốc, được đánh số bắt đầu từ 1. Một số cốc sẽ có một số hạt trong đó. Nếu n
cốc thứ có chính xác n
hạt trong đó, bạn có thể "gieo" hạt từ nó. Gieo có nghĩa là lấy tất cả các n
hạt ra khỏi cốc, sau đó gửi từng hạt một vào từng cốc về phía giỏ. Hạt cuối cùng sẽ đi vào giỏ. Người chơi chiến thắng khi tất cả các hạt trên bảng nằm trong rổ.
Rõ ràng, có nhiều bảng không thể thắng được, chẳng hạn như nếu có chính xác một hạt trong cốc thứ hai. Không có trò chơi hợp pháp vì tất cả các cốc có 0 hạt không thể được gieo và cốc thứ hai không có đủ hạt để được gieo. Điều này rõ ràng là không vui, vì vậy nhiệm vụ của bạn sẽ là tạo ra các bảng có thể thắng được.
Bài tập
Cho một số nguyên dương biểu thị một số hạt xuất ra một danh sách các số nguyên không âm biểu thị số lượng hạt cần được đặt trong mỗi cốc để tạo một bảng có thể thắng được như mô tả ở trên. Danh sách này không được chứa bất kỳ số 0 nào.
Đối với bất kỳ số lượng hạt nhất định, luôn có chính xác một cấu hình bảng có thể thắng.
Trình diễn
Đây là một minh họa về cách chơi bảng có thể thắng và đầu vào của 4. Bảng có thể thắng được [0, 1, 3]
. Chúng tôi bắt đầu với động thái duy nhất có sẵn, gieo hạt từ cốc thứ ba để có được [1, 2, 0]
. Bây giờ chúng tôi thực sự có một sự lựa chọn, nhưng điều duy nhất đúng là gieo cốc đầu tiên, nhận được : [0, 2, 0]
. Sau đó, chúng tôi gieo cốc thứ hai cho năng suất [1, 0, 0]
và cuối cùng chúng tôi lại gieo cốc thứ nhất một lần nữa để có được tất cả các cốc rỗng.
Các trường hợp thử nghiệm:
1 => [1]
2 => [0, 2]
3 => [1, 2]
4 => [0, 1, 3]
5 => [1, 1, 3]
6 => [0, 0, 2, 4]
7 => [1, 0, 2, 4]
8 => [0, 2, 2, 4]
9 => [1, 2, 2, 4]
10 => [0, 1, 1, 3, 5]
11 => [1, 1, 1, 3, 5]
12 => [0, 0, 0, 2, 4, 6]
13 => [1, 0, 0, 2, 4, 6]
14 => [0, 2, 0, 2, 4, 6]
15 => [1, 2, 0, 2, 4, 6]
16 => [0, 1, 3, 2, 4, 6]
17 => [1, 1, 3, 2, 4, 6]
18 => [0, 0, 2, 1, 3, 5, 7]
19 => [1, 0, 2, 1, 3, 5, 7]
20 => [0, 2, 2, 1, 3, 5, 7]
Xin chân thành cảm ơn PeterTaylor đã đưa ra một chương trình để tạo ra các trường hợp thử nghiệm!