배경
Picross 또는 Griddlers라고도하는 Nonogram 은 2D 그리드의 각 셀이 각 줄의 연속적인 색상 셀 수를 사용하여 색상을 지정하거나 비워 둘지를 결정하는 퍼즐입니다.
다음은 솔루션이있는 비노 그램 퍼즐의 예입니다.
문제는 일부 상용 Nonogram 게임 / 모바일 앱은 수작업으로 해결할 수없는 퍼즐을 가지고 있다는 것입니다 (예 : 여러 솔루션이 있거나 깊은 역 추적이 필요함). 그러나 정답이 공백 인 셀에 색상을 지정하려고 할 때 생명력이 손실 되는 플레이어에게 생명을 제공합니다 . 이제 그 불쾌한 "퍼즐"을 무차별 대입 할 차례입니다!
작업을 단순화하기 위해 단서와 단 하나의 행만 상상해보십시오.
3 7 | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
는 [3,7]
단서, 그리고 라인 길이는 15 개 세포이다. 가능한 해결책이 여러 개 있기 때문에이 선을 완전히 풀기 위해서는 생명을 위험에 빠뜨려 야합니다 (즉, 모든 유색 세포를 결정).
도전
단서가있는 줄 (양의 정수 목록)과 줄 길이가 주어지면 최적의 전략으로 줄을 무차별하게한다고 가정 할 때 잃어 버릴 최대 수명을 찾으십시오.
항상 컬러 셀을 추측 한다는 점에 유의하십시오 . 실제 게임에서 빈 셀 (옳거나 그른 것)을 추측하는 것은 당신의 삶에 영향을 미치지 않으므로 퍼즐을 그런 식으로 "해결"할 수 없습니다.
또한 입력이 항상 유효한 Nonogram 행을 나타내는 것으로 가정 할 수 있으므로와 같은 것에 대해 걱정할 필요가 없습니다 [6], 5
.
설명
더 간단한 예를 먼저 살펴 보겠습니다.
[1,2], 5
이 줄에는 세 가지 가능성이 있습니다 ( O
색상 셀, .
빈 셀 ).
O . O O .
O . . O O
. O . O O
셀 0 (왼쪽부터 0부터 시작하는 인덱스)을 색칠하려고하면 다음 중 하나가 발생합니다.
- 셀의 색상이 올바르게 표시됩니다. 이제 우리는 두 가지 가능성을 가지고 있으며 선을 완전히 해결하기 위해 셀 2와 셀 4 중에서 선택할 수 있습니다. 두 경우 모두 최악의 경우 생명을 잃게됩니다.
- 세포는 비어 있으며 생명을 잃습니다. 이 경우이 라인에 대한 고유 한 솔루션을 이미 식별 했으므로 1 명의 생명을 잃었습니다.
따라서 답 [1,2], 5
은 1입니다.
[5], 10
이진 검색? 아니.
가장 명백한 첫 번째 선택은 4 또는 5이며, 비어있는 경우 하나의 가능성을 나타냅니다 (1 생명의 비용으로). 먼저 4를 선택했다고 가정 해 봅시다. 셀 4가 실제로 채색 된 경우 왼쪽으로 확장됩니다. 즉, 생명이 손실 될 때까지 3, 2, 1 및 0을 시도하십시오 (또는 셀 0이 채색되면 생명이 전혀 소비되지 않습니다). 생명을 잃을 때마다 우리는 해결책을 독특하게 결정할 수 있습니다.
_ _ X O O _ _ _ _ _
우리는 이미 그 답이 이것이라는 것을 알고 있습니다.
. . . O O O O O . .
따라서 답 [5], 10
은 1입니다.
[3,7], 15
비어있는 경우 다음 솔루션을 즉시 표시하는 셀 11로 시작하십시오.
O O O . O O O O O O O X . . .
그런 다음 12를 시도하십시오. 비어있는 경우 추가 수명이 1 회 발생하여 해결할 수있는 두 가지 가능성이 있습니다.
O O O . . O O O O O O O X . .
. O O O . O O O O O O O X . .
이제 2를 시도하십시오. 비어 있으면 [1,2], 5
예제 와 유사하게 해결할 수있는 3 가지 가능성이 있습니다 .
. . 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
이러한 방식으로 위험을 최소화하면 최대로 솔루션에 도달 할 수 있습니다. 2 명의 삶이 소비되었습니다.
테스트 사례
[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
마지막 두 경우에, 최적의 전략은되어 있지 최소 공백을 통과, 단순히 오른쪽 (또는 오른쪽에서 왼쪽으로) 왼쪽에서 것이다. 지적 해 주신 @crashoz에게 감사드립니다.
규칙
표준 코드 골프 규칙이 적용됩니다. 바이트 단위의 가장 짧은 유효한 제출이 이깁니다.
하사품
누군가가 다항식 시간 알고리즘 (정확성의 증거와 함께)을 생각해 내면 그러한 해결책에 +100 현상금을 부여합니다.
[6], 5
?