Aller au contenu

Suite audioactive de Conway⚓︎

Dans la suite mathématique Look and say, inventée en 1986 par le mathématicien John Horton Conway, un terme se détermine en annonçant les chiffres formant le terme précédent.

\[\begin{matrix}1\\11\\21\\1211\\111221\\312211\end{matrix}\]

Explication :

  • à partir de \(111221\),
  • on lit \(111\,22\,1\),
  • soit trois \(1\), puis deux \(2\), et un \(1\),
  • d'où \(31\,22\,11\) pour la ligne suivante.

On peut vérifier que la ligne suivante est \(13112221\).

Pour simplifier le code, on va modéliser cette suite par la liste des chiffres.

🐍 Script Python
LIGNE_1 = [1]
LIGNE_2 = [1, 1]
LIGNE_3 = [2, 1]
LIGNE_4 = [1, 2, 1, 1]
LIGNE_5 = [1, 1, 1, 2, 2, 1]
LIGNE_6 = [3, 1, 2, 2, 1, 1]
LIGNE_7 = [1, 3, 1, 1, 2, 2, 2, 1]

Écrire une fonction telle que conway_suivante(ligne) renvoie, sous forme de liste, la ligne suivante après ligne. Ceci pourrait permettre de faire des appels récursifs.

Exemples

🐍 Script Python
>>> conway_suivante([3, 1, 2, 2, 1, 1])
[1, 3, 1, 1, 2, 2, 2, 1]
>>> conway_suivante([1, 3, 1, 1, 2, 2, 2, 1])
[1, 1, 1, 3, 2, 1, 3, 2, 1, 1]

Code à compléter :

