Auteur Sujet: [php] Créer Un Calendrier De Matchs...  (Lu 5538 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne didiou

  • Connaisseur
  • ***
  • Messages: 367
    • Guichen Poker Club
[php] Créer Un Calendrier De Matchs...
« Réponse #15 le: 04 décembre 2003 à 13:46:29 »
et si tu as un nombre impair d'équipes, tu fais comment?  :D  


Hors ligne manu0086

  • Débutant
  • *
  • Messages: 59
    • http://footland.carafriends.com
[php] Créer Un Calendrier De Matchs...
« Réponse #16 le: 04 décembre 2003 à 13:52:08 »
C'est impossible :)
C'est moi qui fixe le nombre d'équipes pour que le championnat soit créé...

Et d'après mes tests, il ne pourra y avoir plus de 10 équipes par championnat... :(
autrement :
"Fatal error: Allowed memory size of 5242880 bytes exhausted (tried to allocate 11520 bytes) "
Dès que je dépasse 10 équipes, c foutu... j'utilise trop les tableaux et surtout la fonction in_array() qui avec les boucles...
Bref c galère mais je peux me contenter de cela (du moins pour le moment).

Hors ligne Penelope

  • Habitué
  • **
  • Messages: 212
    • http://
[php] Créer Un Calendrier De Matchs...
« Réponse #17 le: 04 décembre 2003 à 16:05:42 »
Bon OK, je me suis plantée.
En fait, on y est presque, il suffit de trouver la bonne formule de remplissage pour le bas.

Sauf erreur de ma part (encore ?) :  
Si i=j => non définit (pas de match contre soi-même)
Si i<j => m(i,j) = i+j-2 modulo nbEquipes
Si i>j => m(i,j) = m(nbEquipes-i+1,nbEquipes-j+1) + nbEquipes - 1


[ . 1 2 3 4 ]
[ 1 X 1 2 3 ]
[ 2 5 X 3 1 ]
[ 3 4 6 X 2 ]
[ 4 6 5 4 X ]


J'espère que c'est la bonne !
En tout cas en regardant les diagonales de cette matrice (limitée à chaque triangle),  on trouves une série de nombre paire, impaire ou un seul nombre.  C'est trop beau, donc ça doit être bon ! :D

 
[color=ff9999]Cordialement, Penelope [/color]

Hors ligne manu0086

  • Débutant
  • *
  • Messages: 59
    • http://footland.carafriends.com
[php] Créer Un Calendrier De Matchs...
« Réponse #18 le: 04 décembre 2003 à 16:25:58 »
lol malheureusement c'était trop beau pour être vrai...

[ . 1 2 3 4 ]
[ 1 X 1 2 3 ]
[ 2 5 X 3 1 ]
[ 3 4 6 X 2 ]
[ 4 6 5 4 X ]

Il y a même encore plus d'erreurs...

1ere journée : 2 vs 1 et 4 vs2
2eme journée : 3 vs 1 et 4 vs 3
... je ne continue pas plus :)

C'est pas loin pourtant, moi j'ai bien créé un tableau comme ça (avec 10 équipes) mais manuellement... et malheureusement je pense que c'est la seule et unique solution...
« Modifié: 04 décembre 2003 à 16:28:37 par manu0086 »

Hors ligne didiou

  • Connaisseur
  • ***
  • Messages: 367
    • Guichen Poker Club
[php] Créer Un Calendrier De Matchs...
« Réponse #19 le: 04 décembre 2003 à 18:35:22 »
Citer
malheureusement je pense que c'est la seule et unique solution...
Tu vois je te l'avais dit, car l'ordre des match ne respecte pas une logique mathématique, on ne peut donc pas la modéliser par une formule unique (à moins de mettre des if partout!) :D  


Hors ligne manu0086

  • Débutant
  • *
  • Messages: 59
    • http://footland.carafriends.com
[php] Créer Un Calendrier De Matchs...
« Réponse #20 le: 05 décembre 2003 à 13:16:34 »
Allez, qui va réussir à résoudre ce ptit problème très intéressant ?

C'est bien possible je pense, allez du nerf... car moi je commence à fatiguer...

Hors ligne bob413242

  • Connaisseur
  • ***
  • Messages: 461
[php] Créer Un Calendrier De Matchs...
« Réponse #21 le: 05 décembre 2003 à 17:07:53 »
tiens je te propose ça :

http://www.profvince.com/test2.php?n=5&p=2

