This commit is contained in:
2023-08-23 09:38:41 -03:00
parent a3306596e1
commit 218aca1a6c
5 changed files with 81 additions and 28 deletions
+30 -10
View File
@@ -1,3 +1,9 @@
import sys
if len(sys.argv) < 2:
print("Usage: python3 afreq.py [arquivo]")
sys.exit(1)
frequencias = {
'A': 14.63,
'B': 1.04,
@@ -27,6 +33,10 @@ frequencias = {
'Z': 0.47
}
frequencias = sorted(frequencias.keys(), key=lambda x: frequencias[x])
frequencias.reverse()
caracteres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
def afreq(string):
# determinar a frequencia de cada caractere na string
# comparar com a frequencia de cada caractere na lingua portuguesa
@@ -42,19 +52,29 @@ def afreq(string):
else:
str_freq[c] = 1
for c in str_freq:
if not c.isalnum():
continue
freq_sorted = sorted(str_freq.items(), key=lambda item: item[1])
freq_sorted = [x[0] for x in freq_sorted]
freq_sorted.reverse()
str_freq[c] /= len(string)
freq_sorted = dict(sorted(str_freq.items(), key=lambda item: item[1]))
print(freq_sorted[0], frequencias[0])
print(freq_sorted[1], frequencias[1])
possiveis_chaves = []
for c in frequencias:
for k in freq_sorted:
if abs(frequencias[c] - freq_sorted[k]) < 0.5:
possiveis_chaves.append(ord(k) - ord(c))
for i, c in enumerate(frequencias):
if c not in freq_sorted:
continue
index_c = caracteres.index(c)
index_freq = caracteres.index(freq_sorted[i])
print(c, index_c, index_freq)
possiveis_chaves.append((index_freq - index_c) % 26) # (indice da freq da letra na str - indice da letra em PT) % ignorar letras maiusculas
return possiveis_chaves
file_str = open(sys.argv[1], 'r').read()
possiveis_chaves = afreq(file_str)
print(possiveis_chaves)