9 jupytext_version: 1.11.1
11 display_name: Python 3 (ipykernel)
16 ```python Collapsed="false"
17 from szyfrow.caesar import *
18 from szyfrow.affine import *
19 from szyfrow.keyword_cipher import *
20 from szyfrow.column_transposition import *
21 from szyfrow.railfence import *
22 from szyfrow.support.text_prettify import *
26 import matplotlib.pyplot as plt
32 ```python Collapsed="false"
34 plaintext_a_filename = f'plaintext.{challenge_number}a.txt'
35 plaintext_b_filename = f'plaintext.{challenge_number}b.txt'
36 ciphertext_a_filename = f'ciphertext.{challenge_number}a.txt'
37 ciphertext_b_filename = f'ciphertext.{challenge_number}b.txt'
40 ```python Collapsed="false"
41 ca = open(ciphertext_a_filename).read()
42 cb = open(ciphertext_b_filename).read()
45 rsca = cat(reversed(sca))
50 sca_counts = collections.Counter(sca)
55 pd.Series(sca_counts).sort_index().plot.bar()
59 key_a, score_a = railfence_break(sca, fitness=Ptrigrams)
61 pa = railfence_decipher(sca, key_a)
66 (word_a, fill_a, empty_a), score_a = column_transposition_break(rsca, fitness=Ptrigrams)
67 print(word_a, fill_a, empty_a, '\n')
68 pa = column_transposition_decipher(rsca, word_a, fillcolumnwise=fill_a, emptycolumnwise=empty_a)
73 (word_a, wrap_a), score_a = keyword_break(sca, fitness=Pletters)
74 print(word_a, wrap_a, '\n')
75 pa = keyword_decipher(sca, word_a, wrap_a)
80 word_a, score_a = monoalphabetic_sa_break(sca)
82 pa = keyword_decipher(sca, word_a)
87 word_a, score_a = vigenere_frequency_break(sca, fitness=Ptrigrams)
89 pa = vigenere_decipher(sca, word_a)
94 pa = railfence_decipher(sca, key_a)
98 ```python Collapsed="false"
99 open(plaintext_a_filename, 'w').write(prettify(pa))
103 morse_chars = 'a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9'.split()
108 morse_codes = '.- / -... / -.-. / -.. / . / ..-. / --. / .... / .. / .--- / -.- / .-.. / -- / -. / --- / .--. / --.- / .-. / ... / - / ..- / ...- / .-- / -..- / -.-- / --.. / ----- / .---- / ..--- / ...-- / ....- / ..... / -.... / --... / ---.. / ----.'.split(' / ')
112 char_to_morse = {l: c for l, c in zip(morse_chars, morse_codes)}
113 morse_to_char = {c: l for l, c in zip(morse_chars, morse_codes)}
114 [char_to_morse[l] for l in 'abc']
118 morse_table = ''.maketrans('AD', '.-')
119 cb_dd = cb.translate(morse_table)
120 cb_words = cb_dd.split(' / ')
121 cb_letters = cat(cat(morse_to_char[l] for l in w.split()) for w in cb_words)
126 word_b, score_b = vigenere_frequency_break(cb_letters, fitness=Ptrigrams)
128 pb = vigenere_decipher(cb_letters, word_b)
133 pb = vigenere_decipher(cb_letters, word_b)
137 ```python Collapsed="false"
138 open(plaintext_b_filename, 'w').write(prettify(pb))
141 ```python Collapsed="false"