Strategie

Die Nicht-Berühren-Regel ist eigentlich nur ein Spaltenabstand

Jede Regelseite dieses Spiels sagt dasselbe: Zwei Katzen dürfen nie sich berührende Zellen belegen, auch nicht diagonal, und jede Katze sperrt die acht Felder um sich herum. Wörtlich genommen ist das eine Prüfung von acht Nachbarn für jede gesetzte Katze. Der Validator, der einen unzulässigen Zug tatsächlich blockiert, leistet nie so viel Arbeit, weil ein Meowdoku-Spielfeld eine Eigenschaft hat, die die meisten der acht Nachbarn irrelevant macht, bevor man auch nur eine einzige Spalte betrachtet hat.

Die Regel, wie sie geschrieben steht

Keine zwei Katzen dürfen sich berührende Zellen belegen. Das umfasst die vier Zellen, die eine Kante mit einer Katze teilen, und die vier, die nur eine Ecke teilen — eine frisch gesetzte Katze sperrt also auf einen Schlag acht Felder, zusätzlich zu ihrer Zeile, Spalte und Region. Jeder Leitfaden auf dieser Seite formuliert die Regel so, weil das genau das ist, was sie verbietet.

Der Code, der sie Zug für Zug durchsetzt, ist genauso unverblümt: Eine Katze wird gesetzt, und der Validator durchläuft die acht Versätze um sie herum und lehnt den Zug ab, falls einer davon bereits eine Katze enthält. Diese Schleife läuft bei jeder einzelnen Platzierung — und genau das lohnt sich zu hinterfragen. Acht Zellen sind viel zu prüfen, wenn nur einige davon je wirklich gefährdet waren.

Warum nur eine Zeile überhaupt im Weg sein kann

Beginnen wir mit einer Tatsache, die nichts mit Berührung zu tun hat: Ein Feld mit N Zeilen braucht genau N Katzen, und keine Zeile darf zwei enthalten, also enthält nach dem Lösen jede Zeile genau eine. Das ist einfach die Zeilenregel, andersherum ausgedrückt.

Berührung ist eine Distanz-1-Beziehung: Zwei Zellen berühren sich nur, wenn sowohl ihr Zeilen- als auch ihr Spaltenunterschied 0 oder 1 beträgt. Kombiniert man das mit einer Katze pro Zeile, bricht die Reichweite der Regel sofort zusammen. Eine Katze in Zeile 2 und eine in Zeile 5 liegen drei Zeilen auseinander, sodass keine Spaltenkombination zwischen ihnen sich je berühren kann — allein der Zeilenunterschied reißt den ±1-Test schon. Die einzigen Katzenpaare, die sich überhaupt berühren können, sitzen in benachbarten Zeilen.

Der Solver des Spiels selbst ist genau um diese Abkürzung herum geschrieben. Sein Constraint-Modul komprimiert eine vollständige Lösung auf eine Spaltenzahl pro Zeile und formuliert diese Reduktion direkt in den eigenen Kommentaren: Bei garantiert einer Katze pro Zeile entartet Regel vier zu „benachbarte Zeilen müssen sich in der Spaltenzahl um ≥ 2 unterscheiden“ — nichts sonst muss erneut geprüft werden.

Oben, unten, links und rechts sind längst geklärt

Von den acht Nachbarzellen einer Katze liegen vier direkt darüber, darunter, links oder rechts. Jede dieser vier teilt entweder die Zeile oder die Spalte der Katze — das macht sie orthogonal statt diagonal. Die Zeilen- und die Spaltenregel verbieten eine zweite Katze auf jeder von ihnen bereits, die Berührungsregel ist also nicht der Grund, warum diese vier Felder unzulässig sind. Sie bestätigt nur ein Urteil, das zwei einfachere Regeln bereits gefällt haben.

Die vier diagonalen Zellen sind der einzige Ort, an dem die Berührungsregel überhaupt eine Information liefern kann, die der Rest des Regelwerks nicht ohnehin schon liefert, denn ein diagonaler Nachbar teilt weder die Zeile noch die Spalte der Katze. Der gesamte praktische Gehalt von „keine Berührung“ steckt also in vier Zellen, nicht acht — und selbst diese vier sind manchmal aus einem anderen Grund schon tot: Eine diagonale Zelle kann zufällig in derselben Farbregion wie die Katze liegen, was die Regionsregel allein schon ausschließt.

Wie viel davon wirklich neu ist

Über vierhundert frisch erzeugte Spielfelder je Schwierigkeitsgrad hinweg zeigt sich Folgendes, wenn man für jede Katze im gelösten Feld prüft, wie viele ihrer (bis zu vier) diagonalen Nachbarn schon durch Zeile, Spalte oder Region unzulässig waren, bevor die Berührungsregel überhaupt greift:

Diagonale Zellen um jede gelöste Katze: wie viele schon tot waren und wie viele erst durch die Berührungsregel wegfallen.
SpielfeldSchon tot durch Zeile, Spalte oder RegionNeue Eliminierung allein durch Berührung
Leicht 5×537%63%
Normal 7×744%56%
Schwer 9×947%53%
Extrem 10×1049%51%

