- print "Automaticky zvolena analyza bez mezer."
-
-# Zakladni udaje
-print "\nZakladni udaje:"
-if mod_m:
- print ("Delka zpravy (vcetne mezer a zvlastnich znaku: " +
- str(len(zprava)))
-print ("Delka zpravy (bez mezer a zvlastnich znaku): " +
- str(len(ocesat(zprava, False))))
-
-# Prumerna delka slova
-if mod_m:
- print "\nPrumerna delka slova:"
- slova = ocesat(zprava, True).split()
- print ('{0:.3}'.format(float(sum([len(word) for word in slova]))/len(slova)))
-
-# Frekvence znaku
-print "\nFrekvencni analyza:"
-freq = dict()
-for char in ABECEDA:
- freq[char] = 0
-for char in zprava:
- if char in freq:
- freq[char] += 1
-celkem = sum(freq.values())
-for char in sorted(freq, key=freq.get, reverse=True):
- print ('{0} {1:>3} {2:>6.2%}'.format(char, freq[char],
- float(freq[char])/celkem))
-
-# Index koincidence
-if mod_m:
- print "\nIndex koincidence (s mezerami):"
- print ('{0:.2%}'.format(
- koincidence.index_koincidence(zprava, True)))
-if mod_x and len(zprava) >= 30:
- #TODO tady by se spravne mela porovnavat delka ocesane zpravy
- print "\nIndexy koincidence (bez mezer):"
- print koincidence.tabulka_indexu(zprava)
-
-# Vigenere
-if 'V' in opsny:
- print "\nHeslo k Vigenerovi (" + opsny[-1] + "):"
- vig_heslo, vig_text = vigenere.vsechno(zprava, int(opsny[-1]))
- print vig_heslo
- print vig_text
-
-# Jakobsen
-if mod_m:
- print "\nJakobsen (s mezerami):"
- print jakobsen.desifruj(zprava)
-if mod_x:
- print "\nJakobsen (bez mezer):"
- print jakobsen.desifruj(zprava, False)
-
-# Posuny v abecede
-(posun, posunuty_text) = posuny.nejlepsi(zprava)
-if 'P' in opsny or 'A' in opsny:
- print "\nPosuny v abecede (nejlepsi posun {0}):".format(posun)
- print("\n".join("{0:>2} {1}".format(
- i + 1, posuny.vsechny(zprava)[i]) for i in range(26)))
-else:
- print "\nNejlepsi posun ({0}):".format(posun)
- print posunuty_text
-
-# Bigramy
-if 'B' in opsny or 'A' in opsny:
- print "\nBigramy podle cetnosti:"
- bigramy = dict()
- for i in ABECEDA:
- for j in ABECEDA:
- bigramy[i+j] = 0
- for i in range(0, len(zprava)-1):
- if zprava[i:i+2] in bigramy:
- bigramy[zprava[i:i+2]] += 1
- celkem = sum(bigramy.values())
- for char in sorted(bigramy, key=bigramy.get, reverse=True):
- if bigramy[char] == 0:
- break
- print('{0} {1:>3} {2:>6.2%}'.format(char, bigramy[char],
- float(bigramy[char])/celkem))
+ mod_m = True
+ if not mod_m and not mod_x:
+ if ' ' in ocesat(zprava, True)[1:-1]:
+ mod_m = True
+ analyza.append("Automaticky zvolena analyza s mezerami.")
+ else:
+ mod_x = True
+ analyza.append("Automaticky zvolena analyza bez mezer.")
+
+ # Zakladni udaje
+ analyza.append("\nZakladni udaje:")
+ if mod_m:
+ analyza.append("Delka zpravy (vcetne mezer a zvlastnich znaku: " +
+ str(len(zprava)))
+ analyza.append("Delka zpravy (bez mezer a zvlastnich znaku): " +
+ str(len(ocesat(zprava, False))))
+
+ # Prumerna delka slova
+ if mod_m:
+ analyza.append("\nPrumerna delka slova:")
+ slova = ocesat(zprava, True).split()
+ analyza.append('{0:.3}'.format(float(sum([len(word) for word in slova]))/len(slova)))
+
+ # Frekvence znaku
+ analyza.append("\nFrekvencni analyza:")
+ freq = dict()
+ for char in ABECEDA:
+ freq[char] = 0
+ for char in zprava:
+ if char in freq:
+ freq[char] += 1
+ celkem = sum(freq.values())
+ for char in sorted(freq, key=freq.get, reverse=True):
+ analyza.append('{0} {1:>3} {2:>6.2%}'.format(char, freq[char],
+ float(freq[char])/celkem))
+
+ # Index koincidence
+ if mod_m:
+ analyza.append("\nIndex koincidence (s mezerami):")
+ analyza.append('{0:.2%}'.format(
+ koincidence.index_koincidence(zprava, True)))
+ if mod_x:
+ #TODO tady by se spravne mela porovnavat delka ocesane zpravy
+ analyza.append("\nIndexy koincidence (bez mezer):")
+ analyza.append(koincidence.tabulka_indexu(zprava))
+
+
+ # Vigenere
+ if 'V' in opsny:
+ analyza.append("\nHeslo k Vigenerovi (" + opsny[-1] + "):")
+ vig_heslo, vig_text = vigenere.vsechno(zprava, int(opsny[-1]))
+ analyza.append(vig_heslo)
+ analyza.append(vig_text)
+
+ # Jakobsen
+ if mod_m:
+ analyza.append("\nJakobsen (s mezerami):")
+ analyza.append(jakobsen.desifruj(zprava))
+ if mod_x:
+ analyza.append("\nJakobsen (bez mezer):")
+ analyza.append(jakobsen.desifruj(zprava, False))
+
+ # Posuny v abecede
+ (posun, posunuty_text) = posuny.nejlepsi(zprava)
+ if 'P' in opsny or 'A' in opsny:
+ analyza.append("\nPosuny v abecede (nejlepsi posun {0}):".format(posun))
+ analyza.append("\n".join("{0:>2} {1}".format(
+ i + 1, posuny.vsechny(zprava)[i]) for i in range(26)))
+ else:
+ analyza.append("\nNejlepsi posun ({0}):".format(posun))
+ analyza.append(posunuty_text)
+
+ # Bigramy
+ if 'B' in opsny or 'A' in opsny:
+ analyza.append("\nBigramy podle cetnosti:")
+ bigramy = dict()
+ for i in ABECEDA:
+ for j in ABECEDA:
+ bigramy[i+j] = 0
+ for i in range(0, len(zprava)-1):
+ if zprava[i:i+2] in bigramy:
+ bigramy[zprava[i:i+2]] += 1
+ celkem = sum(bigramy.values())
+ for char in sorted(bigramy, key=bigramy.get, reverse=True):
+ if bigramy[char] == 0:
+ break
+ analyza.append('{0} {1:>3} {2:>6.2%}'.format(char, bigramy[char],
+ float(bigramy[char])/celkem))
+ return '\n'.join(analyza)
+
+if __name__ == '__main__':
+ if len(sys.argv) > 1:
+ opsny = sys.argv[1]
+ else:
+ opsny = ''
+
+ telo = sys.stdin.read()
+ zprava = telo.strip().upper()
+ print(analyza(zprava, opsny))
+