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:58]
admin Cordier Amelie () [Partie 1. Préparation de l'environnement de travail.]
ens:dasi2015-2016:tpchaines [2016/01/06 14:21] (Version actuelle)
admin Cordier Amelie () [Partie 4. La vengeance d'Edward]
Ligne 111: 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 119: 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.//