IUT-Blagnac / sae2024-2-02-Diego-PB

sae2024-2-02-Diego-PB created by GitHub Classroom

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SAÉ 2.02

1. Auteur(s)

1.1. Du sujet…​

  • Jean-Michel Bruel

  • Version: 2024.01 (BUT1 2024)

  • Durée : 18 heures (1 TD et 4 TP encadrés, 7 créneaux en autonomie)

1.2. De la solution…​

  • LAST NAME : PENICAUD-BERNAL

  • First name : Diego

  • TD group :

    • ❏ 1

    • ❏ 2

    • ❏ 3

    • ✓ 4

2. Objectifs

L’objectif de cette SAÉ (Situation d'Apprentissage et d'Évaluation) est d’approfondir la réflexion sur l’approche algorithmique des problèmes rencontrés pendant les phases de développement. (cf. docs/sae2.02.pdf).

Plus précisément :

  • Participer à un petit "concours" de codage

  • Lire, comprendre et évaluer un code qui n’est pas le sien

  • Comparer des algorithmes sur un critère précis

  • Justifier de manière objective ses comparaisons et son classement

3. Description

Cette SAÉ se déroule en 2 phases.

3.1. Phase 1 : concours d’algorithme (20% seulement de la note)

Vous allez devoir soumettre individuellement un algorithme qui résout un problème simple (niveau BUT S1) mais qui peut se régler avec plusieurs solutions différentes. Vous avez la semaine 24 (encadrée, et questions sur Discord bienvenues pendant les séances libres) pour réaliser et soumettre votre (ou vos) solutions.

⚠️
Cette 1ère phase est individuelle.

Le problème consiste à simplement implémenter l’algorithme de compression Run-Length Encoding (RLE).

Exemple d’input

"WWWWWWWWWBWWWWWWWWBBBWWWBWWWWWWW"

Exemple d’ouput

"9W1B8W3B3W1B7W"

Les contraintes sont les suivantes :

  • votre algorithme doit être écrit dans l’un des langages suivants au choix : java, python ou C

  • il doit permettre aux test JUnit fournis de passer (respect donc des noms de classes, méthodes ou fonctions en conséquence). Le choix du nom de la fonction n’est donc pas libre!

  • le texte à compresser est donné sous forme d’une chaîne de caractères (sans accents pour éviter les soucis)

  • le texte compressé est aussi retourné sous forme d’une chaîne de caractères.

Vu qu’il existe de nombreuses façons de résoudre ce problème, vous devrez soumettre, pour chaque catégorie, votre meilleure solution.

Simplicité

Ici il s’agit de faire un code facile à maintenir, lisible par des humains. Pas forcément efficace, mais très facile à lire et à réutiliser. Toute méthode de java.util existante est autorisée.

Efficacité

Peu importe le code source, c’est l’efficacité de son exécution qui est recherchée (complexité maîtrisée, temps d’exécution minimal, …​). Ici aucune méthode complexe (de type split() ou sort()) ne devra être utilisée (contrairement à celles de type size() ou length() qui sont autorisées).

Sobriété numérique

L’algorithme consomme le moins de ressources possible (mémoire, calcul, …​).

ℹ️
Vous pouvez soumettre plusieurs algorithmes dans plusieurs catégories pour maximiser vos chances de gagner le concours et obtenir des points bonus.
⚠️
Nous sommes conscients que vous pouvez vous aider de Copilot, ChatGPT ou des codes de vos collègues, mais la notation qui a le plus gros coefficient est l’oral final. Si vous êtes incapable d’expliquer vos propres résultats, cette note s’approchera de 0.

3.1.1. Dépôt

Vous devrez déposer sur WebEtud, avant vendredi 14 juin à 23h59, vos fichiers de solutions en les nommant ainsi (pour le dépôt) : [efficacite|sobriete|simplicite].[java|c|py].

Par exemple pour votre algorithme java en simplicité, vous le déposerez avec le nom simplicite.java.

ℹ️
  • Si vous en déposez plusieurs d’une même catégorie/type, numérotez-lez (simplicite1.java et simplicite2.java)

  • Ne mettez aucun commentaire ou élément qui permettent de vous identifier dans le code!

  • Pensez à déposer aussi les .h pour les fonctions C.

3.2. Phase 2 : comparaison et évaluation des solutions

Dans cette deuxième phase, (avec séances encadrées et libres), vous devrez comparer des solutions entre elles, et les classer en justifiant vos analyses.

⚠️
Cette deuxième phase est en binôme (de votre choix)

