drobnosti
[krypto.git] / koincidence.py
index efb903c..fd6277a 100644 (file)
@@ -1,16 +1,19 @@
+"""Modul pro praci s indexy koincidence"""
+
 from ocesavac import ocesat
 from collections import deque
 
 def index_koincidence(text, mezery=False):
-    t = ocesat(text, mezery)
+    """Vrati prumerny index koincidence textu."""
+    text = ocesat(text, mezery)
     if mezery:
-        t = t[1:-1]
-    deq = deque(t)
+        text = text[1:-1]
+    deq = deque(text)
     shod = 0
-    for i in range(1, len(t)):
+    for _ in range(1, len(text)):
         deq.rotate(1)
-        shod += sum (x == y for x, y in zip(deq, t))
-    return float(shod)/(len(t)*(len(t) - 1))
+        shod += sum (x == y for x, y in zip(deq, text))
+    return float(shod)/(len(text)*(len(text) - 1))
 
 def index_koincidence2(text1, text2):
     """Pro dva texty vraci index koincidence. Texty nijak neupravuje,
@@ -19,18 +22,20 @@ def index_koincidence2(text1, text2):
     return float(shod)/min(len(text1), len(text2))
     
 def index_rozkladu(text, deleni):
+    """Vrati prumerny index koincidence pro text rozdeleny na vice casti
+    (ve stylu 123123123... pro deleni=3). Slouzi napriklad k odhadu
+    delky periodickeho hesla u polyalfabetickych sifer.""" 
     if (deleni == 1):
         return index_koincidence(text)
     texty = rozklad(ocesat(text, False), deleni)
     return sum([index_koincidence(text) for text in texty])/len(texty)
 
 def tabulka_indexu(text):
+    """Vypise tabulku prumernych indexu pro ruzna deleni textu."""
     return '\n'.join(['{1:>2} {0:.3%}'.format(
         index_rozkladu(text, d), d) for d in range(1, 11)])
 
 def rozklad(text, deleni):
-    texty = []
-    for i in range(deleni):
-        texty.append(''.join(
-            [text[j] for j in range(len(text)) if j % deleni == i]))
-    return texty
+    """Vrati pole retezcu, v kazdem jsou znaky z puvodniho textu jejichz pozice
+    ma stejny zbytek po deleni cislem 'deleni'."""
+    return [text[i::deleni] for i in range(deleni)]