Merge remote-tracking branch 'origin/master'

This commit is contained in:
Suwako Moriya 2020-01-09 08:11:36 +01:00
commit 42a01b33d1
Signed by: SuwakoMmh
GPG Key ID: A27482B806F13CD5

96
TP4/main.py Normal file
View File

@ -0,0 +1,96 @@
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')
for i, j in enumerate(t0):
plt.bar(i+1, j)
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:
def pgcdDesDistancesEntreRepetitions(l, i):
ecarts=[]
sec=l[i:i+3]
g=i
for j in range(g+1, len(l)-2):
if sec==l[j:j+3]:
ecarts.append(j-g)
g=j
print(ecarts)
while len(ecarts)>1:
ecarts[0]=pgcd(ecarts.pop(0), ecarts[0])
if ecarts:
return ecarts[0]
return 0