Mines Option Informatique MP 2021Sujet, corrigé et rapport du jury
Jeu du solitaire
- Théorie des graphes
- Structures de données (dictionnaires, listes)
- Programmation fonctionnelle en OCaml
- Automates et langages
Téléchargements
Présentation du sujet
DifficileLe jeu du solitaire : théorie des graphes sur le tablier européen et théorie des automates sur le tablier unidimensionnelAfficher ou masquer la section
Présentation du sujet
DifficileLe sujet, composé de 30 questions, s'intéresse à l'analyse et à la programmation du jeu du solitaire. La première section étudie une partie sur le tablier européen classique en un minimum de coups, à l'aide de méthodes de théorie des graphes. La seconde section étudie la reconnaissance des motifs résolubles sur un tablier rectangulaire unidimensionnel, à l'aide de méthodes de théorie des automates.
- 1Partie 1 : partie jouée sur le tablier européen en un minimum de coupsNumérotation du tablier, manipulation de motifs, coups simples et composés, puis recherche d'une partie de longueur minimale à l'aide d'un dictionnaire.
- 2Partie 2 : reconnaissance des motifs résolubles sur le tablier unidimensionnelCodage des motifs par des mots, étude des bascules de l'état d'une encoche, construction de la trace d'une partie et automate associé.
Difficile. Le rapport indique que plusieurs questions de la seconde partie, comme les questions 16, 17, 21, 24 ou 26, sont peu traitées ou obtiennent très peu de bonnes réponses, et que les questions 27 à 30 sont très peu abordées.
Ce qu'a observé le jury
5 erreurs relevéesConfusion entre parcours en profondeur et en largeur · Effet de bord supposé sur x :: l · Code confus et oublis de conditions pour le saut d'un fichetAfficher ou masquer la section
Ce qu'a observé le jury
5 erreurs relevéesLes candidats ont globalement bien saisi les différences entre le jeu sur tablier européen et sur tablier unidimensionnel, et ont su répondre au maximum de questions en gérant le passage entre les deux parties. Le jury note une baisse des compositions traitant exclusivement la programmation ou exclusivement les démonstrations, mais relève encore l'usage de Python malgré l'interdiction explicite de l'énoncé et une tendance à écrire du code OCaml en style impératif plutôt que fonctionnel.
Les erreurs les plus sanctionnées
- 1Confusion entre parcours en profondeur et en largeur1
De nombreux candidats ignorent la distinction entre parcours en profondeur ou en largeur et l'emploi associé d'une pile ou d'une file.
- 2Effet de bord supposé sur x :: l3
L'opération x :: l est interprétée à tort comme un effet de bord sur l, alors que ce n'est pas le cas en OCaml.
« L ’opérationx :: l est interprétée comme un effet de bord surl. Ce n’est pas le cas. »
- 3Code confus et oublis de conditions pour le saut d'un fichet11
Les copies présentent souvent du code très compliqué et beaucoup de candidats oublient de vérifier certaines conditions pour que le saut soit possible, ou de tester si le fichet reste dans le damier européen.
- 4Notion de langage et d'automate local mal maîtrisée20
Une majorité de candidats ne connaissent pas la notion de langage, et la relation avec un automate local semble confuse.
- 5Question 16 sur le dictionnaire peu traitée16
La question est peu traitée et semble difficile pour de nombreux candidats ; certains oublient la création du dictionnaire lorsqu'ils choisissent cette option.
« Question peu traitée. Elle semble difficile pour de nombreux candidats. »
Ce qui a été bien réussi
- La question 4 est globalement bien traitée.
- La question 7 est globalement bien traitée.
- La question 14 est en général assez bien traitée par les candidats qui l'ont abordée.
- La question 18 est globalement bien traitée.
Conseils du jury
- Respecter l'interdiction d'utiliser un autre langage qu'OCaml, explicitement précisée en préambule du sujet.
- Utiliser des noms de fonctions auxiliaires significatifs plutôt que des noms génériques comme Aux, Aux1, Aux2.
- Mener les preuves d'équivalence dans les deux sens plutôt que par une succession d'équivalences imprécise.
- Éviter les expressions comme « c'est évident » ou « il est clair que » lorsque la question exige une démonstration rigoureuse.
Synthèse rédigée par WikiPrépa à partir du rapport officiel du jury (à télécharger en PDF). Les citations sont extraites du rapport.
Ces sujets peuvent vous intéresser
Lecture du sujet en ligne
L'énoncé complet, avec les formules et les figures, sans ouvrir le PDF.Afficher ou masquer la section
Lecture du sujet en ligne
ÉCOLE DES PONTS PARISTECH, ISAE-SUPAERO, ENSTA PARIS, TÉLÉCOM PARIS, MINES PARIS, MINES SAINT-ÉTIENNE, MINES NANCY, IMT ATLANTIQUE, ENSAE PARIS, CHIMIE PARISTECH - PSL.
Concours Mines-Télécom, Concours Centrale-Supélec (Cycle International).
CONCOURS 2021
ÉPREUVE D'INFORMATIQUE MP
L'usage de la calculatrice et de tout dispositif électronique est interdit.
Les candidats sont priés de mentionner de façon apparente
sur la première page de la copie :
L'énoncé de cette épreuve comporte 11 pages de texte.
Préliminaires
Concernant la programmation
Aide à la programmation en OCaml
- append, de type 'a list -> 'a list -> 'a list, qui concatène deux listes en une seule liste ;
- filter, de type ('a -> bool) -> 'a list -> 'a list, telle que filter p l renvoie la liste des éléments
x de la listeℓ tels que le prédicatp(x) vaut true, en respectant l'ordre de la liste; - flatten, de type 'a list list -> 'a list, qui concatène une liste de listes en une seule liste;
- fold, de type ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a, telle que fold f a [b1; ..; bn] renvoie
f(..(f(fab1)b2).) .bn ; - map, de type ('a -> 'b) -> 'a list -> 'b list, telle que map
f [a1; ..; an] renvoie la liste [f a1; ..; f an].
- la fonction fst, de type 'a * 'b -> 'a, renvoie le premier terme d'un couple;
- la fonction snd, de type '
a∗ ' b -> ' b , renvoie le second terme d'un couple.
| Opérateur | Nom | Résultat exprimé sur 62 bits | ||
| a land b | Et logique bit à bit |
|
||
| a lor b | Ou logique bit à bit |
|
||
| a lxor b | Xor logique bit à bit |
|
||
| lnot a | Non logique bit à bit |
|
||
| a 1 sl b | Décalage vers la gauche |
|
||
| a lsr b | Décalage vers la droite |
|
- le calcul de a land b vaut l'entier 2, dont l'écriture sur 62 bits est
0⋯0010^– ; - le calcul de a lor b vaut l'entier 7 , dont l'écriture sur 62 bits est
0⋯0111^– ; - le calcul de a lxor b vaut l'entier 5 , dont l'écriture sur 62 bits est
0⋯0101^– ; - le calcul de a 1 sl b renvoie 48, dont l'écriture sur 62 bits est
0⋯0110000^– ; - le calcul de a lsr b renvoie 0 puisque les deux bits non nuls de
a sont sortis de la représentation.
L'entier2^k , avec0 ⩽ k < 62 , peut commodément se définir en OCaml par 1 lsl k .
Le jeu du solitaire
.jpg)
dont on peut décrire les coordonnées par

