tło
Nonogram , znany również jako Picross lub Griddlers, to łamigłówka, której celem jest ustalenie, czy każda komórka na siatce 2D powinna być pokolorowana, czy pozostawiona pusta, przy użyciu liczb kolejnych kolorowych komórek w każdej linii.
Poniżej znajduje się przykład puzzle Nonogram z rozwiązaniem.
Problem polega na tym, że niektóre komercyjne gry / aplikacje mobilne Nonogram mają łamigłówki, których nie można rozwiązać ręcznie (np. Mają wiele rozwiązań lub wymagają głębokiego cofania). Jednak oferują one także życie graczowi, w którym jedno życie zostaje utracone, gdy próbujesz pokolorować komórkę, której poprawna odpowiedź jest pusta . Czas więc brutalnie zmusić te paskudne „łamigłówki”!
Aby uprościć zadanie, wyobraź sobie tylko jedną linię ze wskazówką i niczym więcej:
3 7 | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Są [3,7]
to wskazówki, a długość linii wynosi 15 komórek. Ponieważ ma wiele możliwych rozwiązań, musimy zaryzykować życie, aby w pełni rozwiązać tę linię (tj. Określić wszystkie kolorowe komórki).
Wyzwanie
Biorąc pod uwagę linię ze wskazówkami (listę dodatnich liczb całkowitych) i długość linii, znajdź maksymalną liczbę żyć, które stracisz, zakładając, że brutalnie zmusisz linię z optymalną strategią.
Pamiętaj, że zawsze zgadujesz kolorowe komórki . W rzeczywistych grach odgadywanie pustych komórek (dobre lub złe) nie ma wpływu na twoje życie, więc nie możesz w ten sposób „rozwiązać” układanki.
Możesz również założyć, że dane wejściowe zawsze reprezentują prawidłową linię Nonogram, więc nie musisz się martwić o coś takiego [6], 5
.
Wyjaśnienie
Najpierw spójrzmy na kilka prostszych przykładów.
[1,2], 5
Istnieją dokładnie trzy możliwości dla tej linii ( O
jest kolorową komórką, .
jest pustą):
O . O O .
O . . O O
. O . O O
Jeśli spróbujemy kolorować komórkę 0 (indeks 0 od lewej), nastąpi jedna z następujących czynności:
- Komórka jest poprawnie pokolorowana. Teraz mamy dwie możliwości i możemy wybrać między komórką 2 a komórką 4, aby w pełni rozwiązać linię. W obu przypadkach stracimy jedno życie w najgorszym przypadku.
- Komórka jest pusta i tracimy życie. W tym przypadku zidentyfikowaliśmy już unikalne rozwiązanie tej linii, więc skończyliśmy z 1 straconym życiem.
Dlatego odpowiedź [1,2], 5
brzmi 1.
[5], 10
Wyszukiwanie binarne? Nie.
Najbardziej oczywistym pierwszym wyborem jest 4 lub 5, które ujawnią jedną możliwość, jeśli jest pusta (kosztem 1 życia). Powiedzmy, że wybraliśmy 4 jako pierwsze. Jeśli komórka 4 rzeczywiście jest zabarwiona, rozciągamy ją w lewo, tj. Próbuj 3, 2, 1 i 0, aż do utraty życia (lub komórka 0 jest zabarwiona, w końcu nie wydajemy wcale życia). Za każdym razem, gdy ginie życie, możemy jednoznacznie ustalić rozwiązanie, np. Jeśli zobaczymy coś takiego:
_ _ X O O _ _ _ _ _
wiemy już, że odpowiedź brzmi:
. . . O O O O O . .
Dlatego odpowiedź na [5], 10
to również 1.
[3,7], 15
Zacznij od komórki 11, która, jeśli jest pusta, od razu ujawni następujące rozwiązanie.
O O O . O O O O O O O X . . .
Następnie spróbuj 12, która, jeśli jest pusta, daje dwie możliwości, które można rozwiązać kosztem 1 dodatkowego życia.
O O O . . O O O O O O O X . .
. O O O . O O O O O O O X . .
Teraz spróbuj 2. Jeśli pusty, prowadzi do trzech możliwości, które można rozwiązać podobnie jak w [1,2], 5
przykładzie.
. . 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
Jeśli nadal minimalizujesz ryzyko w ten sposób, możesz osiągnąć dowolne rozwiązanie z maks. 2 życia spędzone.
Przypadki testowe
[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
W dwóch ostatnich przypadkach optymalną strategią nie jest przechodzenie przez minimalne odstępy, ale po prostu przechodzenie od lewej do prawej (lub od prawej do lewej). Dzięki @crashoz za wskazanie tego.
Zasady
Obowiązują standardowe zasady gry w golfa . Najkrótsze prawidłowe przesłanie w bajtach wygrywa.
Hojność
Jeśli ktoś wymyśli algorytm wielomianowy (z dowodem poprawności), przyznam +100 nagród za takie rozwiązanie.
[6], 5
?