Pour tous les exercices de cette session, on vous fournit un fichier
squelette SessionE26.java.
Les objectifs sont, dans l’ordre, que le code soit
correct, que le code soit efficace et
que le code soit lisible. Des tests unitaires
sont fournis dans SessionE26Test.java.
Vous devez être attentifs à la quantité de mémoire nécessaire à votre programme et vous avez le droit d’utiliser toutes les caractéristiques de l’entrée (elles sont indiquées pour chaque exercice) pour concevoir un code efficace.
Dans tout l’examen, vous ne devez pas utiliser de
Stream.
Un intervalle d’entiers consécutifs est une suite de valeurs de la forme a, a + 1, a + 2, ..., b
Par exemple, dans la liste [8, 3, 5, 4, 10, 6], les
valeurs 3, 4, 5 et 6 forment un intervalle d’entiers consécutifs de
longueur 4, et c’est le plus long possible pour cette liste. Vous pouvez
remarquer que les valeurs de l’intervalle ne sont pas forcément
adjacentes dans la liste.
Écrire la méthode longestInterval qui, étant donnée une
liste d’entiers, renvoie la longueur du plus long intervalle d’entiers
consécutifs présents dans cette liste.
public static int longestInterval(List<Integer> list)Caractéristiques des listes testées :
Les listes peuvent contenir des doublons et des valeurs négatives.
DIFFICULTÉ Niv. 1
Taille de liste max: 100
Valeur max: 500
DIFFICULTÉ Niv. 2
Taille de liste max: 1_000
Valeur max: 10_000
DIFFICULTÉ Niv. 3
Taille de liste max: 1_000_000
Valeur max: Integer.MAX_VALUE
| Si vous bénéficiez d’un tiers-temps, ne faites pas cet exercice |
Étant donné un tableau d’entiers et une valeur cible, on souhaite trouver toutes les paires d’indices telles que les entiers à ces indices ont pour somme la valeur cible.
On ne considère que les paires d’indices (i,j) telles que i < j. Par exemple, pour
le tableau [1, 4, 2, 3, 0, -1, 0] et la valeur cible 3, les
paires d’indices valides sont (0,2),
(1,5), (3,4) et (3,6).
Une paire d’indices est encodée par le record suivant :
public record Indices(int i, int j) {}Écrire la méthode twoSum qui renvoie l’ensemble des
paires valides pour le tableau values et la valeur cible
target.
public static Set<Indices> twoSum(int[] values, int target)Caractéristiques des tableaux testés :
Les tableaux peuvent contenir des doublons et des valeurs négatives.
DIFFICULTÉ Niv. 1
Taille de tableau max: 100
Valeur max: 500
DIFFICULTÉ Niv. 2
Taille de tableau max: 1_000
Valeur max: 10_000
DIFFICULTÉ Niv. 3
Taille de tableau max: 1_000_000
Valeur max: Integer.MAX_VALUE

Un groupe de girafes éparpillées dans le monde entier a décidé d’organiser une grande partie de bingo en ligne. Elles communiquent sur un serveur Discord. Les règles de leur bingo sont un peu étranges, mais on veut bien leur pardonner : elles ne sont pas très douées en conception de jeu. Le jeu fonctionne ainsi : l’une des girafes est maître du jeu et choisit un nombre n à atteindre. Ensuite, toutes les secondes, elle effectue un tirage au sort : elle attribue un nombre compris entre 0 et n − 1 à une girafe choisie au hasard. L’objectif de chaque girafe est d’obtenir toutes les valeurs entre 0 et n − 1 le plus rapidement possible.
Pour suivre l’évolution du jeu, les girafes veulent un bot qui affiche l’information suivante à chaque tirage :
Votre objectif est de programmer ce bot.
Les tirages du maître du jeu sont enregistrés dans un fichier, qui
constitue votre entrée. Vous devez écrire la méthode bingo,
qui renvoie une liste d’entiers correspondant aux valeurs que le bot
doit afficher.
public static List<Integer> bingo(Path path) throws IOExceptionExemple :
3
Alice 2
Alice 0
Bob 2
Carl 0
Alice 1
Bob 1
Alice 2
Bob 0
Alice 0 --> [0, 0, 0, 0, 1, 0, 1, 2, 1]
Chaque girafe doit obtenir les valeurs 0, 1 et 2.
Caractéristiques des fichiers d’entrée :
L’entrée est un fichier contenant le nombre n de valeurs à atteindre sur la première ligne et ensuite, un tirage par ligne, c’est-à-dire le nom de la girafe et la valeur qui lui est attribuée, séparés par un espace, au format indiqué ci-dessus. Les noms des girafes ne contiennent pas d’espace.
DIFFICULTÉ Niv. 1
Nombre de lignes max: 10_000
Nombre de valeurs max: 100
Nombre de girafes max: 10
DIFFICULTÉ Niv. 2
Nombre de lignes max: 1_000_000
Nombre de valeurs max: 100_000
Nombre de girafes max: 3
DIFFICULTÉ Niv. 2b
Nombre de lignes max: 10_000_000
Nombre de valeurs max: 2
Nombre de girafes max: 1_000_000