Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Generator wszystkich mozliwych ciagow znakow
Forum PHP.pl > Forum > Przedszkole
konradkw
Witam! napisalem bardzo prosty generator ciagow znakow losowych, generujacy wszystkie mozliwe kombinacje osmiu znakow uprzednio zdefiniowanych w kodzie.

1. Generator jest bardzo niewydajny poniewaz sie powtarza, dodatkowo nie konczy pracy poniewaz znajduje tylko kombinacje 3 ostatnich znakow.
2. Chcialbym aby wyniki byly zapisane w pliku tekstowym poniewaz baza danych moze tego nie wytrzymac.

Mozecie podpowiedziec jak to rozwiazac?

  1.  
  2. $znaki = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "W", "X", "Y", "Z", "V","a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "y", "x", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
  3.  
  4. $count = count($znaki);
  5. $operacje = 0;
  6.  
  7. for($i=0;$i<$count;$i++)
  8. {
  9. for($g=0;$g<$count;$g++)
  10. {
  11. for($h=0;$h<$count;$h++)
  12. {
  13. for($i2=0;$i2<$count;$i2++)
  14. {
  15. for($g2=0;$g2<$count;$g2++)
  16. {
  17. for($h2=0;$h2<$count;$h2++)
  18. {
  19. for($i3=0;$i3<$count;$i3++)
  20. {
  21. for($g3=0;$g3<$count;$g3++)
  22. {
  23.  
  24. $wyraz = $znaki[$i].$znaki[$g].$znaki[$h].$znaki[$i2].$znaki[$g2].$znaki[$h2].$znaki[$i3].$znaki[$g3];
  25.  
  26. $sprawdz = mysql_query ("SELECT * FROM `generator` WHERE `haslo` = '$wyraz' LIMIT 1");
  27. while ($raw = mysql_fetch_array($wynik, MYSQL_ASSOC))
  28. {
  29. $jest = 'tak';
  30. }
  31. if ($jest != 'tak')
  32. {
  33. $dodaj = mysql_query("INSERT INTO `generator` (haslo) VALUES ('$wyraz')");
  34. }
  35. }
  36. }
  37. }
  38. }
  39. }
  40. }
  41. }
  42. }
  43.  
nospor
ad1) Wszystkie możliwe kombinacje 8 znakowe.... życia nie starczy na działanie takiego skryptu. A dodać do tego jeszcze operacje na bazie przy każdej jednej kombinacji....

ad2) Sądzisz że kilkugigabjtowy plik będzie lepszy?
konradkw
kombinacji jest 1.0077696e+16

plik bylby lepszy jesli skrypt jest odpalany lokalnie - chyba ze sie myle .. ?



pomylka - kombinacji jest 1.679616e+14
nospor
Cytat
kombinacji jest 1.0077696e+16
No właśnie. Taki skrypt będzie się wykonywał do śmierci... albo Twojej, albo kompa, albo systemu smile.gif

Cytat
plik bylby lepszy jesli skrypt jest odpalany lokalnie - chyba ze sie myle .. ?
Przy takiej liczbie kombinacji, która w życiu nie jest w stanie dojść do końca, nic nie będzie lepszego smile.gif

Po co ci to w ogóle?

Cytat
pomylka - kombinacji jest 1.679616e+14
Nie, no to zmienia postać rzeczy..... wink.gif
!*!
Tak z ciekawości... na cholerę Ci to? I czy nie lepiej byłoby poszukać gotowych baz, wykorzystywanych przy atakach BF, lub słownikowych? Lekkie to one nie są, ale przynajmniej nie tracisz wielu godzin na generowanie.
nospor
Cytat
ale przynajmniej nie tracisz wielu godzin na generowanie.
Śmiem twierdzić, że to będzie zdecydowanie więcej, niż marne wiele godzin...
konradkw
zeby obnizyc ilosc wynikow mozna wyeliminowac wszytkie wyniki a wieksza iloscia tych samych znakow obok siebie niz 3 czyli np aaa78900 by przeszlo ale aaaa1234 juz nie .. ? co sadzicie?

Chcialbym stworzyc swoj wlasny slownik.

