| Autor |
Beitrag |
walter_b 
      
Beiträge: 135
Windows Vista/XP
Delphi 6
|
Verfasst: So 13.07.08 12:37
Jerk hat folgendes geschrieben: |
Wäre evtl ein Script für das ganze besser? |
Hm... wie meinst du?
@Hidden: Ich habe bisher noch nie mit Pointern gearbeitet. Habe jetzt ein wenig in der Hilfe nachgelesen, aber habe keine Ahnung, wie ich das ganze Umsetzen sollte. 
|
|
Jerk
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: So 13.07.08 12:52
Na die ganze rekursion in ein Script auslagen, z.B. Python?!?
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 13.07.08 13:13
Meine aktuelle Funktion schafft 365.000.000 Kombinationen von A..Z in 1 Sekunde, allerdings ohne jegliche Ausgabe und Stringumwandlung.
Ich poste sie später, muss noch optimieren.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Jerk
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: So 13.07.08 13:32
Richtig Langsam wird es erst wenn der String ausgegeben wird -.-
Wie messe ich die Zeit am besten um mal zu wissen wie schnell mein Code is?
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: So 13.07.08 14:08
Jerk hat folgendes geschrieben: |
Wie messe ich die Zeit am besten um mal zu wissen wie schnell mein Code is? |
Dazu kannst du SecondsBetween und MillisecondsBetween verwenden.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 13.07.08 14:13
Das ist ja noch ungenauer als GetTickCount:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var Start: Cardinal; begin Start := GetTickCount;
ShowMessage(IntToStr(GetTickCount - Start) + ' ms'); end; |
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: So 13.07.08 14:20
GTA-Place hat folgendes geschrieben: | Das ist ja noch ungenauer als GetTickCount:
|
warum nicht gleich QueryPerformanceCounter ^^ ich wusste nicht dass es sooo genau sein muss.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
walter_b 
      
Beiträge: 135
Windows Vista/XP
Delphi 6
|
Verfasst: So 13.07.08 14:57
GTA-Place hat folgendes geschrieben: | Meine aktuelle Funktion schafft 365.000.000 Kombinationen von A..Z in 1 Sekunde, allerdings ohne jegliche Ausgabe und Stringumwandlung.
Ich poste sie später, muss noch optimieren. |
Schon fertig optimiert?  Klingt nämlich bisher sehr interessant, denn ich habe alleine mit inc(x) nur ungefähr 100'000'000 Kombinationen pro Sekunde erreicht, als ich einfach eine Zahl hochzählen liess, und dies auf einem Quad-Core. Deshalb nähme mich mal wunder, wie dein Skript aussieht.  Aber lass dich nicht stressen 
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 13.07.08 16:21
Unoptimiert:
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:
| procedure Gen(); var X, Y, Len: Integer; Wort: Array[0..10] of Byte; begin Len := 0;
for X := 0 to 10 do Wort[X] := ord('A') - 1;
for X := 0 to 100 do begin Y := 0; inc(Wort[0]);
while Wort[Y] > Ord('Z') do begin inc(Wort[Y + 1]); Wort[Y] := ord('A'); inc(Y);
Len := max(Y, Len); end; end; end; |
EDIT: Optimiert, Stufe 1:
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:
| procedure Gen(); var X, Y, Len: Integer; Wort: Array[0..10] of Char; begin Len := 0;
for X := 0 to 10 do Wort[X] := Chr(Ord('A') - 1);
for X := 0 to 100 do begin Y := 0; inc(Wort[Y]);
while Wort[Y] > 'Z' do begin inc(Wort[Y + 1]); Wort[Y] := 'A'; inc(Y);
Len := max(Y, Len); end; end; end; |
Resultat: 553.000.000 pro Sekunde + Umwandlung von Integer in String nicht mehr nötig.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Zuletzt bearbeitet von GTA-Place am So 13.07.08 17:07, insgesamt 1-mal bearbeitet
|
|
walter_b 
      
Beiträge: 135
Windows Vista/XP
Delphi 6
|
Verfasst: So 13.07.08 16:52
Hast du das ganze in einer Konsolenapplikation gemacht oder worin hast du diesen Code?
Aber sieht gut aus, vielen Dank schon mal!
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 13.07.08 16:53
Läuft im Fenstermodus ^^
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
walter_b 
      
Beiträge: 135
Windows Vista/XP
Delphi 6
|
Verfasst: So 13.07.08 16:57
GTA-Place hat folgendes geschrieben: | | Läuft im Fenstermodus ^^ |
Sorry für die Noob-Frage, aber what the heaven ist Fenstermodus? 
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 13.07.08 16:58
Naja, mit Fenster halt ^^ GUI-Anwendnung, keine Konsole.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Jerk
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: So 13.07.08 17:59
533 Millionen oder haste ein zwei Nullen zuviel ???
Kannste den Code mal so hier reinpacken das jede einzelne Kombination ausgegeben wird?
Zuletzt bearbeitet von Jerk am So 13.07.08 18:07, insgesamt 1-mal bearbeitet
|
|
walter_b 
      
Beiträge: 135
Windows Vista/XP
Delphi 6
|
Verfasst: So 13.07.08 18:07
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 13.07.08 19:12
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Jerk
      
Beiträge: 251
Vista Ultimate, Ubuntu
Turbo Delphi 2006
|
Verfasst: So 13.07.08 19:39
edit ich gebs auf, verdammter Stackoverflow bei zu langem Pw -.-
|
|
walter_b 
      
Beiträge: 135
Windows Vista/XP
Delphi 6
|
Verfasst: So 13.07.08 19:55
@GTA-Place: Cool, echt toll das Programm. Vielen Dank! 
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 13.07.08 20:16
Nochmal optimiert:
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:
| procedure Gen(); var X, Y: Integer; Wort: String; fChar: PChar; begin SetLength(Wort, 1); fChar := @Wort[1]; fChar^ := Chr(Ord('A') - 1);
for X := 0 to 100 do begin Y := 1; inc(fChar^); while Wort[Y] > 'Z' do begin inc(Y);
if Y > Length(Wort) then begin SetLength(Wort, Y); Wort[Y] := 'A'; end else inc(Wort[Y]);
Wort[Y - 1] := 'A'; end; end; end; |
Zwar nur noch 500 Millionen Kombinationen pro Sekunde, aber direkt als String. Du kannst mit Wort weiterarbeiten wie du willst.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Do 17.07.08 18:06
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:
| function Gen(); var X, Y: Integer; Signs: Array of Char; Wort: Array of PChar; Temp: String; begin Temp := 'abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; SetLength(Signs, Length(Temp) + 2); CopyMemory(@Signs[1], @Temp[1], Length(Signs));
Signs[0] := #0; Signs[High(Signs)] := #0;
SetLength(Wort, 1); Wort[0] := @Signs[0];
for X := 0 to 1000 do begin Y := 0; inc(Wort[Y]);
while Wort[Y]^ = #0 do begin Wort[Y] := @Signs[1]; inc(Y);
if Y > Length(Wort) - 1 then begin SetLength(Wort, Y + 1); Wort[Y] := @Signs[1]; end else inc(Wort[Y]); end; end; end; |
In Temp die gewünschten Zeichen eintragen und 400.000.000 Kombinationen pro Sekunde bekommen.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|