Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Generowanie meczy losowo,
djbarca
post 29.11.2009, 13:08:46
Post #1





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


Witam wszystkich! Mam problem na rozwiązanie którego mam bardzo mało czasu dlatego o pomoc zwracam się tutaj smile.gif
postaram sie w miare jasno przedstawic ocb.

mam tablice $tab w niej identyfikatory graczy
mam tablice $wyk w niej lista graczy, ktorzy nie moga na siebie trafic


przykładowe wypełnienie tablic
$tab = array('1','2','3','4','5','6','7','8','9','10'); - to sa identyfikatory graczy
$wyk = array('1-2','3-4','5-6','7-8','9-10');

i muszę wylosować pary dokładnie z 10 zawodników - 5 par. w taki sposób aby nie była to para z tablicy $wyk
zacząłem pisać coś takiego , ale nie za bardzo mi to chce działać
  1.  
  2. //losuje liczbe losowo w taki sposob aby nie powtarzala sie
  3. function l($ilosc,$gracz_aktualny,$wyk,$tab)
  4. {
  5. if (count($_SESSION['liga_rand_memory'])==$ilosc)
  6. {
  7. return 1;
  8. }
  9. else
  10. {
  11. while (!$ok)
  12. {
  13.  
  14. $a = rand(1,$ilosc);
  15. if (!in_array($a,$_SESSION['liga_rand_memory']) && $a!=$gracz_aktualny)
  16. {
  17. $ok=TRUE;
  18.  
  19. }
  20. }
  21. $_SESSION['liga_rand_memory'][] = $a;
  22. return $a;
  23. }
  24. }
  25.  
  26. function generuj($tab,$wyk)
  27. {
  28.  
  29. $ilosc_gracz = count($tab)-1;
  30. echo "<table border=1>";
  31. var_dump($wyk);
  32. foreach ($tab as $key => $gracze)
  33. {
  34.  
  35.  
  36. $a=l($ilosc_gracz,$gracze,$wyk,$tab);
  37. if (!in_array($tab[$a],$_SESSION['zagrali']) && !in_array($gracze,$_SESSION['zagrali']) && $gracze!=$tab[$a])
  38. {
  39. echo "
  40. <tr ".((in_array($gracze."-".$tab[$a],$wyk) || in_array($tab[$a]."-".$gracze,$wyk)) ? " style=color:red;" : " | ").">
  41. <td>Gracz($gracze)[wartosc z foreach]:</td>
  42. <td>".sprawdz_login_id($gracze)." </td>
  43. <td>wylosowal($a)[wartosc losowa odwolanie do pozycji w tab]: </td>
  44. <td>".sprawdz_login_id($tab[$a])." </td>
  45. </tr>";
  46.  
  47. $_SESSION['zagrali'][] = $tab[$a];
  48. $_SESSION['zagrali'][] = $gracze;
  49. }
  50.  
  51. }
  52. echo "</table>";
  53. unset($_SESSION['liga_rand_memory']);
  54. unset($_SESSION['zagrali']);
  55. }
  56.  


hm. jak to moge zrobic . ..
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
tvister
post 29.11.2009, 13:36:32
Post #2





Grupa: Zarejestrowani
Postów: 253
Pomógł: 29
Dołączył: 18.08.2008

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


Uwaga freestyle
  1. $flaga = false;
  2. while(!$flaga){
  3. $x = array_rand($tab,1);
  4. $y = array_rand($tab,1);
  5. if (!in_array($x.'-'.$y,$wyk) && !in_array($y.'-'.$x,$wyk) && $x != $y) $flaga = true;
  6.  
  7. }
  8.  


ps. dlaczego do proc I podajesz tabl $wyk, $tab skoro ich nie wykorzystujesz questionmark.gif


--------------------
Kto rano wstaje ten leje jak z cebra.
Go to the top of the page
+Quote Post
djbarca
post 30.11.2009, 20:56:49
Post #3





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

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


  1. $flaga = false;
  2. while(!$flaga){
  3. $x = array_rand($tab,1);
  4. $y = array_rand($tab,1);
  5. if (!in_array($x.'-'.$y,$wyk) && !in_array($y.'-'.$x,$wyk) && $x != $y) $flaga = true;
  6. }

no ok. ale co mi to da x] to mi wylosuje z tablicy losowy jeden rekord z X i Y niepowtarzajacy sie . a mi chodzi o to zeby dla kazdego gracz tj. dla wszystkich wylosowal
po jednym meczu w takim ukladzie aby zaden nie byl x-y || y-x w tabeli $wyk.

Udalo mi sie to zrobic moim sposobem, ale w pewnym momencie gracze zostali tak rozlosowani ze nie ma juz zadnego gracza spelniajacego wszystkie warunki i system sie zwiesza.
podam przyklad:

gracze:
a,b,c,d,e,f,g,h

przykladowe tablica $wyk
a-b c-d e-f g-h (moze byc inaczej, ale zeby nie nie pomylic)

system generuje:
a-d c-f e-b i w tym momencie nastapi zwieszenie bo gracze: a,b,c,d,e,f maja juz mecze a gracze g, h zostali z mozliwych i jest warunek ze ze soba nie moga zagrac

Problem: jest taki ze musze to jakos rozwiazac aby w takim wypadku gracze zostali podmienieni lub jakos inaczej

przykladowe wlasciwe wygenerowanie:
a-c b-e d-h g-f
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: 18.07.2025 - 18:48