X-Git-Url: http://git.tomasm.cz/krypto.git/blobdiff_plain/368fec422dea37982a9577a953efad47c47db524..5e6a50eddcb77949a6861d8ca41df0082ec28558:/posuny.py diff --git a/posuny.py b/posuny.py index 07879a3..4c05de1 100644 --- a/posuny.py +++ b/posuny.py @@ -1,3 +1,5 @@ +"""Modul pro praci s posuny v abecede.""" + import referencni from referencni import reference from ocesavac import ocesat @@ -5,6 +7,8 @@ from ocesavac import ocesat ABECEDA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' def posun(char, pos=1): + """Pokud dostane velke pismeno, vrati pismeno ktere je od nej vzdaleno + 'pos' mist v abecede. Jinak vrati puvodni pismeno.""" if 65 <= ord(char) < 91 - pos: return chr(ord(char) + pos) if ord(char) < 91 and ord(char) >= 91 - pos: @@ -13,17 +17,22 @@ def posun(char, pos=1): return char def vsechny(zprava): + """Pro danou zpravu (libovolny text vsetne zvlastnich znaku) vrati + vsechny jeji posuny v abecede.""" posunuty = zprava.upper() analyza = [] - for i in range(26): - posunuty = map(posun, posunuty) + for _ in range(26): + posunuty = [posun(char) for char in posunuty] analyza.append(''.join(posunuty)) return analyza -def eu_vzdalenost(v1, v2): - return sum([(x - y)**2 for (x, y) in zip(v1, v2)]) +def eu_vzdalenost(vec1, vec2): + """Euklidovska vzdalenost dvou vektoru.""" + return sum([(x - y)**2 for (x, y) in zip(vec1, vec2)]) def nejlepsi(text): + """Vrati to posunuti textu (neocesaneho), ktere ma frekvence znaku + nejblizsi cestine bez mezer.""" ref = referencni.nacti('bref') freq = dict() for char in ocesat(text, False): @@ -34,8 +43,8 @@ def nejlepsi(text): posunuti = 0 for i in range(1, 26): frekv = [frekv[25]] + frekv[:-1] - v2 = eu_vzdalenost(frekv, ref.frekvence) - if v2 < vzdalenost: - vzdalenost = v2 + nova_vzdalenost = eu_vzdalenost(frekv, ref.frekvence) + if nova_vzdalenost < vzdalenost: + vzdalenost = nova_vzdalenost posunuti = i return (posunuti, ''.join([posun(char, posunuti) for char in text.upper()]))