Exercices listes et dictionnaires
Consignes
- Ne pas se faire aider par des IA ou genAI
Série 1
- Créer une fonction qui génère une liste d'entiers aléatoires, entre -2 et 2 inclus. La génération s'arrête lorsque le même nombre est généré 3 fois d'affilée. Créer une autre fonction qui prend une liste d'entiers en argument et qui génère un dictionnaire dont les clés sont les entiers distincts de ce tableau et les valeurs sont le nombre de répétition dans la liste. Afficher le résultat de cette fonction sur une liste générée avec la première fonction.
- Exemple :
{1, 1, -1, 2, 0, 0, 1, 1, 1}
=>{1: 5, -1: 1, 2: 1, 0: 2}
- Exemple :
- Implémenter la fonction
Map<String, Integer> countWords(String text)
qui prend un long texte et renvoie un dictionnaire dont les clés sont les mots distincts et les valeurs sont le nombre d'occurrences de chaque mot dans la liste. Astuce, utiliserString.split(" ")
pour séparer les mots. Par exemple, pour le texte suivant :Il y a un chat et un chien. Le chat est noir et le chien est blanc.
le résultat sera :{Il: 1, y: 1, a: 1, un: 2, chat: 2, et: 2, chien.: 1, Le: 1, est: 2, noir: 1, blanc.: 1}
.- Afficher le résultat de cette fonction sur le texte suivant :
Le feu ça brûle et ça fait mal et l'eau ça mouille mais ça moins mal que le feu
.
- Afficher le résultat de cette fonction sur le texte suivant :
- Les dictionnaires sont souvent utilisés pour la mise en cache et la mémorisation de résultats précédents (ou la mémoisation).
- Créer une fonction
int countA(List<String> words)
qui compte le nombre total de a ou A dans la liste de mots.- Afficher le résultat de cette fonction avec cette liste de mots :
List.of("I", "love", "Java", "and", "the", "JVM", "which", "is", "the", "Java", "Virtual", "Machine")
. Le résultat doit être7
. - Dans cette liste, le calcul doit être fait une seule fois pour
Java
et le résultat est réutilisé pour l'occurrence suivante. Pareil pourthe
.
- Afficher le résultat de cette fonction avec cette liste de mots :
- Créer une fonction
int compteFibonacci(int n)
qui calcule le Fibonacci et qui utilise la mémoisation afin d'optimiser le calcul.- En d'autres termes, si
compteFibonacci(10)
=>55
etcompteFibonacci(9)
=>34
sont déjà exécutés. AlorscompteFibonacci(11)
calcule depuis le dictionnaire et renvoie89
sans recalculercompteFibonacci(10)
etcompteFibonacci(9)
. - Aussi, si
compteFibonacci(10)
est déjà exécuté, alorscache
contient tous les Fibonacci de0
à10
.
- En d'autres termes, si
- Créer une fonction
Solutions
Série 2
- Développer une fonction qui génère une liste de personnages RPG. La fonction demande à l'utilisateur de saisir le nom du premier personnage et sa classe (parmi les classe
Fighter
etMage
qui héritent de la classeHero
). Ensuite, la fonction demande si l'utilisateur souhaite ajouter un personne ou non, si ou un nouveau personnage est créé comme précédemment, sinon, la fonction renvoie la liste des personnages créés.- Créer un programme qui appelle cette fonction et qui affiche la liste des personnages créés.
- Exemple :
Fighter: Bob, Mage: Alice
.
-
Nous souhaitons enrichir la fonction précédents en ajoutant la génération des attributs des personnages. Voici la listes des attributs initiaux pour les classes
Fighter
etMage
listés dans ce tableau:Attribut Fighter Mage Points de vie entre 20 et 25 entre 5 et 10 Force entre 10 et 15 entre 1 et 5 Intelligence entre 1 et 5 entre 5 et 10 Agilité entre 5 et 10 entre 5 et 10 - Modifier la fonction de génération de personnages pour générer aléatoirement les attributs des personnages en respectant les contraintes ci-dessus et les affiche à l'utilisateur. La fonction demande à l'utilisateur s'il accepte les valeurs générées ou s'il souhaite tenter une nouvelle génération d'attributs.
- Modifier le programme pour afficher les attributs des personnages créés en respectant le format suivant :
Fighter: Bob [P: 22, F: 12, I: 2, A: 8]. Mage: Alice [P: 7, F: 11, I: 6, A: 9]
.