Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
ens:dasi2015-2016:tpchaines [2016/01/06 13:56]
admin Cordier Amelie () créée
ens:dasi2015-2016:tpchaines [2016/01/06 14:21] (Version actuelle)
admin Cordier Amelie () [Partie 4. La vengeance d'Edward]
Ligne 3: Ligne 3:
 <note important>Ce TP sera noté.</note>  <note important>Ce TP sera noté.</note> 
  
-===== Partie 1. Préparation de l'environnement de travail=====+===== Partie 1. Préparation de l'environnement de travail =====
    
  
Ligne 12: Ligne 12:
   * Commitez ces fichiers.    * Commitez ces fichiers. 
  
-Dans la suite du sujet, vous devez faire un commit à chaque fois que vous verrez le mot "COMMIT"+Dans la suite du sujet, vous devez faire un commit à chaque fois que vous verrez le mot "COMMIT"
 + 
 +À la fin du TP (et uniquement à ce moment là), vous devrez pousser l'ensemble de vos commits sur GitHub et m'envoyer l'URL de votre dépôt. 
  
 ===== Partie 2. Les mots de passe d'Edward ===== ===== Partie 2. Les mots de passe d'Edward =====
Ligne 53: Ligne 55:
  
  
-Partie 3. Arrivée de Gunter. +===== Partie 3. Arrivée de Gunter. ===== 
 + 
  
 Gunter est le nouvel admin système de la société loufoque ou travaille Edward. Il tombe dans les pommes quand il apprend la façon de faire de ce dernier. Quelques secondes après avoir repris ses esprits, il décide de mettre en place des règles sur les mots de passe. Edward ne comprend pas le sens de ces règles, car à part lui compliquer la vie, elles ne changent en rien les problèmes évidents de sécurité de son système... mais qu'importe, le chef l'a dit, alors il les met en place.  Gunter est le nouvel admin système de la société loufoque ou travaille Edward. Il tombe dans les pommes quand il apprend la façon de faire de ce dernier. Quelques secondes après avoir repris ses esprits, il décide de mettre en place des règles sur les mots de passe. Edward ne comprend pas le sens de ces règles, car à part lui compliquer la vie, elles ne changent en rien les problèmes évidents de sécurité de son système... mais qu'importe, le chef l'a dit, alors il les met en place. 
Ligne 106: Ligne 109:
  
  
-Partie 4. La vengeance d'Edward+===== Partie 4. La vengeance d'Edward  =====
  
-Pour se venger de ce stupide administrateur système, Edward lui donne une énigme à résoudre. Il lui demande d'écrire un programme qui permet de trouver en moins de 4 secondes, sur sa machine, la longueur du 10ème successeur de n'importe quel terme passé en paramètre dans la suite de Conway. +Pour se venger de ce stupide administrateur système, Edward lui donne une énigme à résoudre. Il lui demande d'écrire un programme qui permet de trouver en moins de 4 secondes, sur sa machine, la longueur du 10ème successeur de n'importe quel terme passé en paramètre dans la suite de [[https://fr.wikipedia.org/wiki/Suite_de_Conway|Conway]]
  
 Gunter, après avoir passé plusieurs heures à comprendre le problème (les énigmes, c'est pas son truc), écrit en deux temps trois mouvements l'algo qui répond au problème.  Gunter, après avoir passé plusieurs heures à comprendre le problème (les énigmes, c'est pas son truc), écrit en deux temps trois mouvements l'algo qui répond au problème. 
Ligne 116: Ligne 119:
 Serez-vous plus malin que Gunter ?  Serez-vous plus malin que Gunter ? 
  
-1. Écrire les tests puis la fonction getNext(terme) qui renvoie le successeur d'un terme de la suite de Conway. +  - Écrire les tests puis la fonction getNext(terme) qui renvoie le successeur d'un terme de la suite de Conway.  
 +  - COMMIT  
 +  - Écrire les tests puis la fonction getNNext(n,terme) qui renvoie nième successeur d'un terme de la suite de Conway. 
 +  - COMMIT  
 +  - Mettez en place des tests de performances et faites varier votre implémentation pour voir si vous pouvez l'améliorer.  
 +  - Sous quelles conditions peut-on voir apparaître le chiffre 4 dans la suite de Conway ?   
 + 
 + 
 +===== Ressources ===== 
 + 
 +<code python password.py> 
 + 
 +# coding: utf-8  
 +def getNext(password): 
 +    """ 
 +    Série de tests exprimés en doctest 
 +    >>> getNext('a'
 +    'b' 
 +    >>> getNext('az'
 +    'ba' 
 +    >>> getNext('bc'
 +    'bd' 
 +    """ 
 +    pwd = list(password)  #1 
 +    found = False 
 +    i=len(pwd)-1 
 + 
 +    while not found: 
 +        if pwd[i] < 'z': 
 +           pwd[i] = chr(ord(pwd[i])+1)  #2 
 +           found = True              
 +        else: 
 +           i = i-1  
 +     
 +    return ''.join(pwd) #3 
 + 
 + 
 + 
 +# Grâce à ce fragment de code, si vous exécutez ce fichier, les tests doctests seront exécutés également.  
 +# Si vous ne voulez plus que les tests s'exécutent, commentez les deux lignes ci-dessous.  
 +# Si vous préférez lancer vos tests à la main, commentez également les lignes, et utilisez "python -m doctest pass.py" en console.  
 +if __name__ == "__main__": 
 +    import doctest 
 +    doctest.testmod() 
 +</code>
  
-2COMMIT +<code python test_password.py>
  
-3. Écrire les tests puis la fonction getNNext(n,terme) qui renvoie nième successeur d'un terme de la suite de Conway.+# coding: utf-8  
 +import unittest 
 +import password as pwd
  
-4COMMIT +class TestPassword(unittest.TestCase):
  
-5Mettez en place des tests de performances et faites varier votre implémentation pour voir si vous pouvez l'améliorer+    def test_getNextNormal(self): 
 +        self.assertEqual(pwd.getNext("abcd"), "abce")
  
-6Sous quelles conditions peut-on voir apparaître le chiffre 4 dans la suite de Conway ?  +    def test_getNextEndLine(self): 
 +        self.assertEqual(pwd.getNext("abhz"), "abia")
  
  
 +# Permet d'exécuter les tests si ce fichier est exécuté
 +unittest.main()
  
  
 +</code>
  
-Ce TP est fortement inspiré des exercices du prodigieux projet Advent of Code. Merci à son créateur pour ces belles sources d'inspiration. +//Ce TP est fortement inspiré des exercices du prodigieux projet Advent of Code. Merci à son créateur pour ces belles sources d'inspiration.//