9 jupytext_version: 1.3.4
11 display_name: Python 3
18 currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
19 parentdir = os.path.dirname(currentdir)
20 sys.path.insert(0,parentdir)
24 from cipher.caesar import *
25 from cipher.affine import *
26 from cipher.keyword_cipher import *
27 from cipher.column_transposition import *
29 from support.text_prettify import *
30 from support.utilities import *
31 from support.plot_frequency_histogram import *
37 plaintext_a_filename = f'{challenge_number}a.plaintext'
38 plaintext_b_filename = f'{challenge_number}b.plaintext'
39 ciphertext_a_filename = f'{challenge_number}a.ciphertext'
40 ciphertext_b_filename = f'{challenge_number}b.ciphertext'
44 ca = open(ciphertext_a_filename).read()
45 cb = open(ciphertext_b_filename).read()
57 fc = collections.Counter(sca)
58 plot_frequency_histogram(fc, sort_key=fc.get)
62 kshifta, score = caesar_break(sca, fitness=Ptrigrams)
67 pa = caesar_decipher(sca, kshifta)
72 (kworda, kwrapa), score = keyword_break_mp(sca, fitness=Ptrigrams)
77 pa = keyword_decipher(sca, kworda, kwrapa)
82 fpa = lcat(tpack(segment(pa)))
87 open(plaintext_a_filename, 'w').write(fpa)
91 fc = collections.Counter(scb)
92 plot_frequency_histogram(fc, sort_key=fc.get)
96 rscb = cat(reversed(cb))
101 (kwordb, fillb, emptyb), score = column_transposition_break_mp(scb, fitness=Ptrigrams)
102 (kwordb, fillb, emptyb), score
106 pb = column_transposition_decipher(scb, kwordb, fillcolumnwise=fillb, emptycolumnwise=emptyb)
111 fpb = lcat(tpack(segment(pb)))
116 open(plaintext_b_filename, 'w').write(fpb)
120 transpositions[kwordb]