Anleitung:
----------

Das Hauptprogramm ist "LOGICALS.BAS"-

Soll ein anderes Rätsel gelöst werden, muss dieses
nachträglich über MERGE"TELEFON.LOG" bspw. "überschrieben" werden.

Zeile 107: der Zoomfaktor für die Grafikausgabe
Zeile 108: Der Name des Rätsels
Zeile 110: Die Anzahl der Zeilen, Spalten und die Maximalzahl an
Blöcken über alle Zeilen und Spalten, damit die Arrays richtig
dimensioniert werden können.

Die Zeilen-Daten befinden sich in DATA-Zeilen 311-399,
die Spalten in 411-499. Eine Zeile (Spalte) besteht aus Angabe der Blocklängen
von bspw. 2,3,4 gefolgt von einer 0. Zeilen werden von oben nach unten und innerhalb von
links anch rechts angegeben, Spalten von links nach rechts
und innerhalb von oben nach unten. Sind alle Zeilen/Spalten eingegeben, folgt
der letzten 0 eine "-1".

Durch das MERGE können Programmzeilen aus früheren Rätseln übrigbleiben. Da das Einlesen
der Daten aber am ersten -1 stoppt, stören diese nicht.

Das Array feldZS beschreibt die Bild-Daten (Inhalt COLxxx).

Die Blöcke bilden die Metadaten: für Zeilen zbllenZ(z)
("Z eile BLöcke LaENge indiziertZeile), zblmgl0ZN(z,n), mgl1 sowie
def0 und def1. mgl0,mgl1 beschreiben den Bereich der Zeile z
(d.h. die Spalten), in der der Block Nummer n irgendwo liegen MUSS,
die Felder DEF0,DEF1 den Bereich, in dem ein Teil des Blockes
bereits verifiziert liegt (0, wenn unbekannt). Ziel ist, dass 
DEF0..DEF1 der Laenge des Blockes entspricht.

Hauptschleife: Programmzeilen 900-999.
Die Regeln werden repetitiv angewendet, bis keine Änderung mehr erfolgt
(weder in feldZS oder den Block-Metadaten). Dann ist Variable VER auf 0
und in Programmzeile 59999 erfolgt kein Rücksprung zur Hauptschleife.

Regel 1: Programmzeilen 1000-1499
Wenn ein MGL-Bereich kleiner als 2 mal die Laenge des Blockes ist,
dann überlappen die Enden, wenn der Block ganz links beginnt (MGL0)
oder ganz rechts endet (MGL1). Der überlappende Bereich MUSS
daher definiert COLBLOCK sein und DEF0,DEF1 werden entsprechend
gesetzt.

Regel 2: Programmzeilen 1500-1999
Wenn ein COLBLOCK-Feld in KEINEM DEF-Breich vorkommt und nur in
genau EINEM MGL-Bereich (sei dies Block b), dann begründet es einen neuen DEF-Bereich
für diesen Block b.

Regel 3: Programmzeilen 2000-2999
Quasi die Invers-Regel zu 1. Wenn DEF gesetzt ist, kann MGL
angepasst werden, da nur noch eine bestimmte Anzahl (LEN-(DEF1-DEF0+1))
an COLBLOCK-Feldern gesetzt werden müssen.

Regel 4: Programmzeilen 3000-3499
Wenn MGL=DEF, dann ist der gesamte Block bereits identifiziert.
Die Felder links/rechts (oben/unten bei Spalten) sind damit
Trennfelder (wenn nicht außerhalb des Feldbereichs).

Regel 5: Programmzeilen 3500-3999
Wenn das Feld direkt links neben einem DEF0..DEF1-Bereich ein
COLBLOCK-Feld ist, kann DEF erweitert werden. Analog auch für rechts
sowie oben/unten bei Spalten.

Regel 6: Programmzeilen 4000-4999
Wenn |DEF1-DEF0+1|=LEN des Blockes, ist der Block identifiziert und
MGL kann gesetzt werden sowie Trennfelder.

Regel 7: Programmzeilen 5000-5999
Wenn der MGL-Bereich durch ein Trennfeld in 2 Teile aufgespalten
wird, und einer der beiden KLEINER ist als das Blockfeld LEN,
kann dieser Bereich exkludiert werden und MGL wird angepasst.

Regel 8: Programmzeilen 6000-6499
Wenn ein COLUNDEF-Feld in KEINEM MGL-Bereich einer Zeile (oder Spalte)
ist, dann muss es ein Trennfeld sein.

Regel 9: Programmzeilen 6500-6999
Wenn DEF links oder rechts durch COLTRENN begrenzt (oder oben/unten
bei Spalten), dann ist der Block voll identifiziert, DEF1=DEF0+LEN-1
MGL wird auf DEF gesetzt.

Regel 10: Programmzeilen 7000-7999
wenn ein COLBLOCK-Feld-Streak in KEINEM DEF-Bereich ist, identifiziere
alle MGL-Bereich, in dem es liegt. Alle Blöcke b, in deren MGL
es liegt, können, wenn LEN(b)<|DEF| ist, entfernt werden. Wenn dann nur
einer übrigbleibt, gehört der COLBLOCK-Bereich zu diesem Block b und
begründet eine DEF-Region.

Regel 11: Programmzeilen 7500-7999
Wenn MGL(b) mit DEF(b+1) oder DEF(b-1) überlappt, dann kann man MGL(b)
anpassen, denn der DEF(b+1) oder DEF(b-1) gehört nicht mehr dazu.

Regel 12: Programmzeilen 8000-8999
Wenn ein COLBLOCK-Feld x in bspw. einer Zeile links davon nur Felder
hat, die COLTRENN oder COLBLOCK sind, dann muss identifiziert werden,
welcher Block b an dieser Position x beginnt. Damit ist dessen Laenge
bekannt, und der gesamte Block b kann gesetzt werden.

