01.
import
copy
02.
def
rodar(matriz, grau):
03.
04.
nova_matriz
=
copy.deepcopy(matriz)
05.
for
i
in
range(len(matriz)):
06.
for
j
in
range(len(matriz[i])):
07.
if
grau
=
=
90
:
08.
nova_matriz[j][len(matriz)
-
(i
+
1
)]
=
matriz[i][j]
09.
elif
grau
=
=
180
:
10.
nova_matriz[len(matriz)
-
(i
+
1
)][len(matriz)
-
(j
+
1
)]
=
matriz[i][j]
11.
elif
grau
=
=
270
:
12.
nova_matriz[len(matriz)
-
(j
+
1
)][i]
=
matriz[i][j]
13.
return
nova_matriz
14.
15.
if
__name__
=
=
'__main__'
:
16.
print
(rodar([[
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
]],
90
))
A chave para a solução consiste em perceber que o número de linhas e de colunas original pode mudar com a rotação. Por essa razão não podemos fabricar a nova matriz a partir da matriz inicial. Devemos criá-la de raíz. Uma possibilidade é criar a matriz com a nova estrutura e colocando no seu interior zeros. Com a estrutura depende do valor da rotação vamos começar por considerar o caso de uma rotação de 90º, na qual as linhas passam a colunas. Assim uma matriz mXn passa a nXm.
1.
nova_matriz
=
[]
2.
for
i
in
range(len(matriz[
0
])):
3.
nova_linha
=
[]
4.
for
j
in
range(len(matriz)):
5.
nova_linha.append(
0
)
6.
nova_matriz.append(nova_linha)
1.
nova_matriz
=
[[
0
for
j
in
range(len(matriz))]
for
i
in
range(len(matriz[
0
]))]
1.
def
rodar_90(matriz):
2.
nova_matriz
=
[[
0
for
j
in
range(len(matriz))]
for
i
in
range(len(matriz[
0
]))]
# <<------ Aqui está o segredo :-)
3.
for
linha
in
range(len(matriz)):
4.
for
coluna
in
range(len(matriz[
0
])):
5.
nova_matriz[coluna][len(matriz)
-
1
-
linha]
=
matriz[linha][coluna]
6.
return
nova_matriz
01.
def
rodar(matriz,grau):
02.
if
grau
=
=
90
:
03.
return
rodar_90(matriz)
04.
elif
grau
=
=
180
:
05.
return
rodar_180(matriz)
06.
elif
grau
=
=
270
:
07.
return
rodar_270(matriz)
08.
else
:
09.
print
(
'Oops, isso ainda não sei fazer...!'
)
10.
return
-
1
1.
def
rodar_180(matriz):
2.
return
rodar_90(rodar_90(matriz))
3.
4.
def
rodar_270(matriz):
5.
return
rodar_90(rodar_180(matriz))
Sem comentários:
Enviar um comentário