1 \documentclass[11pt,a4paper,french]{article}
2 \usepackage[francais]{babel}
3 \usepackage[utf8]{inputenc}
10 \usepackage[amsmath,thmmarks,thref,framed]{ntheorem}
11 \usepackage[dvips]{graphics}
15 %\usepackage{slashbox}
18 \usepackage{skak,chessboard}
21 \usepackage[a4paper]{geometry}
23 \geometry{hmargin=1cm, tmargin=1cm,bmargin=1.5cm}
24 \title{Département d'informatique, partiel de Mathématiques discrètes.\\
25 Semestre 3, mars 2013, durée 30 min, J.-F. Couchot.}
33 Nom:& ........................................\\
34 Prénom:& ........................................\\
37 Seuls les codes développés en TP sont autorisés.
38 Vos réponses seront données directement ci-dessous en python.
41 \section*{Échange de cavaliers au jeu d'échec}
43 Sur un échiquier 3x3, les deux cavaliers noirs sont placés sur les cases a1 et c1, les deux cavaliers blancs occupant les cases a3 et c3, comme représenté
46 \def\mylist{Na3,Nc3,na1,nc1}
54 L'objectif est de déterminer les mouvements qui autoriseront les
55 cavaliers blancs à prendre les places des cavaliers noirs, et vice versa.
57 Pour rappel, un cavalier se déplace en ``L'': par exemple le cavalier noir,
58 en a1, peut se rendre soit en c2, soit en b3.
60 Comme il y a neuf cases sur le plateau, l'état du
61 jeu est mémorisé à l'aide d'un 9-uplet
63 (x_0,x_1,x_2,x_3,x_4,x_5,x_6,x_7,x_8)
66 $x_0$ mémorise ce qu'il y a sur la case a1,
67 $x_1$ mémorise ce qu'il y a sur la case a2, \ldots,
68 $x_8$ mémorise ce qu'il y a sur la case c3.
69 Un case $x_i$ est soit vide, soit avec un cavalier noir, soit avec un
70 cavalier blanc. On mémorise ceci en affectant à $x_i$
71 soit la valeur 'v' (pour vide),
72 soit la valeur 'n' (pour cavalier noir) ou
73 soit la valeur 'b' (pour cavalier blanc).
78 \item Donner le 9-uplet \verb+initial+
79 qui représente l'état initial du jeu selon ce codage.
80 Donner le 9-uplet \verb+final+
81 qui représente l'état final du jeu selon ce codage.
84 \item Donner le code de la fonction \verb+nbre(u,c)+ qui reçoit en paramètres
85 un $n$-uplet \verb+u+ et un caractère \verb+c+ et qui retourne le nombre
86 d'occurrences de ce caractère dans \verb+u+. Par exemple
87 \verb+nbre(initial,'b')+ vaut 2 et \verb+nbre(initial,'v')+ vaut 5.
90 \item Si l'on construisait tous les plateaux de jeu 3x3 sans tenir compte
91 du nombre de cavaliers, combien en aurait-on? Justifier.
93 \item Donner le code qui initialise la liste de plateaux,
94 nommée \verb+plateaux+,
95 avec tous les plateaux possibles, mais en tenant compte du fait qu'il
96 y a toujours deux cavaliers noirs et deux cavaliers blancs sur chaque
99 \item Commenter le code suivant (à sa droite)
100 en détaillant la nature des paramètres,
101 ce qui est retourné, et pourquoi cette valeur?
104 def deplacement(co,ce):
117 \item Donner le code de la fonction \verb+deplacement_ok(p1,p2)+
118 qui retourne vrai si l'on peut passer du plateau
119 \verb+p1+ au plateau \verb+p2+.
122 \item Donner le code manquant
123 qui permet de résoudre le problème en utilisant