In [1]:
def afficher(tab):
    for ligne in tab:
        for element in ligne:
            print(element, end='\t')
        print()
In [2]:
A  = [['🕱','♡', '♡'],
      ['♡','🕱', '🕱'],
      ['♡','♡','♡'], 
      ['♡','♡','♡'],
      ['♡','♡','♡'],
      ['♡','♡','🕱'],
      ['♡','♡','♡']]
In [3]:
B = [['🕱','♡', '♡'],
      ['♡','🕱', '🕱'],
      ['♡','♡','♡'], 
      ['♡','♡','♡']]
In [4]:
afficher(B)
🕱	♡	♡	
♡	🕱	🕱	
♡	♡	♡	
♡	♡	♡	
In [5]:
def manhattan(a,b, p,q):
    """
    (a,b) -- coordonnées (ligne, colonne) d'une cellule 
    (p,q) -- coordonnées (ligne, colonne) d'une cellule
    renvoie la distance manhattan entre ces deux cellules
    """
    return abs(a-p)+abs(b-q)
In [6]:
def minimum(liste):
    """
    liste: liste d'entiers
    renvoie la valeur minimale contenue dans liste
    """
    mini = liste[0]
    for valeur in liste:
        if valeur < mini:
            mini = valeur
    return mini
In [7]:
def distance_aux_pollutions(grille, a,b):
    """
    grille -- matrice, chaque cellule contenant '🕱' ou '♡'
    (a,b) -- couple (ligne, colonne) d'une cellule
    renvoie la distance manhattan minimale de la cellule (a,b) à une case '🕱' de grille
    """
    liste_distances = []
    for col in range(0,len(grille[0])):
        for lig in range(0, len(grille)):
            if grille[lig][col] == '🕱':            
                liste_distances.append(manhattan(a,b, lig, col))
    return minimum(liste_distances)
In [8]:
distance_aux_pollutions(B,3,1)
Out[8]:
2
In [9]:
def grille_dist_pollutions(grille):
    largeur = len(grille[0]) # nombre de colonnes de la grille
    hauteur = len(grille) # nombre de lignes de la grille
    
    D = [[0 for k in range(largeur)] for j in range(hauteur)]
    
    for lig in range(0, hauteur):
        for col in range(0,largeur):
            D[lig][col] = distance_aux_pollutions(grille, lig,col)
    return D
In [10]:
afficher(grille_dist_pollutions(A))
0	1	1	
1	0	0	
2	1	1	
3	2	2	
3	2	1	
2	1	0	
3	2	1	
In [11]:
def cellule_refuge(grille):
    """
    renvoie les coordonnées d'une cellule parmi les plus éloignées 
    de toute région polluée
    """
    
    # la matrice des distances aux pollutions:
    largeur = len(grille[0]) # nombre de colonnes de la grille
    hauteur = len(grille) # nombre de lignes de la grille
    D = grille_dist_pollutions(grille)
    
    # calcul des coordonnées d'une cellule 
    # d'éloignement aux pollutions maximal: 
    maxi = D[0][0]
    cellule = (0,0)
    for lig in range(0, hauteur):
        for col in range(0,largeur):
            dist = D[lig][col]
            if dist > maxi:
                maxi = dist
                cellule = (lig, col)
    return cellule
    
In [12]:
cellule_refuge(A)
Out[12]:
(3, 0)