Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
ens:dasi2015-2016:tpchaines [2016/01/06 13:57]
admin Cordier Amelie () [Partie 2. Les mots de passe d'Edward]
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 109: Ligne 111:
 ===== 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 117: 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.  
-  2. COMMIT  +  COMMIT  
-  3. Écrire les tests puis la fonction getNNext(n,terme) qui renvoie nième successeur d'un terme de la suite de Conway. +  Écrire les tests puis la fonction getNNext(n,terme) qui renvoie nième successeur d'un terme de la suite de Conway. 
-  4. COMMIT  +  COMMIT  
-  5. Mettez en place des tests de performances et faites varier votre implémentation pour voir si vous pouvez l'améliorer.  +  Mettez en place des tests de performances et faites varier votre implémentation pour voir si vous pouvez l'améliorer.  
-  6. Sous quelles conditions peut-on voir apparaître le chiffre 4 dans la suite de Conway ?  +  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> 
 + 
 +<code python test_password.py> 
 + 
 +# coding: utf-8  
 +import unittest 
 +import password as pwd 
 + 
 +class TestPassword(unittest.TestCase): 
 + 
 +    def test_getNextNormal(self): 
 +        self.assertEqual(pwd.getNext("abcd"), "abce"
 + 
 +    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.//