Aller au contenu

Index des sujets 2023

Corrigé sujet 04 - Année : 2023

Sujet 04 - 2023

Exercice 1

1
2
3
4
5
def a_doublon(liste_triee):
    for i in range(len(liste_triee)-1):
        if liste_triee[i] == liste_triee[i+1]:
            return True
    return False

Note

  • La liste est supposée triée, donc si un doublon est présent c'est que deux nombres consécutifs sont égaux.
  • On parcourt la liste jusqu'à l'avant-dernier élément (le dernier n'a pas de sucesseur)

Exercice 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def voisinage(n, ligne, colonne):
    """ Renvoie la liste des coordonnées des voisins de la case (ligne, colonne) en gérant les cases sur les bords. """
    voisins = []
    for l in range(max(0,ligne-1), min(n, ligne+2)):
        for c in range(max(0, colonne-1), min(n, colonne+2)):
            if (l, c) != (ligne, colonne):
                voisins.append((l,c))
    return voisins

def incremente_voisins(grille, ligne, colonne):
    """ Incrémente de 1 toutes les cases voisines d'une bombe."""
    voisins = voisinage(len(grille),ligne,colonne)
    for l, c in voisins:
        if grille[l][c] != -1: # si ce n'est pas une bombe
            grille[l][c] = grille[l][c] + 1 # on ajoute 1 à sa valeur

def genere_grille(bombes):
    """ Renvoie une grille de démineur de taille nxn où n est le nombre de bombes, en plaçant les bombes à l'aide de  la liste bombes de coordonnées (tuples) passée en paramètre. """
    n = len(bombes)
    # Initialisation d'une grille nxn remplie de 0
    grille = [[0 for colonne in range(n)] for ligne in range(n)]
    # Place les bombes et calcule les valeurs des autres cases
    for ligne, colonne in bombes:
        grille[ligne][colonne] = -1# place la bombe
        incremente_voisins(grille,ligne,colonne)# incrémente ses voisins
    return grille

print(genere_grille([(1, 1), (2, 4), (3, 1), (3, 3), (4, 4)]))

Attention

Dans le pdf, La fonction genere_grille s'écrit parfois avec des accents (génère_grille) et parfois sans.