Як ми створюємо наші нонограми
Кожна головоломка тут починається як звичайне зображення, а завершується сіткою, яку можна розв'язати виключно логікою. Між цими етапами вона проходить автоматизований конвеєр, який растеризує зображення, перевіряє, чи є результат насправді розв'язним, і відкидає ті, що ним не є. Ця сторінка чесно розповідає про весь процес — зокрема про ті частини, що зазнають невдачі, адже більша частина роботи полягає у відбраковуванні поганих головоломок, а не у створенні хороших.
1. Усе починається із зображення
Нонограма — це завжди лише чорно-білий силует: без відтінків, без кольору, без внутрішніх деталей. Тож перший крок — вибір початкового зображення, форма якого чітко читається за крихітної роздільної здатності: тварина, фрукт, знак зодіаку, побутовий предмет. Ми працюємо з векторною графікою (SVG), прозорими PNG та звичайними фотографіями, зібраними в тематичні набори ресурсів, а також із зображеннями, знайденими через вбудований пошук зображень.
На цьому етапі важлива не краса зображення, а те, наскільки добре його контур витримує стискання до сітки 15×15 або 20×20. Виразна, чітко відокремлена форма працює. Насичена сцена з безліччю дрібних деталей, що перекриваються, майже ніколи не спрацьовує — і нижче ми побачимо, чому.
2. Перетворення зображення на сітку
Зображення растеризується справжньою графічною бібліотекою (тією самою, на яку браузери спираються для SVG), а потім зводиться до єдиного чорного або білого значення на кожну клітинку. Немає єдиного "правильного" способу це зробити, тож конвеєр пробує кілька: спираючись на власну прозорість зображення там, де вона є, на просту яскравість (темне = заповнене) або — для яскравого, барвистого об'єкта на однотонному тлі, де сама лише яскравість заледве його виокремлює — на колірну відстань від тла. Світло-помаранчева лисиця на білому майже біла за яскравістю, але далека від нього за кольором; маска колірної відстані виокремлює її чітко.
Межа між "заповненим" і "порожнім" обирається автоматично за методом Отсу (Otsu's method) — стандартною технікою, яка знаходить поріг яскравості, що найчіткіше розділяє зображення на дві групи. Оскільки заздалегідь неможливо знати, який розмір, кадрування та поріг читатимуться найкраще, конвеєр генерує багато кандидатних сіток на кожне зображення — різні розміри, різні пороги — обрізає кожну до її заповненого вмісту та підганяє форму під пропорції сітки, щоб широка корона отримала широку сітку, а не була втиснута у квадрат.
3. Перевірка, чи можна її насправді розв'язати
Зображення, яке виглядає нормально для людини, не є автоматично коректною головоломкою. Справжня нонограма має розв'язуватися виключно за підказками рядків і стовпців і — що вкрай важливо — мати рівно один розв'язок. Якщо два різні заповнені візерунки задовольняють усі підказки, головоломка є неоднозначною та нечесною, адже той, хто розв'язує її чистою логікою, може цілком правомірно прийти до "неправильної" картинки.
Тож кожен кандидат передається розв'язувачу: він застосовує ті самі порядкові дедукції, які застосувала б людина, а там, де сама лише логіка заходить у глухий кут, вдається до вичерпного пошуку, щоб порахувати, скільки повних розв'язків існує. Будь-яка сітка з нульовою кількістю розв'язків (суперечлива) або більш ніж одним розв'язком (неоднозначна) відхиляється негайно. Ця перевірка на єдиність — найважливіший бар'єр у всьому конвеєрі.
4. Гарантія логіки, а не вгадування
Наявності одного розв'язку не зовсім достатньо. Головоломка може бути технічно єдиною, але досяжною лише методом проб і помилок — заповнюючи клітинку, простежуючи її глибоко в сітку та повертаючись назад, коли виникає суперечність. Це не розв'язання; це вгадування, і воно робить головоломку виснажливою.
Щоб це виявити, ми класифікуємо, наскільки складно продумати кожну головоломку. Головоломки, що випливають із прямолінійної порядкової логіки, є "простими". Другий, добре вивчений рівень дедукції (заснований на опублікованому дослідженні складності нонограм авторства Batenburg і Kosters) охоплює більшість решти без жодного вгадування. Усе, що досі неможливо владнати без проб і помилок, позначається як таке, що потребує вгадування — і для щоденного каталогу такі головоломки відкладаються вбік, а не публікуються.
5. Чому багато зображень так і не стають головоломками
Перед будь-якою роботою з розв'язанням конвеєр також передбачає, чи варто взагалі братися за зображення, використовуючи два прямолінійні, але чесні сигнали. Перший — це роздільність: наскільки чітко зображення взагалі розділяється на два тони; каламутне, низькоконтрастне джерело є поганою ставкою за будь-якого розміру. Другий — це відповідність деталізації та роздільної здатності: зображення, що має значно більше дрібних деталей, ніж сітка має клітинок, просто злипнеться в безформну пляму.
Конкретний приклад із нашого власного тестування: справжня фотографія Ейфелевої вежі дала кандидата 40×40, який пройшов усі перевірки на розв'язність — один єдиний розв'язок, розумне співвідношення заповнення — але відобразився як суцільний прямокутник. Ажурна структура вежі й безлад під нею сплюснулися в один недиференційований блок. Технічно коректна нонограма; візуально марна. Саме такі випадки й покликані зупиняти ці попередні перевірки разом із людським оком. Щоб чітко окреслити межі: тут немає жодної моделі комп'ютерного зору — конвеєр ніколи не розпізнає, *що* саме зображено на картинці, а лише вимірює, наскільки добре її форма перетворюється. Ось чому остаточне рішення все ж таки за людиною.
6. Оцінка складності й останній людський погляд
Головоломки, що долають кожен бар'єр, отримують оцінку складності на основі свого рівня розв'язання та статистики форми (наскільки заповнена сітка, чи виходить картинка за краї тощо), що й сортує їх у колекції легких, середніх і складних. Потім людина відкриває ті, що призначені для каталогу, у нашому редакторі сіток, перевіряє, чи картинка справді читається як те, чим має бути, і коригує або відкидає все, що автоматичні перевірки пропустили, хоча й не мали б.
Це навмисно неромантичний процес, і в цьому вся суть: автоматизація існує, щоб гарантувати чесність — один розв'язок, розв'язний логікою — тоді як людина береже те, що комп'ютер не може оцінити, а саме — чи хороша готова картинка.
Це весь конвеєр, за винятком коду. Якщо ви радше розв'яжете нонограму, ніж читатимете про те, як її створено, сьогоднішня головоломка — гарне місце для початку.
