jakobsen
[krypto.git] / posuny.py
index 07879a3..fd08e8c 100644 (file)
--- a/posuny.py
+++ b/posuny.py
@@ -1,10 +1,12 @@
-import referencni
+"""Modul pro praci s posuny v abecede."""
+
 from referencni import reference
 from ocesavac import ocesat
-
-ABECEDA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+from spolecne import ABECEDA
 
 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 +15,28 @@ 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 text (neocesany) posunuty tak, aby mel frekvence znaku co
+    nejblizsi cestine bez mezer."""
+    posunuti = nej_posun(text)
+    return (posunuti, ''.join([posun(char, posunuti) for char in text.upper()]))
+
+def nej_posun(text):
+    """Vrati pocet znaku v abecede, o ktere by se mel text posunout, aby mel
+    frekvence znaku co nejblize cestine bez mezer."""
     ref = referencni.nacti('bref')
     freq = dict()
     for char in ocesat(text, False):
@@ -34,8 +47,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()]))
+    return posunuti