Ich habe folgenden Bruteforce Algorithmus:
Delphi-Quellcode:
function BruteForceLengthIndex(Len: integer;
const Chars:
string): Int64;
var
Factor : Int64;
begin
Result := 0;
Factor := 1;
while Len > 0
do
begin
dec(Len);
Result := Result + Factor;
Factor := Factor * Length(Chars);
end;
end;
function BruteForce(Nb: Int64; Chars:
string):
string;
begin
Result := '
';
while Nb > Length(Chars)
do
begin
dec(Nb);
Result := Chars[Nb
mod Length(Chars) + 1] + Result;
Nb := Nb
div Length(Chars);
end;
if Nb > 0
then
Result := Chars[Nb] + Result;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
CHARS = '
abcdefghijklmnopqrstuvwxyz';
var
MaxChars: Int64;
s:
string;
begin
MaxChars := BruteForceLengthIndex(3, CHARS);
while (length(s) <= 3)
do
begin
s := BruteForce(MaxChars, CHARS);
Caption := s;
if s = '
zzzz'
then
exit;
Inc(MaxChars);
end;
end;
Dazu hab eich folgende Fragen:
1. Was macht BruteForceLengthIndex und wozu wird diese Funktion benötigt?
2. Wenn ich drei angebe, bildet er trotzdem alle Kombinationen mit vier Stellen durch. Was stimmt da nicht?
3. Er findet die Kombination "zzzz" nicht (aber "zzz"), obwohl er trotz der Länge von drei auch alle Kombinationen mit vier Stellen durchprobiert.
Muss mich wohl korrigieren. Er zeigt nur "aaaa" an, wenn er alle Kombinationen durch hat.
Ich bräuchte einen Algorithmus bei dem ich die minimale Anzahl Stellen und die maximale Anzahl Stellen angebe. Also wenn min=3 und max=5 ist, soll er bei "aaa" anfangen und bei "zzzzz" enden.
Ich nehme alles zurück und behaupte das Gegenteil. Bleibt nur Frage eins.
Und noch was, wie kann ich da eine Fortschrittsanzeige mitlaufen lassen?