Data una matrice quadrata n x n, scrivere una funzione che calcoli la somma di tutti gli elementi appartenenti alle due diagonali principali (la diagonale principale e quella secondaria), ma sommi solo gli elementi pari della diagonale principale e quelli dispari della diagonale secondaria.
def compute_sum(m):
total_sum = 0
for i in range(len(m)):
if m[i][i] % 2 == 0:
total_sum += m[i][i]
if m[i][len(m)-i-1] % 2 != 0:
total_sum += m[i][len(m)-i-1]
return total_sum
m = [
[2, 4, 7],
[3, 1, 3],
[2, 2, 4]
]
print(compute_sum(m))
Data una matrice n x m, scrivere una funzione che restituisca la matrice trasposta m x n. La trasposta di una matrice si calcola scambiando le righe con le colonne, quindi la riga 0 diventa la colonna 0 della prima matrice, la riga 1 la colonna 1, ecc.
def transpose(m):
# Assumiamo che la matrice non sia vuota!
new_matrix = []
for j in range(len(m[0])):
new_row = []
for i in range(len(m)):
new_row.append(m[i][j])
new_matrix.append(new_row)
return new_matrix
matrice = [
[2, 4, 7],
[3, 1, 3]
]
print(transpose(matrice))
Data una matrice n x n che rappresenta una griglia, dove ogni cella contiene 0 per una cella libera e 1 per una cella con ostacolo, scrivere una funzione che restituisca True se esiste un percorso dalla cella in alto a sinistra (0, 0) alla cella in basso a destra (n-1, n-1), False altrimenti. È possibile muoversi solo in orizzontale o verticale (non in diagonale) e si può assumere che in posizione (0, 0) ci sia sempre uno 0.
def valid_positions(m, position):
i, j = position[0], position[1]
to_check = []
if i > 0:
if m[i-1][j] == 0:
to_check.append((i-1,j))
if i < len(m)-1:
if m[i+1][j] == 0:
to_check.append((i+1,j))
if j > 0:
if m[i][j-1] == 0:
to_check.append((i,j-1))
if j < len(m)-1:
if m[i][j+1] == 0:
to_check.append((i,j+1))
return to_check
def exists_path(m):
visited_path = [(0,0)]
for position in visited_path:
to_check = valid_positions(m, position)
for element in to_check:
if element == (len(m)-1, len(m)-1):
return True
if element not in visited_path:
visited_path.append(element)
return False
matrice = [
[0, 0, 1, 0],
[1, 0, 1, 0],
[0, 0, 0, 0],
[1, 1, 0, 0]
]
print(exists_path(matrice))