====== Ghostleg ======
Il s'agit d'un jeu - [[https://en.wikipedia.org/wiki/Ghost_Leg|explications détaillées]]
===== Principe =====
On donne un motif comme celui-ci
A B C
| | |
|--| |
| |--|
| |--|
| | |
1 2 3
On descend d'une lettre. Chaque fois que l'on rencontre ''%%--%%'', on doit changer de colonne.
Dans cet exemple, A -> 2, B -> 1, C -> 3
Dans ce cas la réponse attendue est la chaîne de caractères''%%"BAC"%%''.
===== Les fichiers =====
Vous disposez de fichiers tests à télécharger, et la réponse attendue dans ces cas :
* {{ .:ghostleg1.txt |}} -> ''%%"BAC"%%''
* {{ .:ghostleg2.txt |}} -> ''%%"FBCEAD"%%''
* {{ .:ghostleg3.txt |}} -> ''%%"FEDABC"%%''
* {{ .:ghostleg4.txt |}}
===== À faire =====
Écrire une fonction ''%%ghostleg%%'' qui reçoit un nom de fichier et qui :
* ouvre le fichier correspondant -- on suppose qu'il contient bien un un ghostleg
* résout ce ghostleg et renvoie la chaîne de caractère correspondant à la solution.
===== Aide =====
=== Ouvrir le fichier ===
f = open(filename, 'r', encoding='utf8')
content = f.read()
f.close()
lines = content.split('\n')
Suite à ce code, ''lines'' contient un tableau où chaque item est une ligne du fichier.
['A B C', '| | |', '|--| |', '| |--|', '| |--|', '| | |', '1 2 3', '']
Vous remarquez que la dernière ligne est vide. Cela peut arriver mais n'est pas certain. Cela dépend de comment à été écrit le fichier. On peut s'assurer que la dernière ligne n'est pas vide en supprimant toute dernière ligne qui serait vide :
while lines[-1] == '':
lines.pop()
La fonction ''pop'' a pour effet d'enlever le dernier élément.
=== Accéder à un item ===
Maintenant que nous disposons de ''lines'', nous pouvons facilement consulter le contenu du fichier.
>>> lines[2][1]
'-'
En effet, ''%%lines[2]%%'' correspond au contenu de la ligne d'indice 2, c'est à dire ''%%'|--| |'%%''. Donc ''%%lines[2][1]%%'' est le caractère de rang 1 dans cette ligne : ''%%'-'%%''.
=== Les différentes lignes ===
Dans le ghostleg, vous avez une ligne d'entête au début, les lignes de transition et à la toute fin une ligne de numéros qui ne sert pas à grand chose.
lines[0] # ligne d'entête
lines[1:-1] # toutes les lignes sauf la première et la dernière
lines[-1] # dernière ligne