Rezultate 1 la 5 din 5

Subiect: Probleme algoritm PHP

  1. #1
    Avatarul lui Cristi G
    Cristi G este deconectat Membru SeoPedia
    Reputatie:
    49
    Data înscrierii
    16th April 2009
    Locaţie
    Iasi
    Vârstă
    33
    Posturi
    1.664
    Putere Rep
    49


    Implicit Probleme algoritm PHP

    Am nevoie de un algoritm, dar oricat m-am chinuit nu mi-a iesit..

    Sa zicem ca am 6 persoane, 1 2 3 4 5 6

    Vreau sa desfasor o competitie si vreau sa realizez meciuri intre useri a.i. sa joace fiecare cu fiecare, pe sistemul etape, ca la campionatele de fotbal.

    Deci, la 6 jucatori, voi avea 5 etape de cate 3 meciuri fiecare... 5 etape fiindca fiecare jucator trebuie sa joace 5 meciuri..

    Fiecare trebuie sa joace cu fiecare doar o singura data, iar un jucator trebuie sa apara intr-o etapa doar o singura data cu un singur meci.


    Exemplu pentru 6 jucatori:

    Etapa 1:

    1-2
    3-4
    5-6

    Etapa 2:

    1-3
    2-5
    4-6

    Etapa 3:

    1-4
    2-6
    3-5

    Etapa 4:

    1-5
    2-4
    3-6

    Etapa 5:

    1-6
    2-3
    4-5


    Vreau un algoritm care sa-mi faca aceste etape automat, orice numar par i-as da.

    Playerii ii am intr-un array $p.
    Meciurile vreau sa le tin tot intr-un array $m, care va contine idhome, idaway, etapa

    De ex meciul 1 va fi : $m[0]['idhome'] = 1; $m[0]['idaway'] = 2; $m[0]['etapa'] = 1;

    Ce am realizat pana acum si merge doar pe o parte din exemple:

    Cod PHP:
    <?
    $jucatori 
    6;
    $m = array();
    $etapa = array();
    $count 1;
    for(
    $i=1$i<=$jucatori$i++)
        for(
    $j=$i+1$j <= $jucatori$j++)
        {
            
    $m[$count]['idhome'] = $i;
            
    $m[$count]['idaway'] = $j;
            
    $m[$count]['phase'] = 0;
            
    $count++;
        }
    $meciuri $jucatori * ($jucatori -1) / 2;
    $nretapa 1;
    $last 2;
    $nr=0;
    while(
    $nretapa <= $jucatori -1)
    {    
    //generez pt toate etapele
        
    while(count($etapa) < $jucatori)
        {     
            
    //in array-ul $etapa bag o noua valoare pt fiecare user care a fost bagat corect in etapa curenta..si daca numarul jucatorilor inscrisi este identic cu nr de jucatori, trec la etapa urmatoare
            
    for($i=1$i <= $meciuri && count($etapa) < $jucatori$i++)
            {
                if(!
    $etapa[$m[$i][idhome]] && !$etapa[$m[$i][idaway]] && $last != $i )
                {    
    //daca amandoi playerii nu au jucat in etapa curenta....in cazul in care $last exista, trebuie sa ignoram elementul $last, intrucat se face un loop infinit - ultimul meci e pus si nu poate fi adaugat in 2 etape
                        
    if($m[$i]['phase'] == '0')
                        {
                            
    //daca meciul nu exista in nicio faza
                            
    $etapa[$m[$i][idhome]] = 1;
                            
    $etapa[$m[$i][idaway]] = 1;
                            
    $m[$i]['phase'] = $nretapa;
                            
    $last $i;
                            
    $nr ++;
                        }
                        else
                        if(
    $last && (count($etapa) + 2) == $jucatori)
                        { 
                            
    //daca meciul este ultimul si nu mai exista alte posibilitati, resetam ultimul meci avut pentru a incerca alte posibilitati.
                            
    $m[$last]['phase'] = 0;
                            unset(
    $etapa[$m[$last][idhome]]);
                            unset(
    $etapa[$m[$last][idaway]]);
                            
    $i=1;
                            
    $nr--;
                        }
                }
            }
        }
        
    $etapa = array();
        
    $nretapa ++;
        
    //urmatoarea etapa si resetam last
        
    unset($last);
    }

    //******** sortarea dupa faza si intoarcerea in fazele pare, pt ca toti sa fie odata gazde odata oaspeti
    do
        {
            
    $f 1;
            for(
    $i=1$i<$meciuri$i++)
            {
                if(
    $m[$i]['phase'] > $m[$i+1]['phase'])
                {
                    
    $aux = array();
                    
    $aux $m[$i];
                    
    $m[$i] = $m[$i+1];
                    
    $m[$i+1] = $aux;
                    
    $f=0;
                }
                if(
    $m[$i]['phase'] % == 0)
                {
                    
    $aux $m[$i]['idhome'];
                    
    $m[$i]['idhome'] = $m[$i]['idaway'];
                    
    $m[$i]['idaway'] = $aux;
                }
            }
        }
    while(!
    $f);
    //******* sortarea dupa faza


    /*
    //afisarea
    echo '<br /><br /><br /><br />';
    $count = 0;
    $etapa = 1;
    echo "Etapa $etapa<br />";
    $etapa++;
    for($i=1;$i<=$meciuri;$i++)
    {    if($count == $jucatori / 2)
        {
            echo "<br />";
            echo "Etapa $etapa<br />";
            $count = 0;
            $etapa++;
        }
        echo $m[$i]['idhome'] . ' - ' . $m[$i]['idaway'] . ' ( faza: ' . $m[$i]['phase'] . ')<br />';
        $count++;
    }
    */
    ?>
    Va rog frumos, m-am chinuit cateva ore bune, si am reusit doar in proportie de 50%, dar cu un cod foarte complicat. Merge doar pe numerele: 4,6,8,16,32,64,etc. Vreau sa mearga pe orice numar par.

    Va multumesc foarte mult!
    Ultima modificare făcută de Cristi G; 12th September 2010 la 02:55.
    Imi ocup timpul uneori cu pariuri sportive si fac si web development WordPress.

  2. #2
    Avatarul lui WeaselMan
    WeaselMan este deconectat Membru SeoPedia
    Reputatie:
    39
    Data înscrierii
    22nd July 2005
    Locaţie
    weaseland
    Vârstă
    42
    Posturi
    447
    Putere Rep
    39


    Implicit

    Pai in al doilea for, in loc sa incrementezi $j cu 1, incrementezi $j cu numarul etapei.

    Astfel, in etapa 1 vei avea:
    $i (1) <-> $i + $etapa (2)
    $i (2) <-> $i + $etapa (3)
    ...

    In $etapa = 2:
    $i (1) <-> $i + $etapa (3)
    etc.

    De asemenea, ar trebui sa ai un array cu toate etapele si meciurile, e mai usor de lucrat, exemplu:

    Cod PHP:
    $etape[1] = array();

    for(
    $i...):
        for
    $j...):
            
    $etape[1]['meciuri'][] = array('echipe' => array($i$i));
        endfor;
    endfor; 
    Eventual in acel array poti sa mai bagi si alte valori, cum ar fi home, away, etc.
    (\_/) I like bunnies
    (>.<) ...and people with b00bs. But especially bunnies with b00bs xD

  3. #3
    Avatarul lui Cristi G
    Cristi G este deconectat Membru SeoPedia
    Reputatie:
    49
    Data înscrierii
    16th April 2009
    Locaţie
    Iasi
    Vârstă
    33
    Posturi
    1.664
    Putere Rep
    49


    Implicit

    Nu merge asa. De exemplu la 6 jucatori ia asa

    1-2
    3-4
    5-6

    1-3
    2-4
    5-6(din nou???!!)
    Imi ocup timpul uneori cu pariuri sportive si fac si web development WordPress.

  4. #4
    Avatarul lui Stelian
    Stelian este deconectat Membru SeoPedia
    Reputatie:
    37
    Data înscrierii
    6th February 2006
    Locaţie
    Bucuresti
    Vârstă
    43
    Posturi
    331
    Putere Rep
    37


    Implicit

    Salut,

    Pana la urma ai gasit vreun algoritm?

  5. #5
    Avatarul lui Cristi G
    Cristi G este deconectat Membru SeoPedia
    Reputatie:
    49
    Data înscrierii
    16th April 2009
    Locaţie
    Iasi
    Vârstă
    33
    Posturi
    1.664
    Putere Rep
    49


    Implicit

    da, m-a ajutat un tip de pe stackoverflow
    Imi ocup timpul uneori cu pariuri sportive si fac si web development WordPress.

