Trình tạo Sudoku ngẫu nhiên


13

Tôi muốn tạo ra một Sudoku hoàn toàn ngẫu nhiên .

Xác định lưới Sudoku dưới dạng lưới các số nguyên trong khoảng từ đến trong đó một số phần tử có thể được bỏ qua. Lưới là một câu đố hợp lệ nếu có một cách duy nhất để hoàn thành nó để phù hợp với các ràng buộc Sudoku (mỗi dòng, cột và ô vuông không có phần tử lặp lại) và đó là tối thiểu về mặt đó (ví dụ: nếu bạn bỏ qua nữa yếu tố câu đố có nhiều giải pháp).9×9193×3

Làm cách nào tôi có thể tạo ra một câu đố Sudoku ngẫu nhiên, sao cho tất cả các câu đố Sudoku đều có thể trang bị được?


Đây có vẻ là một giải pháp khả thi: Dryicons.com/blog/2009/08/14/14
Joe

1
Bây giờ có một câu hỏi meta liên quan đến điều này. Vui lòng thảo luận ở đó hoặc trong trò chuyện.
Kevin

Câu trả lời:


15

Tạo phân phối thống nhất chính xác cho tất cả các câu đố sudoku có thể được thực hiện theo cách đó: bạn chỉ có thể tạo ngẫu nhiên lưới 9x9 và sau đó chỉ giữ lại nếu đó là lưới sudoku chính xác, nếu không thì thử lại.

Cách tiếp cận mạnh mẽ này đảm bảo cho bạn một phân phối đồng đều nhưng rõ ràng là không hiệu quả, vì bạn có thể nhân xác suất của lưới chính xác bằng chỉ bằng cách tạo lưới x ngẫu nhiên và sau đó điền vào hai dòng còn lại. Đây vẫn là một phân phối ngẫu nhiên, nhưng vẫn còn quá kém hiệu quả.917

Bạn cũng có thể buộc dòng đầu tiên là , sau đó tạo ngẫu nhiên phần còn lại của lưới và sau đó chọn ngẫu nhiên một hoán vị của tất cả các chữ số. Bạn vẫn sẽ chọn tất cả các lưới có cùng xác suất nhưngnhanh hơn[1,2,..9]9!

Có thể bạn thấy tôi đang đi đâu: trả lời vấn đề này một cách thông minh có lẽ sẽ khiến bạn tự hỏi về các đối xứng cơ bản của lưới sudoku. Rất nhiều công việc đã được thực hiện theo hướng này để chứng minh thực tế rằng 17 là số lượng manh mối tối thiểu của một sudoku ( xem bài viết này ) và bạn có thể vào đây để xem bảng liệt kê chính xác 5,472,730,538 lớp của 3,359,232 lưới tương tự, sử dụng chúng đối xứng:

  1. Hoán vị các chữ số
  2. Hoán vị của các hàng (các dải và các hàng bên trong mỗi dải)
  3. Điều tương tự cho các cột
  4. Chuyển vị

Với khung này, bạn có thể chọn ngẫu nhiên một trong số 5.472.730.538 lớp (chúng thực sự có thể được nén thành 6 GB) và sau đó chọn một trong các đại diện cho mỗi đối xứng, tương ứng một trong .9!,64,64,2

EDIT: để điều chỉnh điều này với các câu đố chưa hoàn thành, bạn có thể chọn ngẫu nhiên một tập hợp con của lưới của mình, kiểm tra xem giải pháp có duy nhất với bộ giải sudoku và thử lại không nếu không. Đây không phải là một phân phối đồng đều vì số lượng câu đố không hoàn chỉnh với một giải pháp duy nhất có thể khác nhau cho hai lưới. (Tôi sẽ rất ngạc nhiên nếu không)


Nhưng Justin đang yêu cầu một cách tạo ra một câu đố không hoàn chỉnh sao cho có một cách duy nhất để hoàn thành nó. Ngay cả khi bạn tạo lưới 9x9 thỏa mãn các ràng buộc Sudoku, không hiểu tại sao việc xóa một tập hợp con cụ thể của các ô sẽ cung cấp cho bạn một câu đố có thể được hoàn thành theo cách độc đáo.
Janoma

1
@Janoma: oh, xấu của tôi, tôi sẽ chỉnh sửa. Nhưng nó không có ý nghĩa lắm nếu người ta không định nghĩa thế nào là một câu đố thích hợp. (Là một lưới chỉ có một ô trống là một câu đố?). Chúng ta có muốn một lưới tối thiểu, (nghĩa là nếu bạn xóa một chữ số, giải pháp không còn là duy nhất nữa?) Đó là một câu hỏi thú vị.
jmad

"Một số phần tử có thể được bỏ qua" là đủ chính xác (nghĩa là "một hoặc nhiều phần tử" có thể được loại bỏ). Ví dụ, một câu đố hợp lệ với một ô trống có thể được hoàn thành theo một cách duy nhất, trong khi một câu đố trống thì không thể, vì có nhiều hơn một câu đố hợp lệ. Ngoài ra, một câu đố hợp lệ hoàn thành có thể được hoàn thành theo cách độc đáo (tầm thường, trống rỗng). Câu hỏi về lưới tối thiểu cũng thú vị, nhưng khác với câu hỏi này.
Janoma

@Janoma, jmad: một câu đố hợp lệ thường là tối thiểu, tôi quên đề cập đến điều đó.
Gilles 'SO- ngừng trở thành ác quỷ'

@Gilles Đó có phải là một định nghĩa? Tôi tự hỏi nếu đó thực sự là ý nghĩa dự định của OP. Nó làm cho vấn đề trở nên khó khăn hơn nhiều :-)
Janoma
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.