Examen Langage de Script pour l'ID Durée: 2h. Documents autorisés, à l'exception des livres. Exercice 1: Suivi d'animaux sauvages en montagne Dans cet exercice, vous participez à l'amélioration du suivi d'animaux sauvages en montagne (par exemple des ours dans les pyrénées). Diérents types de suivis sont réalisés. Certains animaux sont équipés d'un émetteur qui permet un relevé précis de leur localisation sur le territoire. Ce sont des repérages télémétriques, obtenus de manière journalière. Le format de ce chier (telemetrie.txt) est le suivant: [12/02/2012] mireille: 42.924252,-0.500794 pony: 42.801447,0.08194 [13/02/2012] mireille: 42.928,-0.500799 pony: 42.801447,0.08194 Chaque ligne donne les informations sur l'identité de l'animal, puis sa localisation (latitude, longitude). Donnez tout d'abord les fonctions Python permettant de : • savoir si le chier est valide. Le chier est valide si les dates sont incrémentées de manière correcte chaque jour, et les coordonnées géographiques se situent bien dans l'intervalle, +42.5/+43.5 pour la latitude et 1/+1 pour la longitude. • savoir si un animal (d'indentité donnée en paramètre) est en hibernation, c'est-à-dire si sa localisation est strictement identique depuis au moins 3 jours. Un autre type de suivi est eectué, sur la base des observations directes de personnes (traces, etc.). Les informations de ce type sont dans un chier observations.txt sous la forme suivante: observation num. : 435 date: 13/02/2012 lieu: Borce indices: traces de griffes An de vérier si ces observations sont conformes aux relevés télémétriques, une première étape consistera à considérer si les lieux coincident. Vous disposez d'une fonction localisation(lieu) qui renvoie un tuple correspondant à la latitude et à la longitude du lieu dit. Par exemple localisation(Borce) donne 42.885524,-0.552864. • Ecrire la fonction Python qui, pour un numéro d'observation, renvoie le nom du ou des animaux qui peuvent expliquer cette observation. Un animal explique une observation si à la date de l'observation il se situait selon le relevé télémétrique à proximité du lieu d'observation. La fonction devra renvoyer aucun animal correspondant si aucun animal n'explique l'observation. Exercice 2: Le compte est bon Ici, on va implanter une partie d'un algorithme permettant de répondre au problème du compte est bon. N Rappelons d'abord les règles de ce jeu: Le but du jeu est alors d'obtenir un nombre à partir d'un ensemble de nombres élémentaires +, ×, /, −. {n0 , . . . , nm }, en utilisant les 4 opérations arithmétiques Si on peut obtenir ce nombre, on dit alors que le compte est bon. On peut se servir une fois au plus des nombres de l'ensemble. Une solution n'est valide que si tous les résultats intermédiaires sont positifs, et que les divisions sont exactes. Exemple: Reconstituer le nombre 999 à partir de l'ensemble de nombres {2, 4, 6, 8, 10, 25}. Solution: • 6 + 10 = 16 • 16 × 2 = 32 • 4 × 8 = 32 • 32 × 32 = 1024 • 1024 − 25 = 999 Le principe de l'algorithme consiste à générer toutes les solutions possibles à partir de tous les sous-ensembles de l'ensemble des entiers positifs en entrée du programme. Important: Dans la suite, on représentera les ensembles des comptes obtenus à partir d'un ensemble d'entiers positifs par un arbre binaire de recherche c'est-à-dire vériant que pour chacun des n÷uds, la racine est plus grande (resp. (resp. petite) que tous les noeuds du sous-arbre gauche droit), et que les sous-arbres gauche et droit sont eux-mêmes de recherche. Les arbres binaires de recherche ayant été vus en TD4 (premier exercice du TD), vous pourrez supposer comme connues toutes les fonctions d'ajout, de recherche et de retrait d'un entier dans un arbre binaire de recherche, et donc les utiliser sans associer le code python sur votre feuille d'examen. Dans cette partie de l'algorithme, on se propose d'écrire une fonction récursive qui à partir de 2 ensembles d'entiers EA et EB , construit l'ensemble des entiers que l'on peut obtenir en ajoutant, multipliant, soustrayant (quand c'est possible) et divisant (quand c'est possible) un élément du 1er ensemble avec un élément du second. Puisque cette fonction requiert le parcours récursif des deux arbres, on se propose de procéder comme suit: a et b engendre a/b (si autorisé); 1. Écrire une fonction python qui étant donnés 2 entiers recherche contenant a + b, a × b, a − b (si autorisé), et l'arbre binaire de 2. Écrire une fonction python récursive qui étant donnés un ensemble d'entiers positifs rappelle représenté par un arbre binaire de recherche) et un entier x, EA (je calcule l'ensemble de toutes les valeurs que l'on peut obtenir en ajoutant, multipliant, soustrayant (quand c'est possible) et divisant (quand c'est possible) un élément de l'ensemble avec x. 3. Enn, écrire une fonction python récursive qui à partir de 2 ensembles d'entiers positifs EB EA et renvoie l'ensemble de tous les comptes intermédiaires obtenus en ajoutant, multipliant, soustrayant (quand c'est possible) et divisant (quand c'est possible) un élément de un élément de EB . 2 EA avec