X-Git-Url: http://git.tomasm.cz/krypto.git/blobdiff_plain/1c2f16f2d055b5175052787f27b7d1ff2c21d2a9..36569b5bd34c720e1be6a3fefe06311d48f9bf44:/koincidence.py diff --git a/koincidence.py b/koincidence.py index efb903c..fd6277a 100644 --- a/koincidence.py +++ b/koincidence.py @@ -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)]