Corrigé CCINP 2026 Informatique MPI — Partie II (II.2) (Q30 à Q41) : Le mot infini de Thue-Morse : carrés, cubes, entrelacements
Sujet officiel du concours CCINP, session 2026, épreuve Informatique MPI. Corrigé rédigé par Ibrahim Alame.
Sujet officiel (PDF, site du concours)
Énoncé
Le mot infini s'obtient en itérant (, ) une infinité de fois à partir de . Un mot est un carré si , un cube si () ; exemple : est un cube, . Mots représentés par des int list (OCaml).
Q30. Tout mot de longueur contient un carré.
Q31. Écrire une fonction récursive divise_mot : int list -> int list * int list qui coupe un mot de longueur paire en ses deux moitiés.
Q32. En déduire est_carre : int list -> bool, en vérifiant la parité de .
Q33. ne contient ni ni .
Entrelacement : en est un s'il contient un facteur , facteurs non vides, avec (les facteurs et se chevauchent sur ). Exemple : , qui contient aux positions et .
Q34. Écrire une fonction récursive sousliste : int list -> int -> int -> int list : sousliste lst i l est la sous-liste de longueur l commençant à l'indice i, tronquée en fin de liste.
Q35. Écrire est_entrelacement : int list -> bool, en utilisant obligatoirement sousliste.
Q36. Un mot qui contient un cube est un entrelacement.
On admet : un entrelacement de partie commune de longueur est aussi un entrelacement de partie commune de longueur .
Q37. Un entrelacement contient un facteur , , .
Q38. Soit dont chaque bloc vaut ou . Les mots et ne sont pas découpables en blocs valant ou .
Indication admise : si avec , alors est impair.
Q39. Avec Q37 : si est un entrelacement, en est un.
Q40. Par récurrence, n'est pas un entrelacement.
Q41. En déduire que ne contient pas de cube.
Corrigé
Dans les définitions de carré et de cube, est implicitement non vide : le mot vide est un carré et un cube, facteur de tout mot. « Contenir un carré » signifie donc contenir un facteur avec . Par Q28, est un préfixe de , et
Q30. Il suffit de traiter les mots de longueur exactement : un mot plus long contient son préfixe de longueur . Soit . Si , ou , contient un carré ( une lettre). Sinon, l'alphabet n'ayant que deux lettres, ( et ) et (), donc est un carré. Dans tous les cas, contient un carré. La borne est optimale : et sont sans carré (énumération exhaustive exécutée : mots sans carré de longueur , aucun de longueur ou ).
Q31. La fonction auxiliaire récursive coupe k l rend le couple (les premiers éléments de l, le reste), en gardant l'ordre des lettres ; on l'appelle avec (la récursivité demandée est portée par cette fonction locale).
let divise_mot m =
let rec coupe k l =
if k = 0 then ([], l)
else match l with
| [] -> failwith "impossible : k <= |l|"
| x :: q -> let (a, b) = coupe (k - 1) q in (x :: a, b)
in
coupe (List.length m / 2) m
Correction par récurrence sur : si coupe (k-1) q rend les premiers éléments de q et le reste, alors (x :: a, b) rend les premiers de x :: q et le reste. Le cas [] ne se produit pas puisque est préservé ; il est écrit pour que le filtrage soit exhaustif. Terminaison : décroît. Coût : (List.length, au programme, puis appels). Exécuté : divise_mot [1;1;0;1;1;0] rend ([1;1;0], [1;1;0]), et le mot vide donne ([], []).
Q32.
let est_carre m =
List.length m mod 2 = 0 &&
(let (a, b) = divise_mot m in a = b)
est un carré si et seulement si est pair et ses deux moitiés sont égales ; l'opérateur && étant paresseux, divise_mot n'est appelée que sur un mot de longueur paire, et un mot impair rend false (et non une exception). L'égalité structurelle = compare les deux listes élément par élément, en . Exécuté : true pour , , , ; false pour , , , .
Q33. Par Q27, : chaque bloc de vaut ou et contient deux lettres différentes. Un facteur de longueur , , contient un bloc entier : si est pair, si est impair. Il contient donc deux lettres différentes et n'est ni ni .
100 % gratuit
La suite du corrigé est sur Adloun
Le corrigé rédigé en entier, question par question, et le tuteur pour poser des questions sur ce sujet.
Voir le corrigé complet, gratuitementInscription gratuite en 30 secondes (e-mail, nom d'utilisateur, mot de passe, classe ou profil), sans carte bancaire : arrivée directe sur le corrigé.