Lý lịch
Nonogram , còn được gọi là Picross hoặc Griddlers, là một câu đố trong đó mục tiêu là xác định xem mỗi ô trên lưới 2D nên được tô màu hoặc để trống, sử dụng số lượng các ô màu liên tiếp trên mỗi dòng.
Sau đây là một ví dụ về câu đố Nonogram với lời giải.
Vấn đề là, một số trò chơi / ứng dụng di động Nonogram thương mại có các câu đố không thể giải được bằng tay (ví dụ: có nhiều giải pháp hoặc yêu cầu quay lui sâu). Tuy nhiên, họ cũng cung cấp một số sinh mạng cho người chơi, trong đó một sinh mạng bị mất khi bạn cố gắng tô màu một ô có câu trả lời đúng là trống . Vì vậy, bây giờ là thời gian để vũ phu những "câu đố" khó chịu!
Để đơn giản hóa nhiệm vụ, hãy tưởng tượng chỉ một dòng với đầu mối của nó và không có gì khác:
3 7 | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Các [3,7]
manh mối, và độ dài dòng là 15 ô. Vì nó có nhiều giải pháp khả thi, chúng ta cần phải mạo hiểm một số mạng để giải quyết hoàn toàn dòng này (tức là xác định tất cả các ô màu).
Thử thách
Đưa ra một dòng có manh mối (một danh sách các số nguyên dương) và độ dài của dòng, tìm số mạng sống tối đa bạn sẽ mất, giả sử rằng bạn vũ phu dòng đó với chiến lược tối ưu.
Lưu ý rằng bạn luôn đoán các ô màu . Trong các trò chơi thực tế, việc đoán các ô trống (đúng hoặc sai) không ảnh hưởng đến cuộc sống của bạn, vì vậy bạn không thể "giải quyết" câu đố theo cách đó.
Ngoài ra, bạn có thể giả sử đầu vào luôn đại diện cho một dòng Nonogram hợp lệ, vì vậy bạn không cần phải lo lắng về điều gì đó như [6], 5
.
Giải trình
Trước tiên hãy xem xét một số ví dụ đơn giản hơn.
[1,2], 5
Có chính xác ba khả năng cho dòng này ( O
là một ô màu, .
là một ô trống):
O . O O .
O . . O O
. O . O O
Nếu chúng ta thử tô màu ô 0 (chỉ mục dựa trên 0 từ trái sang), một trong những điều sau đây xảy ra:
- Các tế bào được tô màu chính xác. Bây giờ chúng ta có hai khả năng và chúng ta có thể chọn giữa ô 2 và ô 4 để giải quyết hoàn toàn dòng. Dù thế nào đi nữa, chúng ta sẽ mất một mạng trong trường hợp xấu nhất.
- Phòng giam trống rỗng, và chúng ta mất một cuộc sống. Trong trường hợp này, chúng tôi đã xác định được giải pháp duy nhất cho dòng này, vì vậy chúng tôi đã hoàn thành với 1 mạng sống bị mất.
Do đó, câu trả lời cho [1,2], 5
là 1.
[5], 10
Tìm kiếm nhị phân? Không.
Lựa chọn đầu tiên rõ ràng nhất là 4 hoặc 5, sẽ tiết lộ một khả năng nếu nó trống (với chi phí là 1 cuộc sống). Hãy nói rằng chúng tôi đã chọn 4 đầu tiên. Nếu ô 4 thực sự có màu, chúng ta mở rộng nó sang bên trái, tức là thử 3, 2, 1 và 0 cho đến khi mất một mạng (hoặc ô 0 được tô màu, thì cuối cùng chúng ta sẽ không mất mạng). Bất cứ khi nào một cuộc sống bị mất, chúng ta có thể xác định duy nhất giải pháp, ví dụ nếu chúng ta thấy một cái gì đó như thế này:
_ _ X O O _ _ _ _ _
sau đó chúng ta đã biết câu trả lời là đây:
. . . O O O O O . .
Do đó, câu trả lời cho [5], 10
cũng là 1.
[3,7], 15
Bắt đầu với ô 11, nếu trống, sẽ tiết lộ giải pháp sau đây ngay lập tức.
O O O . O O O O O O O X . . .
Sau đó thử 12, nếu trống, sẽ đưa ra hai khả năng có thể được giải quyết với chi phí thêm 1 cuộc sống.
O O O . . O O O O O O O X . .
. O O O . O O O O O O O X . .
Bây giờ hãy thử 2. Nếu trống, nó dẫn đến ba khả năng có thể được giải quyết tương tự như [1,2], 5
ví dụ.
. . X O O O . O O O O O O O .
. . X O O O . . O O O O O O O
. . X . O O O . O O O O O O O
Nếu bạn tiếp tục giảm thiểu rủi ro theo cách này, bạn có thể đạt được bất kỳ giải pháp nào với tối đa. 2 đời dành.
Các trường hợp thử nghiệm
[1,2] 5 => 1
[2] 5 => 2
[1] 5 => 4
[] 5 => 0
[5] 10 => 1
[2,1,5] 10 => 0
[2,4] 10 => 2
[6] 15 => 2
[5] 15 => 2
[4] 15 => 3
[3,7] 15 => 2
[3,4] 15 => 3
[2,2,4] 15 => 4
[1,1,1,1,1,1,1] 15 => 2
[2,1,1,3,1] 15 => 3
[1,1,1,2,1] 15 => 5
Đối với hai trường hợp cuối cùng, chiến lược tối ưu không đi qua các khoảng trống tối thiểu, mà chỉ đơn giản là đi từ trái sang phải (hoặc phải sang trái). Cảm ơn @crashoz đã chỉ ra.
Quy tắc
Luật golf tiêu chuẩn được áp dụng. Đệ trình hợp lệ ngắn nhất tính bằng byte thắng.
Tiền thưởng
Nếu ai đó đưa ra thuật toán đa thức thời gian (với bằng chứng chính xác), tôi sẽ thưởng +100 tiền thưởng cho một giải pháp như vậy.
[6], 5
gì?