Vous êtes sur la page 1sur 2

Master Data Science 2017-2018

Module Python et Algorithme par Dr KADJO

Devoir de rattrapage
Durée : 2H00

« Ordinateurs, tablette et autres téléphones interdits, Documents non autorisés » »


Si, au cours de l'épreuve, un candidat repère ce qui lui semble être une erreur d'énoncé, il le signale sur sa
copie et poursuit sa composition en expliquant les raisons des initiatives qu'il est amené à prendre.

Exercice 1 Du Python ---------------------------------------------------------------(8 points)


1) Qu’affiche chacun des algorithmiques suivants pour n = 4

def liste_u(n): def nesting(n):


u=1 m = n
L=[u] sum = 0
for i in range(n): i = 0
u=1-2*u while i < n:
L.append(u) j = 0
while j < n:
return L
k = 0
def u(n): while k < m:
L=liste_u(n) sum += 2
return L[-1] k += 1
j += 1
i += 1
def devine(n,b=1) : return sum
if (n = = 0) :
return b
return devine(n-1,n*b)

Exercice 2 Un peu plus de Python --------------------------------------------------- 12 points


Un échiquier est un plateau avec 8 lignes et 8 colonnes. Ces lignes et ces colonnes seront, dans
l’exercice, numérotées de 0 à 7. Une position sur l’échiquier est un couple (i,j) d’entiers compris
entre 0 et 7 inclus, avec i le numéro de ligne et j le numéro de colonne.
7 7

6 6

5 5

4 4

3 3

2 2

1 1

0 0
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

Exemple d’un Cavalier Exemple d’un cavalier


près des bords près des bords
Un cavalier placé sur l’échiquier se déplace en bougeant de 2 cases dans une direction (verticale ou
horizontale) et de 1 case perpendiculairement. Le dessin ci-dessus à gauche illustre les 8 possibilités
de déplacement d’un cavalier situé loin des bords de l’échiquier. Comme le cavalier ne peut pas
sortir du plateau, lorsqu’il est près des bords, il a moins de possibilités de se déplacer, comme
l’illustre le dessin ci-dessus à droite.

1) Ecire une fonction Valide prenant en argument deux entiers relatifs i et j et vérifiant que le
couple (i, j) est bien une position de l’échiquier. Cette fonction Valide devra renvoyer un booléen.

2) Ecrire une fonction CoupSuivant prenant en argument une position (i,j) et renvoyant la liste des
positions que peut atteindre un cavalier placé en (i,j) en un seul coup.

3) Ecrire une fonction Cavalier prenant en argument une position (i0,j0) et renvoyant une matrice M
de taille 8x8 telle que M[i,j] est le nombre minimum de coups nécessaires à un cavalier situé en
(i0,j0) pour arriver à la position (i,j)