Stages de Pré-Rentrée — Inscriptions ouvertes, places très limitées ! S'inscrire

Annale · 2023★★★Niveau moyenSession du 20 avril 2023

Info B X-ENS MP 2023 — sujet, corrigé et rapport jury

Sujet Python de 2h. Moyenne 10.4, σ=3.3. Sujet, corrigé Hadamard et synthèse rapport jury.

Mohamed K.

Mohamed K.

Centralien · MPSI puis MP · Recherche ML santé

Aperçu rapide

Difficulté

★★★Niveau moyen

Moyenne

10.40/20

Top 25%

12.6

Présents

Top piège du sujet : Style récursif au lieu d'impératif — majoritairement échoué

Statistiques jury

Comment les candidats s'en sont sortis

Notes brutes officielles publiées par le jury — non harmonisées.

Moyenne

10.40

Médiane

10.4

Écart-type

3.30

Q1 (25%)

8.2

Q3 (75%)

12.6

Candidats présents

Analyse

Ce qu'a observé le jury

Synthèse Hadamard du rapport officiel — citations, chiffres et conseils du jury.

Présentation du sujet

Sujet Python de 2h. Structure de données 'texte' = liste de caractères. Partie I : différentiels par positions fixes (textes de même taille) — comparaison, dictionnaires de différences, application/retrait de différences, historique. Partie II/III : distance de Levenshtein (édition) — programmation dynamique en matrice (n+1)×(m+1), reconstruction du chemin optimal, modélisation comme plus court chemin, Dijkstra avec file de priorité.

Structure de l'épreuve

  1. Partie IPartie I — Différentiels par positions fixes (textes de même taille)(Q1-Q9)Niveau attendu

    Test d'égalité (Q1), comparaison caractère par caractère (Q2), dictionnaire de différences (Q3), construction de tranches modifiées (Q4-Q5), application sans modification en place (Q5-Q6), historique avec append/pop (Q7). Q1-Q9 : 88-100 % de copies, moyennes 0.64-0.93/1.

  2. Partie IIPartie II — Distance d'édition (Levenshtein) en programmation dynamique(Q10-Q13)Difficile

    Matrice de coûts (n+1)×(m+1) — erreur fréquente de travailler sur n×m. Q9 : récurrence à 3 cas. Q11 : reconstruction du chemin en partant de (n+1, m+1) et remontant, pas de (0,0). Q10 : 74,8 % traitée, moyenne 0,57.

  3. Partie IIIPartie III — Modélisation graphe et plus court chemin (Dijkstra)(Q14-Q17)Très difficile

    Caractérisation des sommets visités par Dijkstra. Pondérations des arcs : coût d'édition = 1, M ne sert pas. Files de priorité avec ajoute() et extraire_min() — log à inclure dans la complexité. Q13-Q17 : 2,5-25 % traitée, peu réussies (moyennes 0,15-0,55).

Analyse globale du jury

« Sujet Python obligatoire sur la gestion de versions de grands textes. Note moyenne des candidats français admissibles : 10,40/20, écart-type 3,30. En grande majorité, la syntaxe Python est maîtrisée. Toutes les questions se résolvaient en style impératif (boucles for, quelques while) — les candidats utilisant un style récursif ont majoritairement échoué. Lisibilité importante : noms de variables aidant le lecteur. Cas de base inutiles (texte vide) à éviter. Dépassements de bornes fréquents : while texte1[i] == texte2[i] and i < len(texte1) — la comparaison est exécutée avant la vérification de la borne. Utiliser les fonctions début(tr), avant(tr) et non les indices. »

Top pièges sanctionnés

  • Style récursif au lieu d'impératif — majoritairement échoué-2 pts

    « Toutes les questions de ce sujet se résolvaient naturellement avec des fonctions écrites en style impératif : boucles for, quelques boucles while. Les candidats qui ont tenté d'utiliser un style récursif pour certaines questions ont majoritairement échoué. »

  • Dépassement de bornes : comparaison avant test d'index dans while-2 pts

    « Il faut veiller aux dépassements de bornes de listes. Attention, dans while texte1[i] == texte2[i] and i < len(texte1) : il y a un dépassement puisque la comparaison texte1[i] == texte2[i] est exécutée avant d'avoir vérifié la borne. »

  • Modifier le texte en place au lieu de le recopier (Q5)-2 pts

    « La fonction ne doit pas modifier le texte en place, mais le recopier. Attention, l'instruction texte2 = texte1 ne recopie pas le texte1. »

  • Complexité O(len(texte1)*len(diff)) au lieu de O(len(texte1)) (Q5)-2 pts

    « Certains candidats donnent une complexité en O(len(texte1)*len(diff)). Il faut remarquer que, même s'il y a deux boucles imbriquées, le nombre total de passages dans la boucle la plus interne est bien O(len(texte1)). »

  • Récurrence Levenshtein incorrecte M[i+1][j+1] = M[i+1][j] + M[i][j+1] - M[i][j] (Q9)-3 pts

    « La solution proposée par plusieurs copies 'quand texte1[i] != texte2[i], M[i+1][j+1] = M[i+1][j] + M[i][j+1] - M[i][j]' est fausse. Contre exemple : texte1 = ['e', ' ', 'c', 'h', 'a', 't'], texte2 = ['h', 'i', 'e'] — cette approche donne 3, la bonne réponse est 5. »

Chapitres clés à maîtriser

Programmation Python (listes, dictionnaires, complexités)
Programmation dynamique (matrice, ordre de remplissage, reconstruction)
Algorithmes sur graphes (Dijkstra, file de priorité)
Distance d'édition / Levenshtein
Analyse de complexité (justification, log de file de priorité)

Ressources

Téléchargements

Sujet officiel, corrigé Hadamard et rapport jury — tout en un endroit.

FAQ

Questions fréquentes — 2023

Partager

Préparation X-ENS · Info MP

Bossez ce sujet 2023 avec un ancien taupin

Nos professeurs analysent votre copie sur ce sujet, identifient vos faiblesses et structurent votre révision pour la session 2024.

Sujet