Hm ich glaube, du hast das falsch verstanden (Oder ich verstehe dich nicht)
- Ich erstelle eine Nullmatrix (mein 5x5 Feld).
- Ich lasse eine Schleife durchlaufen, die alle Kombinationen durchgeht, 8 aus 8 mit Variation ohne Zurücklegen.
n!/(n-k)!=40320
und das in 256 Varianten (wenn ich jeweils den Klotz rotiere), also 10.321.920 Möglichkeiten.
- Diese Kombination weise ich den beiden Arrays zu. S[1..], W[1..4]. Dabei ist der Eintrag im einen Array automatisch "transponiert", um das Wenden drin zu haben (sonst kann man die Zinnen ja nicht ineinander stecken).
- dann folgt in etwa das (wird nach Zuweisung von S, W aufgerufen):
Delphi-Quellcode:
M_reset(); //Matrix resetten
for k:=0 to 3 do begin //S und W durchgehen
for i:=1 to 5 do begin //Senkrechte auf das Feld addieren
for j:=1 to 2 do begin
M[i,j+k] := S[k].[i,j]; //<--funktioniert so nicht
end;
end;
for i:=1 to 2 do begin //Waagerechte auf das Feld addieren
for j:=1 to 5 do begin //durch Drehung i/j -> Transponierte
M[i+k, j] := W[k].[i,j]; //<--funktioniert so nicht
end;
end;
end;
if comparemem(@M,@SollM,SizeOf(M)) then begin
result := true;
end
else begin
result:=false;
end;
end;
- Das Problem ist also das oben gekennzeichnete.