Scannen bedeutet bei Nonogrammen nicht, jede Zeile der Reihe nach anzusehen. Eine gute Scan-Routine folgt neuer Information: Eine produktive Linie verändert Kreuzlinien, und diese Änderungen bestimmen, wo du als Nächstes hinschaust.
Warum Scannen funktioniert
Jede Zelle verbindet genau eine Zeile mit genau einer Spalte.
Wenn eine Zeile eine Zelle sicher füllt oder leert, hat die zugehörige Spalte eine neue Bedingung. Dort können dadurch Blockpositionen entfallen, Grenzen entstehen oder neue Überlappungen sichtbar werden.
So entsteht eine Schleife:
Zeile → Zelle → Spalte → neue Zelle → Zeile
Nicht jede Linie gleich behandeln
Eine Linie mit vielen möglichen Anordnungen und keiner neuen Information kann im Moment tatsächlich nichts liefern.
Bevorzuge Linien, die:
- gerade verändert wurden;
- wenig Spielraum besitzen;
- bekannte gefüllte Fragmente enthalten;
- durch X in enge Segmente geteilt sind;
- beinahe abgeschlossene Blöcke enthalten;
- nur wenige gültige Muster übrig haben.
Eine änderungsgetriebene Schleife verwenden
Nach einer produktiven Linie:
- notiere die neu veränderten Zellen;
- priorisiere ihre Kreuzlinien;
- löse dort alle direkten Folgen;
- füge wiederum deren Kreuzlinien zur mentalen Arbeitsliste hinzu;
- fahre fort, bis die Kette keine neuen Zellen mehr erzeugt.
Das ist die menschliche Form von Constraint-Propagation.
Beim Scannen nach mehr als Füllungen suchen
Kann eine Zelle gefüllt werden?
Prüfe exakten Fit, Überlappung, Blockverlängerung und gültige Muster.
Kann eine Zelle leer markiert werden?
Prüfe abgeschlossene Grenzen, Reichweite, zu kleine Lücken und ausgeschöpfte Hinweise.
Ist ein Block identifizierbar geworden?
Ein Fragment kann jetzt vielleicht eindeutig einem Hinweis zugeordnet werden. Dadurch ändern sich seine legalen Grenzen.
Hat sich der nutzbare Raum verändert?
Neue X-Markierungen können aus einer langen Linie mehrere kleinere Segmente machen.
Zeilen und Spalten sind logisch symmetrisch
Es gibt keine grundsätzlich wichtigere Richtung. Dieselbe Linienlogik gilt horizontal und vertikal.
Die richtige Richtung ist diejenige, die gerade stärkere Bedingungen besitzt.
Wann solltest du das ganze Raster scannen?
Ein kompletter Durchlauf ist sinnvoll:
- am Anfang;
- nachdem eine große Kaskade endet;
- wenn du nicht mehr weißt, welche Linien verändert wurden;
- nach der Korrektur eines Fehlers;
- wenn lokale Arbeit keinen Fortschritt mehr liefert.
Bei einem Vollscan verlangst du nicht von jeder Linie eine komplette Lösung. Du suchst die nächste Linie, die mindestens eine sichere Zelle geben kann.
Ein Recovery-Scan in zwei Durchgängen
Durchgang 1: Abschlüsse und Leerzellen
Prüfe jede Linie auf:
- abgeschlossene Hinweise;
- fehlende Trennzellen;
- Zellen außerhalb jeder verbleibenden Blockreichweite;
- Lücken, die für alle übrigen Blöcke zu klein sind.
Durchgang 2: Platzierungsdruck
Prüfe danach:
- Überlappung;
- engen Mindestplatz;
- Randbeschränkungen;
- Blöcke, die nur noch in ein Segment passen;
- bekannte Füllungen, die den möglichen Bereich eines Blocks verkleinern.
Verfolge, was sich geändert hat
Erfahrene Solver führen oft eine mentale Queue: Eine Zeile ändert sich, also werden die betroffenen Spalten geprüft; deren Änderungen setzen wiederum Zeilen auf die Liste.
Digitale Oberflächen können aktive Zeilen hervorheben oder erledigte Hinweise markieren, aber die Logik bleibt dieselbe.
Die wichtigste Gewohnheit lautet:
Neue Information sollte eine neue Prüfung auslösen.
Endloses erneutes Scannen vermeiden
Wenn du dieselbe unveränderte Linie immer wieder prüfst, wechsle den Bereich.
Eine Linie mit mehreren gültigen Anordnungen kann aktuell wirklich nichts weiter hergeben. Später wird sie durch Kreuzinformationen erneut produktiv.
Das ist normal und Teil der Constraint-Propagation.
Ein kompakter Scan-Ablauf
- Mit informationsreichen Linien beginnen.
- Sowohl sichere Füllungen als auch sichere Leerzellen markieren.
- Veränderte Kreuzlinien sofort priorisieren.
- Abgeschlossene Blöcke schließen und Grenzen aktualisieren.
- Nutzbare Segmente nach neuen X neu berechnen.
- Wenn die lokale Kette endet, global nach der nächsten engen Linie suchen.
- Liefert ein kompletter Pass nichts, zu einer tieferen Technik wechseln statt zu raten.
FAQ
Ist es besser, zuerst Zeilen oder zuerst Spalten zu scannen?
Keine Richtung ist grundsätzlich besser. Beginne mit den stärksten Constraints und propagiere jede neue Markierung in die kreuzende Richtung.
Muss ich eine Linie nach jeder einzelnen Zelle sofort erneut prüfen?
Nicht zwingend nach jeder einzelnen Markierung. Aber sobald eine Linie ein nützliches Paket neuer Zustände liefert, sollten die betroffenen Kreuzlinien hohe Priorität bekommen.
Warum prüfe ich immer wieder Linien, die nichts liefern?
Meist hat sich dort seit der letzten Prüfung nichts verändert. Wechsle zu veränderten oder stärker eingeschränkten Linien oder nutze einen strukturierten Recovery-Scan.