From 4ba3b96f1c25b24122408a5bdd0de15b734b6564 Mon Sep 17 00:00:00 2001 From: Suwako Moriya Date: Thu, 12 Dec 2019 08:15:58 +0000 Subject: [PATCH] =?UTF-8?q?[TP4]=20C=C3=A9sar=20-=20fini=20;=20Vigen=C3=A8?= =?UTF-8?q?re=20-=20en=20cours?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TP4/main.py | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 TP4/main.py diff --git a/TP4/main.py b/TP4/main.py new file mode 100644 index 0000000..b3dba42 --- /dev/null +++ b/TP4/main.py @@ -0,0 +1,78 @@ +import matplotlib.pyplot as plt +def tr(texte): + return [ord(char) - 97 for char in texte] + + +def rev(l): + return ''.join([chr(i + 97) for i in l]) + +# César +""" +1 : maitrecorbeau donne, en décalant de 5 : hvdomzxjmwzvp +2 : en utilisant l'opération % (a%b)""" +# 3: + +def codageCesar(t, d): + n=len(t) + res=[0 for i in range(n)] + for i in range(n): + res[i]=(t[i]-d)%26 + return res + + +# 4: +def decodageCesar(t, d): + return codageCesar(t, -d) + + +# 5: +def frequences(t0): + return [t0.count(i) for i in range(26)] + +# 6: + +def graphe_frequences(t0): + plt.plot(list(range(1, 27)), frequences(t0), 'ro') + plt.ylabel('fréquences') + plt.xlabel('lettres') + plt.show() + +# 7: + +def max(l): + m=__builtins__.max(l) + res=(m, []) + for i, char in enumerate(l): + if char == m: + res[1].append(i) + return res + +# 8: + +def decodageAuto(t0): + codes=[] + for c in max(frequences(t0))[1]: + codes.append(decodageCesar(t0, tr('e')[0]-c)) + return codes + +""" +Malgré le fait que la lettre e soit la plus fréquente en français, il est possible d'écrire de manière compréhensible sans l'utiliser majoritairement. Ainsi, cette méthode ne vérifie pas tant que le texte ait du sens. La fonction ne donne donc pas toujours le texte originel""" + + +# Vigenère + +# 1: On obitent 'kichwjrbvegr' + +# 2: + +def codageVigenere(l, c): + return [(char + c[i%len(c)])%26 for i, char in enumerate(l)] + +# 3: La fonction suivante détermine le pgcd de a et b. En effet, le programme s'arrête lorsque b vaut zero. C'est l'algorithme d'euclide. + +def pgcd(a, b): + while b: + a, b = b, a%b + return a + +# 4: