testovani variant jakobsenova algoritmu
[krypto.git] / jakobsen.py
index 1913a27..2e2caf1 100644 (file)
@@ -29,12 +29,12 @@ def vzdalenost(tab1, tab2, abc=MABECEDA):
             rozdil += abs(tab1[i][j] - tab2[i][j])
     return rozdil
 
-def substituce(zprava, slovnik, abc=MABECEDA):
+def substituce(zprava, slovnik):
     """Vrati zpravu, ve ktere jsou znaky dane abecedy nahrazenypodle daneho
     slovniku."""
     pole = []
     for char in zprava:
-        if char in abc:
+        if char in slovnik:
             pole.append(slovnik[char])
         else:
             pole.append(char)
@@ -58,7 +58,7 @@ def jakobsen(zprava, ref):
     Jakobsenova algoritmu s danou referencni tabulkou."""
     slovnik = dict(zip(poradi_dle_frekvence(zprava, ref.abeceda), ref.poradi))
     tabulka = nova_tabulka(
-                  substituce(zprava, slovnik, ref.abeceda),
+                  substituce(zprava, slovnik),
                   ref.abeceda
                   )
     vzdal = vzdalenost(tabulka, ref.tabulka, ref.abeceda)
@@ -70,7 +70,7 @@ def jakobsen(zprava, ref):
             slovnik[x], slovnik[y] = slovnik[y], slovnik[x]
             nova_vzdalenost = vzdalenost(
                      nova_tabulka(
-                         substituce(zprava, slovnik, ref.abeceda),
+                         substituce(zprava, slovnik),
                          ref.abeceda),
                      ref.tabulka,
                      ref.abeceda)
@@ -90,6 +90,12 @@ def desifruj(zprava, mezery=True):
     ref = pickle.load(soubor)
     soubor.close()
     slovnik = jakobsen(ocesat(zprava, mezery), ref)
-    return '\n'.join([''.join(substituce(zprava, slovnik, ref.abeceda)),
+    return '\n'.join([''.join(substituce(zprava, slovnik)),
                       ' '.join(ref.abeceda),
                       ' '.join([slovnik[c] for c in ref.abeceda])])
+
+def __test():
+    print desifruj('Mxbhfxn cbfbhinpr, wnx fv f gvzuyr cbenqv.'.upper())
+
+def __test2():
+    print desifruj('Sel pes do lesa a potkal dlazebni kostku. Chtelo by to jeste o neco delsi test, to tedy jo.'.upper())