Pour faire suite à mes posts Algorithme de Luhn – Implémentation C++,
Algorithme de Luhn – Implémentation C# et Algorithme de Luhn – Implémentation C, voici une version de l’agorithme implémenté en Python.
Dans la solution que je propose ci-dessous, je suis arrivé au résultat suivant :
- le code comptabilisé est constitué des 88 caractères significatifs de la suite d’instructions :
s,i=0,16 while i>0: i-=1 v=ord(l[15-i])-48<<i%2 if(v<9): s+=v-9 else: s+=v return s%10<1 - le temps d’exécution mesuré pour 1000000 d’itérations est de 11,58 secondes sur un Intel Core 2 Duo cadencé à 2,13 Ghz sous Ubuntu 9.04.
Comparé à l’implémentation en C, le code comptabilisé augmente de 20 caractères et le temps d’exécution mesuré augmente de 11,42 secondes. Le code a été interprété par Python 2.6.2.
Si vous avez des commentaires, des suggestions ou si vous avez une solution plus compacte ou plus rapide, n’hésitez pas à m’en faire part.
#!/usr/bin/python
# -*- coding: latin-1 -*-
import time
def luhn( l ):
# début du code comptabilisé
s, i = 0, 16
while i > 0:
i -= 1
v = ord( l[ 15 - i ] ) - 48 << i % 2
if ( v > 9 ):
s += v - 9
else:
s += v
return s % 10 < 1
# fin du code comptabilisé
def main():
start = time.time()
# début du temps d'exécution mesuré
l = 1000000L
while l > 0:
l -= 1
luhn( "4970100000300521" )
# fin du temps d'exécution mesuré
end = time.time()
print "Le temps d'exécution de la fonction est de %.2f secondes.\n"%( end - start )

Commentaires
Ecrire un commentaire Trackback