3 """CL rozhrani pro sadu kryptoanalytickych nastroju."""
9 from ocesavac import ocesat
11 from jakobsen import reference
14 from spolecne import ABECEDA
22 telo = sys.stdin.read()
23 zprava = telo.strip().upper()
35 if not mod_m and not mod_x:
36 if ' ' in ocesat(zprava, True)[1:-1]:
38 print "Automaticky zvolena analyza s mezerami."
41 print "Automaticky zvolena analyza bez mezer."
44 print "\nZakladni udaje:"
46 print ("Delka zpravy (vcetne mezer a zvlastnich znaku: " +
48 print ("Delka zpravy (bez mezer a zvlastnich znaku): " +
49 str(len(ocesat(zprava, False))))
51 # Prumerna delka slova
53 print "\nPrumerna delka slova:"
54 slova = ocesat(zprava, True).split()
55 print ('{0:.3}'.format(float(sum([len(word) for word in slova]))/len(slova)))
58 print "\nFrekvencni analyza:"
65 celkem = sum(freq.values())
66 for char in sorted(freq, key=freq.get, reverse=True):
67 print ('{0} {1:>3} {2:>6.2%}'.format(char, freq[char],
68 float(freq[char])/celkem))
72 print "\nIndex koincidence (s mezerami):"
73 print ('{0:.2%}'.format(
74 koincidence.index_koincidence(zprava, True)))
75 if mod_x and len(zprava) >= 30:
76 #TODO tady by se spravne mela porovnavat delka ocesane zpravy
77 print "\nIndexy koincidence (bez mezer):"
78 print koincidence.tabulka_indexu(zprava)
82 print "\nHeslo k Vigenerovi (" + opsny[-1] + "):"
83 vig_heslo, vig_text = vigenere.vsechno(zprava, int(opsny[-1]))
89 print "\nJakobsen (s mezerami):"
90 print jakobsen.desifruj(zprava)
92 print "\nJakobsen (bez mezer):"
93 print jakobsen.desifruj(zprava, False)
96 (posun, posunuty_text) = posuny.nejlepsi(zprava)
97 if 'P' in opsny or 'A' in opsny:
98 print "\nPosuny v abecede (nejlepsi posun {0}):".format(posun)
99 print("\n".join("{0:>2} {1}".format(
100 i + 1, posuny.vsechny(zprava)[i]) for i in range(26)))
102 print "\nNejlepsi posun ({0}):".format(posun)
106 if 'B' in opsny or 'A' in opsny:
107 print "\nBigramy podle cetnosti:"
112 for i in range(0, len(zprava)-1):
113 if zprava[i:i+2] in bigramy:
114 bigramy[zprava[i:i+2]] += 1
115 celkem = sum(bigramy.values())
116 for char in sorted(bigramy, key=bigramy.get, reverse=True):
117 if bigramy[char] == 0:
119 print('{0} {1:>3} {2:>6.2%}'.format(char, bigramy[char],
120 float(bigramy[char])/celkem))