Mines Informatique Commune MP PC PSI 2017Sujet, corrigé et rapport du jury
Étude de trafic routier
- Programmation Python : listes, booléens, boucles
- Copie de listes et découpage
- Complexité des algorithmes
- Recherche dichotomique
- Représentation des entiers en binaire
- Terminaison d'un algorithme
- Bases de données : requêtes SQL et jointures
Téléchargements
Présentation du sujet
Difficulté moyenneSimulation de trafic routier : files de voitures en listes de booléens, atteignabilité et SQLAfficher ou masquer la section
Présentation du sujet
Difficulté moyenneLe sujet modélise des files de voitures à sens unique par des listes de booléens et programme en Python leur évolution, d'abord pour une file puis pour deux files qui se croisent. Il étudie ensuite l'atteignabilité d'une configuration (élimination des doublons, recherche dichotomique, codage binaire, terminaison) et se termine par des requêtes SQL sur une base de croisements et de voies. L'épreuve dure 1 h 30.
- 1Partie I : préliminairesReprésentation d'une file par une liste de booléens, test d'occupation d'une case, dénombrement des files et égalité de deux listes.
- 2Partie II : déplacement de voitures dans la fileFonctions Python qui font avancer les voitures sur tout ou partie d'une file, avec une case éventuellement bloquée.
- 3Partie III : une étape de simulation à deux filesSimulation de deux files qui se croisent en leur milieu, l'une prioritaire sur l'autre.
- 4Partie IV : transitionsQuestions qualitatives sur le blocage d'une voiture et le passage d'une configuration à une autre.
- 5Partie V : atteignabilitéÉlimination des doublons en temps linéaire, comparaison d'une recherche séquentielle et d'une dichotomie, conversion binaire, terminaison et nombre minimal d'étapes.
- 6Partie VI : base de donnéesRequêtes SQL simples et avec jointure sur un réseau de croisements et de voies.
Difficulté moyenne. Le jury décrit un sujet assez long mais d'une difficulté raisonnable, qui a permis d'occuper tout le spectre des notes.
Ce qu'a observé le jury
6 erreurs relevéesProgrammes trop longs pour des tâches simples · Confusion entre while et if · Mauvaise gestion des listesAfficher ou masquer la section
Ce qu'a observé le jury
6 erreurs relevéesLe sujet couvrait un large éventail des notions des deux années et a bien classé les candidats. Le défaut principal relevé est le manque de concision : des programmes très longs là où deux lignes suffisaient. Le jury insiste sur la maîtrise de la syntaxe de base de Python et de SQL et sur des programmes qui font exactement ce qui est demandé.
Les erreurs les plus sanctionnées
- 1Programmes trop longs pour des tâches simplesQ3, Q9, Q10
Pour tester si une case est occupée, il suffisait de renvoyer L[i]. Beaucoup de candidats ont écrit des tests inutiles sur True et False, voire une boucle hors de propos.
« n’a été proposée que par une minorité de candidats. »
- 2Confusion entre while et if
Remplacer un test par une boucle est une faute grave, lourdement sanctionnée.
« Une faute grave a été vue dans un nombre appréciable de copies »
- 3Mauvaise gestion des listesQ9, Q10
Affecter L[0] dans une liste vide, écrire L=L+a au lieu de L=L+[a], ou croire que L2=L crée une copie indépendante sont des erreurs fréquentes. Aux questions 9 et 10, il fallait créer une nouvelle liste.
« l’instruction L2=L ne suffit pas à créer une liste L2 indépendante de L. »
- 4Bornes des itérateurs et indicesQ9, Q10, Q17
Parcourir une liste avec range(len(L)+1) ou mal utiliser range avec un pas négatif est sanctionné. Le dernier élément de L[0:m] n'est pas L[m].
« Toute erreur sur ce point est sanctionnée »
- 5Complexité linéaire non respectéeQ17
L'énoncé imposait une complexité linéaire pour éliminer les doublons. Utiliser in, del ou pop ne respecte pas cette contrainte.
« Question en apparence simple, mais qui contenait de nombreux pièges dans lesquels beaucoup de candidats sont tombés. »
- 6Terminaison affirmée sans preuveQ24
La présence d'une boucle while ne prouve pas qu'elle s'arrête : il faut le démontrer.
Ce qui a été bien réussi
- La question 4 est en général correctement traitée.
- La question 6 sur la complexité est bien traitée en général.
- La question qualitative 14 est bien traitée.
- Les questions 18 et 19 sont assez bien traitées.
- La syntaxe des jointures SQL est mieux maîtrisée que l'année précédente.
Conseils du jury
- Aller au plus simple : un programme concis et bien indenté.
- Ne pas perdre de temps à commenter des programmes simples.
- Soigner la lisibilité de l'écriture et l'indentation.
- Réutiliser les fonctions écrites aux questions précédentes, comme en Q12.
- Répondre de façon claire et non ambiguë aux questions qualitatives.
- Pour une comparaison d'algorithmes, reconnaître la dichotomie et citer les complexités.
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 PARISTECH, TELECOM PARISTECH, MINES PARISTECH, MINES SAINT-ÉTIENNE, MINES NANCY, IMT Atlantique (ex Télécom Bretagne), ENSAE PARISTECH.
CONCOURS 2017
ÉPREUVE D'INFORMATIQUE COMMUNE
Durée de l'épreuve : 1 heure 30 minutes
Les candidats sont priés de mentionner de façon apparente sur la première page de la copie :
INFORMATIQUE COMMUNE
L'énoncé de cette épreuve comporte 7 pages de texte.
Si, au cours de l'épreuve, un candidat repère ce qui lui semble être une erreur d'énoncé, il le signale sur sa copie et poursuit sa composition en expliquant les raisons des initiatives qu'il est amené à prendre.
Étude de trafic routier
Notations
- on note len
(L) sa longueur; - pour
i entier,0 ≤ i ≤ len(L) , l'élément de la liste d'indicei est notéL[i] ; - pour
i etj entiers,0 ≤ i < j ≤ len(L), L[i : j] est la sous-liste composée des élémentsL[i] , ...,L[j − 1] ; -
p∗L , avecp entier, est la liste obtenue en concaténantp copies deL . Par exemple,3∗[0] est la liste[0, 0, 0] .
.jpg)

