====== 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