Challenge 8a done, 8b not attempted
[cipher-training.git] / 2014-challenge3.ipynb
1 {
2 "metadata": {
3 "name": "",
4 "signature": "sha256:d8ff372312e3a12aff6a0d9e6b5df79509140ca9131aeeb8fc78255c4c5e8cd3"
5 },
6 "nbformat": 3,
7 "nbformat_minor": 0,
8 "worksheets": [
9 {
10 "cells": [
11 {
12 "cell_type": "code",
13 "collapsed": false,
14 "input": [
15 "import matplotlib.pyplot as plt\n",
16 "import pandas as pd\n",
17 "import collections\n",
18 "import string\n",
19 "%matplotlib inline\n",
20 "\n",
21 "from cipherbreak import *\n",
22 "\n",
23 "c3a = open('2014/3a.ciphertext').read()\n",
24 "c3b = open('2014/3b.ciphertext').read()"
25 ],
26 "language": "python",
27 "metadata": {},
28 "outputs": [],
29 "prompt_number": 1
30 },
31 {
32 "cell_type": "code",
33 "collapsed": false,
34 "input": [
35 "freqs = pd.Series(english_counts)\n",
36 "freqs.plot(kind='bar')"
37 ],
38 "language": "python",
39 "metadata": {},
40 "outputs": [
41 {
42 "metadata": {},
43 "output_type": "pyout",
44 "prompt_number": 2,
45 "text": [
46 "<matplotlib.axes.AxesSubplot at 0x7f80ce03bc88>"
47 ]
48 },
49 {
50 "metadata": {},
51 "output_type": "display_data",
52 "png": "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\nTkSuQmCC\n",
53 "text": [
54 "<matplotlib.figure.Figure at 0x7f810453c2b0>"
55 ]
56 }
57 ],
58 "prompt_number": 2
59 },
60 {
61 "cell_type": "code",
62 "collapsed": false,
63 "input": [
64 "key_a, score = affine_break(c3a)\n",
65 "key_a, score"
66 ],
67 "language": "python",
68 "metadata": {},
69 "outputs": [
70 {
71 "metadata": {},
72 "output_type": "pyout",
73 "prompt_number": 3,
74 "text": [
75 "((11, 1, True), -839.4977013876568)"
76 ]
77 }
78 ],
79 "prompt_number": 3
80 },
81 {
82 "cell_type": "code",
83 "collapsed": false,
84 "input": [
85 "print(' '.join(segment(affine_decipher(sanitise(c3a), key_a[0], key_a[1]))))"
86 ],
87 "language": "python",
88 "metadata": {},
89 "outputs": [
90 {
91 "output_type": "stream",
92 "stream": "stdout",
93 "text": [
94 "harry you asked me about the flag day associates they area transnational hacking group dedicated to the overthrow of western capitalism they have been implicated in several major protests including an attempt to takeover the uk national grid attacks on reservoir systems and interference in bank trading networks it looks like the fda carried out fairly extensive modifications to the ship they did a good job too we hadnt noticed the added bulkheads until we compared the layout with the plans from lloyds register they seem to be there to add rigidity though there is one additional panel at the stern that doesnt fit the pattern and we will be removing that tonight to see what it is there for we would have done it this afternoon but decided we should conduct our own hull survey in case there is a booby trap\n"
95 ]
96 }
97 ],
98 "prompt_number": 6
99 },
100 {
101 "cell_type": "code",
102 "collapsed": false,
103 "input": [
104 "key_b, score = keyword_break_mp(c3b)\n",
105 "key_b, score"
106 ],
107 "language": "python",
108 "metadata": {},
109 "outputs": [
110 {
111 "metadata": {},
112 "output_type": "pyout",
113 "prompt_number": 7,
114 "text": [
115 "(('seahorse', <KeywordWrapAlphabet.from_last: 2>), -681.3308426043137)"
116 ]
117 }
118 ],
119 "prompt_number": 7
120 },
121 {
122 "cell_type": "code",
123 "collapsed": false,
124 "input": [
125 "print(' '.join(segment(sanitise(keyword_decipher(c3b, key_b[0], key_b[1])))))"
126 ],
127 "language": "python",
128 "metadata": {},
129 "outputs": [
130 {
131 "output_type": "stream",
132 "stream": "stdout",
133 "text": [
134 "phase three the nautilus system was fully tested last night with complete success we sailed within four hundred metres of the target and monitored all radio traffic for two hours with no sign that we were being watched or were even noticed we then conducted a full radar sweep of the area and found three dead spots where we could work on the ship without detection as planned we converted the two adjacent empty containers in the middle of the stack into a large workshop area and carried out a full inspection drill now even if we are boarded our work should remain undetected we retrieved seahorse from the third container and carried out stage one of the assembly\n"
135 ]
136 }
137 ],
138 "prompt_number": 8
139 },
140 {
141 "cell_type": "code",
142 "collapsed": false,
143 "input": [
144 "freqs_3b = pd.Series(collections.Counter([l.lower() for l in c3b if l in string.ascii_letters]))\n",
145 "freqs_3b.plot(kind='bar')"
146 ],
147 "language": "python",
148 "metadata": {},
149 "outputs": [
150 {
151 "metadata": {},
152 "output_type": "pyout",
153 "prompt_number": 9,
154 "text": [
155 "<matplotlib.axes.AxesSubplot at 0x7f80cfc0bf60>"
156 ]
157 },
158 {
159 "metadata": {},
160 "output_type": "display_data",
161 "png": "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\n",
162 "text": [
163 "<matplotlib.figure.Figure at 0x7f80cfc0beb8>"
164 ]
165 }
166 ],
167 "prompt_number": 9
168 },
169 {
170 "cell_type": "code",
171 "collapsed": false,
172 "input": [],
173 "language": "python",
174 "metadata": {},
175 "outputs": []
176 }
177 ],
178 "metadata": {}
179 }
180 ]
181 }