55703b7ebd82bad9ed34380af6f616a150b282b4
[cipher-challenge.git] / 2020 / 2020-challenge5.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 = 5
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 keyword_decipher(ca, 'akela', wrap_a)
46 ```
47
48 ```python Collapsed="false"
49 word_a, score_a = simulated_annealing_break(sca, fitness=Ptrigrams,
50 plain_alphabet=string.ascii_lowercase, cipher_alphabet=keyword_cipher_alphabet_of('akkad', wrap_alphabet=KeywordWrapAlphabet.from_largest))
51 print(word_a, '\n')
52 pa = keyword_decipher(ca, word_a)
53 print(pa)
54 ```
55
56 ```python Collapsed="false"
57 pa = prettify(keyword_decipher(sca, 'akela', wrap_alphabet=KeywordWrapAlphabet.from_a))
58 print(pa)
59 ```
60
61 ```python Collapsed="false"
62 open(plaintext_a_filename, 'w').write(pa)
63 ```
64
65 ```python Collapsed="false"
66 (word_b, wrap_b), score_b = keyword_break_mp(scb, fitness=Ptrigrams)
67 print(word_b, wrap_b, '\n')
68 pb = keyword_decipher(cb, word_b, wrap_b)
69 print(pb)
70 ```
71
72 ```python Collapsed="false"
73 pb = prettify(keyword_decipher(scb, word_b, wrap_b))
74 print(pb)
75 ```
76
77 ```python Collapsed="false"
78 open(plaintext_b_filename, 'w').write(pb)
79 ```
80
81 ```python Collapsed="false"
82 pbs = pb.split()
83 [pbs[i+1] for i, w in enumerate(pbs) if w == 'stop']
84 ```
85
86 ```python Collapsed="false"
87 cat(w[0] for w in pbs)
88 ```
89
90 ```python Collapsed="false"
91 [len(s.strip().split()) for s in pb.split('stop')]
92 ```
93
94 ```python Collapsed="false"
95 tt = ''.maketrans('rdf', 'RDF')
96 pbcap = wcat(pb.split()).translate(tt)
97 pbcap
98 ```
99
100 ```python Collapsed="false"
101 pbcap2 = cat(('\n' + c) if c.isupper() else c for c in pbcap)
102 print(pbcap2)
103 ```
104
105 ```python Collapsed="false"
106
107 ```