robilem juz cos podobnego ale to bylo dopasowanie slowa do wszystkich mozliwoscii to zajelo okolo tygodnia. majac ta baze zajmie to okolo 10 h bo wystarczy przeszukac plik lub baze danych
!*!
nospor - oj tam... lekko zaniżyłem wink.gif Pamiętam kiedyś, chyba nawet na tym forum był ktoś, kto chciał wygenerować wszytko na literę "B", po 6 godzinach dał sobie spokój bo nie doszło nawet do połowy, a baza urosła do 3GB biggrin.gif
nospor
Słownik czego?

Cytat
nospor - oj tam... lekko zaniżyłem Pamiętam kiedyś, chyba nawet na tym forum był ktoś, kto chciał wygenerować wszytko na literę "B", po 6 godzinach dał sobie spokój bo nie doszło nawet to połowy, a baza urosła do 3GB
No tak.... ludzie w ogóle nie myślą na co się porywają. Myślą ze jak skrypt coś robi, to będzie to trwać 5 minut.... zero wyobraźni. O zasobach pamięciowych już nie wspominając
konradkw
nospor - nie musisz buz niemily.
To co chce zrobic jest dokladnie przemyslane. nie musicie znac szczegulow projektu. zapytalem jak to zrobic a nie czy uwazacie ze to dobry pomysl.
nospor
A gdzie ja jestem niemiły? W tym, że mówię, że porywasz się na wiatraki? A to przepraszam bardzo. Zmieniam więc ton:

stary, chłopie, to bardzo dobry pomysł. Pomysł z plikiem jest wręcz genialny. Jak już to ci się wygeneruje, to napisz do mnie. Jak tylko jeszcze będę żył, to z chęcią przejrzę ten plik, który wyślesz mi na maila smile.gif
konradkw
obraza majestatu?
sarkazm nie jest Twoja mocna strona.

poprosilem o pomoc a nie o takie komentarze. co to za roznica kiedy sie skonczy generowac? co to za roznica czy sie wogole skonczy? wazne ze bedzie skrypt napisany poprawnie - czyz nie tak? tylko i wylacznie taki mialem cel piszac o tym. Jesli nie masz nic wiecej do powiedzenia w kwestii usprawnienia skryptu to podziekuje CI juz za udzial w rozmowie.
nospor
Ależ naprawdę staram się być miły smile.gif

Niestety nie ogarniam tematu i nie jestem w stanie ci pomóc. Ale naprawdę jestem żywo zainteresowany wynikiem Twoich prac i jak tylko skończysz to chętnie poznam ich wynik. Napisz do mnie koniecznie, bo bardzo mnie to ciekawi - i tu naprawdę nie ma ani krzty sarkazmu z mojej strony smile.gif
konradkw
niema problemu. jak tylko ktos pomoze mi z tym skryptem i go uruchomie to chetnie podziele sie wynikami lub obserwacjami jesli sie nie uda.

Przepraszam za powodowanie zamieszania.

Pracuje nad tym juz dlugo i nie moge dojsc do najprostrzego skryptu - to jest juz 12 wersja...

probowalem z dodawnaiem losowych znakow do bazy ale sprawdzanie czy taki juz jest zajmowalo wieki, chcialbum wiec to jakos inaczej ogarnac. mysle ze to co mam teraz ma szanse ale generuje tylko 3 ostatnie znaki i tych kombinacji jest 199993 teraz tylko pozostaje wygenerowanie reszty znakow i nawet jesli skrypt padnie przed koncem generowania co jest bardzo prawdopodobne to i tak za 2 razem tych samych kombinacji juz nie doda.
!*!
konradkw - kilka informacji znajdziesz pod "algorytm postępowania" np. takie coś http://forum.ks-ekspert.pl/topic/93349-php...nie-wszystkich/
sabat24
Cytat(!*! @ 7.03.2013, 10:50:51 ) *
Tak z ciekawości... na cholerę Ci to? I czy nie lepiej byłoby poszukać gotowych baz, wykorzystywanych przy atakach BF, lub słownikowych? Lekkie to one nie są, ale przynajmniej nie tracisz wielu godzin na generowanie.

Ależ jesteście przyziemni i małostkowi. Wciąż czeka na praktycznie udowodnienie twierdzenie o nieskończonej liczbie małp. W końcu ktoś się podjął tego i już przy pierwszych próbach, obalacie jego zapał. Emil Borel jest także żywo zainteresowany wynikami.
nospor
Jak ten skrypt może generować ci tylko 3 ostatni znaki, skoro masz:
$wyraz = $znaki[$i].$znaki[$g].$znaki[$h].$znaki[$i2].$znaki[$g2].$znaki[$h2].$znaki[$i3].$znaki[$g3];
To nie ma prawa generować 3 ostatnich znaków, skoro widać że łączysz więcej nić 3 znaki. Co masz na myśli pisząc 3 ostatnie znaki?

