Nonogram Hub
Nonogram Hub

Kuinka teemme nonogrammimme

Jokainen pulma alkaa täällä tavallisena kuvana ja päättyy ruudukoksi, jonka voit ratkaista pelkällä logiikalla. Välissä se kulkee automaattisen putken läpi, joka rasteroi kuvan, testaa, onko tulos todella ratkeava, ja heittää pois ne, jotka eivät ole. Tämä sivu käy tuon prosessin rehellisesti läpi — mukaan lukien osat, jotka epäonnistuvat, sillä suurin osa työstä on huonojen pulmien hylkäämistä eikä hyvien tekemistä.

1. Kaikki alkaa kuvasta

Nonogrammi on aina vain mustavalkoinen siluetti — ei varjostusta, ei väriä, ei sisäisiä yksityiskohtia. Ensimmäinen askel on siis valita lähdekuva, jonka muoto erottuu selkeästi pienessä tarkkuudessa: eläin, hedelmä, horoskooppimerkki, kodin esine. Työskentelemme vektorigrafiikan (SVG), läpinäkyvien PNG-tiedostojen ja tavallisten valokuvien parissa, jotka on järjestetty teemoitettuihin resurssipaketteihin, sekä kuvien parissa, jotka tuodaan sovelluksen sisäisen kuvahaun kautta.

Tässä vaiheessa ei ole tärkeää, kuinka kaunis kuva on — vaan se, kuinka hyvin sen ääriviiva selviää 15×15- tai 20×20-ruudukoksi puristamisesta. Vahva, hyvin erottuva muoto toimii. Vilkas kuva, jossa on paljon pieniä päällekkäisiä osia, ei juuri koskaan, ja näemme alla miksi.

2. Kuvan muuttaminen ruudukoksi

Kuva rasteroidaan oikealla kuvakirjastolla (samalla, johon selaimet nojaavat SVG:n kohdalla), ja pelkistetään sitten yhdeksi mustaksi tai valkoiseksi arvoksi solua kohti. Tähän ei ole yhtä ”oikeaa” tapaa, joten putki kokeilee useita: nojaten kuvan omaan läpinäkyvyyteen siellä, missä sitä on, pelkkään kirkkauteen (tumma = täytetty) tai — kirkkaan, värikkään kohteen kohdalla yksivärisellä taustalla, jossa pelkkä kirkkaus tuskin erottaa sitä — värietäisyyteen taustasta. Vaaleanoranssi kettu valkoisella on kirkkaudeltaan lähes valkoinen mutta väriltään kaukana siitä; värietäisyysmaski eristää sen siististi.

