Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wszystkie mozliwosci
Forum PHP.pl > Forum > Przedszkole
Ikky
mam tablice z pojedyńczymi cyframi/literamy
jak moge z nich dostac wszystkie mozliwosci

np mam

[0] => w
[1] => 5
[2] => r

i chce miec

w5r
wr5
5wr
5rw
rw5
r5w
Fifi209
Przy trzech elementach to nie problem...

Ale weź policz np.
!5

Robiłem kiedyś taki skrypt jednak użycie procka przy !8 wynosiło jakieś 40% na rdzeń, i pochłaniał jakieś 800mb pamięci.

W ogóle po co Ci? biggrin.gif
Ikky
No niestety nie ma jak inaczej tego zrobić :/
będzie maksymalnie 7 znaków do pomieszania co daje nam troche mozliwosci no ale co zrobić...
jak bedzie bardzo zamulalo to cos sproboje innego wymyslec ale tymczasem
moglbys podac rozwiązanie lub jakis link/ nazwe funkcji
Fifi209
Nie wiem czy jest gotowa funkcja jednak ja robiłem tak:

Obliczałem silnię (abym wiedział ile możliwości muszę uzyskać)
Potem wykonywałem pętlę dopóki ilość elementów w tablicy (count) nie była równa silni.

Co do tworzenia tablicy:
implode + in_array + array_rand.

Jakbyś miał problemy to wal. haha.gif

Wyskrobałem coś takiego:

  1. <?php
  2.  
  3. function silnia($x) {
  4. if ($x > 1) {
  5. $y=1;
  6. for ($i=2; $i <= $x; $i++) {
  7. $y *= $i;
  8. }
  9. return $y;
  10. }else{
  11. return 1;
  12. }
  13. }
  14.  
  15. $zbior = array('x', 'y', 'z');
  16. $mozliwosci = array();
  17.  
  18. $ile = silnia(3);
  19.  
  20. while (count($mozliwosci) < $ile) {
  21. $y = array_rand($zbior, 3);
  22. foreach ($y as $v) {
  23. $x .= $zbior[$v];
  24. }
  25.  
  26. if (!in_array($x, $mozliwosci)) {
  27. $mozliwosci[] = $x;
  28. }
  29. unset($x);
  30. }
  31.  
  32. echo '<pre>';
  33. print_r($mozliwosci);
  34. echo '</pre>';
  35.  
  36. ?>


I nawet dość szybko działa. Nie wiem czy optymalnie no ale... ;d
Ikky
dzieki serdeczne nawet nie dałeś mi samemu pomyśleć ;p
no rzeczywiscie skrypcik troche zamula... na shared hostingu nie ma szans go odpalic Fatal error: Maximum execution time of 30 seconds exceeded in
na dedyku chwila
i na localu sekundka tongue.gif

Fifi209
40 minut to mało na myślenie? Ja go pisałem 1/4 tego czasu.

Co do zamulania, nie dziwić się...
Wybierasz losowe elementy, łączysz, sprawdzasz czy takie były, jeżeli nie to dodajesz. I tak w kółko, póki nie osiągniesz liczby możliwości (silni).
f1xer
W kombinatoryce nazywa się to permutacja, wiedząc to za pomocą google i hasła array permutation php można znaleźć stronkę:
http://hell.org.ua/Docs/oreilly/webprog/pcook/ch04_26.htm
gdzie jest gotowiec do rozwiązania tego problemu.
Ikky
Cytat(fifi209 @ 15.08.2009, 21:20:28 ) *
40 minut to mało na myślenie? Ja go pisałem 1/4 tego czasu.

Co do zamulania, nie dziwić się...
Wybierasz losowe elementy, łączysz, sprawdzasz czy takie były, jeżeli nie to dodajesz. I tak w kółko, póki nie osiągniesz liczby możliwości (silni).

nie sprawdzałem co sekunde czy ktoś odpisał tak czy tak to ze mi nie dałes czasu nie miało żadnego negatywnego wydzwieku byłem mile zaskoczony smile.gif
aha i dzieki za drugi link skrypt jest wydajniejszy jakies 100 razy;p
jmail
to może jeszcze takie rozwiązanie

http://cogo.wordpress.com/2008/01/08/strin...utation-in-php/
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.