Cytat
i nawet jesli skrypt padnie przed koncem generowania co jest bardzo prawdopodobne to i tak za 2 razem tych samych kombinacji juz nie doda.
Ale do nowych kombinacji też nie dojdzie, bo znowu od początku będzie musiał się przebijać przez wszystkie te, które już wygenerował.

Musisz zapamiętywać stan na jakim zakończyłeś, i startować ponownie od tego stanu. Inaczej robota nie ma najmniejszego sensu
konradkw
Wlasnie tez nie rozumiem dlaczego ale otrzymalem tylko wyniki typu AAAAABPa i bylo ich 199993 a skrypt dalej nie generuje to zalozylem ze mam blad i nie generuje reszty znakow - no chyba ze to ograniczenie bazy danych? czy to mozliwe zt jest tak niskie?

sabat24 - nie rozumiem Twojej wypowiedzi ale zakladam ze to jakis zart.

Ilosc kombinacjji jest graniczona poniewaz mam okreslony zbior znakow oraz sa to tylko i wylacznie ciagi 8-o znakowe wiec cala reszta odpada.
nospor
Kolejny błąd
while ($raw = mysql_fetch_array($wynik, MYSQL_ASSOC))

{

$jest = 'tak';

}
Musisz czyscic $jest, inaczej po pierwszym znalezieniu, zawsze $jest będzie ustawione na TAK smile.gif
konradkw
Cytat(nospor @ 7.03.2013, 12:19:44 ) *
Ale do nowych kombinacji też nie dojdzie, bo znowu od początku będzie musiał się przebijać przez wszystkie te, które już wygenerował.

Musisz zapamiętywać stan na jakim zakończyłeś, i startować ponownie od tego stanu. Inaczej robota nie ma najmniejszego sensu


no wlasnie dlatego prosze o pomoc w ulepszeniu skryptu smile.gif

Cytat(nospor @ 7.03.2013, 12:21:09 ) *
Kolejny błąd
while ($raw = mysql_fetch_array($wynik, MYSQL_ASSOC))

{

$jest = 'tak';

}
Musisz czyscic $jest, inaczej po pierwszym znalezieniu, zawsze $jest będzie ustawione na TAK smile.gif


masz racje - jesli dobrze rozumiem to jest dlatego ze $kjest to zmienna globalna prawda?
nospor
1) Czyli skrypt nie generuje ci 3 znaków, a 8 jak chciałeś. Nie myl ludzi.
A nie generuje ci wiecej bo pewnie pada. A jak coś znajdzie, to juz nic wiecej nie doda, bo $jest zawsze potem jest na TAK. Pisałem ci o tym, że $jest masz resetować za każdym razem.

Nie globalna, a normalna zmienna widoczna w zakresie jaki masz....

Tak ma byc:
$jest = 'nie';
while ($raw = mysql_fetch_array($wynik, MYSQL_ASSOC))

{

$jest = 'tak';

}

Jeden problem z głowy.
konradkw
czy jest sposob przedluzenia czasu oczekiwania serwera? o ile sie nie myle to standard to 30 s i to mnie ogranicza bardzo - lokalnie moze bede w stanie t zmienic?
nospor
http://php.net/manual/en/function.set-time-limit.php
ustaw na 0 - działasz do bólu... lub do śmierci wink.gif

Cytat
Ale do nowych kombinacji też nie dojdzie, bo znowu od początku będzie musiał się przebijać przez wszystkie te, które już wygenerował.

Musisz zapamiętywać stan na jakim zakończyłeś, i startować ponownie od tego stanu. Inaczej robota nie ma najmniejszego sensu


no wlasnie dlatego prosze o pomoc w ulepszeniu skryptu
No i ci napisałem: musisz zapamietywać stan liczników, np. w pliku. A po starcie odczytać te stany i liczniki nie startować od 0 a od zapisanych stanów
konradkw
Cytat(nospor @ 7.03.2013, 12:30:29 ) *
http://php.net/manual/en/function.set-time-limit.php
ustaw na 0 - działasz do bólu... lub do śmierci wink.gif

No i ci napisałem: musisz zapamietywać stan liczników, np. w pliku. A po starcie odczytać te stany i liczniki nie startować od 0 a od zapisanych stanów



