Jak tworzymy nasze nonogramy

Każda łamigłówka tutaj zaczyna się jako zwykły obraz, a kończy jako siatka, którą można rozwiązać wyłącznie logiką. Pomiędzy tymi etapami przechodzi przez zautomatyzowany proces, który rasteryzuje obraz, sprawdza, czy wynik naprawdę da się rozwiązać, i odrzuca te, które się nie nadają. Ta strona uczciwie opisuje cały ten proces — w tym części, które kończą się niepowodzeniem, bo większość pracy polega na odrzucaniu złych łamigłówek, a nie na tworzeniu dobrych.

1. Wszystko zaczyna się od obrazu

Nonogram to zawsze tylko czarno-biała sylwetka — bez cieniowania, bez koloru, bez wewnętrznych szczegółów. Pierwszym krokiem jest więc wybór źródłowego obrazu, którego kształt czytelnie prezentuje się w niewielkiej rozdzielczości: zwierzę, owoc, znak zodiaku, przedmiot codziennego użytku. Pracujemy z grafiką wektorową (SVG), przezroczystymi plikami PNG i zwykłymi zdjęciami, uporządkowanymi w tematyczne pakiety zasobów, a także z obrazami znalezionymi przez wbudowaną wyszukiwarkę obrazów.

Na tym etapie liczy się nie to, jak ładny jest obraz, lecz to, jak dobrze jego kontur przetrwa ściśnięcie do siatki 15×15 lub 20×20. Wyrazisty, dobrze wyodrębniony kształt się sprawdza. Zatłoczona scena z wieloma małymi, nakładającymi się elementami prawie nigdy się nie nadaje — a poniżej zobaczymy dlaczego.

2. Zamiana obrazu w siatkę

Obraz jest rasteryzowany przy użyciu prawdziwej biblioteki graficznej (tej samej, na której przeglądarki opierają się przy SVG), a następnie sprowadzany do jednej wartości — czarnej lub białej — na komórkę. Nie ma jednego "właściwego" sposobu, by to zrobić, więc proces próbuje kilku: opierając się na własnej przezroczystości obrazu tam, gdzie ją ma, na zwykłej jasności (ciemne = wypełnione) albo — dla jasnego, kolorowego obiektu na jednolitym tle, gdzie sama jasność ledwie go wyodrębnia — na odległości koloru od tła. Jasnopomarańczowy lis na białym tle jest niemal biały pod względem jasności, ale daleki od niego pod względem koloru; maska odległości koloru wyodrębnia go czysto.

