From 00237ba28fc1ea90edd7a122b1bffebb2dbf8ef2 Mon Sep 17 00:00:00 2001 From: Guyslain <guyslain.naves@lis-lab.fr> Date: Thu, 19 Sep 2024 11:10:16 +0200 Subject: [PATCH] ajout td3 --- .../fr/univamu/progav/td2/BackPackSolver.java | 1 + src/main/java/fr/univamu/progav/td2/TD2.md | 3 +- .../java/fr/univamu/progav/td3/ExoArray.java | 34 +++++++++ .../java/fr/univamu/progav/td3/ExoList.java | 31 ++++++++ .../java/fr/univamu/progav/td3/ExoMap.java | 41 +++++++++++ .../java/fr/univamu/progav/td3/ExoQueue.java | 71 +++++++++++++++++++ .../java/fr/univamu/progav/td3/ExoSet.java | 30 ++++++++ src/main/java/fr/univamu/progav/td3/TD3.md | 50 +++++++++++++ .../fr/univamu/progav/td3/ExoArrayTest.java | 47 ++++++++++++ .../fr/univamu/progav/td3/ExoListTest.java | 48 +++++++++++++ .../fr/univamu/progav/td3/ExoMapTest.java | 47 ++++++++++++ .../fr/univamu/progav/td3/ExoQueueTest.java | 63 ++++++++++++++++ .../fr/univamu/progav/td3/ExoSetTest.java | 46 ++++++++++++ 13 files changed, 511 insertions(+), 1 deletion(-) create mode 100644 src/main/java/fr/univamu/progav/td3/ExoArray.java create mode 100644 src/main/java/fr/univamu/progav/td3/ExoList.java create mode 100644 src/main/java/fr/univamu/progav/td3/ExoMap.java create mode 100644 src/main/java/fr/univamu/progav/td3/ExoQueue.java create mode 100644 src/main/java/fr/univamu/progav/td3/ExoSet.java create mode 100644 src/main/java/fr/univamu/progav/td3/TD3.md create mode 100644 src/test/java/fr/univamu/progav/td3/ExoArrayTest.java create mode 100644 src/test/java/fr/univamu/progav/td3/ExoListTest.java create mode 100644 src/test/java/fr/univamu/progav/td3/ExoMapTest.java create mode 100644 src/test/java/fr/univamu/progav/td3/ExoQueueTest.java create mode 100644 src/test/java/fr/univamu/progav/td3/ExoSetTest.java diff --git a/src/main/java/fr/univamu/progav/td2/BackPackSolver.java b/src/main/java/fr/univamu/progav/td2/BackPackSolver.java index eb8eacf..7debc34 100644 --- a/src/main/java/fr/univamu/progav/td2/BackPackSolver.java +++ b/src/main/java/fr/univamu/progav/td2/BackPackSolver.java @@ -28,6 +28,7 @@ public class BackPackSolver { } currentBackpack.add(allItems.get(nextItemIndex)); List<Item> backpack2 = findBestValueBackpack(nextItemIndex+1); + currentBackpack.removeLast(); return selectBestBackpack(backpack1, backpack2); } diff --git a/src/main/java/fr/univamu/progav/td2/TD2.md b/src/main/java/fr/univamu/progav/td2/TD2.md index e7e0204..81ac073 100644 --- a/src/main/java/fr/univamu/progav/td2/TD2.md +++ b/src/main/java/fr/univamu/progav/td2/TD2.md @@ -79,7 +79,8 @@ In method g. The end. ``` - Placer un *breakpoint* sur la première - ligne de la méthode 'main' (comment ? lire ci-dessus). Relancer le programme + ligne de la méthode `exoDebug` (comment ? lire ci-dessus). Relancer le + programme en mode debug (bouton  en haut à droite). À l'issue de la compilation, vous obtiendrez l'ouverture de la vue du debugger. diff --git a/src/main/java/fr/univamu/progav/td3/ExoArray.java b/src/main/java/fr/univamu/progav/td3/ExoArray.java new file mode 100644 index 0000000..e8bb573 --- /dev/null +++ b/src/main/java/fr/univamu/progav/td3/ExoArray.java @@ -0,0 +1,34 @@ +package fr.univamu.progav.td3; + +public class ExoArray { + + /** Initialise un tableau d'entiers, la cellule d'indice \(i\) contient l'entier \(i\), sauf une + * cellule sur trois depuis l'indice 1, qui contiennent \(-i\). Ainsi le tableau commence par + * <code>{0,-1,2,3,-4,5,6,-7,...}</code>. + * @param size la longueur souhaitée du tableau + * @return le tableau d'entiers + */ + public static int[] initArray(int size) { + // TODO + return null; + } + + /** Calcule la somme des entiers en position paire dans un tableau. + * Par exemple pour <code>{1,3,2,4}</code> le résultat est \(3 = 1 + 2\). + * @param array le tableau dont on somme les entiers en position paire. + * @return la somme des entiers en position paire. + */ + public static int sumEvenPositions(int[] array) { + // TODO + return 0; + } + + /** Décale tous les éléments du tableau "vers la gauche", sauf l'élément d'indice 0 qui est + * replacé en fin de tableau. Par exemple pour <code>{1,4,2,3}</code>, le tableau devient + * <code>{4,2,3,1}</code>. + * @param array le tableau à modifier. + */ + public static void shiftToLeft(int[] array) { + // TODO + } +} diff --git a/src/main/java/fr/univamu/progav/td3/ExoList.java b/src/main/java/fr/univamu/progav/td3/ExoList.java new file mode 100644 index 0000000..faa0fa5 --- /dev/null +++ b/src/main/java/fr/univamu/progav/td3/ExoList.java @@ -0,0 +1,31 @@ +package fr.univamu.progav.td3; + +import java.util.ArrayList; +import java.util.List; + +public class ExoList { + + /** Initialise une liste d'entiers consécutifs depuis 0, par exemple <code>0,1,2,3,4</code>. + * @param size la longueur souhaitée de la liste. + * @return la liste ainsi initialisée. + */ + public static List<Integer> initList(int size) { + // TODO + return null; + } + + /** Ajoute 1 à chaque entier d'une liste. + * @param values la liste des entiers à incrémenter. + */ + public static void addOneEverywhere(List<Integer> values) { + // TODO + } + + /** Duplique chaque élément de la liste, en fin de liste, par exemple la liste <code>1,2, + * 3</code> devient <code>1,2,3,1,2,3</code>. + * @param values la liste à dupliquer. + */ + public static void duplicate(List<Integer> values) { + // TODO + } +} diff --git a/src/main/java/fr/univamu/progav/td3/ExoMap.java b/src/main/java/fr/univamu/progav/td3/ExoMap.java new file mode 100644 index 0000000..fb1467b --- /dev/null +++ b/src/main/java/fr/univamu/progav/td3/ExoMap.java @@ -0,0 +1,41 @@ +package fr.univamu.progav.td3; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Une classe permettant de compter dans un texte, pour chaque mot, combien de fois il apparait. + */ +public class ExoMap { + + // TODO initialisation à une table d'association vide + private final Map<String,Integer> counters = null; + + /** Augmente le compte d'un mot. + * @param word le mot à compter. + */ + public void count(String word) { + // TODO + } + + /** Compte tous les mots d'une liste. + * @param words une liste de mots à compter. + */ + public void count(List<String> words) { + // TODO + } + + /** Retourne le nombre d'occurences comptées d'un mot. + * @param word un mot. + * @return le nombre d'occurences de ce mot. + */ + public int countOf(String word) { + // TODO + return 0; + } + +} + + + diff --git a/src/main/java/fr/univamu/progav/td3/ExoQueue.java b/src/main/java/fr/univamu/progav/td3/ExoQueue.java new file mode 100644 index 0000000..5e24325 --- /dev/null +++ b/src/main/java/fr/univamu/progav/td3/ExoQueue.java @@ -0,0 +1,71 @@ +package fr.univamu.progav.td3; + +import java.util.ArrayDeque; +import java.util.Deque; + + +/** + * Une classe permettant d'évaluer des expressions arithmétiques entières en notation polonaise + * inverse, comme <em>3 5 2 * 1 + -4 7 + + *</em>. L'évaluation d'une telle expression se fait à + * l'aide d'une pile, et en lisant l'expression de gauche à droite : + * <ul> + * <li>3 : on empile 3, la pile est \([3]\)</li> + * <li>5 : on empile 5, la pile est \([3,5]\)</li> + * <li>2 : on empile 2, la pile est \([3,5,2]\)</li> + * <li>* : on remplace les deux éléments supérieurs par leur produit, la pile est \([3,10]\) </li> + * <li>1 : on empile 1, la pile est \([3,10,1]\)</li> + * <li>+ : on remplace les deux éléments supérieurs par leur somme, la pile est \([3,11]\)</li> + * <li>-4 : on empile -4, la pile est \([3,11,-4]\)</li> + * <li>7 : on empile 7, la pile est \([3,11,-4,7]\)</li> + * <li>+ : on remplace les deux éléments supérieurs par leur somme, la pile est \([3,11,3]\) </li> + * <li>+ : on remplace les deux éléments supérieurs par leur somme, la pile est \([3,14]\)</li> + * <li>* : on remplace les deux éléments supérieurs par leur produit, la pile est \([42]\) + * </li> + * </ul> + * Un des avantages de cette notation est l'absence de parenthèses, qui sont inutiles. + */ +public class ExoQueue { + + // TODO initialisée avec une pile vide + private final Deque<Integer> intStack =null; + + + /** Insère une valeur en haut de la pile. + * @param value la valeur à insérer. + */ + public void addValue(int value) { + // TODO + intStack.offerLast(value); + } + + /** + * Réalise l'addition des deux premiers éléments de la pile. + */ + public void performAddition() { + //TODO + } + + /** + * Réalise la multiplication des deux premiers éléments de la pile. + */ + public void performMultiplication() { + // TODO + } + + /** + * @return le nombre de valeurs dans la pile + */ + public int nbRemainingValues() { + // TODO + return 0; + } + + /** + * @return la valeur en haut de la pile (<code>null</code> si la pile est vide) + */ + public int topValue() { + // TODO + return 0; + } + +} diff --git a/src/main/java/fr/univamu/progav/td3/ExoSet.java b/src/main/java/fr/univamu/progav/td3/ExoSet.java new file mode 100644 index 0000000..fdd42e9 --- /dev/null +++ b/src/main/java/fr/univamu/progav/td3/ExoSet.java @@ -0,0 +1,30 @@ +package fr.univamu.progav.td3; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class ExoSet { + + /** Construit l'ensemble des éléments d'une liste (les éléments redondants disparaissent). + * @param list la liste des éléments qui seront dans l'ensemble. + * @return l'ensemble ainsi construit. + */ + public static Set<Integer> fromList(List<Integer> list) { + // TODO + return null; + } + + /** Construit la liste des éléments de l'union de deux ensembles. Chaque élément doit + * apparaître au plus une fois. + * @param set1 le premier ensemble. + * @param set2 le deuxième ensemble. + * @return une liste union des deux ensembles. + */ + public static List<Integer> unionToList(Set<Integer> set1, Set<Integer> set2) { + // TODO + return null; + } + +} diff --git a/src/main/java/fr/univamu/progav/td3/TD3.md b/src/main/java/fr/univamu/progav/td3/TD3.md new file mode 100644 index 0000000..4f4e3f6 --- /dev/null +++ b/src/main/java/fr/univamu/progav/td3/TD3.md @@ -0,0 +1,50 @@ +Exercice 1 +========== + +Un tableau est une structure indicée de taille fixe, contenant des valeurs +d'un même type. + +Compléter les méthodes de la classe `ExoArray`, jusqu'à validation des tests. + +Exercice 2 +========== + +Une liste est une collection indicée de taille variable, contenant des +valeurs d'un même type. + +Compléter les méthodes de la classe `ExoList`, jusqu'à validation des tests. + +Exercice 3 +========== + +Une file est une collection de valeurs de même type, organisées en séquences, +avec des opérations d'insertion et de suppression à ses extrémités. + +Compléter les méthodes de la classe `ExoQueue`, jusqu'à validation des tests. +Cette classe permet l'évaluation d'expressions arithmétiques en notation +polonaise inversée. + +Exercice 4 +========== + +Un ensemble est une collection de valeur d'un même type, chaque valeur y est +unique, et optimisée pour réaliser les opération d'insertion, suppression et +test d'appartenance. + +Compléter les méthodes de la classe `ExoSet`, jusqu'à validation des tests. + +Exercice 5 +========== + +Une table d'association est une collection de clés d'un même type, chaque +clé étant unique, et associant à chaque clé une valeur. Toutes les valeurs +sont du même type. Une table d'association est optimisée pour +insérer ou supprimer efficacement les clés, et récupérer ou modifier la +valeur associée d'une clé. + +Compléter les méthodes de la classe `ExoMap`, jusqu'à validation des tests. +Cette classe permet de compter le nombre d'occurrences de chaque mot dans une +liste de mots. + + + diff --git a/src/test/java/fr/univamu/progav/td3/ExoArrayTest.java b/src/test/java/fr/univamu/progav/td3/ExoArrayTest.java new file mode 100644 index 0000000..73725ff --- /dev/null +++ b/src/test/java/fr/univamu/progav/td3/ExoArrayTest.java @@ -0,0 +1,47 @@ +package fr.univamu.progav.td3; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ExoArrayTest { + + @Test + void initArray() { + int[] a4 = ExoArray.initArray(4); + assertArrayEquals(new int[]{0,-1,2,3}, a4); + int[] a10 = ExoArray.initArray(10); + assertArrayEquals(new int[]{0,-1,2,3,-4,5,6,-7,8,9}, a10); + int[] a0 = ExoArray.initArray(0); + assertEquals(0, a0.length); + int[] a10000 = ExoArray.initArray(10000); + assertEquals(10000, a10000.length); + } + + @Test + void sumEvenPositions() { + int[] a1 = {0,1,2,3,4,5,6}; + assertEquals(12, ExoArray.sumEvenPositions(a1)); + int[] a2 = {0,1,2,3,4,5,6,7}; + assertEquals(12, ExoArray.sumEvenPositions(a2)); + int[] a3 = {5,3,7,-2,-4,-8,1,-2,8,-3,3,10}; + assertEquals(20, ExoArray.sumEvenPositions(a3)); + } + + @Test + void shiftToLeft() { + int[] a1 = {1,2,3,4,5}; + ExoArray.shiftToLeft(a1); + assertArrayEquals(new int[] {2,3,4,5,1}, a1); + int[] a2 = {1,2}; + ExoArray.shiftToLeft(a2); + assertArrayEquals(new int[] {2,1},a2); + int[] a3 = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; + ExoArray.shiftToLeft(a3); + assertArrayEquals(new int[] {8,7,6,5,4,3,2,1,0,9}, a3); + int[] a4 = {}; + ExoArray.shiftToLeft(a4); + assertArrayEquals(new int[]{}, a4); + + } +} \ No newline at end of file diff --git a/src/test/java/fr/univamu/progav/td3/ExoListTest.java b/src/test/java/fr/univamu/progav/td3/ExoListTest.java new file mode 100644 index 0000000..38beec5 --- /dev/null +++ b/src/test/java/fr/univamu/progav/td3/ExoListTest.java @@ -0,0 +1,48 @@ +package fr.univamu.progav.td3; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +class ExoListTest { + + @Test + void initList() { + assertEquals(List.of(0,1,2,3,4), ExoList.initList(5)); + assertEquals(List.of(0,1,2,3,4,5,6,7,8,9), ExoList.initList(10)); + assertEquals(List.of(), ExoList.initList(0)); + List<Integer> l1000 = ExoList.initList(1000); + assertEquals(1000, l1000.size()); + assertEquals(532, l1000.get(532)); + assertEquals(763, l1000.get(763)); + assertEquals(923, l1000.get(923)); + } + + @Test + void addOneEverywhere() { + List<Integer> l1 = new ArrayList<>(List.of(0,1,2,3,4)); + ExoList.addOneEverywhere(l1); + assertEquals(List.of(1,2,3,4,5), l1); + List<Integer> l2 = new ArrayList<>(List.of(9,-1,3,6,-4)); + ExoList.addOneEverywhere(l2); + assertEquals(List.of(10,0,4,7,-3), l2); + List<Integer> l3 = new ArrayList<>(); + ExoList.addOneEverywhere(l3); + assertEquals(List.of(), l3); + } + + @Test + void duplicate() { + List<Integer> l1 = new ArrayList<>(List.of(0,1,2,3,4)); + ExoList.duplicate(l1); + assertEquals(List.of(0,1,2,3,4,0,1,2,3,4), l1); + List<Integer> l2 = new ArrayList<>(List.of(0,1)); + ExoList.duplicate(l2); + assertEquals(List.of(0,1,0,1), l2); + List<Integer> l3 = new ArrayList<>(); + ExoList.duplicate(l3); + assertEquals(List.of(), l3); + } +} \ No newline at end of file diff --git a/src/test/java/fr/univamu/progav/td3/ExoMapTest.java b/src/test/java/fr/univamu/progav/td3/ExoMapTest.java new file mode 100644 index 0000000..f6309e6 --- /dev/null +++ b/src/test/java/fr/univamu/progav/td3/ExoMapTest.java @@ -0,0 +1,47 @@ +package fr.univamu.progav.td3; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class ExoMapTest { + + @Test + void test1() { + List<String> words = List.of("alfa", "bravo", "charlie", "alfa", "charlie", "delta"); + ExoMap counter = new ExoMap(); + counter.count(words); + assertEquals(2,counter.countOf("alfa")); + assertEquals(1,counter.countOf("bravo")); + assertEquals(2,counter.countOf("charlie")); + assertEquals(1,counter.countOf("delta")); + assertEquals(0,counter.countOf("echo")); + counter.count("delta"); + assertEquals(2,counter.countOf("alfa")); + assertEquals(1,counter.countOf("bravo")); + assertEquals(2,counter.countOf("charlie")); + assertEquals(2,counter.countOf("delta")); + assertEquals(0,counter.countOf("echo")); + } + + void test2() { + List<String> words = List.of("alfa", "alfa", "bravo", "charlie", "bravo", "alfa", "charlie", "delta", "echo", "echo", "echo", "echo"); + ExoMap counter = new ExoMap(); + counter.count(words); + assertEquals(3,counter.countOf("alfa")); + assertEquals(2,counter.countOf("bravo")); + assertEquals(2,counter.countOf("charlie")); + assertEquals(1,counter.countOf("delta")); + assertEquals(4,counter.countOf("echo")); + } + + void testEmpty() { + ExoMap counter = new ExoMap(); + counter.count(List.of()); + assertEquals(0,counter.countOf("alfa")); + assertEquals(0,counter.countOf("bravo")); + assertEquals(0,counter.countOf("charlie")); + } +} \ No newline at end of file diff --git a/src/test/java/fr/univamu/progav/td3/ExoQueueTest.java b/src/test/java/fr/univamu/progav/td3/ExoQueueTest.java new file mode 100644 index 0000000..e1a13a8 --- /dev/null +++ b/src/test/java/fr/univamu/progav/td3/ExoQueueTest.java @@ -0,0 +1,63 @@ +package fr.univamu.progav.td3; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ExoQueueTest { + + @Test + void unit() { + ExoQueue q = new ExoQueue(); + q.addValue(8); + assertEquals(1,q.nbRemainingValues()); + assertEquals(8,q.topValue()); + } + + @Test + void addition() { + ExoQueue q = new ExoQueue(); + q.addValue(3); + q.addValue(5); + assertEquals(2, q.nbRemainingValues()); + q.performAddition(); + assertEquals(1, q.nbRemainingValues()); + assertEquals(8,q.topValue()); + } + + @Test + void multiplication() { + ExoQueue q = new ExoQueue(); + q.addValue(3); + q.addValue(5); + q.addValue(2); + assertEquals(3, q.nbRemainingValues()); + q.performMultiplication(); + assertEquals(2, q.nbRemainingValues()); + assertEquals(10,q.topValue()); + q.performMultiplication(); + assertEquals(1, q.nbRemainingValues()); + assertEquals(30,q.topValue()); + } + + + // evaluate 3 5 2 x 1 + -4 7 + + * + @Test + void sequence() { + ExoQueue q = new ExoQueue(); + q.addValue(3); + q.addValue(5); + q.addValue(2); + q.performMultiplication(); + q.addValue(1); + q.performAddition(); + q.addValue(-4); + q.addValue(7); + q.performAddition(); + q.performAddition(); + q.performMultiplication(); + assertEquals(1,q.nbRemainingValues()); + assertEquals(42,q.topValue()); + } + +} \ No newline at end of file diff --git a/src/test/java/fr/univamu/progav/td3/ExoSetTest.java b/src/test/java/fr/univamu/progav/td3/ExoSetTest.java new file mode 100644 index 0000000..b94be6a --- /dev/null +++ b/src/test/java/fr/univamu/progav/td3/ExoSetTest.java @@ -0,0 +1,46 @@ +package fr.univamu.progav.td3; + +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +class ExoSetTest { + + @Test + void fromList() { + List<Integer> l1 = List.of(1,2,3,4); + Set<Integer> set = ExoSet.fromList(l1); + for (int i : l1) { + assertTrue(set.contains(i)); + } + assertEquals(4, set.size()); + List<Integer> l2 = List.of(1,2,3,1,3,2,1,3,4,2,3,1,5,4,2); + Set<Integer> set2 = ExoSet.fromList(l2); + for (int i : l2) { + assertTrue(set2.contains(i)); + } + assertEquals(5, set2.size()); + Set<Integer> set3 = ExoSet.fromList(List.of()); + assertTrue(set3.isEmpty()); + } + + @Test + void unionToList() { + Set<Integer> set1 = Set.of(1,2,4,6); + Set<Integer> set2 = Set.of(1,3,4,5); + List<Integer> list = ExoSet.unionToList(set1, set2); + for (int i : list) { + assertTrue(set1.contains(i) || set2.contains(i)); + } + for (int i : set1) { + assertTrue(list.contains(i)); + } + for (int i : set2) { + assertTrue(list.contains(i)); + } + assertEquals(6, list.size()); + } +} \ No newline at end of file -- GitLab