Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Wszystkie mozliwosci
Ikky
post
Post #1





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

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


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
Go to the top of the page
+Quote Post
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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? (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Ikky
post
Post #3





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

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


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
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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. (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
Ikky
post
Post #5





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

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


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 (IMG:style_emoticons/default/tongue.gif)

Go to the top of the page
+Quote Post
Fifi209
post
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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).
Go to the top of the page
+Quote Post
f1xer
post
Post #7





Grupa: Zarejestrowani
Postów: 403
Pomógł: 68
Dołączył: 20.03.2008

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


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.
Go to the top of the page
+Quote Post
Ikky
post
Post #8





Grupa: Zarejestrowani
Postów: 120
Pomógł: 1
Dołączył: 5.07.2009

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


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 (IMG:style_emoticons/default/smile.gif)
aha i dzieki za drugi link skrypt jest wydajniejszy jakies 100 razy;p
Go to the top of the page
+Quote Post
jmail
post
Post #9





Grupa: Zarejestrowani
Postów: 352
Pomógł: 53
Dołączył: 10.08.2009

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


to może jeszcze takie rozwiązanie

http://cogo.wordpress.com/2008/01/08/strin...utation-in-php/
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 30.09.2025 - 18:25