Done challenge 4
[cipher-tools.git] / 2020-early / 2020-a-challenge2.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 1,
6 "metadata": {},
7 "outputs": [],
8 "source": [
9 "import os,sys,inspect\n",
10 "currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))\n",
11 "parentdir = os.path.dirname(currentdir)\n",
12 "sys.path.insert(0,parentdir) "
13 ]
14 },
15 {
16 "cell_type": "code",
17 "execution_count": 8,
18 "metadata": {},
19 "outputs": [],
20 "source": [
21 "from cipher.caesar import *\n",
22 "from cipher.affine import *\n",
23 "\n",
24 "from support.text_prettify import *\n",
25 "from support.utilities import *\n",
26 "from support.plot_frequency_histogram import *"
27 ]
28 },
29 {
30 "cell_type": "code",
31 "execution_count": 3,
32 "metadata": {},
33 "outputs": [],
34 "source": [
35 "challenge_number = 2\n",
36 "plaintext_a_filename = f'{challenge_number}a.plaintext'\n",
37 "plaintext_b_filename = f'{challenge_number}b.plaintext'\n",
38 "ciphertext_a_filename = f'{challenge_number}a.ciphertext'\n",
39 "ciphertext_b_filename = f'{challenge_number}b.ciphertext'"
40 ]
41 },
42 {
43 "cell_type": "code",
44 "execution_count": 9,
45 "metadata": {},
46 "outputs": [],
47 "source": [
48 "ca = open(ciphertext_a_filename).read()\n",
49 "cb = open(ciphertext_b_filename).read()\n",
50 "\n",
51 "sca = sanitise(ca)\n",
52 "pca = letters(ca)\n",
53 "pta = depunctuate(ca)\n",
54 "\n",
55 "scb = sanitise(cb)\n",
56 "pcb = letters(cb)\n",
57 "ptb = depunctuate(cb)"
58 ]
59 },
60 {
61 "cell_type": "code",
62 "execution_count": 14,
63 "metadata": {},
64 "outputs": [
65 {
66 "name": "stdout",
67 "output_type": "stream",
68 "text": [
69 "(3, 6, True) \n",
70 "\n",
71 "PHIL I HEARD BACK FROM THE BRITISH MILITARY ATTACHE STOP HE SAID THAT THE NUMBER LOOKS LIKE THE FORMAT USED BY THE PATENT OFFICE STOP HE SUGGESTED THAT THE DOCUMENT MIGHT HAVE BEEN A DESIGN DRAWING FOR AN INVENTION STOP ONE OF OUR FIELD AGENTS TRIED TO FIND OUT WHICH ONE BUT THE NUMBERS LOOKED WRONG STOP PATENT NUMBERS STARTING GB EIGHT HAVE NOT BEEN ISSUED YET STOP THE AGENT HAD NOT SEEN THE PHOTO YOU SENT BUT SHE SHOWED INITIATIVE AND TRIED SOME OTHER NUMBERS STOP GB-SIX-THREE-ZERO-SEVEN-TWO-SIX-A WAS THE MOST PROMISING STOP CHECKED WITH OUR EXPERTS AND THEY WERE CONFUSED STOP ACCORDING TO COCKCROFT THE INVENTION IS IMPRACTICAL STOP SOMEONE POINTED OUT THAT IT FITS WITH THE NAME DIE ALCHEMISTEN STOP SEE ATTACHED STOP WILL INVESTIGATE FURTHER STOP NEXT COMMUNICATION IN SEVEN DAYS STOP\n",
72 "\n"
73 ]
74 }
75 ],
76 "source": [
77 "(ma, ca, za), score_a = affine_break(sca)\n",
78 "print((ma, ca, za), '\\n')\n",
79 "pa = repunctuate(affine_decipher(sca, ma, ca, za), pta)\n",
80 "print(pa)"
81 ]
82 },
83 {
84 "cell_type": "code",
85 "execution_count": 13,
86 "metadata": {},
87 "outputs": [
88 {
89 "data": {
90 "text/plain": [
91 "797"
92 ]
93 },
94 "execution_count": 13,
95 "metadata": {},
96 "output_type": "execute_result"
97 }
98 ],
99 "source": [
100 "open(plaintext_a_filename, 'w').write(pa)"
101 ]
102 },
103 {
104 "cell_type": "code",
105 "execution_count": 15,
106 "metadata": {},
107 "outputs": [
108 {
109 "name": "stdout",
110 "output_type": "stream",
111 "text": [
112 "(3, 9, True) \n",
113 "\n",
114 "HARRY, I CHECKED OUT THE PATENT YOU ASKED ME ABOUT. I THINK IT MIGHT BE RELATED TO A LECTURE COCKCROFT DELIVERED AT THE INSTITUTE OF ELECTRICAL ENGINEERS ON APRIL TWENTY THIRD NINETEEN THIRTY SIX. THE TOPIC WAS \"THE TRANSMUTATION OF MATTER BY HIGH ENERGY PARTICLES AND RADIATIONS\". GIVEN THE LABEL ON THE HINDENBURG ENVELOPE I THINK THE FOLLOWING EXTRACT IS PARTICULARLY INTERESTING: \"IN THE CASE OF NUCLEAR TRANSMUTATIONS, IT SEEMS THAT THE LOSS OF MASS IS PRECISELY EQUAL TO THE INCREASE IN THE KINETIC ENERGY THAT HAS TAKEN PLACE. THIS GIVES A STRIKING PROOF OF THE MODERN PHYSICAL LAW THAT MASS AND ENERGY ARE EQUIVALENT. IN NINETEEN THIRTY TWO CHADWICK DISCOVERED THE NEUTRON, A NEW TYPE OF ATOMIC PARTICLE WHICH HAS NO ELECTRIC CHARGE. IT DOES NOT THEREFORE INTERACT WITH OTHER ELECTRONS AND PRODUCES NO IONISATION WHEN PASSING THROUGH A GAS. IT IS OF OUTSTANDING IMPORTANCE BECAUSE OF ITS POWER TO PRODUCE TRANSMUTATIONS. THERE IS LITTLE HOPE THAT THIS PROCESS CAN BE USED ON AN ENGINEERING SCALE TO CONVERT MASS INTO ENERGY. SO FAR, OUR LABORATORY EXPERIMENTS PRODUCE THE CONVERSE RESULT. THEORY INDICATES THAT AT TEMPERATURES EQUAL TO THOSE OF THE INTERIOR OF THE SUN OR STARS, IT MIGHT BE POSSIBLE TO CONVERT THE INEXPENSIVE SIMPLE ELEMENTS TO THE MORE VALUABLE HEAVIER COMBINATIONS, BUT PRACTICALLY, THERE IS NO METHOD OF PRODUCING THE EFFECTS FORMERLY ATTRIBUTED TO THE 'PHILOSOPHER'S STONE'.\"\n",
115 "\n"
116 ]
117 }
118 ],
119 "source": [
120 "(mb, cb, zb), score_a = affine_break(scb)\n",
121 "print((mb, cb, zb), '\\n')\n",
122 "pb = repunctuate(affine_decipher(scb, mb, cb, zb), ptb)\n",
123 "print(pb)"
124 ]
125 },
126 {
127 "cell_type": "code",
128 "execution_count": 16,
129 "metadata": {},
130 "outputs": [
131 {
132 "data": {
133 "text/plain": [
134 "1406"
135 ]
136 },
137 "execution_count": 16,
138 "metadata": {},
139 "output_type": "execute_result"
140 }
141 ],
142 "source": [
143 "open(plaintext_b_filename, 'w').write(pb)"
144 ]
145 },
146 {
147 "cell_type": "code",
148 "execution_count": null,
149 "metadata": {},
150 "outputs": [],
151 "source": []
152 }
153 ],
154 "metadata": {
155 "jupytext": {
156 "formats": "ipynb,md"
157 },
158 "kernelspec": {
159 "display_name": "Python 3",
160 "language": "python",
161 "name": "python3"
162 },
163 "language_info": {
164 "codemirror_mode": {
165 "name": "ipython",
166 "version": 3
167 },
168 "file_extension": ".py",
169 "mimetype": "text/x-python",
170 "name": "python",
171 "nbconvert_exporter": "python",
172 "pygments_lexer": "ipython3",
173 "version": "3.7.4"
174 }
175 },
176 "nbformat": 4,
177 "nbformat_minor": 4
178 }