Newsgroup: it.comp.www.php
Titolo: Come accoppiare le squadre di un torneo in modo logico?

Volevo scrivermi uno scriptino per generare le accoppiate delle
squadre di un torneo (beach volley).
Si disputa 2vs2 oppure 3vs3 (a seconda del numero di persone che si
iscrivono).
Non conosco ancora il numero di squadre ma saranno dalle 5 alle 10
squadre.
Ho due varianti del torneo... intanto vorrei soffermarmi sul calssico
(poi al limite apro un altro thread)
Le squadre si affrontano tutte e non devono giocare due partite in
fila (quindi ci sarà da gestire un "riposo")
Sono in alto mare...
Per il caso 1) sono arrivato al basilare e classico Array di squadre
che scompongo e accoppio:
foreach ( $squadre as $key => $value )
{
	for ($b = 0 ; $b < count($squadre) ; $b++)
	{
		if ( $a != $b )
		{
			echo  $squadre[$a] ." - ". $squadre[$b] . "<br>";
... ... . ..
Ovviamente non c'è nessuna logica di smistamento... Il risultato
infatti è un orrendo
1-2
1-3
1-4
1-n
.. .. ....
2-1 (che fra l'altro è la stessa partita della prima riga!!)
2-3
2-4
2-n
... ...
Come si potrebbe sistemare?

 Come si potrebbe sistemare?
Allora ti do' un primo aiutino sull'"accoppiata globale"
supponiamo di avere un array di nomi di squadre:
$squadra = array();
$squadra[]= "I migliori";
$squadra[]= "Gli storpi";
....
$squadra[]= "I Simpsons";
il cliclo per fare il girone unico e accoppiando tutte le squadre si
ottiene ad esemplio cos�:
for( $i = 0, $max = count($squadra); $i < $max; ++$i )
   for( $j = $i+1; $j < $max; ++j )
      echo $squadra[$i] ." vs ". $squadra[$j] . "<br>";
poi la cosa si migliora storicizzando le coppie in un array che puoi
mescolare e in seguito stampare
in fine se questo array � associativo e tiene salvati anche gli id puoi
fare i turni tenendo conto di volta in volta delle squadre che sono state
inserite
se il numero di squadre fosse dispari allroa come dici tu una squadra non
pu� giocare allora la cosa si complica un po' ma un'idea partorita proprio
in quest'istante mentre stavo scrivendo potrebbe essere quella di inserire
una squadra fittizzia che avr� il "ruolo" di turno di riposo (alla quale
puoi dare il medesimo nome) e in questo modo risolvi la questione che tutti
ne devono rispettare uno... e dopo di ch� il pi� � fatto, se nei vari
tutrni cicli in modo che le squadre devono essere una per turno questo vale
anche epr quella che "gioca" contro il turno di riposo e mi sembra che
torni tutto ;-)
Se invece il numero delle squadre fosse pari non c'� bisogno del turno di
riposto
Spero di esserti stato d'aiuto
Fammi sapere  ;-)


Questo metodo l'avevo già visto su qualche calendario partite... e può
andare bene... non ci vedo controindicazioni

 andare bene... non ci vedo controindicazioni
ah, ho avuto una bella idea allora  :)


Nello scrivere ti scordato il $ davanti a partita[]
Cmq se vado fuori dai cicli for e scrivo ad esempio   echo
$partita[1];
ottengo ...niente.. mi scrive, su pagina bianca, "Array"
Se scrivo     print_r($partita)
dato che avevo creato l'array in questo modo:
$squadra = array('Sq1','Sq2','Sq3','Sq4');
ottengo
Array ( [0] => Array ( [squadra1] => 0 [squadra2] => 1 [echo] => Sq1
vs Sq2 ) [1] => Array ( [squadra1] => 0 [squadra2] => 2 [echo] => Sq1
vs Sq3 ) [2] => Array ( [squadra1] => 0 [squadra2] => 3 [echo] => Sq1
vs Sq4 ) [3] => Array ( [squadra1] => 1 [squadra2] => 2 [echo] => Sq2
vs Sq3 ) [4] => Array ( [squadra1] => 1 [squadra2] => 3 [echo] => Sq2
vs Sq4 ) [5] => Array ( [squadra1] => 2 [squadra2] => 3 [echo] => Sq3
vs Sq4 ) )

 ottengo ...niente.. mi scrive, su pagina bianca, "Array"
s� esatto, perch� in effetti � un array...
devi mettere $partita[1]['echo'] se ti interessa vedere la seconda partita,
$partita[1]["squadra1"] per vedere l'identificativo della prima squadra
ecc...
capito questo, ma non far far e tutto a me ;)
devi prenderti un altro bel ciclo e un altro bel array vuoto, in cui gli
"pushi" dentro gli indici delle squadre che via via netti nel girone e nel
ciclo che ti stampa i gironi controlli che la partita che stai per stampare
non abbia squadre dentro l'array, in caso contrario salti e vai al giro
sucessivo, esaurito il numero di squadre resetti l'array e riparti...
in questo modo ti sei fatto i turni e se hai avuto l'accorgimento di
mettere la squadra fittizzia "turnio di riposo" hai anche finito  :)


Mi prendo la nottata per provarci da solo non voglio essere
invadente... :) Mi hai già aiutato molto...
Cosciente delle mie scarse conoscenze prevedo che andrò poco
lontano... faccio un po' di prove poi ti dico dove mi inchiodo... :)
Intanto ti ringrazio...

[cut]
ti ho mandato un'email, perch� temo che andando avanti, rischieremmo un OT
un po' eccessivo...