Informații subiect

Utilizatori care navighează în acest subiect

Momentan este/sunt 1 utilizator(i) care navighează în acest subiect. (0 membrii și 1 vizitatori)

Thread-uri Similare

  1. Nou algoritm Adsense in teste
    De Alex Dumitru în forumul Adsense
    Răspunsuri: 23
    Ultimul Post: 22nd March 2009, 13:45
  2. Update algoritm ?
    De darkstar_tfd în forumul Google
    Răspunsuri: 9
    Ultimul Post: 14th January 2009, 16:26
  3. algoritm Yahoo
    De too_night în forumul Yahoo!
    Răspunsuri: 0
    Ultimul Post: 11th January 2007, 11:46
  4. Google Cumpara Un Nou Algoritm De Cautare
    De Ben Boingeanu în forumul Stiri despre motoarele de cautare, SEO si Marketing
    Răspunsuri: 3
    Ultimul Post: 15th April 2006, 22:04
  5. Un nou algoritm?
    De Razvan Pop în forumul Google
    Răspunsuri: 32
    Ultimul Post: 27th October 2005, 16:07

Permisiuni postare

  • Nu puteţi posta subiecte noi.
  • Nu puteţi răspunde la subiecte
  • Nu puteţi adăuga ataşamente
  • Nu puteţi modifica posturile proprii
  •