Séance de renforcement
CPUMons
25 octobre 2022

Ce document comporte plusieurs exercices dont la diculté est renseignée
par un nombre et est globalement croissante. Il est évidemment fortement recommandé de rééchir au
préalable sur papier avant de se lancer dans la partie implémentation.
Répartition de la diculté :
 Niveau 1 : problème facile, ne nécessite pas de code complexe pour être mis en ÷uvre;
 Niveau 2 : problème moyen, demande une réexion plus poussée sur la présentation du code;
 Niveau 3 : problème délicat, demande une réexion poussée sur le problème en soi.
 Niveau 4 : problème dicile.
Avant de commencer...

1

Exercice 1 (Niveau 2)

Le professeur Molét a reçu un télégraphe urgent venant de Laponie pour un problème sur le logiciel
de détection d'enfant sage et doit donc partir de toute urgence.Il vous cone la lourde tâche, à vous son
assistant, de préparer la salle pour son prochain examen. Il vous informe que pour faciliter la correction,
les étudiants sont triés suivant une liste et vous donne aussi le local où aura lieu le test.
Faisant de la programmation, vous visualiser directement la classe comme une matrice de m rangée contenant n sièges et décidez donc d'écrire un programme qui transforme la liste en une matrice représentant
la classe.
Votre tâche, implémentez une fonction
qui prend en paramètre une liste tab (par
exemple [1,2,3,4,5,6]), le nombre de lignes n et le nombre de colonnes m et qui retourne la matrice associée à ces valeurs. (Ici : Si n = 2 et m = 3 alors on a [[1,2,3], [4,5,6]])
Ps : N'oubliez d'implémenter correctement la visualisation de la matrice an de vous facilitez la vie
lors de la distribution de copies.
Pss : On considère que tout les étudiants pourront entrer dans le local et que si il reste des places
libres alors le programme retournera un zéro à l'endroit vide.
1

2

changeInMatrix

1. aucune ressemblance avec un de vos enseignants
2. représenté par un matricule

1

2

Exercice 2 (Niveau 2.5)

Pour votre projet de n de BAC1, vous avez besoin de dessiner plusieurs images en 3D, ne voyant pas
très bien comment faire vous allez voir un infographiste qui vous explique que pour dessiner une gure
en 3D il faut dessiner chaque face dans un ordre précis. En eet, il sera beaucoup plus compliqué de
dessiner la face arrière d'un objet si la face avant bloque le chemin. Pour être sûr d'avoir compris, vous
allez vous entraîner à dessiner des boîtes se superposant.
: Vous devez réaliser un code représentant l'image attendue en 2D. L'image a nbLignes lignes
et nbColonnes colonnes. Les lignes sont numérotées de 0 à nbLignes - 1 et les colonnes de 0 à nbColonnes
- 1. La couleur de chaque rectangle est dénie par un caractère. Par défaut, chaque pixel est de la couleur
'.' .
:
La première ligne de l'entrée contient deux entiers : nbLignes et nbColonnes séparés par un espace.
La seconde ligne contient un unique entier : nbRectangles qui est le nombre de rectangles qui vont être
ajoutés à l'image.
Les nbRectangles lignes suivantes contiennent chacune quatre entiers iLig1, iCol1, iLig2 et iCol2 décrivant les coins respectivement en haut à gauche et en bas à droite du rectangle considéré, ainsi qu'un
caractère couleur indiquant la couleur du rectangle.
Les rectangles doivent être dessinés dans l'ordre dans lequel ils sont donnés en entrée.
:
Votre programme doit acher nbLignes lignes de nbColonnes caractères chacune décrivant l'image obtenue.
Exemple :
9 19
4
1375o
5 2 6 16 1 12 7 14 u
2 1 2 16 s
Donnera :
Tâche

Entrée

Sortie

2

3

Exercice 3 (Niveau 3)

Suite à une guerre entre deux pays, vous êtes mobilisé pour aider le pays à vaincre l'ennemi! Votre
rôle : Intercepter les communications adverses et décoder leurs messages.
La structure de leur message est présenté comme ceci : composé uniquement d'une suite de chire compris entre 0 et 25. Chaque chire représente une lettre de l'alphabet. Comme l'ennemi parle dans une
langue où la fréquence de e est très importante, vous pouvez utiliser cette information pour décoder leurs
messages. En plus de ça, les chires sont décalé de manière à ce qu'on ne trouve pas la lettre tout de suite.
Voici un exemple de message : 18 16 13 3 17 18 10 3 16 2 3 16 7 20 25 18 7 20 3 17 21 6 25 18 3 10 17 3.
: Créer une fonction qui demande en entrée une chaine de caractère composé de chire. La
fonction doit retourner le message décodé. Pour rendre les choses plus faciles, chaque nombre est distancé
d'un espace. Hypothèse en plus, le message contient un nombre de e tels qu'il l'est le plus fréquent.
: Faites plusieurs fonctions pour ne pas vous perdre dans le code.
Exercice

Petit conseil

3

4

Exercice 4 (Niveau 1.5)

Comme vous avez pu voir en cours, les algorithmes récursifs sont fort pratique à implémenter mais
en contre partie la rapidité n'est pas forcement au rendez-vous.
1) Pour commencer, codez un algorithme
qui prends en paramètre un naturel n et qui
vous renvoies le n-ieme nombre de la suite de bonacci.
La suite de bonacci en commençant par 0 et 1, chaque élément suivant est la somme des deux derniers
éléments de la suite.
: bo(35) donnera 9227465 (prends environ 2.5 secondes)
RÉCURSIF

Exemple

(Niveau 3)

2) Vous remarquez sûrement que pour des valeurs "assez grandes", l'algorithme récursif est assez lent à
calculer.
Observons pour bo(6) :

Vous voyez qu'il faut calculer plusieurs fois de façon séparée les même bo(), vous pensez qu'il serait
préférable de stocker cette valeur pour ne pas la recalculer plusieurs fois.
Vous tentez donc d'implémenter un algorithme
de bonacci prenant les même paramètre
que précédemment qui utilise ce que vous venez de remarquer.
ITÉRATIF

4

5

Concours

Pour ceux qui veulent s'entraîner pour participer aux concours, voici quelques liens pour vous permettre de travailler sur ce qui vous intéresse à votre propre rythme :
1. FranceIOI : nécessite de débloquer les premiers niveaux, mais recouvre une très grande variété
d'algorithmes et de problèmes diérents rangés par thématique;
2. Isograd : sur ce site, vous retrouverez de nombreux anciens concours dont, en particulier, les
BattleDev précédentes qui constituent un excellent point de départ dans le monde des concours;
3. Google Code Jam : les énoncés des années précédentes y sont disponibles. Le niveau requis est,
bien évidemment, progressif et les problèmes sont en général assez intéressants;
4. Kattis : site reprenant de très nombreux problèmes. Il vous est conseillé de tester un ou deux
problèmes "triviaux" an de bien vérier si vous n'avez pas de problèmes avec les entrées et
sorties; puis, de passer aux faciles et, rapidement, aux moyens (les diciles portant très bien leur
nom).

5