Bei jedem Schwierigkeitsgrad hat mehr als ein Drittel der scheinbaren Reichweite der Berührungsregel nie etwas bewirkt — die Regionsregel hatte bereits entschieden. Was übrig bleibt, die wirklich neuen Eliminierungen, macht immer noch die Mehrheit der diagonalen Zellen aus, schrumpft aber mit wachsenden Feldern stetig: von 63 % bei Leicht auf etwa die Hälfte bei Extrem.

Dieser Trend folgt der Regionsgröße, nicht der Berührungsregel selbst. Regionen werden mit wachsenden Feldern größer — eine Leicht-Region hat im Schnitt fünf Zellen, eine Extrem-Region zehn —, sodass ein zufälliger diagonaler Nachbar auf einem großen Feld eher in der eigenen Region der Katze landet als auf einem kleinen, und mehr von der Arbeit der Berührungsregel schon von der Regionsregel erledigt wird, bevor sie gebraucht wird.

Der Abstand, gemessen

Was von all dem übrig bleibt, ist eine einzige Zahl: Für jedes Paar benachbarter Zeilen im gelösten Feld muss der Spaltenabstand zwischen ihren beiden Katzen mindestens 2 betragen. Ein Abstand von 2 ist der knappste Wert, den die Regel zulässt — eine Spalte enger, und die beiden Katzen würden sich diagonal berühren. Hier, wie oft gelöste Felder tatsächlich auf diesem Minimum landen:

Spaltenabstand zwischen Katzen in benachbarten Zeilen, über vierhundert gelöste Spielfelder je Schwierigkeitsgrad.
SpielfeldZeilen am minimalen zulässigen Abstand (2)Mittlerer SpaltenabstandGrößtmöglicher Abstand
Leicht 5×557.8%2.54
Normal 7×735.1%3.26
Schwer 9×927.5%3.98
Extrem 10×1026.2%4.29

Ein Abstand von genau 2 ist bei jedem Schwierigkeitsgrad das häufigste Einzelergebnis, vor jedem anderen Abstandswert — selbst auf den Feldern, wo er kaum ein Viertel der Zeilen ausmacht. Es ist definitionsgemäß auch der Wert ohne jeden Spielraum: Rückt man eine der beiden Katzen um eine Spalte näher, ist das Feld nicht mehr zulässig.

Warum kleine Felder enger wirken

Bei Leicht beißt die Berührungsregel am stärksten, und der Grund ist schlicht der Platz. Ein 5×5-Feld hat nur fünf Spalten, um fünf Katzen auf zwei benachbarte Zeilen zu verteilen, sodass ein Abstand von 2 oder 3 fast jede zulässige Paarung abdeckt — der Mittelwert, 2,5, liegt kaum über dem Minimum. Ein 10×10-Feld hat doppelt so viele Spalten und denselben Mindestabstand von 2, sodass eine Paarung viel mehr Raum hat, um bequem außerhalb davon zu landen, und der Mittelwert auf 4,2 steigt.

Das Minimum selbst ändert sich nie. Ein Abstand von 1 bedeutet auf jeder Feldgröße ab 5×5 diagonalen Kontakt. Was sich ändert, ist, wie oft das Feld dort landet, und diese Zahl fällt stetig, je größer das Gitter wird und je mehr Spalten den Katzen zur Verteilung zur Verfügung stehen.

Was das für dich am Spielfeld bringt

Nichts davon ändert, was als zulässige Platzierung zählt — es ändert, wie viel vom Feld man ansehen muss, um eine zu prüfen. Statt gewohnheitsmäßig alle acht Nachbarn einer neuen Katze abzusuchen, hilf dir mit Folgendem:

Wie das gemessen wurde

Beide Tabellen stammen vom eigenen Generator des Spiels, demselben Code, der die Spielfelder erzeugt, die du spielst, ausgeführt über vierhundert frische Felder bei jedem der vier Schwierigkeitsgrade. „Schon tot durch Zeile, Spalte oder Region“ bedeutet, dass die diagonale Zelle die Farbregion der Katze teilt — ihre Zeile oder Spalte zu teilen ist für eine diagonale Zelle geometrisch unmöglich, also ist Region die einzige andere Regel, die der Berührung mit demselben Urteil zuvorkommen kann. „Minimaler zulässiger Abstand“ bedeutet einen Spaltenunterschied von genau 2 zwischen den Katzen zweier benachbarter Zeilen in der endgültigen Lösung.

Das sind Eigenschaften der Spielfelder, die dieser Generator derzeit erzeugt, und der Generator wurde schon einmal nachjustiert. Die Testsuite, die mit diesem Beitrag ausgeliefert wird, leitet beide Tabellen bei jedem Lauf aus frisch erzeugten Feldern neu ab, sodass eine künftige Änderung an Regionsgröße oder Spaltenplatzierung den Build scheitern lässt, statt eine veraltete Statistik auf der Seite stehen zu lassen.

Probiere die Abstandsregel an einem echten Spielfeld

Starte ein Schwer-9×9-Feld und setze zwei Katzen in benachbarte Zeilen, ohne bei beiden alle acht Nachbarn zu zählen — prüfe einfach den Spaltenabstand zwischen ihnen. Alles ab 2 ist zulässig; genau 2 ist der knappe Fall, der einen zweiten Blick wert ist, und es ist der häufigste Abstand im fertigen Feld.

Spielfelder werden in deinem Browser erzeugt. Nichts von dem, was du spielst, wird irgendwohin gesendet.