Raja ”täytetyn” ja ”tyhjän” välillä valitaan automaattisesti Otsun menetelmällä (Otsu's method), vakiotekniikalla, joka löytää kirkkauskynnyksen, joka jakaa kuvan siisteimmin kahteen ryhmään. Koska etukäteen ei ole mahdollista tietää, mikä koko, rajaus ja kynnys erottuvat parhaiten, putki luo kutakin kuvaa kohti monta ehdokasruudukkoa — eri kokoja, eri kynnyksiä — rajaa kunkin sen täytettyyn sisältöön ja sovittaa muodon ruudukon mittasuhteisiin, jotta leveä kruunu saa leveän ruudukon sen sijaan, että se puristettaisiin neliöön.

3. Sen tarkistaminen, että se todella voidaan ratkaista

Kuva, joka näyttää ihmisestä hyvältä, ei ole automaattisesti kelvollinen pulma. Aidon nonogrammin täytyy olla ratkaistavissa pelkästään rivi- ja sarakevihjeidensä perusteella ja — ratkaisevaa kyllä — sillä on oltava täsmälleen yksi ratkaisu. Jos kaksi eri täytettyä kuviota täyttää molemmat kaikki vihjeet, pulma on monitulkintainen ja epäreilu, koska puhdasta logiikkaa noudattava ratkaisija voisi aivan oikein päätyä ”väärään” kuvaan.

Niinpä jokainen ehdokas syötetään ratkaisijalle: se soveltaa samoja rivi riviltä tehtäviä päätelmiä, joita ihminen tekisi, ja siellä, missä pelkkä logiikka juuttuu, se turvautuu kattavaan hakuun laskeakseen, montako täydellistä ratkaisua on olemassa. Mikä tahansa ruudukko, jolla on nolla ratkaisua (ristiriitainen) tai enemmän kuin yksi ratkaisu (monitulkintainen), hylätään heti. Tämä yksikäsitteisyystarkistus on koko putken tärkein portti.

4. Sen varmistaminen, että kyse on logiikasta eikä arvaamisesta

Yhden ratkaisun olemassaolo ei aivan riitä. Pulma voi olla teknisesti yksikäsitteinen mutta saavutettavissa vain yrityksen ja erehdyksen kautta — täyttämällä solu, seuraamalla sitä syvälle ruudukkoon ja peruuttamalla, kun se johtaa ristiriitaan. Se ei ole ratkaisemista; se on arvaamista, ja siitä tulee turhauttava pulma.

Tämän havaitsemiseksi luokittelemme, kuinka vaikeaa kutakin pulmaa on päätellä läpi. Pulmat, jotka seuraavat suoraviivaisesta rivi riviltä -logiikasta, ovat ”yksinkertaisia”. Toinen, hyvin tutkittu päättelyn taso (joka perustuu Batenburg and Kostersin julkaisemaan nonogrammien vaikeutta koskevaan tutkimukseen) hoitaa suurimman osan lopusta ilman mitään arvaamista. Kaikki, mitä yhä ei voi ratkaista ilman yritystä ja erehdystä, merkitään arvaamista vaativaksi — ja jokapäiväisen luettelon osalta ne pannaan sivuun sen sijaan, että julkaistaisiin.

5. Miksi monet kuvat eivät koskaan päädy peliin

Ennen kaikkea ratkaisutyötä putki myös ennustaa, kannattaako kuvaa edes yrittää, käyttäen kahta karkeaa mutta rehellistä signaalia. Yksi on erottuvuus: kuinka siististi kuva ylipäätään jakautuu kahteen sävyyn — sumea, vähäkontrastinen lähde on huono veto missä tahansa koossa. Toinen on yksityiskohdan ja tarkkuuden yhteensopivuus: kuva, jossa on paljon enemmän hienoja piirteitä kuin ruudukossa on soluja, romahtaa vain möykyksi.

Konkreettinen esimerkki omasta testauksestamme: aito valokuva Eiffel-tornista tuotti 40×40-ehdokkaan, joka läpäisi jokaisen ratkeavuustarkistuksen — yhden yksikäsitteisen ratkaisun, järkevän täyttösuhteen — mutta hahmontui kiinteäksi suorakulmioksi. Tornin ristikkomainen yksityiskohta ja sen alla oleva sekasotku litistyivät yhdeksi erottumattomaksi lohkoksi. Teknisesti kelvollinen nonogrammi; visuaalisesti hyödytön. Juuri tällaisia tapauksia nämä ennakkotarkistukset yhdessä ihmissilmäyksen kanssa ovat pysäyttämässä. Rajojen selventämiseksi: täällä ei ole mitään konenäkömallia — putki ei koskaan tunnista, *mitä* kuvassa on, vaan mittaa vain, kuinka hyvin sen muoto muuntuu. Siksi lopullinen päätös on yhä ihmisen.

6. Arvio ja viimeinen ihmiskatse

Pulmat, jotka läpäisevät jokaisen portin, saavat vaikeusarvion ratkaisutasonsa ja muototilastojensa perusteella (kuinka täytetty ruudukko on, karkaako kuva reunojen yli ja niin edelleen), mikä lajittelee ne helppojen, keskitason ja vaikeiden kokoelmiin. Sitten ihminen avaa luetteloon menossa olevat ruudukkoeditorissamme, tarkistaa, että kuva todella luetaan siksi, mitä sen pitäisi olla, ja säätää tai hylkää kaiken, minkä automaattiset tarkistukset päästivät läpi mutta joita ei olisi pitänyt.

Se on tarkoituksella vaatimaton prosessi, ja juuri siinä on pointti: automaatio on olemassa takaamassa reiluuden — yksi ratkaisu, logiikalla ratkaistava — samalla kun ihminen vartioi sitä, mitä tietokone ei osaa arvioida, eli sitä, onko valmis kuva lainkaan hyvä.

Siinä on koko putki, koodia lukuun ottamatta. Jos ratkaiset mieluummin sellaisen kuin luet siitä, kuinka se on rakennettu, tämän päivän pulma on hyvä paikka aloittaa.