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
Dernière révision Les deux révisions suivantes
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:20]
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 127: Ligne 127:
  
  
 +===== 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.//