X-Git-Url: http://git.tomasm.cz/krypto.git/blobdiff_plain/72abf0def8914771af7171eb8f4e3913842d1071..368fec422dea37982a9577a953efad47c47db524:/posuny.py?ds=inline diff --git a/posuny.py b/posuny.py index f6956e8..07879a3 100644 --- a/posuny.py +++ b/posuny.py @@ -1,15 +1,41 @@ -def posun(char): - if 65 <= ord(char) < 90: - return chr(ord(char) + 1) - if ord(char) == 90: - return 'A' +import referencni +from referencni import reference +from ocesavac import ocesat + +ABECEDA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + +def posun(char, pos=1): + if 65 <= ord(char) < 91 - pos: + return chr(ord(char) + pos) + if ord(char) < 91 and ord(char) >= 91 - pos: + return chr(ord(char) + pos - 26) else: return char def vsechny(zprava): - posunuty = zprava + posunuty = zprava.upper() analyza = [] for i in range(26): posunuty = map(posun, posunuty) analyza.append(''.join(posunuty)) - return '\n'.join(analyza) \ No newline at end of file + return analyza + +def eu_vzdalenost(v1, v2): + return sum([(x - y)**2 for (x, y) in zip(v1, v2)]) + +def nejlepsi(text): + ref = referencni.nacti('bref') + freq = dict() + for char in ocesat(text, False): + 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) + posunuti = 0 + for i in range(1, 26): + frekv = [frekv[25]] + frekv[:-1] + v2 = eu_vzdalenost(frekv, ref.frekvence) + if v2 < vzdalenost: + vzdalenost = v2 + posunuti = i + return (posunuti, ''.join([posun(char, posunuti) for char in text.upper()]))