Niedawno pytalem jak mozna zrobic petle. Myslalem ze dalej sobie poradze ale niestety nie udalo mi sie ;( wiec pytam: jak mozna zobic aby, np. w memo wyswietlic wszystkie mozliwosci liter o dlugosci powiedzmy 10 znakow, np. aaaa, aaab, aaac, aaad itd. Mam nadzieje ze wiecie o co mi chodzi :-) --pozdrawiam PEDROS {hello}
Delphi6
Tak zaczalem to robic i wyszlo mi ze za zadne skarby swiata nie zmiescisz tego w Memo [kombinacja z 10 znakow]. wszystkich kombinacji jest 10! czyli 3628800, i zakladajac po 10 bajotw kazda daje nam to jakies 34,6MB [bez miejsca zajmowanego przez entery] :). Druga sprawa wyswietlenie 4 rzedow kombinacji w memo zajmuje mojemu prockowi 312 sekund, a zapisanie tego do pliku trwa ponizej 1 sekundy. Ponizej masz kodzik:
procedure TForm1.Button1Click(Sender: TObject);
var
n1,n2,n3,n4,n5,n6,n7,n8,n9,n0: Integer;
przed,po: TTime;
F: TextFile;
begin
Przed:=Now;
AssignFile(F,'C:\kombinacja.txt');
Rewrite(F);
for n1:=Ord('a') to Ord('z') do
begin
for n2:=Ord('a') to Ord('z') do
begin
for n3:=Ord('a') to Ord('z') do
begin
for n4:=Ord('a') to Ord('z') do
begin
for n5:=Ord('a') to Ord('z') do
begin
for n6:=Ord('a') to Ord('z') do
begin
for n7:=Ord('a') to Ord('z') do
begin
for n8:=Ord('a') to Ord('z') do
begin
for n9:=Ord('a') to Ord('z') do
begin
for n0:=Ord('a') to Ord('z') do
begin
WriteLn(F,Chr(n1)+Chr(n2)+Chr(n3)+Chr(n4)+Chr(n5)+Chr(n6)+Chr(n7)+Chr(n8)+Chr(n9)+Chr(n0));
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
Po:=Now;
Przed:=Po-Przed;
WriteLn(F,'File generated in '+timetostr(przed));
CloseFile(F);
end;
co prawda czas operacji nie bedzie wyswietlany co do milisekundy, lecz sekundy nie chcialo mi sie grzebac z gettickcount czy cos.--sys:> logout....
Sorry troche mi sie powalilo z tymi wyliczeniami {glowa} sa za lekkie
powinno byc (26 po 10)=26!/10!16! to jakies 531173500 kombinacji. Skromnie :). W pliku bedzie tyle samo enterow [jesli writeln robi #10 a nie #10#13] i 10 razy wiecej bajtow na kazda kombinacje czyli 531173500+53117350010=5.4GB
Powodzenia w tworzeniu ;)
--sys:> logout....
Dzieks za odpowiedz. Rzeczywiscie to bedzie zajmowalo sporo miejsca, ale postaram sie to jakos przerobic.--pozdrawiam PEDROS {hello}
Delphi6
Stworzylem cos takiego. czekalem 7min i plik zajmowal 1,56gb i bylo jakies plowe kompnacji. Jaki ty masz procesor ze ci sie to skonczylo po 5min--pozdrawiam PEDROS {hello}
Delphi6
Sheitar napisał:
[...] a'propos kombinacji...
Wzór, który podałeś (10 po 26) dotyczy kombinacji bez powtórzeń.
Myślę, że przy:
k=10 {dł wyrazu}
n=26 {ilosc elementow=ilosc liter}
wzór będzie wyglądał tak:
n^k=26^10=... { kombinacje z powtórzeniami n-elementów o k-długości wyrazu }
Zapewne Pedros'owi chodziło o wyrazy, w których litery mogą się powtarzać, czy tak?
{hello}
--Pawlik67
Zapraszam :-)
www.vebso.pl
UŻYTKOWNIK 9969489
Pawlik67 napisał:
>Zapewne Pedros'owi chodziło o wyrazy, w których litery mogą się powtarzać, czy tak?
heh zapewne tak {glowa}
Kombinatoryke mialem niedawno na matmie i tak mi namieszali w glowie ze takie prostych rzeczy to sie mi kreca, a rzeczy typu "Dwie sisotry Ania i Beata zmywaja szklanki i Ania jako starsza zmywa 3 razy czesciej niz Beata. Wiadomo, ze prawdopodobienstwo zbicia szklanki w czasie mycia przez Anne wynois 0,01, a przez Beate 0,04. Jakies jest przawdopodobienstwo ze w czasie zmywania:
a) zostanie zbita 1 szklanka
b) szklanka zostala zbita, jakie jest prawdopodobienstwo ze to Ania zbila szklanke
{browar} --sys:> logout....
Zapomnialem dodac ze temte zadanie [te ze szklankami] sprawia mi mniej porblemow niz wariancje na zbirach n- elementowych czy jakos tak :P chyba usz isc podstudiowac lekko podstawy hehe
Ale co za durnaty ja tu wypisuje {hello} --sys:> logout....
Potrzebowalem tego aby napisac program do lamania hasel na kontach e-mail :-) ale policzylem sobie ze sprawdzenie wszystkich kombinacji 10 literowych przy zalozeniu ze sprawdzam 1haslo/s zajeloby 11lat :( --pozdrawiam PEDROS {hello}
Delphi6
Pedros napisał:
>Potrzebowalem tego aby napisac program do lamania hasel na kontach e-mail :-) ...
Mozna latwiej tylko trzeba troche naiwnych osob :). Wyslij do denata poczte [np. z telnetu] i za adresuj ze przszyla np. od admnia serwisu pocztowego danej osoby. Wymysl jakas dobra scieme i ... masz haslo {brawo}
Niestety ta metoda ma pewne wady [nie kazdego da sie zrobic w konia], ale jak sie juz ktos na to zlapie to jej zaleta jest to ze na pewno nie stracisz 11 lat ;) --sys:> logout....
No mozna i tak ale to nie jest juz taka zabawa jak napisanie programu do lamania i zlamanie hasla. :-) --pozdrawiam PEDROS {hello}
Delphi6
Zapomnialem jeszcze o jednej rzeczy. Wpadlem na pomysl (ogladajac HAKEROW 2) na zatrudnienie innych kompow do lamania tego hasla. Ale aby zlamac je w ciagu 24h potrzebowalbym ponad 8tys kompw. Wiec moge jeszcze napisac program wysylajacy sie do wszystkich mozliwych osob. Ale to juz bylby wirus:(
--pozdrawiam PEDROS {hello}
Delphi6
W ksiazce algorytmy i struktury danych w C++
masz takie cos co sie nazywa uniwersalna struktura slownikowa USS
i twoj problem da sie zapisac na kilkudziesieciu (moze kilkusset) kilobajtach :-)
Grunt to odpowiednie podejscie do problemu .
A ten algorytm podany wczesniej jest do bani
zero optymalizacji koledze ktory go napisal polecam ponowny kurs algorytmiki
wojta$--