et dont on peut décrire les coordonnées par
.jpg)
peut devenir
.jpg)

peut devenir
.jpg)
1 Partie jouée sur le tablier européen en un minimum de coups
1 - À titre préliminaire, nommer le type de parcours de graphe le plus approprié pour déterminer un chemin entre deux sommets qui minimise le nombre d'arcs traversés. Quelle politique de mise en attente de sommets caractérise ce parcours?
1.1 Numérotation du tablier
2 - Écrire une fonction numero_interieur (z:int) : bool, qui teste si un entier naturel

1.2 Motifs
Par exemple, le motif à quatre encoches suivant

se représente par le nombre entier
type motif = int;;
type ponctuel = motif;;
L'exemple ci-dessus se déclare à l'aide des opérateurs logiques en OCaml par
let
let est_ponctuel (m:motif) : bool =
renvoie true si le motif
1.3 Coups simples et composés
1.4 Partie de longueur minimale
- la fonction create, de type unit -> dico, qui permet de créer un dictionnaire vide;
- la fonction add, de type dico -> motif -> int -> unit, telle que add d m n permet d'ajouter au dictionnaire
d une association entre la clém et l'entiern (si une association de clém existe déjà, elle est remplacée); - la fonction mem, de type dico -> motif -> bool, telle que mem
d m renvoie le booléen true si la clém est membre du dictionnaired ou false sinon. - la fonction find, de type dico -> motif -> int, telle que find
dm renvoie la valeur associée à la clém si la clé est membre du dictionnaired ou une erreur sinon.
◻14 - Écrire une fonction add_and_mem (d:dico) (s:int) (m:motif) : bool qui ajoute l'association entre le motifm et l'entiers dans le dictionnaired si le motifm est initialement absent du dictionnaired . La valeur de retour de la fonction est true si le dictionnaire a été modifié et false sinon.
◻15 - Écrire une fonction strate (d:dico) (s:int) (l:motif list) : motif list qui, pour tout motifm que l'on peut obtenir après un coup composé à partir d'un motif de la listeℓ , ajoute l'association entre le motifm et l'entiers au dictionnaired si le motifm n'est pas présent dans le dictionnaired . La valeur de retour de la fonction est la liste des motifs que la fonction ajoute.
◻16 - Dans cette question, nous supposons qu'il est possible de passer d'un motifm_i à un motifm_f par une suite de coups. Écrire une fonction partie_minimale (mi:motif) (mf:motif) : int qui calcule le nombre minimal de coups composés à jouer pour passer du motif initialm_i au motif finalm_f . On pourra utiliser un dictionnaire qui associe des motifs au nombre de coups minimal pour les atteindre depuis le motifm_i .
◻17 - Peut-on considérer que la réponse donnée à la question 16 observe le parcours nommé à la question 1 ? Introduire un graphe puis argumenter.
2 Reconnaissance des motifs résolubles sur le tablier unidimensionnel

