Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
42a01b33d1
96
TP4/main.py
Normal file
96
TP4/main.py
Normal 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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user