przepraszam ale nie bardzo wiem jak zaimplementowac ograniczenie czasu dzialania

jesli chodzi o zapisanie stanu to czy skrypt nie bedzie sprawszal wynikow dwa razy jesli dodloze plik ze stanem?
nospor
No ale czego nie rozumiessz? Nie umiesz na początku skryptu wstawić takiej linijki:
set_time_limit(0);
? Nie ogarniam problemu.

Na jak będziesz pamietał stan, no to logiczne, że nie będziesz w petli latał po tych samych danych.
konradkw
skrypt znowu doszedl do 199990 i nie dodaje - czy to moze byc problem z baza danych ktora mnie ogranicza?

nospor
1) A ustawiłeś limit czasowy na większy?
2) Pokaż w ogóle strukturę tabeli, jakie pola, jakie typy itp.
3) A wprowadziłeś stany jak proponowałem?
konradkw
wprowadzilem zmiany to teraz tylko brakuje zapamietania stanu... moze liczba 199990 to ograniczenie ilosci dzialan w petli .. ?
nospor
Cytat
moze liczba 199990 to ograniczenie ilosci dzialan w petli .. ?
smile.gif A może plamy na słońcu? wink.gif

Proszę po raz kolejny - podaj strukturę tabeli.
konradkw
nie wiem jak wprowadzic stany.

baza jest bardzo prosta:

id - int
haslo - text

reszta zmian wprowadzona.
nospor
No, pojawia się jeszcze jeden problem: typ INT nie wystarczy na te wszystkie Twoje kombinacje.
konradkw
wywalic id?
!*!
  1. $string = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'W', 'X', 'Y', 'Z', 'V','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'y', 'x', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
  2. $int = count($string);
  3.  
  4. for($i=0; $i < $int; $i++)
  5. {
  6. for($ii=0; $ii < $int; $ii++)
  7. {
  8. echo $string[$i].$string[$ii].'</br>';
  9. }
  10. }


To by miało nawet sens, jakby wrzucić to w rekurencje...
A skoro już o optymalizacji mowa, to powinieneś wiedzieć jaka jest różnica między cudzysłowem, a apostrofem w kodzie. Zamień " na '

Cytat(konradkw @ 7.03.2013, 11:43:35 ) *
wywalic id?


Nie ID, tylko zmień typ pola.
nospor
Cytat
To by miało nawet sens, jakby wrzucić to w rekurencje...
No gdzie rekurencja.... toż to w ogóle padnie szybciej niż powstało.

Cytat
Nie ID, tylko zmień typ pola.
Chyba nie ma takiego typu, który by ogarnął taką ilość. Najlepiej wywalić, bo i po co te ID? Po ID nie chce szukać tylko po słowniku
konradkw
moze pokaze caly kod w obecnym stanie:

  1. <?
  2.  
  3. $znaki = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "W", "X", "Y", "Z", "V","a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "y", "x", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
  4.  
  5. $count = count($znaki);
  6. $operacje = 0;
  7.  
  8. for($i=0;$i<$count;$i++)
  9. {
  10. for($g=0;$g<$count;$g++)
  11. {
  12. for($h=0;$h<$count;$h++)
  13. {
  14. for($i2=0;$i2<$count;$i2++)
  15. {
  16. for($g2=0;$g2<$count;$g2++)
  17. {
  18. for($h2=0;$h2<$count;$h2++)
  19. {
  20. for($i3=0;$i3<$count;$i3++)
  21. {
  22. for($g3=0;$g3<$count;$g3++)
  23. {
  24.  
  25. $wyraz = $znaki[$i].$znaki[$g].$znaki[$h].$znaki[$i2].$znaki[$g2].$znaki[$h2].$znaki[$i3].$znaki[$g3];
  26.  
  27. $sprawdz = mysql_query ("SELECT * FROM `generator` WHERE `haslo` = '$wyraz' LIMIT 1");
  28. $jest = 'nie';
  29. while ($raw = mysql_fetch_array($wynik, MYSQL_ASSOC))
  30.  
  31. {
  32.  
  33. $jest = 'tak';
  34.  
  35. }
  36.  
  37. if ($jest != 'tak')
  38. {
  39. $dodaj = mysql_query("INSERT INTO `generator` (haslo) VALUES ('$wyraz')");
  40. }
  41. }
  42. }
  43. }
  44. }
  45. }
  46. }
  47. }}
  48.  
  49.  
  50.  
  51. ?>


