efb903c6e2a71b920112684416209c3a7f1a4e3f
[krypto.git] / koincidence.py
1 from ocesavac import ocesat
2 from collections import deque
3
4 def index_koincidence(text, mezery=False):
5     t = ocesat(text, mezery)
6     if mezery:
7         t = t[1:-1]
8     deq = deque(t)
9     shod = 0
10     for i in range(1, len(t)):
11         deq.rotate(1)
12         shod += sum (x == y for x, y in zip(deq, t))
13     return float(shod)/(len(t)*(len(t) - 1))
14
15 def index_koincidence2(text1, text2):
16     """Pro dva texty vraci index koincidence. Texty nijak neupravuje,
17     ocekava ze se skladaji pouze ze znaku pracovni abecedy."""
18     shod = sum (x == y for x, y in zip(text1, text2))
19     return float(shod)/min(len(text1), len(text2))
20     
21 def index_rozkladu(text, deleni):
22     if (deleni == 1):
23         return index_koincidence(text)
24     texty = rozklad(ocesat(text, False), deleni)
25     return sum([index_koincidence(text) for text in texty])/len(texty)
26
27 def tabulka_indexu(text):
28     return '\n'.join(['{1:>2} {0:.3%}'.format(
29         index_rozkladu(text, d), d) for d in range(1, 11)])
30
31 def rozklad(text, deleni):
32     texty = []
33     for i in range(deleni):
34         texty.append(''.join(
35             [text[j] for j in range(len(text)) if j % deleni == i]))
36     return texty