Jakobsen bez mezer
authorTomas Musil <tomik.musil@gmail.com>
Wed, 21 Mar 2012 22:53:51 +0000 (23:53 +0100)
committerTomas Musil <tomik.musil@gmail.com>
Wed, 21 Mar 2012 22:53:51 +0000 (23:53 +0100)
Drobne upravy Jakobsena, aby fungoval i bez mezer.

jakobsen.py
robot.py

index 25f01dc..5c0aa24 100644 (file)
@@ -51,23 +51,23 @@ class reference:
     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 '\n'.join([''.join(substituce(zprava, slovnik)),
+    return '\n'.join([''.join(substituce(zprava, slovnik, ref.abeceda)),
                       ' '.join(ref.abeceda),
                       ' '.join([slovnik[c] for c in ref.abeceda])])
 
index 596f386..16eaaf0 100755 (executable)
--- a/robot.py
+++ b/robot.py
@@ -122,6 +122,9 @@ analyza.append(koincidence.tabulka_indexu(zprava))
 if mod_m:
     analyza.append("\nJakobsen (s mezerami):")
     analyza.append(jakobsen.desifruj(zprava, './ref'))
+if mod_x:
+    analyza.append("\nJakobsen (bez mezer):")
+    analyza.append(jakobsen.desifruj(zprava, './bref'))
 
 # Posuny v abecede
 # TODO najit nejvhodnejsi posuny a vypsat jenom ty