Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Bruteforce Algorithmus

  Alt 9. Nov 2010, 03:17
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 = 'zzzzthen
      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?
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie ( 9. Nov 2010 um 03:31 Uhr)
  Mit Zitat antworten Zitat