3 """CL rozhrani pro sadu kryptoanalytickych nastroju."""
9 from ocesavac import ocesat
11 from jakobsen import reference
14 from spolecne import ABECEDA
20 posli_mail(odesilatel, "Napoveda", ''.join("Napoveda:\n"
21 "Prikazy robotovi vkladejte do predmetu zpravy "
23 settings.mail, ".\nNa velikosti pismen nezalezi."
24 "\n\nSeznam prikazu:\n"
25 "\"", settings.subject, "\" Analyza zpravy z tela mailu.\n"
26 "\"", settings.subject, " X\" Vynuti analyzu bez mezer.\n"
27 "\"", settings.subject, " M\" Vynuti analyzu s mezerami.\n"
28 "\"", settings.subject, " B\" Vypise cetnost vsech bigramu.\n"
29 "\"", settings.subject, " P\" Vypise vsechny posunuti textu.\n"
30 "\"", settings.subject, " A\" Vypise uplne vsechno co dava "
31 "alespon trochu smysl (nedoporucuji).\n"
32 "\"", settings.subject, " H\" Tato napoveda.\n"
33 "\nVolby (mimo \"H\") je mozno libovolne kombinovat.\n"
34 "Napriklad \"", settings.subject, " LXB\" analyzuje posledni "
35 "prijatou zpravu s vynucenim analyzy bez mezer a navic vypise "
37 "\nS pozdravem\nVas Robot\n"))
40 telo = sys.stdin.read()
41 zprava = telo.strip().upper()
53 if not mod_m and not mod_x:
54 if ' ' in ocesat(zprava, True)[1:-1]:
56 print "Automaticky zvolena analyza s mezerami."
59 print "Automaticky zvolena analyza bez mezer."
62 print "\nZakladni udaje:"
64 print ("Delka zpravy (vcetne mezer a zvlastnich znaku: " +
66 print ("Delka zpravy (bez mezer a zvlastnich znaku): " +
67 str(len(ocesat(zprava, False))))
69 # Prumerna delka slova
71 print "\nPrumerna delka slova:"
72 slova = ocesat(zprava, True).split()
73 print ('{0:.3}'.format(float(sum([len(word) for word in slova]))/len(slova)))
76 print "\nFrekvencni analyza:"
83 celkem = sum(freq.values())
84 for char in sorted(freq, key=freq.get, reverse=True):
85 print ('{0} {1:>3} {2:>6.2%}'.format(char, freq[char],
86 float(freq[char])/celkem))
90 print "\nIndex koincidence (s mezerami):"
91 print ('{0:.2%}'.format(
92 koincidence.index_koincidence(zprava, True)))
93 if mod_x and len(zprava) >= 30:
94 #TODO tady by se spravne mela porovnavat delka ocesane zpravy
95 print "\nIndexy koincidence (bez mezer):"
96 print koincidence.tabulka_indexu(zprava)
100 print "\nHeslo k Vigenerovi (" + opsny[-1] + "):"
101 vig_heslo, vig_text = vigenere.vsechno(zprava, int(opsny[-1]))
107 print "\nJakobsen (s mezerami):"
108 print jakobsen.desifruj(zprava)
110 print "\nJakobsen (bez mezer):"
111 print jakobsen.desifruj(zprava, False)
114 (posun, posunuty_text) = posuny.nejlepsi(zprava)
115 if 'P' in opsny or 'A' in opsny:
116 print "\nPosuny v abecede (nejlepsi posun {0}):".format(posun)
117 print("\n".join("{0:>2} {1}".format(
118 i + 1, posuny.vsechny(zprava)[i]) for i in range(26)))
120 print "\nNejlepsi posun ({0}):".format(posun)
124 if 'B' in opsny or 'A' in opsny:
125 print "\nBigramy podle cetnosti:"
130 for i in range(0, len(zprava)-1):
131 if zprava[i:i+2] in bigramy:
132 bigramy[zprava[i:i+2]] += 1
133 celkem = sum(bigramy.values())
134 for char in sorted(bigramy, key=bigramy.get, reverse=True):
135 if bigramy[char] == 0:
137 print('{0} {1:>3} {2:>6.2%}'.format(char, bigramy[char],
138 float(bigramy[char])/celkem))