Code Monkey home page Code Monkey logo

echiquier's Introduction

Ceci est une implémentation en PHP de la formule échiquier utilisé dans les matchs de foot

Introduction

Pour lancer l’algorithme, il faut commencer par installer php 7 et composer.

Executer composer install à la racine du projet pour installer les dépendences.

Ensuite, un simple php test.php pour lancer des matchs de test.

L’idée est d’instancier les équipes comme cela par exemple :

$equipe1 = new Team("Team 1", 5); // 5 étant la position du classement.
$equipe2 = new Team("Team 2", 4);
$equipe3 = new Team("Team 3", 3);
$equipe4 = new Team("Team 4", 2);

Puis de définir contre qui chaque équipe peut jouer :

$equipe1->addPossibleRival($equipe2)->addPossibleRival($equipe3)->addPossibleRival($equipe4);
$equipe2->addPossibleRival($equipe1)->addPossibleRival($equipe3)->addPossibleRival($equipe4);
$equipe3->addPossibleRival($equipe1)->addPossibleRival($equipe2)->addPossibleRival($equipe4);
$equipe4->addPossibleRival($equipe1)->addPossibleRival($equipe2)->addPossibleRival($equipe3);

Puis de passer à get_matchs le tableau des équipes :

$results = get_matchs([$equipe1, $equipe2, $equipe3, $equipe4]);

Il suffit de lire les résulats :

foreach ($results as $result)
{
  echo $result[0]->getName() .' vs '.$result[1]->getName()."\n";
}

Ce qui nous donne :

Team 1 vs Team 2
Team 3 vs Team 4

L’algorithme en lui-même.

En se basant sur l’exemple précendant :

  1. get_matchs va trier le tableau en fonction du ranking (avec la fonction cmpRank)
  2. get_matchs_try va essayer d’associer la première équipe avec celle qui est la plus proche dans le classement et dont le match n’est pas déjà assigné (c’est l’intérêt de la méthode $team->isLock()). Il l’obtient grâce à la méthode $team->getNearRival(). Dans le sénario parfait, $team joue toujours contre $team->getNearRival()

Et si le sénario n’est pas parfait ?

Si $team->getNearRival() ne trouve aucun adversaire (typiquement, car ils sont tous déjà assigné à d’autres adversaires) :

On a eu deux idées :

  • Soit on permute le tableau trié jusqu’à trouver une solution -> Le soucis de cette solution, c’est que de permuter 21 équipes, ça a une complexité de 21 factorielle et c’est impossible.
  • Soit on mélange le tableau au hasard

Et si le sénario est impossible

Il y a des cas tout bonnement impossible à résoudre. Pour l’intant le comportement n’est pas défini.

echiquier's People

Contributors

emile-prevot-42 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.