podpowiedzcie prosze jak stan wprowadzic

usunalem pole ID calkowicie.

teraz wcale nie dodaje nic LOL
nospor
Cytat
podpowiedzcie prosze jak stan wprowadzic
Skoro robisz tak skomplikowane zadanie, to mógłbyś chociaż wiedzieć jak zapisać wartości zmiennych do pliku. To naprawdę prosta sprawa smile.gif

Tworzysz plik np. o tresci początkowej:
0:0:0:0:0:0:0:0
Tyle stanów ile masz tych swoich pętli.

i w każdym obrocie pętli nadpisujesz ten plik wartosciami zmiennych na daną chwilę.

Nie dodaje? No to moze masz blad. Wyswietl go sobie
$dodaj = mysql_query("INSERT INTO `generator` (haslo) VALUES ('$wyraz')") or die(mysql_error());
włącz trochę samodzielności.
konradkw
wiem jak zapisac dane do pliku ale nie rozumiem do konca samej koncepcji stanu ..
wiec zapisuje tylko ostatni wynik a nie calosc?

mozecie zerknac na kod kilka postow wyzej i poradzic gdzie mam blad ze nie dodaje nic teraz .. ? dzieki bardzo!
nospor
Cytat
mozecie zerknac na kod kilka postow wyzej i poradzic gdzie mam blad ze nie dodaje nic teraz .. ? dzieki bardzo!
Przecież ci napisałem co masz zrobić!
Cytat
Nie dodaje? No to moze masz blad. Wyswietl go sobie
$dodaj = mysql_query("INSERT INTO `generator` (haslo) VALUES ('$wyraz')") or die(mysql_error());
włącz trochę samodzielności.
Oczekujesz byśmy byli poważni, to i ty bądź poważny.
konradkw
User has exceeded the 'max_questions' resource (current value: 400000)
LOL

chyba jednak tylko plik wchodzi w gre ...

ja jestem powazny, zwyczajnie nie wiem tyle co wy, dlatego tutaj pisze. uczylem sie php sam od zera a jedyna pomoca jaka mialem byliscie Wy.

chyba ze macie jakies inne pomysly?
_Borys_
Po co sprawdzać w bazie czy jest czy nie ma, baza tylko do zapisywania powinna służyć w tym przypadku, ustawić algorytm php tak aby pobierał kolejne wartości z tablic. Zrobić 8 identycznych tablic, jeśli ma być 8 kombinacji i po kolei pętle zagnieżdżające.
konradkw
przyznam sie ze nie do konca rozumiem o co Ci chodzi ... rozumiem ze chcesz sprawdzic czy spis juz byl dodany zanim skrypt wogole zacznie dodawac ale to wymaga pracy lokalnej bardziej niz na bazie i teraz czy takie tablice pomieszcza wszystko - zakladam ze sa przechwywane w pamieci przegladarki / serwera .. ? dodatkowo nie wiem czy dobrze zrozumiales o co mi chodzi - 8 jest znakow z czego kazdy moze byc kazdym mozliwym z predefiniowanej tablicy w ciagach a kombinacji jest bardzo duzo.
_Borys_
Nic nie sprawdzam czy był dodany czy nie ani w bazie ani w php, po prostu 8 tablic jest i pętle pobierają wartości z tych tablic po kolei, i nic się nie powtórzy, najpierw z wszystkich tablic pierwsza wartość potem z pierwszych 7 tablic pierwsza wartość a z ostatniej druga itd.
konradkw
nie bardzo ropzumiem, mozesz to w kodzie pokazac prosze?
_Borys_
Przykład dla trzech kombinacji:
  1. <?php
  2. $t1 = $t2 = $t3 = array('a','b','c','d','e');
  3. for($i1 = 0,$x1 = count($t1);$i1 < $x1;$i1++){
  4. for($i2 = 0,$x2 = count($t2);$i2 < $x2;$i2++){
  5. for($i3 = 0,$x3 = count($t3);$i3 < $x3;$i3++){
  6. echo $t1[$i1].$t2[$i2].$t3[$i3].'<br />';
  7. }
  8. }
  9. }
  10. ?>
