Nonogram Hub
Nonogram Hub

Hvordan vi lager nonogrammene våre

Hvert puslespill her begynner som et vanlig bilde og ender som et rutenett du kan løse med ren logikk. Underveis går det gjennom en automatisert pipeline som rasteriserer bildet, tester om resultatet faktisk er løsbart, og kaster dem som ikke er det. Denne siden går ærlig gjennom den prosessen — inkludert delene som feiler, for det meste av arbeidet ligger i å forkaste dårlige puslespill snarere enn å lage gode.

1. Det begynner med et bilde

Et nonogram er alltid bare en svart-hvit silhuett — ingen skyggelegging, ingen farge, ingen indre detaljer. Så det første steget er å velge et kildebilde hvis form leses tydelig ved en bitteliten oppløsning: et dyr, en frukt, et stjernetegn, en husholdningsgjenstand. Vi jobber ut fra vektorgrafikk (SVG), transparente PNG-er og vanlige bilder, organisert i temabaserte ressurspakker, pluss bilder hentet inn via et bildesøk i appen.

Det som teller på dette stadiet, er ikke hvor pent bildet er — det er hvor godt omrisset overlever å bli klemt ned til et 15×15- eller 20×20-rutenett. En kraftig, godt adskilt form fungerer. En travel scene med mange små overlappende deler gjør det nesten aldri, og vi skal se hvorfor nedenfor.

2. Å gjøre et bilde om til et rutenett

Bildet rasteriseres med et ekte bildebibliotek (det samme som nettlesere støtter seg på for SVG), og reduseres deretter til én enkelt svart-eller-hvit-verdi per celle. Det finnes ingen enkelt «riktig» måte å gjøre det på, så pipelinen prøver flere: ut fra bildets egen gjennomsiktighet der det har noen, ut fra ren lyshet (mørkt = fylt), eller — for et lyst, fargerikt motiv på en jevn bakgrunn, der lyshet alene knapt skiller det ut — ut fra fargeavstand fra bakgrunnen. En lyseoransje rev på hvitt er nesten hvit i lyshet, men langt unna i farge; fargeavstandsmasken isolerer den rent.

Grensen mellom «fylt» og «tom» velges automatisk ved hjelp av Otsus metode (Otsu's method), en standardteknikk som finner lyshetsterskelen som deler bildet renest i to grupper. Fordi det er umulig å vite på forhånd hvilken størrelse, beskjæring og terskel som leses best, genererer pipelinen mange kandidatrutenett per bilde — ulike størrelser, ulike terskler — beskjærer hvert til sitt fylte innhold og tilpasser formen til rutenettets proporsjoner, slik at en bred krone får et bredt rutenett i stedet for å bli klemt inn i en firkant.

3. Å sjekke at det faktisk kan løses

Et bilde som ser fint ut for et menneske, er ikke automatisk et gyldig puslespill. Et ekte nonogram må være løsbart ut fra rad- og kolonneledetrådene alene og — avgjørende — det må ha nøyaktig én løsning. Hvis to ulike fylte mønstre begge tilfredsstiller hver ledetråd, er puslespillet tvetydig og urettferdig, fordi en løser som følger ren logikk korrekt kunne ende opp med det «feil» bildet.

Så hver kandidat mates til en løser: den bruker de samme linje-for-linje-slutningene som en person ville gjort, og der logikken alene stopper opp, faller den tilbake på et uttømmende søk for å telle hvor mange komplette løsninger som finnes. Ethvert rutenett med null løsninger (selvmotsigende) eller mer enn én løsning (tvetydig) forkastes på stedet. Denne entydighetssjekken er den aller viktigste porten i hele pipelinen.

4. Å sørge for at det er logikk, ikke gjetting

Å ha én løsning er ikke helt nok. Et puslespill kan være teknisk entydig, men bare nåbart ved prøving og feiling — fylle en celle, følge den dypt inn i rutenettet og gå tilbake når den motsier seg selv. Det er ikke å løse; det er å gjette, og det gir et frustrerende puslespill.

For å fange dette klassifiserer vi hvor vanskelig hvert puslespill er å resonnere seg gjennom. Puslespill som følger av grei linje-for-linje-logikk er «enkle». Et andre, godt studert nivå av deduksjon (basert på publisert forskning på nonogram-vanskelighet av Batenburg and Kosters) håndterer det meste av resten uten noen gjetting. Alt som fortsatt ikke kan avgjøres uten prøving og feiling, merkes som gjetting-påkrevd — og for den daglige katalogen settes disse til side i stedet for å publiseres.

5. Hvorfor mange bilder aldri kommer med

Før alt løsningsarbeid forutsier pipelinen også om et bilde i det hele tatt er verdt å prøve, ved hjelp av to butte, men ærlige signaler. Det ene er separabilitet: hvor rent bildet i det hele tatt deler seg i to toner — en grumsete, lavkontrast-kilde er en dårlig satsing i enhver størrelse. Det andre er en detalj-mot-oppløsning-tilpasning: et bilde med langt flere fine trekk enn rutenettet har celler, vil bare kollapse til en klatt.

Et konkret eksempel fra vår egen testing: et ekte foto av Eiffeltårnet ga en 40×40-kandidat som besto hver løsbarhetssjekk — én entydig løsning, et rimelig fyllingsforhold — men gjengav som et massivt rektangel. Tårnets gitterdetalj og rotet under det flatet ut til én udifferensiert blokk. Teknisk et gyldig nonogram; visuelt ubrukelig. Slike tilfeller er akkurat det disse forhåndssjekkene, pluss et menneskelig blikk, er der for å stoppe. For å være tydelig på grensene: det finnes ingen synsmodell her — pipelinen gjenkjenner aldri *hva* som er i et bilde, den måler bare hvor godt formen konverteres. Derfor er den endelige avgjørelsen fortsatt en persons.

6. En vurdering, og et siste menneskelig blikk

Puslespill som klarer hver port, får en vanskelighetsvurdering ut fra løsningsnivået og formstatistikken sin (hvor fylt rutenettet er, om bildet går ut over kantene, og så videre), og det er dette som sorterer dem inn i lette, middels og vanskelige samlinger. Deretter åpner en person dem som er på vei til katalogen i rutenettredigereren vår, sjekker at bildet faktisk leses som det det skal være, og justerer eller forkaster alt de automatiske sjekkene slapp gjennom, men ikke burde ha.

Det er en bevisst uglamorøs prosess, og det er nettopp poenget: automatiseringen finnes for å garantere rettferdighet — én løsning, løsbar med logikk — mens et menneske vokter det en datamaskin ikke kan bedømme, nemlig om det ferdige bildet er noe verdt.

Det er hele pipelinen, minus koden. Hvis du heller vil løse ett enn å lese om hvordan det bygges, er dagens puslespill et godt sted å starte.