for j in abc:
tabulka[i][j] = 0
for i in range(len(zprava) - 1):
- if zprava[i] in tabulka and zprava[i+1] in tabulka[zprava[i]]:
- tabulka[zprava[i]][zprava[i+1]] += 1
+ tabulka[zprava[i]][zprava[i+1]] += 1
celkem = sum(sum(tab2.values()) for tab2 in tabulka.values())
- if celkem != 0:
- for i in abc:
- for j in abc:
- tabulka[i][j] /= float(celkem)
+ for i in abc:
+ for j in abc:
+ tabulka[i][j] /= float(celkem)
return tabulka
def vzdalenost(tab1, tab2, abc=MABECEDA):
pass
def jakobsen(zprava, ref):
- slovnik = dict(zip(poradi_dle_frekvence(zprava), ref.poradi))
- tabulka = nova_tabulka(substituce(zprava, slovnik))
- vzdal = vzdalenost(tabulka, ref.tabulka)
+ slovnik = dict(zip(poradi_dle_frekvence(zprava, ref.abeceda), ref.poradi))
+ tabulka = nova_tabulka(substituce(zprava, slovnik, ref.abeceda), ref.abeceda)
+ vzdal = vzdalenost(tabulka, ref.tabulka, ref.abeceda)
vzdal_old = vzdal + 1
while vzdal_old > vzdal:
vzdal_old = vzdal
for (x, y) in combinations(ref.abeceda, 2):
slovnik[x], slovnik[y] = slovnik[y], slovnik[x]
- v1 = vzdalenost(nova_tabulka(substituce(zprava, slovnik)),
- ref.tabulka)
+ v1 = vzdalenost(nova_tabulka(substituce(zprava, slovnik, ref.abeceda), ref.abeceda),
+ ref.tabulka, ref.abeceda)
if v1 < vzdal:
vzdal = v1
else:
slovnik[x], slovnik[y] = slovnik[y], slovnik[x]
+ return slovnik
+
- return '\n'.join([''.join(substituce(zprava, slovnik)),
- ' '.join(ref.abeceda),
- ' '.join([slovnik[c] for c in ref.abeceda])])
-
-def desifruj(zprava, refs):
- f = open(refs, 'rb')
+def desifruj(zprava, mezery=True):
+ if mezery:
+ f = open('ref')
+ else:
+ f = open('bref')
ref = pickle.load(f)
f.close()
- return jakobsen(zprava, ref)
+ slovnik = jakobsen(ocesat(zprava, mezery), ref)
+ return '\n'.join([''.join(substituce(zprava, slovnik, ref.abeceda)),
+ ' '.join(ref.abeceda),
+ ' '.join([slovnik[c] for c in ref.abeceda])])