X-Git-Url: http://git.tomasm.cz/krypto.git/blobdiff_plain/72abf0def8914771af7171eb8f4e3913842d1071..b37a2ddbb7e704a2252389c58c7c0d1ef83114e7:/posuny.py?ds=sidebyside diff --git a/posuny.py b/posuny.py index f6956e8..85e60a4 100644 --- a/posuny.py +++ b/posuny.py @@ -1,3 +1,9 @@ +import referencni +from referencni import reference +from ocesavac import ocesat + +ABECEDA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + def posun(char): if 65 <= ord(char) < 90: return chr(ord(char) + 1) @@ -12,4 +18,25 @@ def vsechny(zprava): for i in range(26): posunuty = map(posun, posunuty) analyza.append(''.join(posunuty)) - return '\n'.join(analyza) \ No newline at end of file + return '\n'.join(analyza) + +def eu_vzdalenost(v1, v2): + return sum([(x - y)**2 for (x, y) in zip(v1, v2)]) + +def nejlepsi_posun(text): + ref = referencni.nacti('bref') + text = ocesat(text, False) + freq = dict() + for char in text: + freq[char] = freq.get(char, 0) + 1 + celkem = sum(freq.values()) + frekv = [float(freq.get(char, 0))/celkem for char in ABECEDA] + vzdalenost = eu_vzdalenost(frekv, ref.frekvence) + posun = 0 + for i in range(1, 26): + frekv = frekv[1:] + [frekv[0]] + v2 = eu_vzdalenost(frekv, ref.frekvence) + if v2 < vzdalenost: + vzdalenost = v2 + posun = i + return posun