Kuidas me oma nonogramme loome
Iga mõistatus algab siin tavalise pildina ja lõpeb ruudistikuna, mille saab lahendada üksnes loogika abil. Vahepeal läbib see automatiseeritud töövoo, mis rasterdab pildi, testib, kas tulemus on tegelikult lahenduv, ja viskab minema need, mis ei ole. See leht käib selle protsessi ausalt läbi — kaasa arvatud osad, mis ebaõnnestuvad, sest suurem osa tööst seisneb halbade mõistatuste kõrvaleheitmises, mitte heade loomises.
1. Kõik algab pildist
Nonogramm on alati vaid mustvalge siluett — ei mingit varjutust, värvi ega sisemisi detaile. Nii et esimene samm on valida lähtepilt, mille kuju on pisikese eraldusvõime juures selgelt loetav: loom, puuvili, sodiaagimärk, majapidamisese. Töötame vektorgraafika (SVG), läbipaistvate PNG-de ja lihtsate fotodega, mis on korraldatud temaatilistesse ressursipakkidesse, ning lisaks piltidega, mis tuuakse sisse rakendusesisese pildiotsingu kaudu.
Selles etapis ei ole tähtis, kui ilus pilt on — vaid see, kui hästi selle kontuur elab üle 15×15 või 20×20 ruudistikku kokkusurumise. Julge, hästi eristuv kuju töötab. Kirev stseen paljude väikeste kattuvate osadega peaaegu kunagi mitte, ja allpool näeme, miks.
2. Pildi muutmine ruudistikuks
Pilt rasterdatakse tõelise pilditeegiga (sama, millele brauserid SVG puhul toetuvad), seejärel taandatakse iga ruut üheks mustaks või valgeks väärtuseks. Selleks ei ole ühtainsat „õiget“ viisi, nii et töövoog proovib mitut: lähtudes pildi enda läbipaistvusest seal, kus seda on, lihtsast heledusest (tume = täidetud) või — ereda, värvilise objekti puhul ühtlasel taustal, kus ainuüksi heledus seda vaevu eristab — värvikaugusest taustast. Heleoranž rebane valgel on heleduselt peaaegu valge, kuid värvilt sellest kaugel; värvikauguse mask eraldab selle puhtalt.
Piir „täidetud“ ja „tühja“ vahel valitakse automaatselt Otsu meetodiga (Otsu's method), standardse tehnikaga, mis leiab heleduse läve, mis jagab pildi kõige puhtamalt kaheks rühmaks. Kuna ette pole võimalik teada, milline suurus, kärbe ja lävi kõige paremini loetavad on, genereerib töövoog iga pildi kohta palju kandidaatruudistikke — eri suurused, eri läved — kärbib igaühe selle täidetud sisuni ja sobitab kuju ruudistiku proportsioonidega, nii et lai kroon saab laia ruudistiku, mitte ei suruta ruutu.
3. Kontrollimine, kas seda saab tegelikult lahendada
Pilt, mis inimesele korras tundub, ei ole automaatselt kehtiv mõistatus. Tõeline nonogramm peab olema lahendatav üksnes oma ridade ja veergude vihjete põhjal ning — mis on ülioluline — sellel peab olema täpselt üks lahendus. Kui kaks eri täidetud mustrit rahuldavad kõiki vihjeid, on mõistatus mitmetähenduslik ja ebaaus, sest puhtale loogikale toetuv lahendaja võiks täiesti õigustatult jõuda „vale“ pildini.
Nii antakse iga kandidaat lahendajale: see rakendab samu reakaupa tehtavaid järeldusi, mida teeks inimene, ja seal, kus ainuüksi loogika takerdub, pöördub see ammendava otsingu poole, et loendada, mitu täielikku lahendust eksisteerib. Iga ruudistik, millel on null lahendust (vasturääkiv) või rohkem kui üks lahendus (mitmetähenduslik), lükatakse kohe tagasi. See ainulahenduse kontroll on kogu töövoo kõige tähtsam värav.
4. Veendumine, et tegemist on loogika, mitte äraarvamisega
Ühe lahenduse olemasolust ei piisa päris. Mõistatus võib olla tehniliselt ainulaadne, kuid saavutatav ainult katse-eksituse teel — täites ruudu, järgides seda sügavale ruudistikku ja pöördudes tagasi, kui see läheb vastuollu. See ei ole lahendamine; see on äraarvamine ja teeb mõistatuse masendavaks.
Selle püüdmiseks liigitame, kui raske on iga mõistatust läbi mõelda. Mõistatused, mis tulenevad otsesest reakaupa loogikast, on „lihtsad“. Teine, hästi uuritud järelduste tasand (mis põhineb Batenburg and Kosters avaldatud nonogrammide raskusuuringul) tuleb enamiku ülejäänuga toime ilma igasuguse äraarvamiseta. Kõik, mida ikka veel ei saa lahendada ilma katse-eksituseta, märgitakse äraarvamist nõudvaks — ja igapäevase kataloogi jaoks pannakse need kõrvale, mitte ei avaldata.
5. Miks paljud pildid sinna kunagi ei jõua
Enne igasugust lahendamistööd ennustab töövoog ka seda, kas pilti tasub üldse proovida, kasutades kahte jämedat, kuid ausat signaali. Üks on eristatavus: kui puhtalt pilt üldse kaheks tooniks jaguneb — hägune, madala kontrastiga lähtematerjal on igas suuruses halb panus. Teine on detaili ja eraldusvõime sobivus: pilt, millel on palju rohkem peeneid tunnuseid, kui ruudistikul on ruute, vajub lihtsalt üheks laiguks kokku.
Konkreetne näide meie enda testimisest: Eiffeli torni tõeline foto andis 40×40 kandidaadi, mis läbis iga lahenduvuse kontrolli — üks ainulaadne lahendus, mõistlik täitesuhe —, kuid renderdus tervikliku ristkülikuna. Torni võretaoline detail ja segadus selle all lamenesid üheks eristamatuks plokiks. Tehniliselt kehtiv nonogramm; visuaalselt kasutu. Just selliseid juhtumeid ongi need eelkontrollid koos inimpilguga siin peatama. Et piirid oleksid selged: siin ei ole ühtki nägemismudelit — töövoog ei tunne kunagi ära, *mis* pildil on, vaid mõõdab üksnes, kui hästi selle kuju teisendub. Just seepärast on lõplik otsus ikka veel inimese teha.
6. Hinnang ja viimane inimpilk
Mõistatused, mis läbivad iga värava, saavad raskushinnangu oma lahendustasandi ja kujustatistika põhjal (kui täidetud ruudistik on, kas pilt jookseb üle servade jne), mis sorteeribki need lihtsateks, keskmisteks ja rasketeks kogudeks. Seejärel avab inimene kataloogi suunatud mõistatused meie ruudistikuredaktoris, kontrollib, kas pilt tegelikult loeb end selleks, mis ta olema peaks, ning kohandab või viskab minema kõik, mille automaatsed kontrollid läbi lasid, kuid ei oleks pidanud.
See on tahtlikult tagasihoidlik protsess, ja selles ongi mõte: automaatika on olemas selleks, et tagada ausus — üks lahendus, loogikaga lahenduv —, samal ajal kui inimene valvab selle üle, mida arvuti hinnata ei suuda, nimelt selle üle, kas valmis pilt on üldse hea.
See on kogu töövoog, ilma koodita. Kui eelistad pigem mõne lahendada kui lugeda, kuidas see valmib, on tänane mõistatus hea koht alustamiseks.