###
# testsbksl-nlbksl-nlLIGNEpy-und6 = [3, 1, 2, 2, 1, 1]bksl-nlLIGNEpy-und7 = [1, 3, 1, 1, 2, 2, 2, 1]bksl-nlLIGNEpy-und8 = [1, 1, 1, 3, 2, 1, 3, 2, 1, 1]bksl-nlassert conwaypy-undsuivante(LIGNEpy-und6) == LIGNEpy-und7bksl-nlassert conwaypy-undsuivante(LIGNEpy-und7) == LIGNEpy-und8bksl-nlbksl-nlbksl-nl# autres testsbksl-nlCONWAY = [bksl-nl [1],bksl-nl [1, 1],bksl-nl [2, 1],bksl-nl [1, 2, 1, 1],bksl-nl [1, 1, 1, 2, 2, 1],bksl-nl [3, 1, 2, 2, 1, 1],bksl-nl [1, 3, 1, 1, 2, 2, 2, 1],bksl-nl [1, 1, 1, 3, 2, 1, 3, 2, 1, 1],bksl-nl [3, 1, 1, 3, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1],bksl-nl [1, 3, 2, 1, 1, 3, 1, 1, 1, 2, 3, 1, 1, 3, 1, 1, 2, 2, 1, 1],bksl-nl [1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 3, 1, 1, 2, 1, 3, 2, 1, 1, 3, 2, 1, 2, 2, 2, 1],bksl-nl [3, 1, 1, 3, 1, 1, 2, 2, 2, 1, 2, 3, 2, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 1, 2, 1, 1, 3, 2, 1, 1],bksl-nl [1, 3, 2, 1, 1, 3, 2, 1, 3, 2, 1, 1, 1, 2, 1, 3, 1, 2, 2, 1, 1, 2, 3, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 3, 1, 1, 1, 2, 2, 1, 1, 3, 1, 2, 2, 1],bksl-nl [1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 1, 2, 1, 1, 1, 3, 1, 2, 3, 1, 1, 2, 1, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 2, 1, 3, 2, 1, 1, 3, 2, 1, 3, 2, 2, 1, 1, 3, 3, 1, 2, 2, 2, 1, 1, 3, 1, 1, 2, 2, 1, 1],bksl-nl [3, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 3, 1, 1, 1, 2, 3, 1, 1, 3, 1, 1, 1, 2, 1, 3, 2, 1, 1, 2, 3, 1, 1, 3, 2, 1, 3, 2, 2, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 1, 2, 1, 1, 1, 3, 2, 2, 2, 1, 2, 3, 1, 1, 3, 2, 2, 1, 1, 3, 2, 1, 2, 2, 2, 1],bksl-nl [1, 3, 2, 1, 1, 3, 2, 1, 3, 2, 2, 1, 1, 3, 3, 1, 1, 2, 1, 3, 2, 1, 1, 3, 3, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1, 1, 2, 1, 3, 2, 1, 1, 3, 1, 2, 1, 1, 1, 3, 2, 2, 2, 1, 1, 2, 3, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 3, 1, 1, 1, 2, 3, 1, 1, 3, 3, 2, 1, 1, 1, 2, 1, 3, 2, 1, 1, 3, 2, 2, 2, 1, 1, 3, 1, 2, 1, 1, 3, 2, 1, 1],bksl-nl [1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 1, 2, 1, 1, 1, 3, 2, 2, 2, 1, 2, 3, 2, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1, 2, 3, 2, 1, 1, 2, 3, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 1, 1, 1, 2, 3, 1, 1, 3, 3, 2, 2, 1, 1, 2, 1, 3, 2, 1, 1, 3, 2, 1, 3, 2, 2, 1, 1, 3, 3, 1, 1, 2, 1, 3, 2, 1, 2, 3, 1, 2, 3, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 3, 2, 2, 1, 1, 3, 1, 1, 1, 2, 2, 1, 1, 3, 1, 2, 2, 1],bksl-nl [3, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 3, 1, 1, 1, 2, 3, 1, 1, 3, 3, 2, 1, 1, 1, 2, 1, 3, 1, 2, 2, 1, 1, 2, 3, 1, 1, 3, 1, 1, 2, 2, 1, 1, 1, 2, 1, 3, 1, 2, 2, 1, 1, 2, 1, 3, 2, 1, 1, 3, 2, 1, 3, 2, 2, 1, 1, 2, 3, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 3, 3, 1, 1, 2, 1, 3, 2, 1, 2, 3, 2, 2, 2, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 1, 2, 1, 1, 1, 3, 2, 2, 2, 1, 2, 3, 2, 1, 1, 2, 1, 1, 1, 3, 1, 2, 1, 1, 1, 2, 1, 3, 1, 1, 1, 2, 1, 3, 2, 1, 1, 2, 3, 1, 1, 3, 1, 1, 2, 2, 2, 1, 2, 3, 2, 2, 2, 1, 1, 3, 3, 1, 2, 2, 2, 1, 1, 3, 1, 1, 2, 2, 1, 1],bksl-nl [1, 3, 2, 1, 1, 3, 2, 1, 3, 2, 2, 1, 1, 3, 3, 1, 1, 2, 1, 3, 2, 1, 2, 3, 1, 2, 3, 1, 1, 2, 1, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 2, 1, 3, 2, 1, 1, 3, 2, 1, 2, 2, 3, 1, 1, 2, 1, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 1, 2, 1, 1, 1, 3, 2, 2, 2, 1, 1, 2, 1, 3, 2, 1, 1, 3, 2, 1, 3, 2, 2, 1, 2, 3, 2, 1, 1, 2, 1, 1, 1, 3, 1, 2, 1, 1, 1, 2, 1, 3, 3, 2, 2, 1, 1, 2, 3, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 3, 1, 1, 1, 2, 3, 1, 1, 3, 3, 2, 1, 1, 1, 2, 1, 3, 1, 2, 2, 1, 1, 2, 3, 1, 1, 3, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 1, 3, 3, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1, 1, 2, 1, 3, 2, 1, 1, 3, 2, 1, 3, 2, 1, 1, 1, 2, 1, 3, 3, 2, 2, 1, 2, 3, 1, 1, 3, 2, 2, 1, 1, 3, 2, 1, 2, 2, 2, 1],bksl-nl [1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 1, 2, 1, 1, 1, 3, 2, 2, 2, 1, 2, 3, 2, 1, 1, 2, 1, 1, 1, 3, 1, 2, 1, 1, 1, 2, 1, 3, 1, 1, 1, 2, 1, 3, 2, 1, 1, 2, 3, 1, 1, 3, 2, 1, 3, 2, 2, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 1, 2, 1, 1, 2, 2, 1, 3, 2, 1, 1, 2, 3, 1, 1, 3, 2, 1, 3, 2, 2, 1, 1, 2, 3, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 3, 1, 1, 1, 2, 3, 1, 1, 3, 3, 2, 2, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 1, 2, 1, 1, 1, 3, 2, 2, 1, 1, 1, 2, 1, 3, 1, 2, 2, 1, 1, 2, 3, 1, 1, 3, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 2, 3, 2, 2, 2, 1, 1, 2, 1, 3, 2, 1, 1, 3, 2, 1, 3, 2, 2, 1, 1, 3, 3, 1, 1, 2, 1, 3, 2, 1, 2, 3, 1, 2, 3, 1, 1, 2, 1, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 2, 1, 3, 2, 1, 1, 3, 3, 1, 1, 2, 1, 3, 2, 1, 1, 2, 3, 1, 2, 3, 2, 1, 1, 2, 3, 1, 1, 3, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1, 1, 3, 1, 2, 1, 1, 1, 3, 1, 2, 3, 1, 1, 2, 1, 1, 2, 3, 2, 2, 1, 1, 1, 2, 1, 3, 2, 1, 1, 3, 2, 2, 2, 1, 1, 3, 1, 2, 1, 1, 3, 2, 1, 1],bksl-nl]bksl-nlbksl-nlsecret = all(conwaypy-undsuivante(CONWAY[i-1]) == CONWAY[i]bksl-nl for i in range(1, len(CONWAY)))bksl-nlassert secret, "Erreur à un test secret"bksl-nlbksl-nl 5/5

def conwaypy-undsuivante(ligne):bksl-nl precedent = ligne[0]bksl-nl nbpy-undconsecutifs = 0bksl-nl resultat = ...bksl-nl for chiffre in ligne:bksl-nl if chiffre == precedent:bksl-nl nbpy-undconsecutifs = ...bksl-nl else:bksl-nl resultat.append(...)bksl-nl resultat.append(...)bksl-nl precedent = ...bksl-nl nbpy-undconsecutifs = ...bksl-nl resultat.append(...)bksl-nl resultat.append(...)bksl-nl return ...bksl-nlbksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nlLIGNEpy-und6 = [3, 1, 2, 2, 1, 1]bksl-nlLIGNEpy-und7 = [1, 3, 1, 1, 2, 2, 2, 1]bksl-nlLIGNEpy-und8 = [1, 1, 1, 3, 2, 1, 3, 2, 1, 1]bksl-nlassert conwaypy-undsuivante(LIGNEpy-und6) == LIGNEpy-und7bksl-nlassert conwaypy-undsuivante(LIGNEpy-und7) == LIGNEpy-und8bksl-nlbksl-nlNone

A

Z

Retour en haut de la page