index koinc. v ref
[krypto.git] / posuny.py
index f6956e8..85e60a4 100644 (file)
--- 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