Kako pravimo naše nonograme

Svaka zagonetka ovde počinje kao obična slika, a završava se kao mreža koju možete rešiti isključivo logikom. Između, prolazi kroz automatizovani proces koji rasterizuje sliku, testira da li je rezultat zaista rešiv i odbacuje one koje nisu. Ova stranica pošteno prolazi kroz taj proces — uključujući delove koji ne uspevaju, jer se najveći deo posla sastoji u odbacivanju loših zagonetki, a ne u pravljenju dobrih.

1. Počinje slikom

Nonogram je uvek samo crno-bela silueta — bez senčenja, bez boje, bez unutrašnjih detalja. Zato je prvi korak izbor izvorne slike čiji se oblik jasno čita pri sićušnoj rezoluciji: životinja, komad voća, znak zodijaka, kućni predmet. Radimo sa vektorskom grafikom (SVG), providnim PNG datotekama i običnim fotografijama, organizovanim u tematske pakete resursa, kao i sa slikama unetim putem pretrage slika unutar aplikacije.

Ono što je u ovoj fazi bitno nije koliko je slika lepa — već koliko dobro njena kontura preživljava sabijanje na mrežu 15×15 ili 20×20. Upadljiv, dobro izdvojen oblik funkcioniše. Prenatrpana scena sa mnogo malih preklapajućih delova gotovo nikada, a ispod ćemo videti zašto.

2. Pretvaranje slike u mrežu

Slika se rasterizuje pravom bibliotekom za obradu slika (istom onom na koju se pregledači oslanjaju za SVG), a zatim se svodi na jednu crno-ili-belu vrednost po ćeliji. Ne postoji jedan „ispravan” način da se to uradi, pa proces isprobava nekoliko: oslanjajući se na sopstvenu providnost slike tamo gde je ima, na običnu svetlinu (tamno = popunjeno), ili — za svetao, šaren motiv na jednostavnoj pozadini, gde ga sama svetlina jedva izdvaja — na rastojanje boje od pozadine. Svetlonarandžasta lisica na belom je po svetlini gotovo bela, ali po boji daleko od nje; maska rastojanja boje je čisto izdvaja.

Granica između „popunjeno” i „prazno” bira se automatski pomoću Otsu's method, standardne tehnike koja pronalazi prag svetline koji najčistije deli sliku na dve grupe. Pošto ne postoji način da se unapred zna koja veličina, isečak i prag će se najbolje čitati, proces generiše mnogo kandidatskih mreža po slici — različite veličine, različiti pragovi — svaku iseca na njen popunjeni sadržaj i uklapa oblik u proporcije mreže, tako da široka kruna dobije široku mrežu umesto da bude sabijena u kvadrat.

3. Provera da li se zaista može rešiti

Slika koja čoveku izgleda u redu nije automatski važeća zagonetka. Pravi nonogram mora biti rešiv isključivo iz svojih tragova redova i kolona i — što je presudno — mora imati tačno jedno rešenje. Ako dva različita popunjena obrasca zadovoljavaju svaki trag, zagonetka je dvosmislena i nepoštena, jer neko ko je rešava po čistoj logici može sasvim ispravno stići do „pogrešne” slike.

Zato se svaki kandidat predaje rešavaču: on primenjuje ista zaključivanja red po red koja bi primenio i čovek, a tamo gde sama logika zapne, pribegava iscrpnoj pretrazi da prebroji koliko potpunih rešenja postoji. Svaka mreža sa nula rešenja (protivrečna) ili više od jednog rešenja (dvosmislena) odbacuje se na licu mesta. Ova provera jedinstvenosti je najvažnija kapija u čitavom procesu.

4. Osiguravanje da je to logika, a ne pogađanje

Imati jedno rešenje nije sasvim dovoljno. Zagonetka može biti tehnički jedinstvena, ali dostižna samo pokušajem i greškom — popunjavanjem ćelije, praćenjem duboko u mrežu i vraćanjem kada dođe do protivrečnosti. To nije rešavanje; to je pogađanje, i pravi frustrirajuću zagonetku.

Da bismo ovo uhvatili, klasifikujemo koliko je teško promišljati svaku zagonetku. Zagonetke koje proizlaze iz jednostavne logike red po red su „jednostavne”. Drugi, dobro proučen nivo dedukcije (zasnovan na objavljenom istraživanju o težini nonograma autora Batenburg and Kosters) rešava većinu ostatka bez ikakvog pogađanja. Sve što se i dalje ne može razrešiti bez pokušaja i greške označava se kao zahteva-pogađanje — a za svakodnevni katalog, te se odlažu u stranu umesto da se objave.

5. Zašto mnoge slike nikada ne stignu dotle

Pre bilo kakvog posla rešavanja, proces takođe predviđa da li je sliku uopšte vredno pokušati, koristeći dva gruba ali poštena signala. Jedan je razdvojivost: koliko se čisto slika uopšte deli na dva tona — mutan izvor niskog kontrasta je loša opklada pri bilo kojoj veličini. Drugi je uklapanje detalja naspram rezolucije: slika sa daleko više sitnih obeležja nego što mreža ima ćelija jednostavno će se urušiti u mrlju.

Konkretan primer iz našeg sopstvenog testiranja: prava fotografija Ajfelove kule dala je kandidata 40×40 koji je prošao svaku proveru rešivosti — jedno jedinstveno rešenje, razuman odnos popunjenosti — ali se prikazao kao pun pravougaonik. Rešetkasti detalj kule i haos ispod nje spljoštili su se u jedan nediferencirani blok. Tehnički važeći nonogram; vizuelno beskoristan. Upravo takvi slučajevi su ono što ove prethodne provere, uz ljudski pogled, treba da zaustave. Da budemo jasni o granicama: ovde nema modela vida — proces nikada ne prepoznaje *šta* je na slici, već samo meri koliko se dobro njen oblik pretvara. Zato je konačna odluka i dalje na čoveku.

6. Ocena, i poslednji ljudski pogled

Zagonetke koje prođu kroz svaku kapiju dobijaju ocenu težine na osnovu svog nivoa rešavanja i statistike oblika (koliko je mreža popunjena, da li slika izlazi izvan ivica i tako dalje), što ih razvrstava u zbirke lakih, srednjih i teških. Zatim čovek u našem uređivaču mreža otvara one namenjene katalogu, proverava da li se slika zaista čita kao ono što bi trebalo da bude, i prilagođava ili odbacuje sve što su automatske provere propustile, a nisu smele.

To je namerno neglamurozan proces, i u tome je poenta: automatizacija postoji da bi garantovala poštenje — jedno rešenje, rešivo logikom — dok čovek čuva ono što računar ne može da proceni, a to je da li je gotova slika dobra.

To je čitav proces, minus kod. Ako biste radije rešili jednu nego čitali o tome kako je napravljena, današnja zagonetka je dobro mesto za početak.