bugfix
[krypto.git] / koincidence.py
index 07231b7..fd6277a 100644 (file)
@@ -1,34 +1,41 @@
+"""Modul pro praci s indexy koincidence"""
+
 from ocesavac import ocesat
 from collections import deque
 
 from ocesavac import ocesat
 from collections import deque
 
-def index_koincidence(text):
-    t = ocesat(text, False) #zatim bez mezer
-    deq = deque(t)
+def index_koincidence(text, mezery=False):
+    """Vrati prumerny index koincidence textu."""
+    text = ocesat(text, mezery)
+    if mezery:
+        text = text[1:-1]
+    deq = deque(text)
     shod = 0
     shod = 0
-    for i in range(1, len(t)):
+    for _ in range(1, len(text)):
         deq.rotate(1)
         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):
 
 def index_koincidence2(text1, text2):
-    #predpokladam, ze v textech jsou jenom znaky se kterymi pocitam
+    """Pro dva texty vraci index koincidence. Texty nijak neupravuje,
+    ocekava ze se skladaji pouze ze znaku pracovni abecedy."""
     shod = sum (x == y for x, y in zip(text1, text2))
     return float(shod)/min(len(text1), len(text2))
     
 def index_rozkladu(text, deleni):
     shod = sum (x == y for x, y in zip(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)
     if (deleni == 1):
         return index_koincidence(text)
-    t = ocesat(text, False) #zatim bez mezer
-    texty = rozklad(t, deleni)
+    texty = rozklad(ocesat(text, False), deleni)
     return sum([index_koincidence(text) for text in texty])/len(texty)
 
 def tabulka_indexu(text):
     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):
     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)]