Attraper 1 fromage avec de la boue
Durée2h30 + préparationObjectifs de la séance
Dans cette séance, nous augmentons légèrement la difficulté en introduisant de la boue dans le labyrinthe. Si deux cases adjacentes dans le labyrinthe sont séparées par de la boue, il faut plus d’un tour pour passer de l’une à l’autre, ce qui ralentit le personnage.
L’algorithme BFS vu lors de la séance précédente avait la propriété de trouver le chemin le plus court dans un graphe non pondéré, mais il ne garantit rien dans un graphe pondéré. Nous introduisons donc l’algorithme de Dijkstra, qui permet de trouver le chemin le plus court dans un tel graphe. Pour l’implémenter, nous devons introduire une nouvelle structure de données appelée le tas min (min-heap).
Les notions ci-dessus sont couvertes par quelques articles que vous devez étudier avant le cours. Dans l’activité pratique, vous devrez programmer l’algorithme de Dijkstra, afin que votre personnage puisse se déplacer d’une case à une autre dans un labyrinthe avec de la boue.
Important
Le contenu de cette séance sera évalué. Consultez les détails en bas de cette page.
Avant le cours
Pré-requis
- Assurez-vous d’avoir un algorithme BFS qui fonctionne (cf. séance 2).
Articles à étudier
-
Dans cet article, vous apprendrez à naviguer dans un graphe pondéré.
-
Dans cet article, vous apprendrez ce qu'est un tas min (min-heap), une structure de données avec des propriétés particulières.
-
Ces quiz sont là pour vous permettre de vérifier que vous avez compris les articles à étudier.
Pendant le cours
Quiz Wooclap
Comme pour les autres cours en classes inversées, nous commencerons la séance par un petit quiz Wooclap pour vérifier votre compréhension des notions, et discuter de vos interrogations. Le lien sera fourni par les enseignant(e)s dans votre classe.
Attribuer les rôles
La séance 3 est évaluée. Vous ne serez pas tou(te)s évalué(e)s sur les mêmes aspects, comme mentionné sur la page principale du projet. Avant de commencer l’activité pratique, discutez avec votre groupe pour décider qui sera responsable de quelle partie du livrable :
- Qualité du code.
- Documentation.
- Tests unitaires.
Information
Si vous êtes un binôme ou quadrinôme, veuillez SVP contacter les enseignant(e)s pour une adaptation des rôles.
Activité pratique
-
Cette activité prolonge la précédente : vous allez programmer un nouvel algorithme de parcours, l'algorithme de Dijkstra, qui permet de trouver des plus courts chemins dans un graphe pondéré.
Après le cours
Terminer l’activité pratique
- Si besoin, révisez les articles de cette séance.
- Terminez les parties obligatoires de l’activité pratique.
- Préparez le livrable mentionné ci-dessous.
Évaluation
Ce qui est évalué
Cette séance clôt la première partie du projet, qui vise à attraper un unique morceau de fromage dans le labyrinthe. Avant le début de la séance 4, vous devrez rendre un livrable contenant les codes que vous aurez produits jusque-là pour répondre à cet objectif (séance 3 incluse).
La modalité d’évaluation est décrite sur la page principale du projet. Une grille d’évaluation est également donnée plus bas sur cette page.
Comment rendre le livrable
Ces codes seront à rendre de la manière suivante :
-
Renseignez le fichier
README.mdde votre projet avec le contenu suivant (remplacez les éléments entre chevrons<...>(chevrons inclus) par ce qui est demandé). Vous pouvez intégrer des images ou schémas si nécessaire, par exemple si vous avez fait des analyses de vos programmes. Référez-vous à la documentation du langage Markdown si nécessaire.Important
SVP allez droit au but, un fichier
README.mdn’est pas un rapport de projet, c’est un document court qui permet à son lecteur de comprendre rapidement le contenu du dépôt. -
Vérifiez bien que vous avez envoyé tous vos codes et le
README.mdsur le dépôt GitLab de votre équipe.Information
Si vous avez été plus loin que le minimum requis, n’hésitez pas à inclure ces éléments supplémentaires dans votre rendu, qui seront pris en compte dans l’évaluation. Mentionnez-le dans le
README.md. -
Assurez-vous que votre enseignant(e) est bien membre de votre dépôt GitLab avec le rôle Maintainer, comme demandé lors de la séance 1.
-
L’étudiant(e) en charge de la qualité du code doit se connecter sur Moodle, et fournir :
- l’URL HTTPS de clonage de votre dépôt GitLab :

- l’identifiant du commit à évaluer :