nospor
I czym to się niby różni od tego co już jest teraz? Nie licząc faktu, że zamiast jednej tablicy robisz 8 takich samych, to niczym innym to się nie różni....
_Borys_
Jest krócej, napewno szybciej i bez sprawdzania czy już taki ciąg istnieje.
nospor
He? Krócej? Przecież Ty nic nie skróciłeś. Nic a nic. A jedynie wydłużyłeś, bo zamiast jednej tablicy generujesz 8. Żadnej więcej poprawki nie zrobiłeś

Wywalić z kodu autora sprawdzanie, i jest dokładnie to samo ino że bez bezsensownych 8 tablic....
  1.  
  2.  
  3.  
  4. $znaki = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "W", "X", "Y", "Z", "V","a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "y", "x", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
  5.  
  6.  
  7.  
  8. $count = count($znaki);
  9.  
  10. $operacje = 0;
  11.  
  12.  
  13.  
  14. for($i=0;$i<$count;$i++)
  15.  
  16. {
  17.  
  18. for($g=0;$g<$count;$g++)
  19.  
  20. {
  21.  
  22. for($h=0;$h<$count;$h++)
  23.  
  24. {
  25.  
  26. for($i2=0;$i2<$count;$i2++)
  27.  
  28. {
  29.  
  30. for($g2=0;$g2<$count;$g2++)
  31.  
  32. {
  33.  
  34. for($h2=0;$h2<$count;$h2++)
  35.  
  36. {
  37.  
  38. for($i3=0;$i3<$count;$i3++)
  39.  
  40. {
  41.  
  42. for($g3=0;$g3<$count;$g3++)
  43.  
  44. {
  45.  
  46.  
  47.  
  48. $wyraz = $znaki[$i].$znaki[$g].$znaki[$h].$znaki[$i2].$znaki[$g2].$znaki[$h2].$znaki[$i3].$znaki[$g3];
  49. echo $wyraz;
  50. }
  51.  
  52. }
  53.  
  54. }
  55.  
  56. }
  57.  
  58. }
  59.  
  60. }
  61.  
  62. }}

Prosze, dokładnie to samo. Wywalam sprawdzanie i mam szybciej. Tak jak proponujesz. Po co w to mieszać 8 tablic?
konradkw
zgadzam sie z nospor od poczatku nie widzialem w tym rozwiazaniu do konca sensu ale myslalem ze poprostu nie wiem dosc o php.
Jak 8 tabel uchroni mniej przed duplikatami .. ?

.
foxbond
  1. $chars = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l');
  2.  
  3. $timer = getmicrotime();
  4. $c = count($chars);
  5. $db = new dbSystem($dbcfg);
  6. if (file_exists('test.txt')){
  7. $f = file_get_contents('test.txt');
  8. $lastPos = explode(':', $f);
  9. }else{
  10. $lastPos = array(0,0,0,0,0);
  11. }
  12. for ($i1=0;$i1<$c;$i1++){
  13. if ($lastPos[0] > $i1){
  14. continue;
  15. }
  16. for ($i2=0;$i2<$c;$i2++){
  17. if ($lastPos[1] > $i2){
  18. continue;
  19. }
  20. for ($i3=0;$i3<$c;$i3++){
  21. if ($lastPos[2] > $i3){
  22. continue;
  23. }
  24. for ($i4=0;$i4<$c;$i4++){
  25. if ($lastPos[3] > $i4){
  26. continue;
  27. }
  28. for ($i5=0;$i5<$c;$i5++){
  29. if ($lastPos[4] > $i5){
  30. continue;
  31. }
  32. $word = $chars[$i1].$chars[$i2].$chars[$i3].$chars[$i4].$chars[$i5];
  33. $db->query('INSERT INTO {[table]} VALUES (\''.$word.'\')', 'words');
  34.  
  35. $file = fopen('test.txt', 'w+');
  36. fwrite($file, $i1.':'.$i2.':'.$i3.':'.$i4.':'.$i5);
  37. unset($file);
  38. }
  39. }
  40. }
  41. }
  42. }
  43. echo "Czas: ".(getmicrotime()-$timer);


Kod
CREATE TABLE IF NOT EXISTS `words` (
  `word` varchar(5) NOT NULL,
  PRIMARY KEY (`word`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



Już poprawiłem, jak dla mnie działa poprawnie


Krótkie info:
wordLenght : charCount : time
5:1:0.007
5:2:0.09
5:3:0.77
5:4:1.5
5:5:13.19
5:6:34.7
5:7:83.21 ~16,807rekordów
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.