Vous vous verrez affecter, pour chaque catégorie d’algorithmes (Simplicité, Efficacité, Sobriété) un certain nombre de solutions au hasard parmi celles soumises en phase 1.

Il vous faudra évaluer chaque algorithme selon des critères et les classer ensuite.

ℹ️
On vous impose au minimum les critères ci-dessous mais vous pourrez en rajouter. À vous de les utiliser judicieusement pour les catégories les plus appropriées.

3.3. Critères de comparaison

Lisibilité du code

Ce critère est subjectif. Il se base sur la facilité à comprendre ce que fait le code.

Qualité du code

Vous utiliserez des outils open source de mesure de qualité de code (e.g., Codacy).

Efficacité

Il s’agit d’évaluer la complexité algorithmique de la solution (O(n^2) ou O(nlog(n))). Si on double par exemple la taille de la donnée en entrée, est-ce qu’on double le temps de calcul ?

Sobriété numérique

Cela devient un critère de plus en plus important. Certains outils permettent de donner une mesure de la consommation en ressources d’un algorithme (e.g., Joular).

Temps d’exécution

Il s’agit de mesurer le temps d’exécution.

⚠️
Il conviendra de prendre des mesures sur des données plus ou moins grandes, certains algorithmes étant plus rapides que d’autres en fonction de la taille des données en entrée (beaucoup de mots dans la chaîne initiale), ou de leur variété (beaucoup de grands mots).

4. Livrables

Vous utiliserez le dépôt initial qui vous aura été attribué via classroom pour pousser vos codes et vos livrables (en plus des dépôts moodle).

4.1. Phase 1 (deadline : vendredi 14 juin 2024 à minuit)

  • ❏ Votre ou vos algorithmes en précisant les éléments du tableau ci-dessous :

# lien langage catégorie

1

meilleur python

python

Simplicité

2

meilleur python

python

Efficatcité

3

java

java

Simplicité

4

meilleur python

python

Sobriété

4.2. Phase 2 (deadline : vendredi 21 juin 2024 à minuit)

  • ❏ Le rapport d’évaluation des algorithmes (e.g., asciidoc ou PDF). Pour chaque catégorie, vous devrez désigner qui est 1er, 2ème, 3ème, …​ (avec possibilité d’ex-aequo si le hasard vous a attribué des algos similaires). Il doit se trouver dans le répertoire rapport de votre dépôt.

  • ❏ Les codes de test, d’évaluation ou de mesure. Ils doivent se trouver dans le répertoire analyse de votre dépôt.

  • ❏ Les références des librairies/outils utilisés (pour ceux non fournis). Elles doivent être listées dans la sous-section (Références) ci-dessous.

  • ❏ La chaîne de compilation et exécutable, ou paquetage selon les standards du langage (comment exécuter vos codes d’évaluation). Cette description doit se trouver dans vos rapports.

⚠️
Les répertoires et fichiers existants devront être complétés et mis à jour sans être renommés. Les binaires de compilation (répertoire bin ou target par exemple) ne devront pas être poussés sur le dépôt.

4.3. Pré-requis

Voici les pré-requis pour exécuter nos codes d’évaluation.

  • Java v.x.y.z

  • …​

4.4. Reproductibilité

  • Pour reproduire nos analyses :

    1. Installez X

    2. Lancez Y

    3. …​

4.5. Références

5. Généralités, notation de la SAÉ et résultat du concours

5.1. Généralités

  • Vous pouvez vous entraider pour les outils d’analyse et de performance, voire vous inspirer de ChatGPT

  • N’hésitez pas à solliciter vos enseignants des ressources impliquées par cette SAÉ (salon #sae_2_02_qualité du serveur discord).

5.2. Notation

  • 80% de la notation portera sur votre rapport de la phase 2 et vos analyses (véracité, pertinence, qualité, ajout de critères pertinents, …​). L’évaluation comportera un oral en semaine 25 (lors des séances encadrées).

  • 20% de la notation portera sur le classement de votre algorithme de la phase 1 (pertinence de la catégorie choisie, évaluation/classement par les pairs, …​)

  • Bonus pour les 10 premiers de chaque catégorie du concours de codage

  • Bonus pour ceux qui auront proposés plusieurs algos différents (indépendamment de leur classement final)

  • Bonus supplémentaire pour ceux qui auront proposés des versions en langages différents de leur(s) algo(s) (indépendamment de leur classement final)

About

sae2024-2-02-Diego-PB created by GitHub Classroom

License:Other


Languages

Language:Java 76.4%Language:Python 18.4%Language:C 5.2%