Ce billet était initialement paru sur le blog Pydéfis.

Aide pour le défi : Chasse au trésor

Récupération des données

Il faut pouvoir manipuler les instructions de déplacement.

Un simple copié/collé permet de récupérer une chaîne de caractères. On pourra supprimer les retour-chariot à la main, (ou avec la méthode replace (help(str.replace))). Il faudra ensuite découper la chaîne de caractères en déplacements élémentaires dans une liste. Pour cela on pourra regarder du côté de la méthode split (help(str.split)).

L’idée est de transformer :

D,A-105,G,A-20,G,A-72,...

en (par exemple) :

[('D',), ('A', 105), ('G',), ('A', 20), ('G',), ('A', 72),...]

Chaque élément de la liste est un tuple dont le premier élément est le type de déplacement et le second un paramètre éventuel.

Simulation du parcours

Pour simuler le parcours, il est inutile de travailler sur la carte. On représente l’état du voyageur, par exemple :

Puis on parcourt les instructions et à chaque étape on modifie le code de la direction (si le type de déplacement est G ou D) ou bien les coordonnées (si le type de déplacement est A).

Un codage pratique pour la direction pourrait être :

directions = ((0,-1),(1,0),(0,1),(-1,0)) # Nord, Est, Sud, Ouest (axe des ordonnées vers le bas)
dire = 0 # Direction courante : Nord

Un déplacement de type D consiste donc à ajouter 1 à dire (modulo 4).

Un déplacement de type A consiste à ajouter le vecteur dist*directions[dire] aux coordonnées courantes.

Une fois obtenu les coordonnées du point d’arrivé, en km, par rapport au point d’origine, on relève l’échelle sur la carte pour connaître la ville d’arrivée. Cela peut être fait facilement avec tout logiciel de dessin qui indique les coordonnées en pixel du point cliqué dans l’image.