2.1 Mots de motifs ponctuels
2.2 Bascules de l'état d'une encoche
2.3 Trace d'une partie
| Étape 1 : Nous organisons les mots de
|
|
0 | 1 | 0 | 0 | 0 | 1 | |||||||||||||||||||
|
|
0 | 0 | 1 | 1 | 0 | 1 | ||||||||||||||||||||
|
|
1 | 1 | 0 | 1 | 0 | 1 | ||||||||||||||||||||
| Étape 2 : Pour tout indice de ligne
|
|
|||||||||||||||||||||||||
| 0 | 0 | 1 | ||||||||||||||||||||||||
| Étape 3 : Pour tout indice
|
|
|||||||||||||||||||||||||
| Étape 4 : Nous numérotons dans chaque ligne différente de la ligne 0 les trois symboles restants par les marques I, II et III en exposant, en allant de gauche à droite. |
|
|||||||||||||||||||||||||
|
|
|
|
||||||||||||||||||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | |||||||||||||||||||||
| Étape 5 : Nous abaissons l'ensemble des symboles, colonne par colonne, pour les regrouper dans les alvéoles les plus bas. |
|
|||||||||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||||
| 1 | 1 | 0 | 1 | 0 | 1 | |||||||||||||||||||||
| Étape 6 : Si
|
|
|||||||||||||||||||||||||
Nous appelons
Dans la question qui suit, le terme complexité désigne un ordre de grandeur asymptotique de la complexité en temps et dans le pire des cas.
Les résultats démontrés dans la section 2 ont été établis par B. Ravikumar pour un tablier rectangulaire de dimension
Fin de l'épreuve
Questions fréquentes
4 questionsSur quels chapitres porte le sujet d'informatique Mines-Ponts MP 2021 ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quels chapitres porte le sujet d'informatique Mines-Ponts MP 2021 ?
Il porte sur le jeu du solitaire, étudié avec des méthodes de théorie des graphes sur le tablier européen puis des méthodes de théorie des automates sur un tablier unidimensionnel.
Le sujet d'informatique Mines-Ponts MP 2021 doit-il être traité en OCaml ?
Oui, l'usage d'un autre langage, en particulier Python, est explicitement proscrit en préambule du sujet, bien que le rapport note que certains candidats ne respectent pas cette consigne.
Quelle est la question la plus difficile du sujet informatique Mines MP 2021 sur le solitaire ?
Le rapport indique que les questions 27 à 30, en fin de seconde partie sur les automates, sont très peu abordées par les candidats.
Faut-il privilégier la programmation fonctionnelle sur ce sujet Mines MP informatique 2021 ?
Le jury note une tendance marquée à écrire du code en style impératif et encourage les candidats à maîtriser aussi bien le style fonctionnel que le style impératif.
Pas de description pour le moment