malheureusement complexité en n^3
(oui en fait c'est pas n², donc on doit pouvoir faire mieux ^^)

mettre p=1 pour voir l'ordre de remplissage du tableau (sinon le tableau est rempli avec les restes de la division par p i.e. contient le jour du match)
« Modifié: 05 décembre 2003 à 17:56:35 par Prof Vince »

Hors ligne yannbla

  • Connaisseur
  • ***
  • Messages: 278
[php] Créer Un Calendrier De Matchs...
« Réponse #22 le: 05 décembre 2003 à 17:48:08 »
En prenant un nombre d'équipes paires, ça complique un peu l'algo car il y a des cas spécifiques...

Mais voici un code qui fonctionne :
<?php

function GetAdversaire($Equipe, $Jour, $NbrEquipes)
{
if($Equipe == 0)
{
  if($Jour % 2) // Jours Impairs
  {
   return (($Jour + 1) / 2);
  }
  else // Jours Pairs
  {
   return ($NbrEquipes / 2) + ($Jour / 2);
  }
}
else
{
  $Res = (($NbrEquipes - $Equipe) + $Jour) % ($NbrEquipes - 1); // Cas général
  if($Res == $Equipe) return 0;          // Cas rencontre équipe de base
  if($Res == 0) return ($NbrEquipes - 1);       // Cas rencontre équipe N-1 (à cause du saut de l'équipe de base)
  return $Res;
}
}

$NbrEquipes = 10; // Nombre d'équipe

// Boucle sur les équipes
for($e=0; $e < $NbrEquipes; $e++)
{
// Boucle sur les jours
for($j=0; $j < ($NbrEquipes - 1); $j++)
{
  echo "Jour ".($j+1)." :  $e Vs ". GetAdversaire($e, $j, $NbrEquipes) ."<br>";
}
echo "<br>";
}
?>

Ca ne bouffe pas de mémoire (pas de tableau à N dimensions) mais tu peux t'en servir pour remplir un tableau.

Le résultat :
Citer
Jour 1 : 0 Vs 5
Jour 2 : 0 Vs 1
Jour 3 : 0 Vs 6
Jour 4 : 0 Vs 2
Jour 5 : 0 Vs 7
Jour 6 : 0 Vs 3
Jour 7 : 0 Vs 8
Jour 8 : 0 Vs 4
Jour 9 : 0 Vs 9

Jour 1 : 1 Vs 9
Jour 2 : 1 Vs 0
Jour 3 : 1 Vs 2
Jour 4 : 1 Vs 3
Jour 5 : 1 Vs 4
Jour 6 : 1 Vs 5
Jour 7 : 1 Vs 6
Jour 8 : 1 Vs 7
Jour 9 : 1 Vs 8

Jour 1 : 2 Vs 8
Jour 2 : 2 Vs 9
Jour 3 : 2 Vs 1
Jour 4 : 2 Vs 0
Jour 5 : 2 Vs 3
Jour 6 : 2 Vs 4
Jour 7 : 2 Vs 5
Jour 8 : 2 Vs 6
Jour 9 : 2 Vs 7

Jour 1 : 3 Vs 7
Jour 2 : 3 Vs 8
Jour 3 : 3 Vs 9
Jour 4 : 3 Vs 1
Jour 5 : 3 Vs 2
Jour 6 : 3 Vs 0
Jour 7 : 3 Vs 4
Jour 8 : 3 Vs 5
Jour 9 : 3 Vs 6

Jour 1 : 4 Vs 6
Jour 2 : 4 Vs 7
Jour 3 : 4 Vs 8
Jour 4 : 4 Vs 9
Jour 5 : 4 Vs 1
Jour 6 : 4 Vs 2
Jour 7 : 4 Vs 3
Jour 8 : 4 Vs 0
Jour 9 : 4 Vs 5

Jour 1 : 5 Vs 0
Jour 2 : 5 Vs 6
Jour 3 : 5 Vs 7
Jour 4 : 5 Vs 8
Jour 5 : 5 Vs 9
Jour 6 : 5 Vs 1
Jour 7 : 5 Vs 2
Jour 8 : 5 Vs 3
Jour 9 : 5 Vs 4

Jour 1 : 6 Vs 4
Jour 2 : 6 Vs 5
Jour 3 : 6 Vs 0
Jour 4 : 6 Vs 7
Jour 5 : 6 Vs 8
Jour 6 : 6 Vs 9
Jour 7 : 6 Vs 1
Jour 8 : 6 Vs 2
Jour 9 : 6 Vs 3

Jour 1 : 7 Vs 3
Jour 2 : 7 Vs 4
Jour 3 : 7 Vs 5
Jour 4 : 7 Vs 6
Jour 5 : 7 Vs 0
Jour 6 : 7 Vs 8
Jour 7 : 7 Vs 9
Jour 8 : 7 Vs 1
Jour 9 : 7 Vs 2

Jour 1 : 8 Vs 2
Jour 2 : 8 Vs 3
Jour 3 : 8 Vs 4
Jour 4 : 8 Vs 5
Jour 5 : 8 Vs 6
Jour 6 : 8 Vs 7
Jour 7 : 8 Vs 0
Jour 8 : 8 Vs 9
Jour 9 : 8 Vs 1

Jour 1 : 9 Vs 1
Jour 2 : 9 Vs 2
Jour 3 : 9 Vs 3
Jour 4 : 9 Vs 4
Jour 5 : 9 Vs 5
Jour 6 : 9 Vs 6
Jour 7 : 9 Vs 7
Jour 8 : 9 Vs 8
Jour 9 : 9 Vs 9
« Modifié: 05 décembre 2003 à 17:48:16 par yannbla »

Hors ligne manu0086

  • Débutant
  • *
  • Messages: 59
    • http://footland.carafriends.com
[php] Créer Un Calendrier De Matchs...
« Réponse #23 le: 09 décembre 2003 à 10:33:56 »
euuuh merci pour vos aides mais j'ai créé un tableau manuellement et me suis limité à 10 équipes.

euuuh yannbla, un ptit problème à la fin :)
Jour 9 : 9 Vs 9

Mais merci pour ta fonction

Hors ligne manu0086

  • Débutant
  • *
  • Messages: 59
    • http://footland.carafriends.com
[php] Créer Un Calendrier De Matchs...
« Réponse #24 le: 09 décembre 2003 à 10:43:36 »
Prof Vince, il y a une petite erreur...

[3-4] : 3
[4-3] : 8
[0-3] : 3

Le jour 3...

Mais si on met un nb d'équipe pair, tout a l'air de marcher :)

Stppppppp, quel est ton code ? :)