Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Generator wyrazów, Mały problem
Rafael6666
post 24.08.2007, 13:26:01
Post #1





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 20.10.2006

Ostrzeżenie: (10%)
X----


Witam...

Szukam skryptu, algorytmu, który generowałby wszystkie możliwe kombinacje wyrazów 1, 2, 3 literowych itd. Chodzi mi o to, że wpisywałoby się dowolną liczbę i skrypt generowałby wszystkie możliwe kombinacje.

Napisałem coś takiego:

  1. <?php
  2. $q = 2;
  3. $a = 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');
  4. $b = pow(24, $q);
  5. while(1) {
  6. $explode = explode('.', $add);
  7. if (count($explode) == $b) {
  8. array_pop($explode);
  9. break;
  10. }
  11. $c = '';
  12. for($i = 0; $i < $q; $i++) {
  13. $random = rand(0, count($a) - 1);
  14. $c .= $a[$random];
  15. if (strlen($c) == $q) {
  16. if (!eregi($c, $add)) {
  17. $add .= $c.'.';
  18. }
  19. }
  20. }
  21. }
  22. print_r($explode);
  23. ?>


Niestety ten skrypt nie poradzi sobie z liczbą większą niż 2...

Jeżeli ktoś potrafi mi pomóc, to proszę go o pomoc, a ja sam przy okazji pokombinuję smile.gif ...


--------------------
Kompleksowe i profesjonalne tworzenie stron www
Go to the top of the page
+Quote Post
Fixus
post 24.08.2007, 15:01:35
Post #2





Grupa: Zarejestrowani
Postów: 295
Pomógł: 9
Dołączył: 8.02.2006

Ostrzeżenie: (0%)
-----


zdajesz sobie sprawę z tego, że z racji bardzo dużej ilości kombinacji skrypt może działać bardzo długo?
Go to the top of the page
+Quote Post
TrevorGryffits
post 24.08.2007, 15:49:47
Post #3





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 29.07.2007
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


Jeżeli chcesz, żeby algorytm "działał" pod każdą liczbą wykorzystaj rekurencję. Tylko, że takie skrypty to "skrypty zabójcy";) Całą funckję( z tego co wymyśliłem) można chyba wykonać za pomocą 2 pętli foreach i jednego ifa.
Go to the top of the page
+Quote Post
qqrq
post 28.08.2007, 09:24:59
Post #4





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


W sumie wystarczy tak:

  1. <?php
  2. function Words($length)
  3. {
  4.  $chars = 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');
  5.  $chlen = count($chars);
  6.  $combs = array();
  7.  $indx = array_fill(0,$length,0);
  8.  while (true)
  9.  {
  10. $combo = '';
  11. foreach ($indx as $ind)
  12.  $combo .= $chars[$ind];
  13. $combs[] = $combo;
  14. for ($k=$length-1;$k>-1;$k--)
  15. {
  16.  $indx[$k]++;
  17.  if ($indx[$k] != $chlen)
  18. break;
  19.  elseif ($k == 0)
  20. return $combs;
  21.  else
  22. $indx[$k] = 0;
  23. }
  24.  }
  25. }
  26. ?>


Do 4 jest OK, z 5 w minutę nie daję rady, no ale jak wszystkie kombinacje to wszystkie... smile.gif


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.07.2025 - 08:20