O problema: Duas palavra dizem-se deslocadas de n posições se se puder obter os caracteres de uma deslocando cada caracter da outra n posições no alfabeto. Por exemplo, HAL e IBM são palavras deslocadas com uma distância de 1. Escreva um programa que determina se duas palavras são deslocadas ou não de n.
A solução. Definimos o alfabeto e depois procuramos as posições no alfabeto dos caracteres presentes nas duas palavras. É preciso que todas as diferenças tenham o mesmo valor, igual a n.
01.
def
deslocadas(pal_1, pal_2,n):
02.
"""
03.
pal_1 é pal_2 quand se deslocam todos os caracteres de n posições?
04.
Exemplo: IBM,HAL e n = 1.
05.
"""
06.
alfabeto
=
'abcdefghijklmnopqrstuvwxyz'
07.
for
i
in
range(len(pal_1)):
08.
indice_1
=
alfabeto.find(pal_1[i])
09.
indice_2
=
alfabeto.find(pal_2[i])
10.
if
(indice_1
-
indice_2) !
=
n:
11.
return
False
12.
return
True
1.
def
desloc(p_1,p_2,n):
2.
return
(deslocadas(p_1, p_2,n)
or
deslocadas(p_2, p_1,n)
O problema: Suponha que tem duas imagens a preto e branco e pretende saber se uma delas, a mais pequena,ocorre na imagem maior. Escreva um programa que resolve esta questão.
A solução. O problema desdobra-se em dois sub-problemas: saber se a operação é possível e, no caso afirmativo, calcular a ocorrência do canto superior esquerdo. Para simplificar a questão criámos um pequeno programa auxiliar que determina se duas imagens são iguais ou não.
01.
def
ocorre(img_1, img_2):
02.
# possivel
03.
n_linhas_1
=
len(img_1)
04.
n_colunas_1
=
len(img_1[
0
])
05.
n_linhas_2
=
len(img_2)
06.
n_colunas_2
=
len(img_2[
0
])
07.
possivel
=
(n_linhas_1 <
=
n_linhas_2)
and
(n_colunas_1 <
=
n_colunas_2)
08.
# verifica
09.
for
l
in
range(n_linhas_2
-
n_linhas_1
+
1
):
10.
for
c
in
range(n_colunas_2
-
n_colunas_1
+
1
):
11.
# verifica se imagem 1 ocorre a partir da posição (l,c)
12.
if
igual(img_1,img_2,l,c):
13.
return
(l,c)
14.
return
(
-
1
,
-
1
)
15.
16.
def
igual(img_1,img_2,l,c):
17.
for
i
in
range(len(img_1)):
18.
for
j
in
range(len(img_1[
0
])):
19.
if
img_1[i][j] !
=
img_2[l
+
i][c
+
j]:
20.
return
False
21.
return
True