2021 challenge 1
[cipher-challenge.git] / 2020 / 2020-challenge4.md
1 ---
2 jupyter:
3 jupytext:
4 formats: ipynb,md
5 text_representation:
6 extension: .md
7 format_name: markdown
8 format_version: '1.2'
9 jupytext_version: 1.3.4
10 kernelspec:
11 display_name: Python 3
12 language: python
13 name: python3
14 ---
15
16 ```python Collapsed="false"
17 from szyfrow.keyword_cipher import *
18 from szyfrow.column_transposition import *
19 from szyfrow.support.text_prettify import *
20 ```
21
22 ```python Collapsed="false"
23 challenge_number = 4
24 plaintext_a_filename = f'plaintext.{challenge_number}a.txt'
25 plaintext_b_filename = f'plaintext.{challenge_number}b.txt'
26 ciphertext_a_filename = f'ciphertext.{challenge_number}a.txt'
27 ciphertext_b_filename = f'ciphertext.{challenge_number}b.txt'
28 ```
29
30 ```python Collapsed="false"
31 ca = open(ciphertext_a_filename).read()
32 sca = sanitise(ca)
33 cb = open(ciphertext_b_filename).read()
34 scb = sanitise(cb)
35 ```
36
37 ```python Collapsed="false"
38 (word_a, wrap_a), score_a = keyword_break_mp(sca, fitness=Ptrigrams)
39 print(word_a, wrap_a, '\n')
40 pa = keyword_decipher(ca, word_a, wrap_a)
41 print(pa)
42 ```
43
44 ```python Collapsed="false"
45 word_a, score_a = simulated_annealing_break(sca, fitness=Ptrigrams,
46 plain_alphabet=string.ascii_lowercase, cipher_alphabet=keyword_cipher_alphabet_of('akkad', wrap_alphabet=KeywordWrapAlphabet.from_largest))
47 print(word_a, '\n')
48 pa = keyword_decipher(ca, word_a)
49 print(pa)
50 ```
51
52 ```python Collapsed="false"
53 pa = keyword_decipher(ca, 'akela', wrap_alphabet=KeywordWrapAlphabet.from_largest)
54 print(pa)
55 ```
56
57 ```python Collapsed="false"
58 open(plaintext_a_filename, 'w').write(pa)
59 ```
60
61 ```python Collapsed="false"
62 clue_dict = ['alerting', 'altering', 'integral', 'relating', 'triangle', 'angriest', 'gantries', 'granites', 'ingrates', 'rangiest', 'tangiers',
63 'dniester', 'inserted', 'nerdiest', 'resident', 'trendies', 'respects', 'scepters', 'sceptres', 'specters', 'spectres', 'restrain',
64 'retrains', 'strainer', 'terrains', 'trainers']
65 clue_trans = [transpositions_of(w) for w in clue_dict]
66 ```
67
68 ```python Collapsed="false"
69 (trans_b, fill_b, empty_b), score_b = column_transposition_break(scb, translist=clue_trans, fitness=Ptrigrams)
70 print(trans_b, fill_b, empty_b, '\n')
71 pb = column_transposition_decipher(cb, trans_b,
72 fillcolumnwise=fill_b,
73 emptycolumnwise=empty_b)
74 print(pb)
75 ```
76
77 ```python Collapsed="false"
78 (trans_b, fill_b, empty_b), score_b = column_transposition_break(scb, fitness=Ptrigrams)
79 print(trans_b, fill_b, empty_b, '\n')
80 ```
81
82 ```python Collapsed="false"
83 pb = prettify(column_transposition_decipher(scb, trans_b,
84 fillcolumnwise=fill_b,
85 emptycolumnwise=empty_b))
86 print(pb)
87 ```
88
89 ```python Collapsed="false"
90 transpositions[trans_b]
91 ```
92
93 ```python Collapsed="false"
94 open(plaintext_b_filename, 'w').write(pb)
95 ```
96
97 ```python Collapsed="false"
98
99 ```