Hogyan készítjük a nonogramjainkat
Itt minden rejtvény hétköznapi képként indul, és olyan rácsként végződik, amelyet pusztán logikával megoldhat. Közben egy automatizált folyamaton megy keresztül, amely raszterizálja a képet, teszteli, hogy az eredmény valóban megoldható-e, és eldobja azokat, amelyek nem. Ez az oldal őszintén végigvezeti ezt a folyamatot — beleértve azokat a részeket is, amelyek elbuknak, mert a munka nagy része a rossz rejtvények elutasításában rejlik, nem pedig a jók elkészítésében.
1. Egy képpel kezdődik
Egy nonogram mindig csak egy fekete-fehér sziluett — árnyékolás, szín és belső részletek nélkül. Az első lépés tehát egy olyan forráskép kiválasztása, amelynek alakja apró felbontásban is tisztán olvasható: egy állat, egy gyümölcs, egy csillagjegy, egy háztartási tárgy. Vektorgrafikából (SVG), átlátszó PNG-kből és egyszerű fényképekből dolgozunk, tematikus eszközcsomagokba rendezve, valamint egy alkalmazáson belüli képkereséssel behozott képekből.
Ebben a szakaszban nem az számít, milyen szép a kép — hanem az, hogy körvonala mennyire éli túl, ha 15×15-ös vagy 20×20-as rácsba préselik. Egy határozott, jól elkülönülő alak működik. Egy zsúfolt jelenet sok apró, egymást átfedő résszel szinte soha, és lentebb látni fogjuk, miért.
2. Egy kép rácssá alakítása
A képet egy valódi képfeldolgozó könyvtárral raszterizáljuk (ugyanazzal, amelyre a böngészők az SVG-hez támaszkodnak), majd cellánként egyetlen fekete-vagy-fehér értékre redukáljuk. Nincs egyetlen „helyes” módja ennek, ezért a folyamat többfélét kipróbál: a kép saját átlátszóságára támaszkodva ott, ahol van, az egyszerű fényerőre (sötét = kitöltött), vagy — egy világos, színes motívumnál sima háttéren, ahol önmagában a fényerő alig választja el — a háttértől mért színtávolságra. Egy világos narancssárga róka fehéren fényerőben szinte fehér, színben viszont távol áll tőle; a színtávolság-maszk tisztán elkülöníti.
A „kitöltött” és az „üres” közötti határt automatikusan az Otsu's method segítségével választjuk ki, egy szabványos technikával, amely megtalálja azt a fényerőküszöböt, amely a legtisztábban két csoportra osztja a képet. Mivel nincs mód előre tudni, melyik méret, kivágás és küszöb olvasható a legjobban, a folyamat képenként sok jelölt rácsot hoz létre — különböző méretekkel, különböző küszöbökkel —, mindegyiket a kitöltött tartalmára vágja, és az alakot a rács arányaihoz igazítja, hogy egy széles korona széles rácsot kapjon, ahelyett hogy négyzetbe préselnék.
3. Annak ellenőrzése, hogy tényleg megoldható-e
Egy kép, amely egy embernek rendben lévőnek tűnik, nem automatikusan érvényes rejtvény. Egy valódi nonogramnak pusztán a sor- és oszlopnyomaiból megoldhatónak kell lennie, és — ez döntő — pontosan egy megoldással kell rendelkeznie. Ha két különböző kitöltött minta is kielégít minden nyomot, a rejtvény kétértelmű és tisztességtelen, mert aki tiszta logikával oldja meg, teljesen helyesen juthat el a „rossz” képhez.
Ezért minden jelöltet egy megoldónak adunk át: ugyanazokat a soronkénti következtetéseket alkalmazza, amelyeket egy ember tenne, és ahol önmagában a logika elakad, egy kimerítő keresésre vált, hogy megszámolja, hány teljes megoldás létezik. Bármely rács, amelynek nulla megoldása van (ellentmondásos) vagy egynél több megoldása (kétértelmű), azonnal elutasításra kerül. Ez az egyediségi ellenőrzés az egész folyamat legfontosabb kapuja.
4. Annak biztosítása, hogy ez logika, nem találgatás
Egyetlen megoldás birtoklása még nem egészen elég. Egy rejtvény lehet technikailag egyedi, de csak próbálgatással elérhető — kitölteni egy cellát, mélyen követni a rácsban, és visszalépni, amikor ellentmondáshoz vezet. Ez nem megoldás; ez találgatás, és frusztráló rejtvényt eredményez.
Ennek kiszűrésére osztályozzuk, milyen nehéz átgondolni az egyes rejtvényeket. Azok a rejtvények, amelyek egyszerű soronkénti logikából adódnak, „egyszerűek”. A következtetés egy második, jól tanulmányozott szintje (a Batenburg and Kosters által közzétett nonogram-nehézségi kutatás alapján) minden találgatás nélkül elintézi a többség maradékát. Bármi, amit még mindig nem lehet próbálgatás nélkül eldönteni, találgatást-igénylőként jelöljük meg — és a mindennapi katalógus számára ezeket félretesszük, ahelyett hogy közzétennénk.
5. Miért nem jut el idáig sok kép
Bármilyen megoldási munka előtt a folyamat azt is megjósolja, hogy egy kép egyáltalán megér-e egy próbát, két nyers, de őszinte jelzés alapján. Az egyik az elválaszthatóság: mennyire tisztán oszlik egyáltalán két tónusra a kép — egy zavaros, alacsony kontrasztú forrás bármely méretnél rossz fogadás. A másik a részlet-kontra-felbontás illeszkedés: egy kép, amelynek jóval több finom jellemzője van, mint ahány cellája a rácsnak, egyszerűen egyetlen folttá omlik össze.
Egy konkrét példa a saját tesztelésünkből: az Eiffel-torony egy valódi fényképe egy 40×40-es jelöltet eredményezett, amely minden megoldhatósági ellenőrzésen átment — egy egyedi megoldás, ésszerű kitöltési arány —, de tömör téglalapként jelent meg. A torony rácsos szerkezete és az alatta lévő zűrzavar egyetlen differenciálatlan blokká lapult. Technikailag érvényes nonogram; vizuálisan haszontalan. Az ilyen esetek pontosan azok, amelyek megállítására ezek az előzetes ellenőrzések, valamint egy emberi pillantás léteznek. Hogy világos legyek a korlátokról: itt nincs látómodell — a folyamat soha nem ismeri fel, *mi* van egy képen, csak azt méri, mennyire jól alakítható át az alakja. Ezért a végső döntés még mindig egy emberé.
6. Egy értékelés és egy utolsó emberi pillantás
Azok a rejtvények, amelyek minden kaput átlépnek, a megoldási szintjük és az alakstatisztikáik alapján (mennyire kitöltött a rács, kifut-e a kép a széleken, és így tovább) nehézségi értékelést kapnak, ami könnyű, közepes és nehéz gyűjteményekbe sorolja őket. Ezután egy ember a rácsszerkesztőnkben megnyitja a katalógusba szánt darabokat, ellenőrzi, hogy a kép tényleg annak olvasható-e, aminek lennie kellene, és módosít vagy elvet mindent, amit az automatikus ellenőrzések átengedtek, pedig nem kellett volna.
Ez szándékosan nem látványos folyamat, és éppen ez a lényeg: az automatizálás azért létezik, hogy garantálja a tisztességességet — egy megoldás, logikával megoldható —, míg egy ember arra vigyáz, amit egy számítógép nem tud megítélni, vagyis hogy a kész kép jó-e egyáltalán.
Ez az egész folyamat, a kód nélkül. Ha inkább megoldana egyet, minthogy arról olvasson, hogyan épül fel, a mai rejtvény jó kiindulópont.
