Hallo,
ich arbeite seit gestern an einem Tool das Kreuzworträtsel dekodieren soll.
Angefangen habe ich ersteinmal mit einem Feld von 5 x 5 Buchstaben um es überschaubar zu halten.
In diesem Feld sind wahlos Buchstaben verteilt die es gilt zu sinnvollen Wörtern zu verbinden.
Um das Ganze noch unnötig schwierig zu gestalten sind Verbindungen sowohl horizontal, vertikal
als auch diagonal möglich und das von jedem Buchstaben aus.
Um einen Einstieg zu finden habe ich mit dem Buchstaben in der Mitte angefangen.
Nun hab ich mir also gedachte sammel ich alle möglichen und gültigen Buchstabenkombinationen
und gleiche diese dann anschließend mit der Wortliste ab.
Nun stehe ich aber vor dem Problem das ich nicht weiß welche Felder schon verbunden wurden
und welche noch ausstehen - letztendlich fehlen nämlich immer wieder Kombinationen.
Hier mal ein klein wenig Code:
PlayField ist ein Array in der Größe 5x5
und kann jederzeit erneuert werden.
Delphi-Quellcode:
procedure Find(X, Y: Integer);
var ActualChar: String; loop: Integer;
begin
ActualChar:= PlayField[X, Y];
if ActualChar= '#' then
exit;
Tracker:= Tracker+ActualChar;
{ Look left }
if (X > 0) then
begin
PlayField[X, Y]:= '#';
Find(X - 1, Y);
end
else
{ Look left up }
if (X > 0) and (Y > 0) then
begin
PlayField[X, Y]:= '#';
Find(X - 1, Y - 1);
end
else
{ Look up }
if (Y > 0) then
begin
PlayField[X, Y]:= '#';
Find(X, Y - 1);
end
else
{ Look right up}
if (X < 4) and (Y > 0) then
begin
PlayField[X, Y]:= '#';
Find(X + 1, Y - 1);
end
else
{ Look right }
if (X < 4) then
begin
PlayField[X, Y]:= '#';
Find(X + 1, Y);
end
else
{ Look right down}
if (X < 4) and (Y < 4) then
begin
PlayField[X, Y]:= '#';
Find(X + 1, Y + 1);
end
else
{ Look down }
if (Y < 4) then
begin
PlayField[X, Y]:= '#';
Find(X, Y + 1);
end
else
{ Look left down}
if (X > 0) and (Y < 4) then
begin
PlayField[X, Y]:= '#';
Find(X - 1, Y - 1);
end;
end;
Wenn ich nun alles mit dem String '#' zupflaster dann wird
die Rekursion frühzeitig abgebrochen und es fehlen eine
Vielzahl von Möglichkeiten - z.B. wenn sich die Wörter
durch das ganze Feld schlängeln.
Wenn ich die 'else' Bedingung entferne dann entstehen
Kombinationen die nicht erlaubt sind, soll heißen
das Buchstaben an den String Tracker gehängt werden
die nicht an die aktuellen Koordinaten grenzen.
Momentan bin ich ein wenig ratlos wie ich an das Problem rangehen soll.
Hat Jemand vielleicht einen besseren Lösungsansatz?
MfG