X-Git-Url: http://git.tomasm.cz/krypto.git/blobdiff_plain/b37a2ddbb7e704a2252389c58c7c0d1ef83114e7..0022234bec5eeb75783aafc1d182f221b7dc0480:/posuny.py diff --git a/posuny.py b/posuny.py index 85e60a4..07879a3 100644 --- a/posuny.py +++ b/posuny.py @@ -4,39 +4,38 @@ from ocesavac import ocesat ABECEDA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' -def posun(char): - if 65 <= ord(char) < 90: - return chr(ord(char) + 1) - if ord(char) == 90: - return 'A' +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) + return analyza def eu_vzdalenost(v1, v2): return sum([(x - y)**2 for (x, y) in zip(v1, v2)]) -def nejlepsi_posun(text): +def nejlepsi(text): ref = referencni.nacti('bref') - text = ocesat(text, False) freq = dict() - for char in text: + 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) - posun = 0 + posunuti = 0 for i in range(1, 26): - frekv = frekv[1:] + [frekv[0]] + frekv = [frekv[25]] + frekv[:-1] v2 = eu_vzdalenost(frekv, ref.frekvence) if v2 < vzdalenost: vzdalenost = v2 - posun = i - return posun + posunuti = i + return (posunuti, ''.join([posun(char, posunuti) for char in text.upper()]))