Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generator wyrazów
Forum PHP.pl > Forum > PHP
Rafael6666
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 ...
Fixus
zdajesz sobie sprawę z tego, że z racji bardzo dużej ilości kombinacji skrypt może działać bardzo długo?
TrevorGryffits
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.
qqrq
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
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.