Done 2021 challenge 6
[cipher-challenge.git] / 2021 / 2021-challenge6.md
diff --git a/2021/2021-challenge6.md b/2021/2021-challenge6.md
new file mode 100644 (file)
index 0000000..34a691c
--- /dev/null
@@ -0,0 +1,114 @@
+---
+jupyter:
+  jupytext:
+    formats: ipynb,md
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.11.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+---
+
+```python Collapsed="false"
+from szyfrow.caesar import *
+from szyfrow.affine import *
+from szyfrow.keyword_cipher import *
+from szyfrow.column_transposition import *
+from szyfrow.vigenere import *
+from szyfrow.support.text_prettify import *
+
+import numpy as np
+import pandas as pd
+import matplotlib.pyplot as plt
+
+import collections
+%matplotlib inline
+```
+
+```python Collapsed="false"
+challenge_number = 6
+plaintext_a_filename = f'plaintext.{challenge_number}a.txt'
+plaintext_b_filename = f'plaintext.{challenge_number}b.txt'
+ciphertext_a_filename = f'ciphertext.{challenge_number}a.txt'
+ciphertext_b_filename = f'ciphertext.{challenge_number}b.txt'
+```
+
+```python Collapsed="false"
+ca = open(ciphertext_a_filename).read()
+cb = open(ciphertext_b_filename).read()
+
+sca = sanitise(ca)
+rsca = cat(reversed(sca))
+scb = sanitise(cb)
+rscb = cat(reversed(scb))
+```
+
+```python
+sca_counts = collections.Counter(sca)
+sca_counts
+```
+
+```python
+pd.Series(sca_counts).sort_index().plot.bar()
+```
+
+```python
+key_a, score_a = railfence_break(sca, fitness=Ptrigrams)
+print(key_a, '\n')
+pa = railfence_decipher(sca, key_a)
+print(pa)
+```
+
+```python
+(word_a, fill_a, empty_a), score_a = column_transposition_break(sca, fitness=Ptrigrams)
+print(word_a, fill_a, empty_a, '\n')
+pa = column_transposition_decipher(sca, word_a, fillcolumnwise=fill_a, emptycolumnwise=empty_a)
+print(pa)
+```
+
+```python
+transpositions_of('deacb')
+```
+
+```python
+transpositions[word_a]
+```
+
+```python
+print(prettify(pa))
+```
+
+```python Collapsed="false"
+open(plaintext_a_filename, 'w').write(prettify(pa))
+```
+
+```python
+word_b, score_b = vigenere_frequency_break(scb, fitness=Ptrigrams)
+print(word_b, '\n')
+pb = vigenere_decipher(scb, word_b)
+print(pb)
+```
+
+```python
+word_b, score_b = vigenere_frequency_break(rscb, fitness=Ptrigrams)
+print(word_b, '\n')
+pb = vigenere_decipher(rscb, word_b)
+print(pb)
+```
+
+```python
+pb = vigenere_decipher(rscb, word_b)
+print(prettify(pb))
+```
+
+```python Collapsed="false"
+open(plaintext_b_filename, 'w').write(prettify(pb))
+```
+
+```python Collapsed="false"
+
+```