Granica między "wypełnionym" a "pustym" jest wybierana automatycznie metodą Otsu (Otsu's method) — standardową techniką, która znajduje próg jasności najczyściej dzielący obraz na dwie grupy. Ponieważ nie sposób z góry przewidzieć, który rozmiar, kadr i próg będą czytelne najlepiej, proces generuje wiele siatek kandydujących na każdy obraz — różne rozmiary, różne progi — przycina każdą do jej wypełnionej zawartości i dopasowuje kształt do proporcji siatki, tak aby szeroka korona otrzymała szeroką siatkę zamiast być wciśnięta w kwadrat.

3. Sprawdzanie, czy naprawdę da się ją rozwiązać

Obraz, który wygląda dobrze dla człowieka, nie jest automatycznie poprawną łamigłówką. Prawdziwy nonogram musi dać się rozwiązać wyłącznie na podstawie podpowiedzi wierszy i kolumn oraz — co kluczowe — musi mieć dokładnie jedno rozwiązanie. Jeśli dwa różne wypełnione wzory spełniają wszystkie podpowiedzi, łamigłówka jest niejednoznaczna i niesprawiedliwa, bo osoba rozwiązująca ją czystą logiką może całkiem poprawnie dojść do "błędnego" obrazka.

Dlatego każdy kandydat jest przekazywany do solvera: stosuje on te same dedukcje wiersz po wierszu, których użyłby człowiek, a tam, gdzie sama logika utyka, sięga po wyczerpujące przeszukiwanie, aby policzyć, ile pełnych rozwiązań istnieje. Każda siatka z zerową liczbą rozwiązań (sprzeczna) lub więcej niż jednym rozwiązaniem (niejednoznaczna) jest odrzucana od razu. To sprawdzenie jednoznaczności jest najważniejszą bramką w całym procesie.

4. Upewnianie się, że to logika, a nie zgadywanie

Posiadanie jednego rozwiązania to wciąż za mało. Łamigłówka może być technicznie jednoznaczna, ale osiągalna tylko metodą prób i błędów — poprzez wypełnienie komórki, śledzenie jej głęboko w siatce i cofanie się, gdy prowadzi do sprzeczności. To nie jest rozwiązywanie; to zgadywanie i sprawia, że łamigłówka jest frustrująca.

Aby to wychwycić, klasyfikujemy, jak trudno przemyśleć każdą łamigłówkę. Łamigłówki, które wynikają z prostej logiki wiersz po wierszu, są "proste". Drugi, dobrze zbadany poziom dedukcji (oparty na opublikowanych badaniach nad trudnością nonogramów autorstwa Batenburga i Kostersa) obsługuje większość reszty bez żadnego zgadywania. Wszystko, czego wciąż nie da się rozstrzygnąć bez prób i błędów, jest oznaczane jako wymagające zgadywania — a dla codziennego katalogu takie łamigłówki są odkładane na bok, a nie publikowane.

5. Dlaczego wiele obrazów nigdy się nie nadaje

Przed jakąkolwiek pracą nad rozwiązywaniem proces przewiduje też, czy obraz w ogóle warto próbować, używając dwóch bezpośrednich, ale uczciwych sygnałów. Pierwszy to rozdzielalność: jak czysto obraz w ogóle dzieli się na dwa tony — mętne, niskokontrastowe źródło to zły wybór przy każdym rozmiarze. Drugi to dopasowanie szczegółowości do rozdzielczości: obraz mający znacznie więcej drobnych detali, niż siatka ma komórek, po prostu zleje się w bezkształtną plamę.

Konkretny przykład z naszych własnych testów: prawdziwe zdjęcie wieży Eiffla dało kandydata 40×40, który przeszedł wszystkie testy rozwiązywalności — jedno unikatowe rozwiązanie, rozsądny stosunek wypełnienia — ale wyświetlił się jako pełny prostokąt. Ażurowa konstrukcja wieży i bałagan pod nią spłaszczyły się w jeden niezróżnicowany blok. Technicznie poprawny nonogram; wizualnie bezużyteczny. Właśnie takie przypadki mają zatrzymywać te wstępne kontrole wraz z ludzkim spojrzeniem. Aby jasno określić granice: nie ma tu żadnego modelu widzenia komputerowego — proces nigdy nie rozpoznaje, *co* znajduje się na obrazie, a jedynie mierzy, jak dobrze jego kształt się konwertuje. Dlatego ostateczna decyzja wciąż należy do człowieka.

6. Ocena trudności i ostatnie ludzkie spojrzenie

Łamigłówki, które przechodzą przez każdą bramkę, otrzymują ocenę trudności na podstawie swojego poziomu rozwiązywania i statystyk kształtu (jak wypełniona jest siatka, czy obrazek wychodzi poza krawędzie itd.), co porządkuje je w kolekcje łatwych, średnich i trudnych. Następnie człowiek otwiera te przeznaczone do katalogu w naszym edytorze siatek, sprawdza, czy obrazek naprawdę czyta się jako to, czym ma być, i poprawia lub odrzuca wszystko, co automatyczne kontrole przepuściły, choć nie powinny.

To celowo mało efektowny proces i o to właśnie chodzi: automatyzacja istnieje, by zagwarantować sprawiedliwość — jedno rozwiązanie, osiągalne logiką — podczas gdy człowiek strzeże tego, czego komputer nie potrafi ocenić, czyli tego, czy gotowy obrazek jest dobry.

To cały proces, pomijając kod. Jeśli wolisz rozwiązać nonogram, niż czytać o tym, jak powstaje, dzisiejsza łamigłówka to dobre miejsce na start.