Dans un épisode de la série Big Bang Theory, Sheldon parle du jeu : Pierre feuille ciseaux lézard Spock. Qui est une version améliorée du jeu : Pierre feuille ciseaux. Les règles sont les suivantes :
- Les ciseaux (0) coupent la feuille (1)
- La feuille (1) couvre la pierre (2)
- La pierre (2) écrase le lézard (3)
- Le lézard (3) empoisonne Spock (4)
- Spock (4) casse les ciseaux (0)
- Les ciseaux (0) décapitent le lézard (3)
- Le lézard (3) mange la feuille (1)
- La feuille (1) réfute Spock (4)
- Spock (4) vaporise la pierre (2)
- La pierre (2) écrase les ciseaux (0)
Pour les besoins de notre projet, nous considérons aussi la règle suivante :
Lors d'une égalité, le gagnant est le joueur dont le nom est avant dans l'ordre alphabétique. Dans un monde parallèle, il y aura bientôt des tournois de ce jeu qui vont se dérouler. Et une équipe de data-scientist a réussis à trouver la liste des coups que vont jouer chacun des joueurs pour chaque round du tournois. Ils ont stocké ces coups dans des fichiers players_infos.csv avec le format suivant :
Dans l'exemple ci-dessus :
- John jouera le signe PAPER lors son 1er duel
- John jouera le signe LIZARD lors son 2ème duel
- John jouera le signe ROCK lors son 3ème duel
- Jack jouera le signe SPOCK lors son 1er duel
- Jack jouera le signe PAPER lors son 2ème duel
- Jack jouera le signe ROCK lors son 3ème duel
- Henry jouera le signe SCISSORS lors son 1er duel
- Henry jouera le signe SPOCK lors son 2ème duel
- Henry jouera le signe LIZARD lors son 3ème duel
- Paul jouera le signe PAPER lors son 1er duel
- Paul jouera le signe ROCK lors son 2ème duel
- Paul jouera le signe SPOCK lors son 3ème duel
Au début d'un tournois, nous avons la liste des duels pour le premier round (round numéro 0) : dans le fichier round_0.csv. Il contient la liste des premiers matches qui vont se dérouler. Avec le format suivant :
Avec les données que nous avons ci-dessus, le tournoi se déroulera comme ceci :
Henry : SCISSORS \
Jack : PAPER \
Jack : SPOCK / \
John is the winner
Paul : PAPER \ /
John : LIZARD /
John : PAPER /
Nous voulons un programme qui nous trouve le gagnant d'un tournois à partir de deux fichiers : players_infos.csv et round_0.csv. Le programme doit afficher le nom du vainqueur du tournois de la manière suivante :
TOURNAMENT WINNER : Le programme doit aussi écrire la liste des matches qui se sont déroulés dans un fichier matches.csv avec les informations suivantes :
Round : numéro du round
Winner: gagnant du match
Player 1 name : Nom du joueur 1
Player 1 sign : Signe joué par le joueur 1
Player 2 name : Nom du joueur 2
Player 2 sign : Signe joué par le joueur 2
Aides
-
Trouvez un algorithme Réfléchissez aux différentes étapes que votre programme devra faire pour répondre à l'énoncé.
-
Codez un duel Créez une fonction (ou une classe avec méthodes) qui permet de trouver le coup d'un duel.
-
Ouvrez les fichiers Chechez sur le google le moyen d'ouvrir et lire des fichiers csv en python. Puis, ouvrez les fichiers : players_infos.csv et round_0.csv et stockez leurs contenus dans dans des collections (à vous de choisir les plus adapté).
Indices : open, csv, DictReader.
- Codez le déroulement d'un tournoi Ecrivez le code qui reproduit le déroulement d'un tournoi à partir des données des fichiers csv. Ecrivez les différents duels dans le fichier csv des matches. Une fois le tournoi terminé, affichez le vainqueur.
Indice : DictWriter
Note: Le fichier contenant le code exécutable sur la plateforme Datascientist.fr est le fichier code.py
.
Il y a 12 modes d'exécution du programme:
mode__0
:Async Tournaments + Multithread Battles + Async Write
mode__1
:Async Tournaments + Multithread Battles + Sync Write
mode__2
:Multithread Tournaments + Multithread Battles + Async Write
mode__3
:Multithread Tournaments + Multithread Battles + Sync Write
mode__4
:Multithread Tournaments + Sequential Battles + Async Write
mode__5
:Multithread Tournaments + Sequential Battles + Sync Write
mode__6
:Async Tournaments + Sequential Battles + Async Write
mode__7
:Async Tournaments + Sequential Battles + Sync Write
mode__8
:Sequential Tournaments + Multithread Battles + Async Write
mode__9
:Sequential Tournaments + Multithread Battles + Sync Write
mode_10
:Sequential Tournaments + Sequential Battles + Async Write
mode_11
:Sequential Tournaments + Sequential Battles + Sync Write
Pour lancer le programme dans un mode d'exécution donné, utilisez la commande suivante:
$ python3 ./code_full.py <mode number>