\end{figure}
Partie I. Préliminaires
Q1 - Expliquer comment représenter une file de voitures à l'aide d'une liste de booléens.
Partie II. Déplacement de voitures dans la file
- une voiture se trouvant sur la case la plus à droite de la file sort de la file;
- une voiture peut avancer d'une case vers la droite si elle arrive sur une case inoccupée;
- une case libérée par une voiture devient inoccupée;
- la case la plus à gauche peut devenir occupée ou non, selon le cas considéré.
Par exemple, l'application de cette fonction à la liste illustrée par la Figure 2(a) permet d'obtenir soit la liste illustrée par la Figure 2(b) lorsque l'on considère qu'aucune voiture nouvelle n'est introduite, soit la liste illustrée par la Figure 2(c) lorsque l'on considère qu'une voiture nouvelle est introduite.
.jpg)

.jpg)
nouvelle voiture n'est introduite.Définir en Python la fonction avancer_debut
Par exemple, la file | | | | | | | | | | devient | | | | | | | | |
Définir en Python la fonction avancer_debut_bloque

Partie III. Une étape de simulation à deux files
Partie IV. Transitions

Partie V. Atteignabilité
Q17 - Écrire en langage Python une fonction elim_double(L) non récursive, de complexité linéaire en la taille de
def doublons(liste):
if len(liste)>1:
if liste[0] != liste[1]:
return [liste[0]] + doublons(liste[1:])
del liste[1]
return doublons(liste)
else:
return liste
doublons([1, 1, 2, 2, 3, 3, 3, 5])
Quel est le meilleur choix? Justifier.
def in1(element,liste):
a = 0
b = len(liste)-1
while a <= b and element >= liste[a]:
if element == liste[a]:
return True
else:
a = a + 1
return False
def in2(element,liste):
a = 0
b = len(liste)-1
while a < b:
pivot = (a+b) // 2 # l'opérateur // est la division entière
if liste[pivot] < element:
a = pivot + 1
else:
b = pivot
if element == liste[a]:
return True
else:
return False
def versFile(n, taille):
res = taille * [False]
i = taille - 1
while ...:
if (n % 2) != 0: # % est le reste de la division entière
res[i] = True
n = n // 2 # // est la division entière
i = i - 1
return res
Q25 - Compléter la fonction recherche pour qu'elle indique le nombre minimum d'étapes à faire pour passer de init à but lorsque cela est possible. Justifier la réponse.
Partie VI. Base de données
La base de données du réseau routier est constituée des relations suivantes :
- Croisement(id, longitude, latitude)
- Voie(id, longueur, id_croisement_debut, id_croisement_fin)
Q26 - Écrire la requête SQL qui renvoie les identifiants des croisements atteignables en utilisant une seule voie à partir du croisement ayant l'identifiant
SELECT V2.id_croisement_fin
FROM Voie as V1
JOIN Voie as V2
ON V1.id_croisement_fin = V2.id_croisement_debut
WHERE V1.id_croisement_debut = c
Annexe
def recherche(but, init):
espace = [init]
stop = False
while not stop:
ancien = espace
espace = espace + successeurs(espace)
espace.sort() # permet de trier espace par ordre croissant
espace = elim_double(espace)
stop = egal(ancien,espace) # fonction définie à la question 5
if but in espace:
return True
return False
def successeurs(L):
res = []
for x in L:
L1 = x[0]
L2 = x[1]
res.append( avancer_files(L1, False, L2, False) )
res.append( avancer_files(L1, False, L2, True) )
res.append( avancer_files(L1, True, L2, False) )
res.append( avancer_files(L1, True, L2, True) )
return res
# dans une liste triée, elim_double enlève les éléments apparaissant plus d'une fois
# exemple : elim_double([1, 1, 2, 3, 3]) renvoie [1, 2, 3]
def elim_double(L):
# code à compléter
# exemple d'utilisation
# debut et fin sont des listes composées de deux files de même longueur impaire,
# la première étant prioritaire par rapport à la seconde
debut = [5*[False], 5*[False]]
fin = [3*[False]+2*[True], 3*[False]+2*[True]]
print(recherche(fin,debut))
Fin de l'épreuve.
Questions fréquentes
4 questionsSur quoi porte le sujet d'informatique commune Mines 2017 ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quoi porte le sujet d'informatique commune Mines 2017 ?
Sur la simulation de trafic routier : files de voitures codées par des listes de booléens en Python, étude de l'atteignabilité d'une configuration, puis requêtes SQL sur un réseau routier.
Quelles erreurs le jury a-t-il le plus relevées en informatique Mines 2017 MP PC PSI ?
Des programmes beaucoup trop longs, la confusion entre while et if, des erreurs sur les listes (copie avec L2=L, ajout d'un élément) et des bornes d'itérateurs fausses.
Le sujet d'informatique commune Mines-Ponts 2017 est-il difficile ?
Le jury le juge assez long mais d'une difficulté raisonnable. La question 11 est présentée comme plutôt difficile, et les questions 23 et 25 ont été rarement traitées.
Quelles questions SQL tombent en informatique commune Mines 2017 ?
Une requête simple sans jointure, une requête avec jointure et la lecture d'une requête qui joint la table Voie à elle-même. La première a été relativement mal traitée.
Pas de description pour le moment