- l’URL HTTPS de clonage de votre dépôt GitLab :
Comment nous allons l’évaluer
Afin de vous évaluer, nous allons procéder comme suit :
-
Tout d’abord, nous allons cloner votre dépôt GitLab, au commit indiqué :
-
Ensuite, nous allons recréer un environnement adapté au projet, en nous basant sur le
pyproject.tomlque vous avez fourni, et en nous assurant que les dépendances sont correctement installées : -
Enfin, nous allons ouvrir le dossier de votre projet dans VS Code, lire votre fichier
README.md, et exécuter vos scripts et tests.
Remarques très importantes
Important
Les remarques ci-dessous sont très importantes et s’appliquent à toutes les évaluations.
-
Veuillez ne pas fournir de code ou de documentation hors sujet (mention de fonctions inexistantes, etc.)
-
Attention à ce que vous mettez sur votre dépôt GitLab : n’y mettez que ce qui est nécessaire. Vous ne devez pas y mettre votre environnement virtuel ou des fichiers temporaires.
-
En plus de la qualité du code, de la documentation et des tests unitaires, nous évaluerons également votre capacité à produire un livrable. En d’autres termes, faites attention aux éléments importants suivants :
- Votre code et vos tests doivent fonctionner (reproduisez la manière dont nous allons l’évaluer pour vérifier que tout va bien).
- Assurez-vous que le livrable est complet et correspond à ce qui est demandé.
-
On vous demande de renseigner votre usage de l’IA dans le fichier
README.md. SVP soyez honnêtes et précis (modèles utilisés, méthode, etc.). Le but est de comprendre comment vous avez travaillé et de nous adapter aux besoins futurs. -
Toutefois, si l’IA est autorisée pour vous aider dans votre projet, vous restez responsables de votre livrable, qui doit correspondre à ce qui est demandé. En conséquence, un projet présentant un trop grand nombre d’incohérences, d’éléments hallucinés, ou ne correspondant pas à ce qui est demandé sera sanctionné par une note de 0/20.
Grille d’évaluation
Comme indiqué sur la page principale du projet, l’évaluation comporte une partie commune et une partie différenciée. Pour fournir une note pour ces différentes parties, nous allons utiliser la grille suivante :
| Partie globale (G) | Points |
|---|---|
| Le livrable respecte la forme demandée | / 2 |
| L’enseignant(e) a accès au dépôt à la date prévue | / 1 |
|
L’enseignant(e) peut exécuter les codes sans intervention autre que le téléchargement et l’installation des dépendances |
/ 3 |
Le fichier README.md est succinct et va droit au but
|
/ 1 |
| L’historique du dépôt Git montre un travail partagé et régulier | / 3 |
| Pénalité de retard -1 par jour entamé |
-1 / jour |
| Total (G) | / 10 |
| Partie code (C) | Points |
|---|---|
| Les parcours en largeur et en profondeur fonctionnent et sont corrects | / 5 |
| L’algorithme de Dijkstra fonctionne et est correct | / 5 |
| Les algorithmes de parcours sont factorisés | / 3 |
| Des études pertinentes sont faites pour comparer les différentes approches | / 2 |
|
Le code est cohérent avec l’architecture imposée hérite de Player, méthodes turn, preprocessing/postprocessing si pertinent
|
/ 2 |
| Le découpage en méthodes est pertinent et facilite la lecture/test du code | / 3 |
|
Des éléments des sections “Pour aller (encore) plus loin” sont présents incluant ceux de la séance 1 |
/ 5 |
| Total (C) | / 25 |
| Partie documentation (D) | Points |
|---|---|
Le fichier README.md est clair, concis, et completil fournit toutes les informations nécessaires pour utiliser/tester/comprendre le code |
/ 10 |
|
Chaque fonction est documentée entrées, sorties, description, exceptions |
/ 5 |
Des type hints sont utilisés pour les entrées et sorties de toutes les fonctions
|
/ 3 |
|
Les blocs de code sont commentés, et le code respecte les conventions nommage correct, pas de constantes en dur, commentaires utiles, etc. |
/ 5 |
|
Le code est en anglais noms de variables, fonctions, classes, commentaires |
/ 2 |
| Total (D) | / 25 |
| Partie tests (T) | Points |
|---|---|
| Chaque méthode est testée | / 5 |
| Les tests couvrent les cas nominaux, avec exemples fixés ou aléatoires pour vérifier des propriétés | / 5 |
|
Les tests couvrent aussi les cas d’erreur entrées invalides, conditions aux limites |
/ 5 |
| Tous les tests passent correctement | / 5 |
|
Les tests sont bien structurés utilisation de unittest, des méthodes setUpClass, setUp et tearDown notamment
|
/ 5 |
| Total (T) | / 25 |
Préparer la prochaine séance
- Consultez la section « Avant le cours » de la prochaine séance, et vérifiez que vous avez bien tout fait pour la préparer.
- La prochaine séance commencera par un quiz afin de vérifier que vous avez compris les articles.