Autor Beitrag
ScorpionKing
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1150

Win XP

BeitragVerfasst: Mo 11.07.05 12:58 
Hi Leute,
wie kann ich einen Algorithmus schreiben, der mir aus vorgegebenen Zeichen (Buchstaben, Zahlen, etc.) alle möglichen Kombinationen herausfindet?

Danke!

MfG, ScorpionKing!

_________________
Aus dem Urlaub zurück!
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Mo 11.07.05 13:01 
maxk hat folgendes geschrieben:
Die folgende Funktion kann genutzt werden, um einen String automatisch hochzuzählen. Der erste Parameter gibt dabei eine Menge von Zeichen an, die in dem späteren String vorkommen können. Der zweite Parameter enthält den String, der als Vorgabe dienen soll (also der, der hochgezählt werden soll). Wenn alles glatt läuft, gibt die Funktion den genierten String zurück:


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
function BruteForce(const InChars,Key:string):string;
var i:integer;
    Chars:string;
begin
 // No characters to use, no change in key
 if length(InChars)=0 then begin
  Result:=Key;
  Exit;
 end;

 // every character should only be once in the "list"
 // this is a very simple mechanism to validate the list
 SetLength(Chars,0);
 for i:=1 to length(InChars) do begin
  if pos(InChars[i],Chars)=0 then Chars:=Chars+InChars[i];
 end;

 // is the key initialized?
 if length(Key)=0 then begin
  Result:=Chars[1];
  Exit;
 end;

 if Key=StringOfChar(Chars[length(Chars)],length(Key)) then begin
  // new length, new string
  Result:=StringOfChar(Chars[1],length(Key)+1);
  Exit;
 end;

 if Key[length(Key)]=Chars[length(Chars)] then begin
  // Replace the next character(s)
  Result:=Key;
  for i:=length(Result) downto 1 do begin
   if Result[i]<>Chars[length(Chars)] then begin
    // this character has to be updated
    Result[i]:=Chars[pos(Result[i],Chars)+1];
    Break;
   end else begin
    // Characters after have to be reset
    Result[i]:=Chars[1];
   end;
  end;
  Exit;
 end;

 // Replace the last character
 Result:=copy(Key,1,length(Key)-1)+Chars[pos(Key[length(Key)],Chars)+1];
end;

Ein kleines Beispiel dazu soll alle vierstelligen Dualzahlen auflisten:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var s:string;
begin
 ListBox1.Clear;
 s:='0000';
 while length(s)<=4 do begin
  ListBox1.Items.Add(s);
  s:=BruteForce('01',s);
 end;
end;


Gruß,
maxk

:!: Aber bitte nicht versuchen, damit Passwörter zu knacken :mahn:

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
ScorpionKing Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1150

Win XP

BeitragVerfasst: Mo 11.07.05 13:04 
Ja, danke, ich werde es mal testen.
Keine Angst, ich brauch das nur für eine Demonstration in Informatik, habt ihr noch weitere Methoden?

_________________
Aus dem Urlaub zurück!