TD 0 Manipulation de tableau
| Champ | Valeur |
|---|---|
| Auteur·e·s | Cédric Prin ; Élise C. Philippe |
| Édition | 2025-08-25 |
| Échéance | TBA |
| Taille des équipes | 1 à 2 personnes login des auteur·rice·s dans author.txt |
| Rendu | dépôt $YEAR_wap_array |
Règlement
La réalisation de ce sujet est assujettie aux règles en vigueur dans l’école en matière de triche. Tricher vous expose à de graves sanctions.
Installation d’un environnement d’exécution
Il existe plusieurs environnement d’exécution (runtime) pour exécuter du JS côté serveur. Le plus populaire étant NodeJS. Mais pour ce module, si vous vous sentez à l’aise, vous pouvez aussi essayer bun, un autre runtime plus moderne, qui intègre également son propre gestionnaire de paquet.
Installation de NodeJS
Si vous êtes sur Linux, ou en WSL, vous pouvez installer nodejs depuis votre gestionnaire de paquet si tant est que vous avez accès à la verion LTS de NodeJS (au 25 août 2025 il s’agit de la v22.18).
Autrement rendez-vous sur cette page et sélectionnez :
- pour Linux : “Package Manager”, la version LTS et NVM (pensez à sourcer votre
.bashrcaprès la première commande) ; - pour macOS, en fonction de ce que vous préférez :
- “Package Manager”, la version LTS et NVM ou brew (si vous avez déjà brew d’installé),
- “Prebuilt Installer”, la version LTS et l’architecture de votre processeur ;
- pour Windows en fonction de ce que vous préférez :
- “Prebuilt Installer” et la version LTS,
- “Package Manager”, la version LTS et chocolatey (si vous utilisez déjà chocolatey.
Vous pouvez lancer le REPL node et tester quelques lignes de codes :
$ node
Welcome to Node.js v22.18.0.
Type ".help" for more information.
> console.log("hello world this is me")
hello world this is me
undefined
> process.exit()
Installation de Bun

Suivez les instruction sur la documentation bun https://bun.com/docs/installation :
- pour Linux et macOS : utilisez la méthode “macOS/Linux curl”
- pour Windows : utilisez la méthode “PowerShell/cmd.exe”
Vous pouvez lancer le REPL node et tester quelques lignes de codes :
> bun repl
Welcome to Bun v1.2.22
Type ".help" for more information.
[!] Please note that the REPL implementation is still experimental!
Don't consider it to be representative of the stability or behavior of Bun overall.
> console.log("hello world this is me")
hello world this is me
undefined
> process.exit()
Consignes générales
Vous allez créer une classe ArrayCalculator qui contient un tableau. La classe doit régir l’accès au tableau avec un jeu de fonctions décrit ci-dessous. Chaque fonction du sujet doit être implémentée dans cette classe.
Pour chaque fonction, vous devez également écrire des tests. Les tests doivent vérifier que votre fonction se comporte correctement dans plusieurs cas, y compris les cas limites.
Dans un dossier test/, créez un fichier ArrayCalculator.test.js. Voici à quoi ressemblent des tests avec node:test :
// file: test/example.test.js
import test from 'node:test';
import assert from 'node:assert/strict';
function add(a, b) {
return a + b;
}
function divide(a, b) {
if (b === 0) {
throw new Error("divide by zero");
}
return a / b;
}
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'
});
});
Assurez-vous que les tests passent avec node --test.
Classe : ArrayCalculator
Écrivez la base de la déclaration de la classe ArrayCalculator. Elle doit contenir un tableau de nombres et avoir un constructeur qui initialise le tableau de nombre avec zéro (0) élément.
Écrivez une fonction membre print qui affiche le contenu du tableau qui est champ de la classe.
Écrivez un getter array qui renvoie le tableau.
Fonction : pushMany
Créez une fonction qui reçoit en paramètre un tableau de nombres et les ajoute à la fin du tableau contenu par la classe.
Exemple de test pour cette fonction :
// file: ArrayCalculator.test.js
import test from 'node:test';
import assert from 'node:assert/strict';
import { ArrayCalculator } from '../src/ArrayCalculator.js';
test('push 3 on empty', () => {
const calc = new ArrayCalculator();
assert.deepStrictEqual(calc.array, []);
calc.pushMany([1, 2, 3]);
assert.deepStrictEqual(calc.array, [1, 2, 3]);
});
Dans le terminal, il vous suffit d’entrer node --test pour exécuter vos tests.
Fonction : pop
Créez une fonction qui retire un élément du tableau de la classe. Elle accepte un paramètre facultatif (un index ou null) :
- si l’argument est
null, elle supprime le dernier élément ; - si un index est fourni, elle supprime l’élément à cet index.
Fonction : rotateLeft
Créez une fonction qui décale tous les éléments du tableau d’une position vers la gauche. Le premier élément devient le dernier.
Exemple : [1, 2, 3] -> [2, 3, 1]
Fonction : rotateRight
Créez une fonction qui décale tous les éléments du tableau d’une position vers la droite. Le dernier élément devient le premier.
Exemple : [1, 2, 3] -> [3, 1, 2]
Fonction : sum
Créez une fonction qui renvoie la somme des éléments compris dans un interval du tableau. Elle prend deux paramètres : un index de début et un index de fin. Ces paramètres peuvent être null. Si l’un des deux est null, cela signifie que la borne est le début ou la fin du tableau.
Exemples :
sum(null, 2)→ somme des éléments du début jusqu’à l’index 2 inclus.sum(1, null)→ somme des éléments de l’index 1 jusqu’à la fin.
Fonction : sumInplace
Ses paramètres sont identiques à ceux de sum, mais la somme obtenue remplace tous les éléments sélectionnés.
- Sur un tableau :
let arr = [1, 2, 3, 4], - un appel à
sumInplace(arr, 2, 3), - modifie le tableau de sorte qu’il vale
[1, 2, 7].
Fonction : median
Ses paramètres sont identiques à ceux de sum, mais la fonction calcul la médiane de l’interval.
Fonction : avg
Ses paramètres sont identiques à ceux de sum, mais la fonction calcul la moyenne de l’interval.
Fonction : inplace
Créez une fonction qui applique une opération (sum, median ou avg) sur un interval du tableau, et remplace cet interval par le résultat.
Elle prend trois paramètres :
- Un index de début (ou
null) - Un index de fin (ou
null) - Une fonction à appliquer (
sum,medianouavg)
Exemple :
inplace(0, 2, median)→ remplace les éléments de l’index 0 à 2 par la médiane calculée.
Fonction : clear
Créez une fonction qui nettoie le tableau selon les deux paramètres fournis :
- Si les deux paramètres sont
null, elle vide complètement le tableau. - Si une chaîne de caractères est donnée (
"greater"ou"lesser") ainsi qu’un nombre :"greater"→ supprime tous les éléments strictement supérieurs au nombre."lesser"→ supprime tous les éléments strictement inférieurs au nombre.
Fonction : save
Créez une fonction qui sauvegarde l’état actuel du tableau commun. Elle prend en paramètre une chaîne de caractères pour définir le nom de la sauvegarde.
Fonction : restore
Créez une fonction qui restaure le tableau commun à partir d’une sauvegarde précédemment enregistrée. Elle prend en paramètre le nom de la sauvegarde.