Champ Valeur
Auteur·e Élise C. Philippe
Édition 2025-08-25
Échéance TBA
Taille des équipes 2 personnes
login des auteur·rice·s dans author.txt
Rendu dépôt $YEAR_wap_replatrice

Barème

  • utilisation d’arrow functions 3
  • table de décision 3
  • utilisation de .map(), .reduce(), .filter(), .splice() quand c’est applicable (autrement dit pas de boucle si ça n’est pas nécessaire) 3
  • implémentation des commandes 15 commandes 5 points
  • écriture des tests unitaires 3
  • qualité du code, facilité de lecture 3

Consignes

REPL + calculatrice

Vous devez écrire un programme en NodeJS qui se comporte comme un interprète de commandes (lecture d’une ligne sur l’entrée standard, analyse grammaticale de la commande, exécution de la logique, affichage du résultat.)

Votre interprète va travailler autour d’une liste de nombres et effectuer des modification et des calculs dessus.

Les commandes que vous devez gérer sont :

  • push NUMBER ajoute un nombre à la fin de la liste ;
  • pop [IDX] retire le nombre à la position IDX si elle est donnée, sinon à la fin ;
  • rotate_left déplace tous les nombres vers le début du tableau et fait passer le premier nombre à la fin du tableau ;
  • rotate_right idem, dans l’autre sens ;
  • sum [START] [END] fait la somme et affiche le résultat si START est spécifié, ne faire la somme qu’à partir de l’index START, si END est spécifié, s’arrêter à l’index END ;
  • sum_inplace [START] [END] fait la somme et remplace les nombres additionnés par le résultat ;
  • median [START] [END] fait la médiane et affiche le résultat ;
  • median_inplace [START] [END] fait la médiane et remplace les nombres utilisés pour le calcul par le résultat ;
  • avg [START] [END] fait la moyenne et affiche le résultat ;
  • avg_inplace [START] [END] fait la moyenne et remplace les nombres utilisés pour le calcul par le résultat ;
  • clear greater VALUE supprime du tableau tous les éléments plus grands que VALUE ;
  • clear lesser VALUE supprime du tableau tous les éléments plus petits que VALUE ;
  • clear vide le tableau ;
  • save REGISTER_NAME sauvegarde une copie tableau avec le nom donné ;
  • restore REGISTER_NAME charge la copie sauvegardée du tableau.

Tests unitaires

Vous devez écrire les tests unitaires de votre projet en utilisant les module node:test et node:assert/strict. Ils vous permettent d’écrire des tests qui ressemblent à ceci :

// file: test/math.test.js
import test from 'node:test';
import assert from 'node:assert/strict';
import { add, divide } from '../src/math.js';

test('add works', () => {
  assert.strictEqual(add(2, 3), 5);
  assert.strictEqual(add(-1, 1), 0);
});

test('divide throws on zero', () => {
  assert.throws(() => divide(1, 0), {
    message: 'divide by zero'
  });
});

Qui s’exécutent avec node --test.

Lors de l’implémentation de votre projet, réfléchissez à comment vous pouvez découper votre travail en fonctions afin de pouvoir les tester.

Vous pouvez aussi utiliser les tests pour étudier le comportement de quelque chose que vous ne comprenez pas.

Bonus

  • sauvegarde dans un fichier en terminant le nom du registre par .json (+ restauration)
  • historique des commandes accessible avec history, rappel de la dernière commande en faisant !!.