Aller au contenu

Index des sujets 2023

Corrigé sujet 36 - Année : 2023

Sujet 36 - 2023

Exercice 1

1
2
3
4
5
6
def couples_consecutifs(tab):
    consecutifs = []
    for i in range(len(tab)-1):
        if tab[i+1]==tab[i]+1:
            consecutifs.append((tab[i],tab[i+1]))
    return consecutifs

Commentaires

  • La condition tab[i+1]==tab[i]+1 permet de tester que deux éléments consécutifs de la liste sont deux entiers qui se suivent.
  • On peut utiliser les définitions de liste par compréhension :
        def recherche(tab):
            return [(tab[i],tab[i+1])  for i in range(len(tab)-1) if tab[i+1]==tab[i]+1]
    

Exercice 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def propager(M, i, j, val):
    if M[i][j] == 1: #(1)
        M[i][j] = val
        # l'element en haut fait partie de la composante
        if i-1 >= 0 and M[i-1][j] == 1: #(2)
            propager(M, i-1, j, val)
        # l'element en bas fait partie de la composante
        if i+1 < len(M) and M[i+1][j] == 1: #(3)
            propager(M, i+1, j, val)
        # l'element à gauche fait partie de la composante
        if j-1 >=0 and M[i][j-1] == 1:
            propager(M, i, j-1, val)
        # l'element à droite fait partie de la composante
        if j+1 < len(M[i]) and M[i][j+1]:
            propager(M, i, j+1, val)
  1. La propagation n'a lieu que si le pixel vaut 1 (sinon elle s'arrête)
  2. On relance la propagation à partir de la case voisine si celle-ci est est dans la grille (première partie de la condition) et aussi dans la même composante (seconde partie de la condition)

Attention

Dans le code fourni les lignes 5 à 15 ne sont pas indentées, elles sont donc exécutées même si M[i][j] != 1ce qui donne des résultats faux !