Started 2015 challenges
[cipher-training.git] / 2014-challenge8.ipynb
1 {
2 "metadata": {
3 "name": "",
4 "signature": "sha256:8cfa7fab1d8d3830f8cdd550122b0b7f10258d8adb3ff205bd1feeca64418741"
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 "c8a = open('2014/8a.ciphertext').read()\n",
24 "c8b = open('2014/8b.ciphertext').read().strip()"
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 0x7f25d36fa358>"
47 ]
48 },
49 {
50 "metadata": {},
51 "output_type": "display_data",
52 "png": "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\n",
53 "text": [
54 "<matplotlib.figure.Figure at 0x7f26006854e0>"
55 ]
56 }
57 ],
58 "prompt_number": 2
59 },
60 {
61 "cell_type": "code",
62 "collapsed": false,
63 "input": [
64 "freqs_8a = pd.Series(collections.Counter([l.lower() for l in c8a if l in string.ascii_letters]))\n",
65 "freqs_8a.plot(kind='bar')"
66 ],
67 "language": "python",
68 "metadata": {},
69 "outputs": [
70 {
71 "metadata": {},
72 "output_type": "pyout",
73 "prompt_number": 3,
74 "text": [
75 "<matplotlib.axes.AxesSubplot at 0x7f25d37269b0>"
76 ]
77 },
78 {
79 "metadata": {},
80 "output_type": "display_data",
81 "png": "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\n",
82 "text": [
83 "<matplotlib.figure.Figure at 0x7f25d369f358>"
84 ]
85 }
86 ],
87 "prompt_number": 3
88 },
89 {
90 "cell_type": "code",
91 "collapsed": false,
92 "input": [
93 "c8as = sanitise(c8a)\n",
94 "c8as"
95 ],
96 "language": "python",
97 "metadata": {},
98 "outputs": [
99 {
100 "metadata": {},
101 "output_type": "pyout",
102 "prompt_number": 4,
103 "text": [
104 "'nyvlggsyglchxfeuytqcesqxpziufiggrbjhpayncruyfpsxufiupskyrectmmcncruyregxigrlglbtiblmecebzsvrlpuxpbibjajrljreobajrlufigjehbezywtmgjyxfqxictsgrdgtbjafyoocwtmjblctwwucqmgofrlfmrfrlfwlbtijlwuypmchjqxicrfchumtsmzjbimyvhcuvyrugxjcwpdtpuisrlfdhbaencyqumufeogrhcrjmytqsmsxjmrcsxjrmttiswzvjrfpecjitnidgemdssaitasvjhuyofgxpsxgmvvqfvrxiyxxmymbxfjpufigbeufeuuiiyzfavbaofbxicmsamqfisqwpgrtribbmtskhcwuuimcxufinbitrvpwxsmnbljppytuixgpmlifbgpmtfpeugsodvpkxicsnyrjeswcvokioreoyvnchggkirishiuyrerlfdpjeluasorvpjwzqxfkwgpsnyhsmrfkiblaigpfuiociersflwvpiuusufmoewpliufeuuiemrprwflhdpmuggbjmodsskeugsoygsmwtrlfzecypnyreyftrvbgxblhuusufeuuivqiblsoavjrmdyplcchcrfpeugsonvprsdmpplxiyxdfeolimemwcrufimczfjsgasnkmukiorxicjeylbtitfsxlmobiwcppnmoexigwqjeogenqyscxiyxufizummjvfgrtreucxictpuisqyqnpzumufmoyjfuqplxiqfvrajrlmsglrlfwajjpomxhsitqxiyxxcoomabzsvrmuyreuixgpmnyugxpsxpdfvqmocwtdssjsoeiomyhfxpasncyqumufeqjeomjpsvpurumiynppgxjrmorlfkiblxjkixcrpuoomaufeurlfgvigkicwuqidsvjrcdmqnsrjaeugsoqescioavznxfbytgrhygbbioswdgticvtmafaeoqxbpxisrugrhrlsmyhfxichbrecywfdssmxicvjlxfpgfnxtuidyrdpedixigwnycccxicfscelrlsmyhfaffewcffcrmmslgrhdssgrufiggkirehymoqxufigbemcxtlsuqgscajryqypmrlfzitrlbpvz'"
105 ]
106 }
107 ],
108 "prompt_number": 4
109 },
110 {
111 "cell_type": "code",
112 "collapsed": false,
113 "input": [
114 "key_a, score = vigenere_frequency_break(c8as)\n",
115 "key_a, score"
116 ],
117 "language": "python",
118 "metadata": {},
119 "outputs": [
120 {
121 "metadata": {},
122 "output_type": "pyout",
123 "prompt_number": 5,
124 "text": [
125 "('bye', -1461.9840974270046)"
126 ]
127 }
128 ],
129 "prompt_number": 5
130 },
131 {
132 "cell_type": "code",
133 "collapsed": false,
134 "input": [
135 "' '.join(segment(vigenere_decipher(c8as, key_a)))"
136 ],
137 "language": "python",
138 "metadata": {},
139 "outputs": [
140 {
141 "metadata": {},
142 "output_type": "pyout",
143 "prompt_number": 6,
144 "text": [
145 "'mark i cracked what appears to be the final document about the trojan deployment and i think i have an idea about how to deal with it and with the flag day associates the principal weakness of any system like the one they have installed is the need to provide large quantities of power the fda came up with an ingenious solution but it is very vulnerable special forces could take it out for us but that would tell the fda that we have cracked their ciphers so instead i suggest we let them destroy trojan for us we will need cooperation from the omani government an armed fighter jet and the flight control systems from a drone meanwhile we need to ensure two things one that we do not send critical information across the ba balm and abstrait and two that we use an on critical key generation protocol on that channel given the level of commitment the fda have shown in developing this plan i am sure that they will reinstate the powersupply within a few months but with luck they will not guess that we know about it and we will put it out of business for long enough to come up with a plan of our own to exploit it in the meantime we now know that their highest security communications are encrypted using a caden us cipher so we can start hunting through the database for other intercepts we can crack this maybe the breakthrough we have been looking for in the fight against the fda lets not screw it up all the best harry'"
146 ]
147 }
148 ],
149 "prompt_number": 6
150 },
151 {
152 "cell_type": "code",
153 "collapsed": false,
154 "input": [
155 "len(c8b) / 8"
156 ],
157 "language": "python",
158 "metadata": {},
159 "outputs": [
160 {
161 "metadata": {},
162 "output_type": "pyout",
163 "prompt_number": 7,
164 "text": [
165 "875.0"
166 ]
167 }
168 ],
169 "prompt_number": 7
170 },
171 {
172 "cell_type": "code",
173 "collapsed": false,
174 "input": [
175 "[c for c in chunks(c8b, 5)]"
176 ],
177 "language": "python",
178 "metadata": {},
179 "outputs": [
180 {
181 "metadata": {},
182 "output_type": "pyout",
183 "prompt_number": 8,
184 "text": [
185 "['00000',\n",
186 " '00101',\n",
187 " '00010',\n",
188 " '00000',\n",
189 " '00100',\n",
190 " '10100',\n",
191 " '01110',\n",
192 " '10011',\n",
193 " '10011',\n",
194 " '00000',\n",
195 " '00010',\n",
196 " '10011',\n",
197 " '00111',\n",
198 " '10001',\n",
199 " '01000',\n",
200 " '01110',\n",
201 " '01011',\n",
202 " '00100',\n",
203 " '10011',\n",
204 " '00010',\n",
205 " '10010',\n",
206 " '00100',\n",
207 " '10001',\n",
208 " '10011',\n",
209 " '00111',\n",
210 " '10010',\n",
211 " '00111',\n",
212 " '10011',\n",
213 " '10001',\n",
214 " '00000',\n",
215 " '00111',\n",
216 " '01010',\n",
217 " '11000',\n",
218 " '01110',\n",
219 " '10001',\n",
220 " '01111',\n",
221 " '00101',\n",
222 " '10001',\n",
223 " '00110',\n",
224 " '00100',\n",
225 " '01110',\n",
226 " '00000',\n",
227 " '00011',\n",
228 " '01111',\n",
229 " '01111',\n",
230 " '01001',\n",
231 " '01101',\n",
232 " '00110',\n",
233 " '01011',\n",
234 " '10011',\n",
235 " '00100',\n",
236 " '10001',\n",
237 " '01101',\n",
238 " '00100',\n",
239 " '00101',\n",
240 " '00100',\n",
241 " '01110',\n",
242 " '00101',\n",
243 " '01000',\n",
244 " '01110',\n",
245 " '10001',\n",
246 " '10011',\n",
247 " '10010',\n",
248 " '00011',\n",
249 " '00011',\n",
250 " '01110',\n",
251 " '00100',\n",
252 " '00100',\n",
253 " '10100',\n",
254 " '01100',\n",
255 " '10010',\n",
256 " '00010',\n",
257 " '10001',\n",
258 " '10100',\n",
259 " '00100',\n",
260 " '10001',\n",
261 " '01101',\n",
262 " '00101',\n",
263 " '00100',\n",
264 " '10011',\n",
265 " '01011',\n",
266 " '00000',\n",
267 " '00000',\n",
268 " '00101',\n",
269 " '10010',\n",
270 " '10011',\n",
271 " '10110',\n",
272 " '01000',\n",
273 " '00100',\n",
274 " '01101',\n",
275 " '10011',\n",
276 " '10001',\n",
277 " '10101',\n",
278 " '01110',\n",
279 " '01110',\n",
280 " '01101',\n",
281 " '00100',\n",
282 " '10001',\n",
283 " '00111',\n",
284 " '10100',\n",
285 " '00000',\n",
286 " '00111',\n",
287 " '10001',\n",
288 " '00000',\n",
289 " '10101',\n",
290 " '00100',\n",
291 " '10001',\n",
292 " '00100',\n",
293 " '00100',\n",
294 " '10011',\n",
295 " '10010',\n",
296 " '10101',\n",
297 " '10010',\n",
298 " '01000',\n",
299 " '00100',\n",
300 " '01011',\n",
301 " '00111',\n",
302 " '01011',\n",
303 " '01110',\n",
304 " '10010',\n",
305 " '10011',\n",
306 " '00011',\n",
307 " '01110',\n",
308 " '00000',\n",
309 " '01011',\n",
310 " '01110',\n",
311 " '11000',\n",
312 " '00000',\n",
313 " '00100',\n",
314 " '10010',\n",
315 " '01100',\n",
316 " '01101',\n",
317 " '01101',\n",
318 " '00011',\n",
319 " '01000',\n",
320 " '00110',\n",
321 " '01101',\n",
322 " '01101',\n",
323 " '10001',\n",
324 " '00111',\n",
325 " '01110',\n",
326 " '00111',\n",
327 " '00111',\n",
328 " '10011',\n",
329 " '10010',\n",
330 " '01101',\n",
331 " '00000',\n",
332 " '01110',\n",
333 " '01000',\n",
334 " '01011',\n",
335 " '01101',\n",
336 " '00010',\n",
337 " '01101',\n",
338 " '10010',\n",
339 " '10010',\n",
340 " '01000',\n",
341 " '00010',\n",
342 " '10001',\n",
343 " '00100',\n",
344 " '00000',\n",
345 " '01101',\n",
346 " '01101',\n",
347 " '00100',\n",
348 " '00100',\n",
349 " '01000',\n",
350 " '01000',\n",
351 " '01000',\n",
352 " '00100',\n",
353 " '10001',\n",
354 " '10110',\n",
355 " '10011',\n",
356 " '00000',\n",
357 " '01101',\n",
358 " '00100',\n",
359 " '10010',\n",
360 " '10001',\n",
361 " '10101',\n",
362 " '01110',\n",
363 " '00110',\n",
364 " '01000',\n",
365 " '00100',\n",
366 " '01000',\n",
367 " '11000',\n",
368 " '10110',\n",
369 " '10010',\n",
370 " '10010',\n",
371 " '00011',\n",
372 " '00110',\n",
373 " '01111',\n",
374 " '10101',\n",
375 " '01110',\n",
376 " '01000',\n",
377 " '00000',\n",
378 " '01000',\n",
379 " '10010',\n",
380 " '00000',\n",
381 " '01110',\n",
382 " '00000',\n",
383 " '00100',\n",
384 " '01110',\n",
385 " '00000',\n",
386 " '00100',\n",
387 " '00011',\n",
388 " '10001',\n",
389 " '01101',\n",
390 " '01000',\n",
391 " '10011',\n",
392 " '10001',\n",
393 " '01101',\n",
394 " '10111',\n",
395 " '00100',\n",
396 " '01000',\n",
397 " '00110',\n",
398 " '10001',\n",
399 " '01111',\n",
400 " '10010',\n",
401 " '10010',\n",
402 " '00111',\n",
403 " '00000',\n",
404 " '00011',\n",
405 " '00111',\n",
406 " '00011',\n",
407 " '10011',\n",
408 " '01110',\n",
409 " '01000',\n",
410 " '01111',\n",
411 " '00000',\n",
412 " '00000',\n",
413 " '10011',\n",
414 " '00100',\n",
415 " '10111',\n",
416 " '00100',\n",
417 " '01101',\n",
418 " '01101',\n",
419 " '00100',\n",
420 " '10010',\n",
421 " '00000',\n",
422 " '00110',\n",
423 " '10001',\n",
424 " '01110',\n",
425 " '00001',\n",
426 " '10011',\n",
427 " '01011',\n",
428 " '00100',\n",
429 " '10010',\n",
430 " '10001',\n",
431 " '01101',\n",
432 " '10001',\n",
433 " '01110',\n",
434 " '01000',\n",
435 " '10001',\n",
436 " '11000',\n",
437 " '01111',\n",
438 " '00001',\n",
439 " '00110',\n",
440 " '00100',\n",
441 " '00011',\n",
442 " '00010',\n",
443 " '01011',\n",
444 " '01011',\n",
445 " '01000',\n",
446 " '10110',\n",
447 " '00000',\n",
448 " '01011',\n",
449 " '00000',\n",
450 " '01011',\n",
451 " '00100',\n",
452 " '00100',\n",
453 " '01101',\n",
454 " '01000',\n",
455 " '00110',\n",
456 " '10001',\n",
457 " '10001',\n",
458 " '01101',\n",
459 " '10110',\n",
460 " '11000',\n",
461 " '10001',\n",
462 " '01011',\n",
463 " '01000',\n",
464 " '01100',\n",
465 " '01011',\n",
466 " '01111',\n",
467 " '10010',\n",
468 " '10011',\n",
469 " '01110',\n",
470 " '01011',\n",
471 " '00100',\n",
472 " '00101',\n",
473 " '10011',\n",
474 " '10001',\n",
475 " '00011',\n",
476 " '01100',\n",
477 " '10100',\n",
478 " '00000',\n",
479 " '10001',\n",
480 " '01000',\n",
481 " '00100',\n",
482 " '00100',\n",
483 " '00100',\n",
484 " '01000',\n",
485 " '01000',\n",
486 " '00000',\n",
487 " '01110',\n",
488 " '01011',\n",
489 " '01101',\n",
490 " '00100',\n",
491 " '10110',\n",
492 " '10010',\n",
493 " '00000',\n",
494 " '01110',\n",
495 " '00111',\n",
496 " '10001',\n",
497 " '10011',\n",
498 " '01011',\n",
499 " '10010',\n",
500 " '10011',\n",
501 " '01110',\n",
502 " '00001',\n",
503 " '00100',\n",
504 " '10011',\n",
505 " '01101',\n",
506 " '10010',\n",
507 " '01011',\n",
508 " '10101',\n",
509 " '00101',\n",
510 " '01000',\n",
511 " '10101',\n",
512 " '00011',\n",
513 " '01110',\n",
514 " '10101',\n",
515 " '10011',\n",
516 " '01111',\n",
517 " '01110',\n",
518 " '00000',\n",
519 " '00100',\n",
520 " '00100',\n",
521 " '01000',\n",
522 " '10010',\n",
523 " '00010',\n",
524 " '01000',\n",
525 " '01110',\n",
526 " '00111',\n",
527 " '01000',\n",
528 " '01111',\n",
529 " '10010',\n",
530 " '00100',\n",
531 " '10101',\n",
532 " '00100',\n",
533 " '00100',\n",
534 " '00011',\n",
535 " '10011',\n",
536 " '00100',\n",
537 " '10110',\n",
538 " '00101',\n",
539 " '00000',\n",
540 " '10001',\n",
541 " '01101',\n",
542 " '00111',\n",
543 " '00100',\n",
544 " '00001',\n",
545 " '01011',\n",
546 " '00100',\n",
547 " '00000',\n",
548 " '01110',\n",
549 " '10011',\n",
550 " '01110',\n",
551 " '00111',\n",
552 " '10011',\n",
553 " '10011',\n",
554 " '10011',\n",
555 " '00100',\n",
556 " '01111',\n",
557 " '01101',\n",
558 " '00010',\n",
559 " '01010',\n",
560 " '00000',\n",
561 " '01110',\n",
562 " '01101',\n",
563 " '00111',\n",
564 " '10110',\n",
565 " '00100',\n",
566 " '10011',\n",
567 " '01100',\n",
568 " '10101',\n",
569 " '11000',\n",
570 " '01111',\n",
571 " '10001',\n",
572 " '10001',\n",
573 " '00100',\n",
574 " '01110',\n",
575 " '01101',\n",
576 " '01101',\n",
577 " '00000',\n",
578 " '10010',\n",
579 " '00110',\n",
580 " '00011',\n",
581 " '00100',\n",
582 " '00011',\n",
583 " '01110',\n",
584 " '00100',\n",
585 " '00100',\n",
586 " '00100',\n",
587 " '01110',\n",
588 " '00000',\n",
589 " '00000',\n",
590 " '01100',\n",
591 " '10011',\n",
592 " '00010',\n",
593 " '01000',\n",
594 " '00010',\n",
595 " '10011',\n",
596 " '10011',\n",
597 " '01000',\n",
598 " '00101',\n",
599 " '01101',\n",
600 " '00000',\n",
601 " '00011',\n",
602 " '10001',\n",
603 " '00100',\n",
604 " '10010',\n",
605 " '10001',\n",
606 " '10011',\n",
607 " '10010',\n",
608 " '00100',\n",
609 " '10001',\n",
610 " '01110',\n",
611 " '10010',\n",
612 " '00100',\n",
613 " '10011',\n",
614 " '10001',\n",
615 " '00111',\n",
616 " '00010',\n",
617 " '01000',\n",
618 " '00010',\n",
619 " '10011',\n",
620 " '01111',\n",
621 " '10010',\n",
622 " '00000',\n",
623 " '00000',\n",
624 " '00100',\n",
625 " '00111',\n",
626 " '01011',\n",
627 " '00011',\n",
628 " '00111',\n",
629 " '10010',\n",
630 " '00101',\n",
631 " '10111',\n",
632 " '10010',\n",
633 " '01110',\n",
634 " '00000',\n",
635 " '01110',\n",
636 " '10011',\n",
637 " '00010',\n",
638 " '10011',\n",
639 " '00001',\n",
640 " '00001',\n",
641 " '10010',\n",
642 " '01110',\n",
643 " '00100',\n",
644 " '01000',\n",
645 " '10001',\n",
646 " '01101',\n",
647 " '10010',\n",
648 " '00000',\n",
649 " '00011',\n",
650 " '01011',\n",
651 " '11000',\n",
652 " '10011',\n",
653 " '10001',\n",
654 " '10001',\n",
655 " '10100',\n",
656 " '01101',\n",
657 " '10001',\n",
658 " '00010',\n",
659 " '00100',\n",
660 " '01111',\n",
661 " '10011',\n",
662 " '10011',\n",
663 " '00111',\n",
664 " '10001',\n",
665 " '00100',\n",
666 " '10100',\n",
667 " '00111',\n",
668 " '01101',\n",
669 " '01010',\n",
670 " '10011',\n",
671 " '00000',\n",
672 " '00010',\n",
673 " '00100',\n",
674 " '00010',\n",
675 " '00100',\n",
676 " '00100',\n",
677 " '01011',\n",
678 " '10001',\n",
679 " '10110',\n",
680 " '01101',\n",
681 " '01000',\n",
682 " '10001',\n",
683 " '00100',\n",
684 " '00100',\n",
685 " '00100',\n",
686 " '00000',\n",
687 " '00100',\n",
688 " '10010',\n",
689 " '00100',\n",
690 " '00100',\n",
691 " '00100',\n",
692 " '01000',\n",
693 " '00011',\n",
694 " '01000',\n",
695 " '10010',\n",
696 " '01110',\n",
697 " '00110',\n",
698 " '00010',\n",
699 " '00100',\n",
700 " '01110',\n",
701 " '01100',\n",
702 " '01101',\n",
703 " '10001',\n",
704 " '10011',\n",
705 " '00100',\n",
706 " '01001',\n",
707 " '00111',\n",
708 " '00000',\n",
709 " '00110',\n",
710 " '00000',\n",
711 " '00001',\n",
712 " '10010',\n",
713 " '00100',\n",
714 " '01101',\n",
715 " '01000',\n",
716 " '10011',\n",
717 " '01011',\n",
718 " '10110',\n",
719 " '10011',\n",
720 " '10001',\n",
721 " '01101',\n",
722 " '00001',\n",
723 " '01100',\n",
724 " '01000',\n",
725 " '00100',\n",
726 " '01011',\n",
727 " '10010',\n",
728 " '00000',\n",
729 " '10001',\n",
730 " '00100',\n",
731 " '10011',\n",
732 " '00100',\n",
733 " '10010',\n",
734 " '10001',\n",
735 " '01101',\n",
736 " '00110',\n",
737 " '10010',\n",
738 " '01101',\n",
739 " '00111',\n",
740 " '00100',\n",
741 " '00001',\n",
742 " '01000',\n",
743 " '01110',\n",
744 " '10010',\n",
745 " '00011',\n",
746 " '01000',\n",
747 " '00100',\n",
748 " '01101',\n",
749 " '00000',\n",
750 " '00101',\n",
751 " '01011',\n",
752 " '00100',\n",
753 " '01000',\n",
754 " '10010',\n",
755 " '00000',\n",
756 " '00111',\n",
757 " '01110',\n",
758 " '00010',\n",
759 " '01000',\n",
760 " '00101',\n",
761 " '00100',\n",
762 " '10101',\n",
763 " '01100',\n",
764 " '00101',\n",
765 " '00000',\n",
766 " '10011',\n",
767 " '00000',\n",
768 " '01101',\n",
769 " '00000',\n",
770 " '10011',\n",
771 " '10001',\n",
772 " '01101',\n",
773 " '01000',\n",
774 " '00000',\n",
775 " '00110',\n",
776 " '01101',\n",
777 " '00111',\n",
778 " '00000',\n",
779 " '10011',\n",
780 " '01101',\n",
781 " '01100',\n",
782 " '01000',\n",
783 " '00001',\n",
784 " '01101',\n",
785 " '01000',\n",
786 " '10100',\n",
787 " '00101',\n",
788 " '00100',\n",
789 " '01101',\n",
790 " '10001',\n",
791 " '10011',\n",
792 " '01110',\n",
793 " '10011',\n",
794 " '10011',\n",
795 " '10001',\n",
796 " '01101',\n",
797 " '11000',\n",
798 " '01111',\n",
799 " '00000',\n",
800 " '01000',\n",
801 " '00011',\n",
802 " '11000',\n",
803 " '01000',\n",
804 " '00100',\n",
805 " '00110',\n",
806 " '00011',\n",
807 " '01101',\n",
808 " '01100',\n",
809 " '00100',\n",
810 " '10001',\n",
811 " '00111',\n",
812 " '00111',\n",
813 " '01000',\n",
814 " '01110',\n",
815 " '10011',\n",
816 " '10001',\n",
817 " '00100',\n",
818 " '10011',\n",
819 " '00010',\n",
820 " '00100',\n",
821 " '10010',\n",
822 " '10010',\n",
823 " '00100',\n",
824 " '01000',\n",
825 " '01011',\n",
826 " '00011',\n",
827 " '10001',\n",
828 " '00001',\n",
829 " '00010',\n",
830 " '00100',\n",
831 " '01111',\n",
832 " '10001',\n",
833 " '01000',\n",
834 " '00110',\n",
835 " '00000',\n",
836 " '00100',\n",
837 " '10010',\n",
838 " '01110',\n",
839 " '00000',\n",
840 " '00011',\n",
841 " '01011',\n",
842 " '10011',\n",
843 " '00000',\n",
844 " '00111',\n",
845 " '01000',\n",
846 " '00100',\n",
847 " '10101',\n",
848 " '00100',\n",
849 " '00001',\n",
850 " '10001',\n",
851 " '00010',\n",
852 " '00100',\n",
853 " '01101',\n",
854 " '01011',\n",
855 " '00100',\n",
856 " '10101',\n",
857 " '00000',\n",
858 " '10010',\n",
859 " '00000',\n",
860 " '00011',\n",
861 " '01101',\n",
862 " '01101',\n",
863 " '10011',\n",
864 " '00111',\n",
865 " '01101',\n",
866 " '00100',\n",
867 " '01000',\n",
868 " '10011',\n",
869 " '00100',\n",
870 " '01000',\n",
871 " '01000',\n",
872 " '10010',\n",
873 " '00000',\n",
874 " '00111',\n",
875 " '10100',\n",
876 " '00111',\n",
877 " '00111',\n",
878 " '10100',\n",
879 " '00000',\n",
880 " '01100',\n",
881 " '01110',\n",
882 " '01101',\n",
883 " '00100',\n",
884 " '00101',\n",
885 " '11000',\n",
886 " '00111',\n",
887 " '01011',\n",
888 " '01110',\n",
889 " '01101',\n",
890 " '10110',\n",
891 " '00111',\n",
892 " '00000',\n",
893 " '00100',\n",
894 " '00100',\n",
895 " '00100',\n",
896 " '00100',\n",
897 " '01110',\n",
898 " '10010',\n",
899 " '01101',\n",
900 " '00100',\n",
901 " '00100',\n",
902 " '11000',\n",
903 " '00000',\n",
904 " '01101',\n",
905 " '00100',\n",
906 " '01000',\n",
907 " '10010',\n",
908 " '00100',\n",
909 " '10011',\n",
910 " '01110',\n",
911 " '00110',\n",
912 " '11000',\n",
913 " '01000',\n",
914 " '10011',\n",
915 " '00100',\n",
916 " '10001',\n",
917 " '01011',\n",
918 " '01000',\n",
919 " '00111',\n",
920 " '10011',\n",
921 " '00010',\n",
922 " '01100',\n",
923 " '01000',\n",
924 " '01110',\n",
925 " '01000',\n",
926 " '10001',\n",
927 " '00000',\n",
928 " '10001',\n",
929 " '00101',\n",
930 " '00011',\n",
931 " '01110',\n",
932 " '00100',\n",
933 " '10011',\n",
934 " '01101',\n",
935 " '01000',\n",
936 " '00111',\n",
937 " '10011',\n",
938 " '01101',\n",
939 " '00100',\n",
940 " '00111',\n",
941 " '01000',\n",
942 " '01000',\n",
943 " '01010',\n",
944 " '00000',\n",
945 " '01100',\n",
946 " '10001',\n",
947 " '00011',\n",
948 " '01100',\n",
949 " '01101',\n",
950 " '00000',\n",
951 " '00011',\n",
952 " '00000',\n",
953 " '01101',\n",
954 " '00000',\n",
955 " '01110',\n",
956 " '00011',\n",
957 " '10010',\n",
958 " '00100',\n",
959 " '10010',\n",
960 " '00100',\n",
961 " '01000',\n",
962 " '11000',\n",
963 " '00010',\n",
964 " '01011',\n",
965 " '10010',\n",
966 " '01000',\n",
967 " '00000',\n",
968 " '01101',\n",
969 " '10011',\n",
970 " '00000',\n",
971 " '01110',\n",
972 " '01011',\n",
973 " '10011',\n",
974 " '00010',\n",
975 " '01000',\n",
976 " '11000',\n",
977 " '01100',\n",
978 " '01000',\n",
979 " '00011',\n",
980 " '00100',\n",
981 " '01101',\n",
982 " '10011',\n",
983 " '10011',\n",
984 " '00111',\n",
985 " '01011',\n",
986 " '10011',\n",
987 " '01101',\n",
988 " '00011',\n",
989 " '10111',\n",
990 " '10011',\n",
991 " '10011',\n",
992 " '10011',\n",
993 " '01100',\n",
994 " '00000',\n",
995 " '10010',\n",
996 " '00001',\n",
997 " '01011',\n",
998 " '00100',\n",
999 " '00000',\n",
1000 " '00100',\n",
1001 " '00100',\n",
1002 " '10011',\n",
1003 " '01011',\n",
1004 " '01000',\n",
1005 " '10010',\n",
1006 " '01000',\n",
1007 " '10001',\n",
1008 " '10011',\n",
1009 " '10110',\n",
1010 " '10011',\n",
1011 " '10100',\n",
1012 " '10001',\n",
1013 " '01111',\n",
1014 " '00101',\n",
1015 " '00000',\n",
1016 " '01000',\n",
1017 " '01011',\n",
1018 " '10011',\n",
1019 " '00100',\n",
1020 " '00000',\n",
1021 " '01110',\n",
1022 " '00100',\n",
1023 " '00101',\n",
1024 " '00100',\n",
1025 " '01000',\n",
1026 " '10010',\n",
1027 " '01000',\n",
1028 " '01000',\n",
1029 " '01000',\n",
1030 " '11000',\n",
1031 " '01000',\n",
1032 " '10010',\n",
1033 " '01000',\n",
1034 " '01010',\n",
1035 " '10101',\n",
1036 " '10011',\n",
1037 " '10110',\n",
1038 " '01000',\n",
1039 " '10010',\n",
1040 " '01111',\n",
1041 " '10001',\n",
1042 " '00001',\n",
1043 " '10010',\n",
1044 " '01000',\n",
1045 " '01101',\n",
1046 " '00100',\n",
1047 " '01011',\n",
1048 " '01111',\n",
1049 " '00111',\n",
1050 " '10001',\n",
1051 " '01100',\n",
1052 " '01110',\n",
1053 " '00111',\n",
1054 " '01000',\n",
1055 " '00000',\n",
1056 " '00110',\n",
1057 " '01101',\n",
1058 " '01011',\n",
1059 " '10010',\n",
1060 " '01011',\n",
1061 " '10101',\n",
1062 " '01000',\n",
1063 " '10011',\n",
1064 " '01110',\n",
1065 " '00011',\n",
1066 " '00000',\n",
1067 " '01000',\n",
1068 " '10010',\n",
1069 " '00011',\n",
1070 " '01111',\n",
1071 " '01101',\n",
1072 " '11000',\n",
1073 " '00011',\n",
1074 " '00011',\n",
1075 " '00010',\n",
1076 " '00000',\n",
1077 " '00000',\n",
1078 " '01110',\n",
1079 " '10011',\n",
1080 " '00000',\n",
1081 " '00111',\n",
1082 " '00010',\n",
1083 " '00100',\n",
1084 " '00111',\n",
1085 " '10011',\n",
1086 " '10100',\n",
1087 " '00100',\n",
1088 " '01000',\n",
1089 " '10001',\n",
1090 " '10001',\n",
1091 " '00100',\n",
1092 " '00011',\n",
1093 " '00000',\n",
1094 " '00100',\n",
1095 " '00010',\n",
1096 " '10011',\n",
1097 " '01110',\n",
1098 " '10010',\n",
1099 " '01101',\n",
1100 " '10001',\n",
1101 " '00111',\n",
1102 " '10101',\n",
1103 " '01101',\n",
1104 " '00000',\n",
1105 " '01110',\n",
1106 " '00011',\n",
1107 " '01110',\n",
1108 " '01000',\n",
1109 " '01010',\n",
1110 " '01110',\n",
1111 " '00100',\n",
1112 " '10011',\n",
1113 " '00010',\n",
1114 " '01000',\n",
1115 " '01101',\n",
1116 " '00100',\n",
1117 " '01101',\n",
1118 " '00100',\n",
1119 " '10100',\n",
1120 " '10001',\n",
1121 " '10001',\n",
1122 " '01000',\n",
1123 " '10010',\n",
1124 " '00011',\n",
1125 " '00010',\n",
1126 " '01110',\n",
1127 " '10100',\n",
1128 " '10001',\n",
1129 " '00000',\n",
1130 " '00110',\n",
1131 " '01011',\n",
1132 " '10101',\n",
1133 " '01000',\n",
1134 " '01100',\n",
1135 " '01100',\n",
1136 " '10100',\n",
1137 " '01111',\n",
1138 " '01111',\n",
1139 " '00011',\n",
1140 " '01000',\n",
1141 " '10011',\n",
1142 " '00100',\n",
1143 " '00000',\n",
1144 " '01101',\n",
1145 " '00011',\n",
1146 " '01000',\n",
1147 " '10011',\n",
1148 " '01100',\n",
1149 " '00000',\n",
1150 " '00000',\n",
1151 " '01000',\n",
1152 " '00000',\n",
1153 " '01000',\n",
1154 " '00100',\n",
1155 " '01011',\n",
1156 " '00100',\n",
1157 " '01110',\n",
1158 " '01101',\n",
1159 " '01101',\n",
1160 " '10001',\n",
1161 " '00100',\n",
1162 " '00100',\n",
1163 " '00011',\n",
1164 " '00000',\n",
1165 " '01110',\n",
1166 " '00011',\n",
1167 " '00001',\n",
1168 " '01110',\n",
1169 " '01000',\n",
1170 " '10100',\n",
1171 " '01100',\n",
1172 " '00100',\n",
1173 " '01011',\n",
1174 " '10001',\n",
1175 " '01110',\n",
1176 " '10011',\n",
1177 " '01101',\n",
1178 " '10011',\n",
1179 " '10011',\n",
1180 " '10011',\n",
1181 " '00110',\n",
1182 " '01000',\n",
1183 " '10011',\n",
1184 " '01101',\n",
1185 " ...]"
1186 ]
1187 }
1188 ],
1189 "prompt_number": 8
1190 },
1191 {
1192 "cell_type": "code",
1193 "collapsed": false,
1194 "input": [
1195 "[(int(c, 2)) for c in chunks(c8b, 5)]"
1196 ],
1197 "language": "python",
1198 "metadata": {},
1199 "outputs": [
1200 {
1201 "metadata": {},
1202 "output_type": "pyout",
1203 "prompt_number": 9,
1204 "text": [
1205 "[0,\n",
1206 " 5,\n",
1207 " 2,\n",
1208 " 0,\n",
1209 " 4,\n",
1210 " 20,\n",
1211 " 14,\n",
1212 " 19,\n",
1213 " 19,\n",
1214 " 0,\n",
1215 " 2,\n",
1216 " 19,\n",
1217 " 7,\n",
1218 " 17,\n",
1219 " 8,\n",
1220 " 14,\n",
1221 " 11,\n",
1222 " 4,\n",
1223 " 19,\n",
1224 " 2,\n",
1225 " 18,\n",
1226 " 4,\n",
1227 " 17,\n",
1228 " 19,\n",
1229 " 7,\n",
1230 " 18,\n",
1231 " 7,\n",
1232 " 19,\n",
1233 " 17,\n",
1234 " 0,\n",
1235 " 7,\n",
1236 " 10,\n",
1237 " 24,\n",
1238 " 14,\n",
1239 " 17,\n",
1240 " 15,\n",
1241 " 5,\n",
1242 " 17,\n",
1243 " 6,\n",
1244 " 4,\n",
1245 " 14,\n",
1246 " 0,\n",
1247 " 3,\n",
1248 " 15,\n",
1249 " 15,\n",
1250 " 9,\n",
1251 " 13,\n",
1252 " 6,\n",
1253 " 11,\n",
1254 " 19,\n",
1255 " 4,\n",
1256 " 17,\n",
1257 " 13,\n",
1258 " 4,\n",
1259 " 5,\n",
1260 " 4,\n",
1261 " 14,\n",
1262 " 5,\n",
1263 " 8,\n",
1264 " 14,\n",
1265 " 17,\n",
1266 " 19,\n",
1267 " 18,\n",
1268 " 3,\n",
1269 " 3,\n",
1270 " 14,\n",
1271 " 4,\n",
1272 " 4,\n",
1273 " 20,\n",
1274 " 12,\n",
1275 " 18,\n",
1276 " 2,\n",
1277 " 17,\n",
1278 " 20,\n",
1279 " 4,\n",
1280 " 17,\n",
1281 " 13,\n",
1282 " 5,\n",
1283 " 4,\n",
1284 " 19,\n",
1285 " 11,\n",
1286 " 0,\n",
1287 " 0,\n",
1288 " 5,\n",
1289 " 18,\n",
1290 " 19,\n",
1291 " 22,\n",
1292 " 8,\n",
1293 " 4,\n",
1294 " 13,\n",
1295 " 19,\n",
1296 " 17,\n",
1297 " 21,\n",
1298 " 14,\n",
1299 " 14,\n",
1300 " 13,\n",
1301 " 4,\n",
1302 " 17,\n",
1303 " 7,\n",
1304 " 20,\n",
1305 " 0,\n",
1306 " 7,\n",
1307 " 17,\n",
1308 " 0,\n",
1309 " 21,\n",
1310 " 4,\n",
1311 " 17,\n",
1312 " 4,\n",
1313 " 4,\n",
1314 " 19,\n",
1315 " 18,\n",
1316 " 21,\n",
1317 " 18,\n",
1318 " 8,\n",
1319 " 4,\n",
1320 " 11,\n",
1321 " 7,\n",
1322 " 11,\n",
1323 " 14,\n",
1324 " 18,\n",
1325 " 19,\n",
1326 " 3,\n",
1327 " 14,\n",
1328 " 0,\n",
1329 " 11,\n",
1330 " 14,\n",
1331 " 24,\n",
1332 " 0,\n",
1333 " 4,\n",
1334 " 18,\n",
1335 " 12,\n",
1336 " 13,\n",
1337 " 13,\n",
1338 " 3,\n",
1339 " 8,\n",
1340 " 6,\n",
1341 " 13,\n",
1342 " 13,\n",
1343 " 17,\n",
1344 " 7,\n",
1345 " 14,\n",
1346 " 7,\n",
1347 " 7,\n",
1348 " 19,\n",
1349 " 18,\n",
1350 " 13,\n",
1351 " 0,\n",
1352 " 14,\n",
1353 " 8,\n",
1354 " 11,\n",
1355 " 13,\n",
1356 " 2,\n",
1357 " 13,\n",
1358 " 18,\n",
1359 " 18,\n",
1360 " 8,\n",
1361 " 2,\n",
1362 " 17,\n",
1363 " 4,\n",
1364 " 0,\n",
1365 " 13,\n",
1366 " 13,\n",
1367 " 4,\n",
1368 " 4,\n",
1369 " 8,\n",
1370 " 8,\n",
1371 " 8,\n",
1372 " 4,\n",
1373 " 17,\n",
1374 " 22,\n",
1375 " 19,\n",
1376 " 0,\n",
1377 " 13,\n",
1378 " 4,\n",
1379 " 18,\n",
1380 " 17,\n",
1381 " 21,\n",
1382 " 14,\n",
1383 " 6,\n",
1384 " 8,\n",
1385 " 4,\n",
1386 " 8,\n",
1387 " 24,\n",
1388 " 22,\n",
1389 " 18,\n",
1390 " 18,\n",
1391 " 3,\n",
1392 " 6,\n",
1393 " 15,\n",
1394 " 21,\n",
1395 " 14,\n",
1396 " 8,\n",
1397 " 0,\n",
1398 " 8,\n",
1399 " 18,\n",
1400 " 0,\n",
1401 " 14,\n",
1402 " 0,\n",
1403 " 4,\n",
1404 " 14,\n",
1405 " 0,\n",
1406 " 4,\n",
1407 " 3,\n",
1408 " 17,\n",
1409 " 13,\n",
1410 " 8,\n",
1411 " 19,\n",
1412 " 17,\n",
1413 " 13,\n",
1414 " 23,\n",
1415 " 4,\n",
1416 " 8,\n",
1417 " 6,\n",
1418 " 17,\n",
1419 " 15,\n",
1420 " 18,\n",
1421 " 18,\n",
1422 " 7,\n",
1423 " 0,\n",
1424 " 3,\n",
1425 " 7,\n",
1426 " 3,\n",
1427 " 19,\n",
1428 " 14,\n",
1429 " 8,\n",
1430 " 15,\n",
1431 " 0,\n",
1432 " 0,\n",
1433 " 19,\n",
1434 " 4,\n",
1435 " 23,\n",
1436 " 4,\n",
1437 " 13,\n",
1438 " 13,\n",
1439 " 4,\n",
1440 " 18,\n",
1441 " 0,\n",
1442 " 6,\n",
1443 " 17,\n",
1444 " 14,\n",
1445 " 1,\n",
1446 " 19,\n",
1447 " 11,\n",
1448 " 4,\n",
1449 " 18,\n",
1450 " 17,\n",
1451 " 13,\n",
1452 " 17,\n",
1453 " 14,\n",
1454 " 8,\n",
1455 " 17,\n",
1456 " 24,\n",
1457 " 15,\n",
1458 " 1,\n",
1459 " 6,\n",
1460 " 4,\n",
1461 " 3,\n",
1462 " 2,\n",
1463 " 11,\n",
1464 " 11,\n",
1465 " 8,\n",
1466 " 22,\n",
1467 " 0,\n",
1468 " 11,\n",
1469 " 0,\n",
1470 " 11,\n",
1471 " 4,\n",
1472 " 4,\n",
1473 " 13,\n",
1474 " 8,\n",
1475 " 6,\n",
1476 " 17,\n",
1477 " 17,\n",
1478 " 13,\n",
1479 " 22,\n",
1480 " 24,\n",
1481 " 17,\n",
1482 " 11,\n",
1483 " 8,\n",
1484 " 12,\n",
1485 " 11,\n",
1486 " 15,\n",
1487 " 18,\n",
1488 " 19,\n",
1489 " 14,\n",
1490 " 11,\n",
1491 " 4,\n",
1492 " 5,\n",
1493 " 19,\n",
1494 " 17,\n",
1495 " 3,\n",
1496 " 12,\n",
1497 " 20,\n",
1498 " 0,\n",
1499 " 17,\n",
1500 " 8,\n",
1501 " 4,\n",
1502 " 4,\n",
1503 " 4,\n",
1504 " 8,\n",
1505 " 8,\n",
1506 " 0,\n",
1507 " 14,\n",
1508 " 11,\n",
1509 " 13,\n",
1510 " 4,\n",
1511 " 22,\n",
1512 " 18,\n",
1513 " 0,\n",
1514 " 14,\n",
1515 " 7,\n",
1516 " 17,\n",
1517 " 19,\n",
1518 " 11,\n",
1519 " 18,\n",
1520 " 19,\n",
1521 " 14,\n",
1522 " 1,\n",
1523 " 4,\n",
1524 " 19,\n",
1525 " 13,\n",
1526 " 18,\n",
1527 " 11,\n",
1528 " 21,\n",
1529 " 5,\n",
1530 " 8,\n",
1531 " 21,\n",
1532 " 3,\n",
1533 " 14,\n",
1534 " 21,\n",
1535 " 19,\n",
1536 " 15,\n",
1537 " 14,\n",
1538 " 0,\n",
1539 " 4,\n",
1540 " 4,\n",
1541 " 8,\n",
1542 " 18,\n",
1543 " 2,\n",
1544 " 8,\n",
1545 " 14,\n",
1546 " 7,\n",
1547 " 8,\n",
1548 " 15,\n",
1549 " 18,\n",
1550 " 4,\n",
1551 " 21,\n",
1552 " 4,\n",
1553 " 4,\n",
1554 " 3,\n",
1555 " 19,\n",
1556 " 4,\n",
1557 " 22,\n",
1558 " 5,\n",
1559 " 0,\n",
1560 " 17,\n",
1561 " 13,\n",
1562 " 7,\n",
1563 " 4,\n",
1564 " 1,\n",
1565 " 11,\n",
1566 " 4,\n",
1567 " 0,\n",
1568 " 14,\n",
1569 " 19,\n",
1570 " 14,\n",
1571 " 7,\n",
1572 " 19,\n",
1573 " 19,\n",
1574 " 19,\n",
1575 " 4,\n",
1576 " 15,\n",
1577 " 13,\n",
1578 " 2,\n",
1579 " 10,\n",
1580 " 0,\n",
1581 " 14,\n",
1582 " 13,\n",
1583 " 7,\n",
1584 " 22,\n",
1585 " 4,\n",
1586 " 19,\n",
1587 " 12,\n",
1588 " 21,\n",
1589 " 24,\n",
1590 " 15,\n",
1591 " 17,\n",
1592 " 17,\n",
1593 " 4,\n",
1594 " 14,\n",
1595 " 13,\n",
1596 " 13,\n",
1597 " 0,\n",
1598 " 18,\n",
1599 " 6,\n",
1600 " 3,\n",
1601 " 4,\n",
1602 " 3,\n",
1603 " 14,\n",
1604 " 4,\n",
1605 " 4,\n",
1606 " 4,\n",
1607 " 14,\n",
1608 " 0,\n",
1609 " 0,\n",
1610 " 12,\n",
1611 " 19,\n",
1612 " 2,\n",
1613 " 8,\n",
1614 " 2,\n",
1615 " 19,\n",
1616 " 19,\n",
1617 " 8,\n",
1618 " 5,\n",
1619 " 13,\n",
1620 " 0,\n",
1621 " 3,\n",
1622 " 17,\n",
1623 " 4,\n",
1624 " 18,\n",
1625 " 17,\n",
1626 " 19,\n",
1627 " 18,\n",
1628 " 4,\n",
1629 " 17,\n",
1630 " 14,\n",
1631 " 18,\n",
1632 " 4,\n",
1633 " 19,\n",
1634 " 17,\n",
1635 " 7,\n",
1636 " 2,\n",
1637 " 8,\n",
1638 " 2,\n",
1639 " 19,\n",
1640 " 15,\n",
1641 " 18,\n",
1642 " 0,\n",
1643 " 0,\n",
1644 " 4,\n",
1645 " 7,\n",
1646 " 11,\n",
1647 " 3,\n",
1648 " 7,\n",
1649 " 18,\n",
1650 " 5,\n",
1651 " 23,\n",
1652 " 18,\n",
1653 " 14,\n",
1654 " 0,\n",
1655 " 14,\n",
1656 " 19,\n",
1657 " 2,\n",
1658 " 19,\n",
1659 " 1,\n",
1660 " 1,\n",
1661 " 18,\n",
1662 " 14,\n",
1663 " 4,\n",
1664 " 8,\n",
1665 " 17,\n",
1666 " 13,\n",
1667 " 18,\n",
1668 " 0,\n",
1669 " 3,\n",
1670 " 11,\n",
1671 " 24,\n",
1672 " 19,\n",
1673 " 17,\n",
1674 " 17,\n",
1675 " 20,\n",
1676 " 13,\n",
1677 " 17,\n",
1678 " 2,\n",
1679 " 4,\n",
1680 " 15,\n",
1681 " 19,\n",
1682 " 19,\n",
1683 " 7,\n",
1684 " 17,\n",
1685 " 4,\n",
1686 " 20,\n",
1687 " 7,\n",
1688 " 13,\n",
1689 " 10,\n",
1690 " 19,\n",
1691 " 0,\n",
1692 " 2,\n",
1693 " 4,\n",
1694 " 2,\n",
1695 " 4,\n",
1696 " 4,\n",
1697 " 11,\n",
1698 " 17,\n",
1699 " 22,\n",
1700 " 13,\n",
1701 " 8,\n",
1702 " 17,\n",
1703 " 4,\n",
1704 " 4,\n",
1705 " 4,\n",
1706 " 0,\n",
1707 " 4,\n",
1708 " 18,\n",
1709 " 4,\n",
1710 " 4,\n",
1711 " 4,\n",
1712 " 8,\n",
1713 " 3,\n",
1714 " 8,\n",
1715 " 18,\n",
1716 " 14,\n",
1717 " 6,\n",
1718 " 2,\n",
1719 " 4,\n",
1720 " 14,\n",
1721 " 12,\n",
1722 " 13,\n",
1723 " 17,\n",
1724 " 19,\n",
1725 " 4,\n",
1726 " 9,\n",
1727 " 7,\n",
1728 " 0,\n",
1729 " 6,\n",
1730 " 0,\n",
1731 " 1,\n",
1732 " 18,\n",
1733 " 4,\n",
1734 " 13,\n",
1735 " 8,\n",
1736 " 19,\n",
1737 " 11,\n",
1738 " 22,\n",
1739 " 19,\n",
1740 " 17,\n",
1741 " 13,\n",
1742 " 1,\n",
1743 " 12,\n",
1744 " 8,\n",
1745 " 4,\n",
1746 " 11,\n",
1747 " 18,\n",
1748 " 0,\n",
1749 " 17,\n",
1750 " 4,\n",
1751 " 19,\n",
1752 " 4,\n",
1753 " 18,\n",
1754 " 17,\n",
1755 " 13,\n",
1756 " 6,\n",
1757 " 18,\n",
1758 " 13,\n",
1759 " 7,\n",
1760 " 4,\n",
1761 " 1,\n",
1762 " 8,\n",
1763 " 14,\n",
1764 " 18,\n",
1765 " 3,\n",
1766 " 8,\n",
1767 " 4,\n",
1768 " 13,\n",
1769 " 0,\n",
1770 " 5,\n",
1771 " 11,\n",
1772 " 4,\n",
1773 " 8,\n",
1774 " 18,\n",
1775 " 0,\n",
1776 " 7,\n",
1777 " 14,\n",
1778 " 2,\n",
1779 " 8,\n",
1780 " 5,\n",
1781 " 4,\n",
1782 " 21,\n",
1783 " 12,\n",
1784 " 5,\n",
1785 " 0,\n",
1786 " 19,\n",
1787 " 0,\n",
1788 " 13,\n",
1789 " 0,\n",
1790 " 19,\n",
1791 " 17,\n",
1792 " 13,\n",
1793 " 8,\n",
1794 " 0,\n",
1795 " 6,\n",
1796 " 13,\n",
1797 " 7,\n",
1798 " 0,\n",
1799 " 19,\n",
1800 " 13,\n",
1801 " 12,\n",
1802 " 8,\n",
1803 " 1,\n",
1804 " 13,\n",
1805 " 8,\n",
1806 " 20,\n",
1807 " 5,\n",
1808 " 4,\n",
1809 " 13,\n",
1810 " 17,\n",
1811 " 19,\n",
1812 " 14,\n",
1813 " 19,\n",
1814 " 19,\n",
1815 " 17,\n",
1816 " 13,\n",
1817 " 24,\n",
1818 " 15,\n",
1819 " 0,\n",
1820 " 8,\n",
1821 " 3,\n",
1822 " 24,\n",
1823 " 8,\n",
1824 " 4,\n",
1825 " 6,\n",
1826 " 3,\n",
1827 " 13,\n",
1828 " 12,\n",
1829 " 4,\n",
1830 " 17,\n",
1831 " 7,\n",
1832 " 7,\n",
1833 " 8,\n",
1834 " 14,\n",
1835 " 19,\n",
1836 " 17,\n",
1837 " 4,\n",
1838 " 19,\n",
1839 " 2,\n",
1840 " 4,\n",
1841 " 18,\n",
1842 " 18,\n",
1843 " 4,\n",
1844 " 8,\n",
1845 " 11,\n",
1846 " 3,\n",
1847 " 17,\n",
1848 " 1,\n",
1849 " 2,\n",
1850 " 4,\n",
1851 " 15,\n",
1852 " 17,\n",
1853 " 8,\n",
1854 " 6,\n",
1855 " 0,\n",
1856 " 4,\n",
1857 " 18,\n",
1858 " 14,\n",
1859 " 0,\n",
1860 " 3,\n",
1861 " 11,\n",
1862 " 19,\n",
1863 " 0,\n",
1864 " 7,\n",
1865 " 8,\n",
1866 " 4,\n",
1867 " 21,\n",
1868 " 4,\n",
1869 " 1,\n",
1870 " 17,\n",
1871 " 2,\n",
1872 " 4,\n",
1873 " 13,\n",
1874 " 11,\n",
1875 " 4,\n",
1876 " 21,\n",
1877 " 0,\n",
1878 " 18,\n",
1879 " 0,\n",
1880 " 3,\n",
1881 " 13,\n",
1882 " 13,\n",
1883 " 19,\n",
1884 " 7,\n",
1885 " 13,\n",
1886 " 4,\n",
1887 " 8,\n",
1888 " 19,\n",
1889 " 4,\n",
1890 " 8,\n",
1891 " 8,\n",
1892 " 18,\n",
1893 " 0,\n",
1894 " 7,\n",
1895 " 20,\n",
1896 " 7,\n",
1897 " 7,\n",
1898 " 20,\n",
1899 " 0,\n",
1900 " 12,\n",
1901 " 14,\n",
1902 " 13,\n",
1903 " 4,\n",
1904 " 5,\n",
1905 " 24,\n",
1906 " 7,\n",
1907 " 11,\n",
1908 " 14,\n",
1909 " 13,\n",
1910 " 22,\n",
1911 " 7,\n",
1912 " 0,\n",
1913 " 4,\n",
1914 " 4,\n",
1915 " 4,\n",
1916 " 4,\n",
1917 " 14,\n",
1918 " 18,\n",
1919 " 13,\n",
1920 " 4,\n",
1921 " 4,\n",
1922 " 24,\n",
1923 " 0,\n",
1924 " 13,\n",
1925 " 4,\n",
1926 " 8,\n",
1927 " 18,\n",
1928 " 4,\n",
1929 " 19,\n",
1930 " 14,\n",
1931 " 6,\n",
1932 " 24,\n",
1933 " 8,\n",
1934 " 19,\n",
1935 " 4,\n",
1936 " 17,\n",
1937 " 11,\n",
1938 " 8,\n",
1939 " 7,\n",
1940 " 19,\n",
1941 " 2,\n",
1942 " 12,\n",
1943 " 8,\n",
1944 " 14,\n",
1945 " 8,\n",
1946 " 17,\n",
1947 " 0,\n",
1948 " 17,\n",
1949 " 5,\n",
1950 " 3,\n",
1951 " 14,\n",
1952 " 4,\n",
1953 " 19,\n",
1954 " 13,\n",
1955 " 8,\n",
1956 " 7,\n",
1957 " 19,\n",
1958 " 13,\n",
1959 " 4,\n",
1960 " 7,\n",
1961 " 8,\n",
1962 " 8,\n",
1963 " 10,\n",
1964 " 0,\n",
1965 " 12,\n",
1966 " 17,\n",
1967 " 3,\n",
1968 " 12,\n",
1969 " 13,\n",
1970 " 0,\n",
1971 " 3,\n",
1972 " 0,\n",
1973 " 13,\n",
1974 " 0,\n",
1975 " 14,\n",
1976 " 3,\n",
1977 " 18,\n",
1978 " 4,\n",
1979 " 18,\n",
1980 " 4,\n",
1981 " 8,\n",
1982 " 24,\n",
1983 " 2,\n",
1984 " 11,\n",
1985 " 18,\n",
1986 " 8,\n",
1987 " 0,\n",
1988 " 13,\n",
1989 " 19,\n",
1990 " 0,\n",
1991 " 14,\n",
1992 " 11,\n",
1993 " 19,\n",
1994 " 2,\n",
1995 " 8,\n",
1996 " 24,\n",
1997 " 12,\n",
1998 " 8,\n",
1999 " 3,\n",
2000 " 4,\n",
2001 " 13,\n",
2002 " 19,\n",
2003 " 19,\n",
2004 " 7,\n",
2005 " 11,\n",
2006 " 19,\n",
2007 " 13,\n",
2008 " 3,\n",
2009 " 23,\n",
2010 " 19,\n",
2011 " 19,\n",
2012 " 19,\n",
2013 " 12,\n",
2014 " 0,\n",
2015 " 18,\n",
2016 " 1,\n",
2017 " 11,\n",
2018 " 4,\n",
2019 " 0,\n",
2020 " 4,\n",
2021 " 4,\n",
2022 " 19,\n",
2023 " 11,\n",
2024 " 8,\n",
2025 " 18,\n",
2026 " 8,\n",
2027 " 17,\n",
2028 " 19,\n",
2029 " 22,\n",
2030 " 19,\n",
2031 " 20,\n",
2032 " 17,\n",
2033 " 15,\n",
2034 " 5,\n",
2035 " 0,\n",
2036 " 8,\n",
2037 " 11,\n",
2038 " 19,\n",
2039 " 4,\n",
2040 " 0,\n",
2041 " 14,\n",
2042 " 4,\n",
2043 " 5,\n",
2044 " 4,\n",
2045 " 8,\n",
2046 " 18,\n",
2047 " 8,\n",
2048 " 8,\n",
2049 " 8,\n",
2050 " 24,\n",
2051 " 8,\n",
2052 " 18,\n",
2053 " 8,\n",
2054 " 10,\n",
2055 " 21,\n",
2056 " 19,\n",
2057 " 22,\n",
2058 " 8,\n",
2059 " 18,\n",
2060 " 15,\n",
2061 " 17,\n",
2062 " 1,\n",
2063 " 18,\n",
2064 " 8,\n",
2065 " 13,\n",
2066 " 4,\n",
2067 " 11,\n",
2068 " 15,\n",
2069 " 7,\n",
2070 " 17,\n",
2071 " 12,\n",
2072 " 14,\n",
2073 " 7,\n",
2074 " 8,\n",
2075 " 0,\n",
2076 " 6,\n",
2077 " 13,\n",
2078 " 11,\n",
2079 " 18,\n",
2080 " 11,\n",
2081 " 21,\n",
2082 " 8,\n",
2083 " 19,\n",
2084 " 14,\n",
2085 " 3,\n",
2086 " 0,\n",
2087 " 8,\n",
2088 " 18,\n",
2089 " 3,\n",
2090 " 15,\n",
2091 " 13,\n",
2092 " 24,\n",
2093 " 3,\n",
2094 " 3,\n",
2095 " 2,\n",
2096 " 0,\n",
2097 " 0,\n",
2098 " 14,\n",
2099 " 19,\n",
2100 " 0,\n",
2101 " 7,\n",
2102 " 2,\n",
2103 " 4,\n",
2104 " 7,\n",
2105 " 19,\n",
2106 " 20,\n",
2107 " 4,\n",
2108 " 8,\n",
2109 " 17,\n",
2110 " 17,\n",
2111 " 4,\n",
2112 " 3,\n",
2113 " 0,\n",
2114 " 4,\n",
2115 " 2,\n",
2116 " 19,\n",
2117 " 14,\n",
2118 " 18,\n",
2119 " 13,\n",
2120 " 17,\n",
2121 " 7,\n",
2122 " 21,\n",
2123 " 13,\n",
2124 " 0,\n",
2125 " 14,\n",
2126 " 3,\n",
2127 " 14,\n",
2128 " 8,\n",
2129 " 10,\n",
2130 " 14,\n",
2131 " 4,\n",
2132 " 19,\n",
2133 " 2,\n",
2134 " 8,\n",
2135 " 13,\n",
2136 " 4,\n",
2137 " 13,\n",
2138 " 4,\n",
2139 " 20,\n",
2140 " 17,\n",
2141 " 17,\n",
2142 " 8,\n",
2143 " 18,\n",
2144 " 3,\n",
2145 " 2,\n",
2146 " 14,\n",
2147 " 20,\n",
2148 " 17,\n",
2149 " 0,\n",
2150 " 6,\n",
2151 " 11,\n",
2152 " 21,\n",
2153 " 8,\n",
2154 " 12,\n",
2155 " 12,\n",
2156 " 20,\n",
2157 " 15,\n",
2158 " 15,\n",
2159 " 3,\n",
2160 " 8,\n",
2161 " 19,\n",
2162 " 4,\n",
2163 " 0,\n",
2164 " 13,\n",
2165 " 3,\n",
2166 " 8,\n",
2167 " 19,\n",
2168 " 12,\n",
2169 " 0,\n",
2170 " 0,\n",
2171 " 8,\n",
2172 " 0,\n",
2173 " 8,\n",
2174 " 4,\n",
2175 " 11,\n",
2176 " 4,\n",
2177 " 14,\n",
2178 " 13,\n",
2179 " 13,\n",
2180 " 17,\n",
2181 " 4,\n",
2182 " 4,\n",
2183 " 3,\n",
2184 " 0,\n",
2185 " 14,\n",
2186 " 3,\n",
2187 " 1,\n",
2188 " 14,\n",
2189 " 8,\n",
2190 " 20,\n",
2191 " 12,\n",
2192 " 4,\n",
2193 " 11,\n",
2194 " 17,\n",
2195 " 14,\n",
2196 " 19,\n",
2197 " 13,\n",
2198 " 19,\n",
2199 " 19,\n",
2200 " 19,\n",
2201 " 6,\n",
2202 " 8,\n",
2203 " 19,\n",
2204 " 13,\n",
2205 " ...]"
2206 ]
2207 }
2208 ],
2209 "prompt_number": 9
2210 },
2211 {
2212 "cell_type": "code",
2213 "collapsed": false,
2214 "input": [
2215 "max([(int(c, 2)) for c in chunks(c8b, 5)])"
2216 ],
2217 "language": "python",
2218 "metadata": {},
2219 "outputs": [
2220 {
2221 "metadata": {},
2222 "output_type": "pyout",
2223 "prompt_number": 10,
2224 "text": [
2225 "24"
2226 ]
2227 }
2228 ],
2229 "prompt_number": 10
2230 },
2231 {
2232 "cell_type": "code",
2233 "collapsed": false,
2234 "input": [
2235 "max([chr(int(c, 2) + ord('a')) for c in chunks(c8b, 5)])"
2236 ],
2237 "language": "python",
2238 "metadata": {},
2239 "outputs": [
2240 {
2241 "metadata": {},
2242 "output_type": "pyout",
2243 "prompt_number": 11,
2244 "text": [
2245 "'y'"
2246 ]
2247 }
2248 ],
2249 "prompt_number": 11
2250 },
2251 {
2252 "cell_type": "code",
2253 "collapsed": false,
2254 "input": [
2255 "def cadenus_letter(n, doubled='v'):\n",
2256 " letter = chr(n + ord('a'))\n",
2257 " if letter > doubled:\n",
2258 " letter = chr(n + ord('a') + 1)\n",
2259 " return letter"
2260 ],
2261 "language": "python",
2262 "metadata": {},
2263 "outputs": [],
2264 "prompt_number": 12
2265 },
2266 {
2267 "cell_type": "code",
2268 "collapsed": false,
2269 "input": [
2270 "c8bl = ''.join([cadenus_letter(int(c, 2), doubled='z') for c in chunks(c8b, 5)])\n",
2271 "c8bl"
2272 ],
2273 "language": "python",
2274 "metadata": {},
2275 "outputs": [
2276 {
2277 "metadata": {},
2278 "output_type": "pyout",
2279 "prompt_number": 13,
2280 "text": [
2281 "'afcaeuottacthrioletcserthshtrahkyorpfrgeoadppjnglternefeofiortsddoeeumscruernfetlaafstwientrvoonerhuahravereetsvsielhlostdoaloyaesmnndignnrhohhtsnaoilncnssicreanneeiiierwtanesrvogieiywssdgpvoiaisaoaeoaedrnitrnxeigrpsshadhdtoipaatexennesagrobtlesrnroirypbgedclliwalaleenigrrnwyrlimlpstoleftrdmuarieeeiiaolnewsaohrtlstobetnslvfivdovtpoaeeisciohipseveedtewfarnhebleaotohtttepnckaonhwetmvyprreonnasgdedoeeeoaamtcicttifnadresrtserosetrhcictpsaaehldhsfxsoaotctbbsoeirnsadlytrrunrceptthreuhnktaceceelrwnireeeaeseeeidisogceomnrtejhagabsenitlwtrnbmielsaretesrngsnhebiosdienafleisahocifevmfatanatrniagnhatnmibniufenrtottrnypaidyiegdnmerhhiotretcesseildrbceprigaesoadltahievebrcenlevasadnnthneiteiisahuhhuamonefyhlonwhaeeeeosneeyaneisetogyiterlihtcmioirarfdoetnihtnehiikamrdmnadanaodseseiyclsiantaoltciymidentthltndxtttmasbleaeetlisirtwturpfailteaoefeisiiiyisikvtwisprbsinelphrmohiagnlslvitodaisdpnyddcaaotahcehtueirredaectosnrhvnaodoikoetcineneurrisdcouraglvimmuppditeanditmaaiaieleonnreedaodboiumelrotntttgitnrlrienniklysogstcifypipvidvssmnceiasiitsnneatitomrhbnhnidprlrepoynalsnvsdosanesitfaenltgodatteeaisicrootmsmfhauenirsghynweintegodiileedtarnosrcaaendtcuttfdrbehtmfitoordruiaoyaanoeeldoinhusgiteaoriecevemntratmtfpeucutahamtnewonicdeemrpaolitoafesoosspfnlneeootachllirssxsofpdftfrnpraeeaylonahautntcntcbawloneftoatecvowdlwvnneedtiioigtegmtaheeatefaaeprrcrosheerrpalediengidrreouhvesuroytnsosinuiuiofprda'"
2282 ]
2283 }
2284 ],
2285 "prompt_number": 13
2286 },
2287 {
2288 "cell_type": "code",
2289 "collapsed": false,
2290 "input": [
2291 "min(c8bl), max(c8bl)"
2292 ],
2293 "language": "python",
2294 "metadata": {},
2295 "outputs": [
2296 {
2297 "metadata": {},
2298 "output_type": "pyout",
2299 "prompt_number": 14,
2300 "text": [
2301 "('a', 'y')"
2302 ]
2303 }
2304 ],
2305 "prompt_number": 14
2306 },
2307 {
2308 "cell_type": "code",
2309 "collapsed": false,
2310 "input": [
2311 "len(c8bl), len(c8bl) / 25"
2312 ],
2313 "language": "python",
2314 "metadata": {},
2315 "outputs": [
2316 {
2317 "metadata": {},
2318 "output_type": "pyout",
2319 "prompt_number": 15,
2320 "text": [
2321 "(1400, 56.0)"
2322 ]
2323 }
2324 ],
2325 "prompt_number": 15
2326 },
2327 {
2328 "cell_type": "code",
2329 "collapsed": false,
2330 "input": [
2331 "freqs_8b = pd.Series(collections.Counter([l.lower() for l in c8bl if l in string.ascii_letters]))\n",
2332 "freqs_8b.plot(kind='bar')"
2333 ],
2334 "language": "python",
2335 "metadata": {},
2336 "outputs": [
2337 {
2338 "metadata": {},
2339 "output_type": "pyout",
2340 "prompt_number": 16,
2341 "text": [
2342 "<matplotlib.axes.AxesSubplot at 0x7f25d357dc18>"
2343 ]
2344 },
2345 {
2346 "metadata": {},
2347 "output_type": "display_data",
2348 "png": "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\n",
2349 "text": [
2350 "<matplotlib.figure.Figure at 0x7f25d357d278>"
2351 ]
2352 }
2353 ],
2354 "prompt_number": 16
2355 },
2356 {
2357 "cell_type": "code",
2358 "collapsed": false,
2359 "input": [
2360 "freqs = pd.Series(english_counts)\n",
2361 "freqs.plot(kind='bar')"
2362 ],
2363 "language": "python",
2364 "metadata": {},
2365 "outputs": [
2366 {
2367 "metadata": {},
2368 "output_type": "pyout",
2369 "prompt_number": 17,
2370 "text": [
2371 "<matplotlib.axes.AxesSubplot at 0x7f25d351a940>"
2372 ]
2373 },
2374 {
2375 "metadata": {},
2376 "output_type": "display_data",
2377 "png": "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\n",
2378 "text": [
2379 "<matplotlib.figure.Figure at 0x7f25d34b3e48>"
2380 ]
2381 }
2382 ],
2383 "prompt_number": 17
2384 },
2385 {
2386 "cell_type": "code",
2387 "collapsed": false,
2388 "input": [
2389 "rows = chunks(c8bl, len(c8bl) // 25)\n",
2390 "rows"
2391 ],
2392 "language": "python",
2393 "metadata": {},
2394 "outputs": [
2395 {
2396 "metadata": {},
2397 "output_type": "pyout",
2398 "prompt_number": 18,
2399 "text": [
2400 "['afcaeuottacthrioletcserthshtrahkyorpfrgeoadppjnglternefe',\n",
2401 " 'ofiortsddoeeumscruernfetlaafstwientrvoonerhuahravereetsv',\n",
2402 " 'sielhlostdoaloyaesmnndignnrhohhtsnaoilncnssicreanneeiiie',\n",
2403 " 'rwtanesrvogieiywssdgpvoiaisaoaeoaedrnitrnxeigrpsshadhdto',\n",
2404 " 'ipaatexennesagrobtlesrnroirypbgedclliwalaleenigrrnwyrlim',\n",
2405 " 'lpstoleftrdmuarieeeiiaolnewsaohrtlstobetnslvfivdovtpoaee',\n",
2406 " 'isciohipseveedtewfarnhebleaotohtttepnckaonhwetmvyprreonn',\n",
2407 " 'asgdedoeeeoaamtcicttifnadresrtserosetrhcictpsaaehldhsfxs',\n",
2408 " 'oaotctbbsoeirnsadlytrrunrceptthreuhnktaceceelrwnireeeaes',\n",
2409 " 'eeeidisogceomnrtejhagabsenitlwtrnbmielsaretesrngsnhebios',\n",
2410 " 'dienafleisahocifevmfatanatrniagnhatnmibniufenrtottrnypai',\n",
2411 " 'dyiegdnmerhhiotretcesseildrbceprigaesoadltahievebrcenlev',\n",
2412 " 'asadnnthneiteiisahuhhuamonefyhlonwhaeeeeosneeyaneisetogy',\n",
2413 " 'iterlihtcmioirarfdoetnihtnehiikamrdmnadanaodseseiyclsian',\n",
2414 " 'taoltciymidentthltndxtttmasbleaeetlisirtwturpfailteaoefe',\n",
2415 " 'isiiiyisikvtwisprbsinelphrmohiagnlslvitodaisdpnyddcaaota',\n",
2416 " 'hcehtueirredaectosnrhvnaodoikoetcineneurrisdcouraglvimmu',\n",
2417 " 'ppditeanditmaaiaieleonnreedaodboiumelrotntttgitnrlrienni',\n",
2418 " 'klysogstcifypipvidvssmnceiasiitsnneatitomrhbnhnidprlrepo',\n",
2419 " 'ynalsnvsdosanesitfaenltgodatteeaisicrootmsmfhauenirsghyn',\n",
2420 " 'weintegodiileedtarnosrcaaendtcuttfdrbehtmfitoordruiaoyaa',\n",
2421 " 'noeeldoinhusgiteaoriecevemntratmtfpeucutahamtnewonicdeem',\n",
2422 " 'rpaolitoafesoosspfnlneeootachllirssxsofpdftfrnpraeeaylon',\n",
2423 " 'ahautntcntcbawloneftoatecvowdlwvnneedtiioigtegmtaheeatef',\n",
2424 " 'aaeprrcrosheerrpalediengidrreouhvesuroytnsosinuiuiofprda']"
2425 ]
2426 }
2427 ],
2428 "prompt_number": 18
2429 },
2430 {
2431 "cell_type": "code",
2432 "collapsed": false,
2433 "input": [
2434 "chunks(''.join([l if l in 'phase' else '.' for l in c8bl]), 56)"
2435 ],
2436 "language": "python",
2437 "metadata": {},
2438 "outputs": [
2439 {
2440 "metadata": {},
2441 "output_type": "pyout",
2442 "prompt_number": 19,
2443 "text": [
2444 "['a..ae....a..h....e..se..hsh..ah....p...e.a.pp.....e..e.e',\n",
2445 " '......s...ee..s...e...e..aa.s...e.......e.h.ah.a.e.ee.s.',\n",
2446 " 's.e.h..s...a...aes.........h.hh.s.a......ss...ea..ee...e',\n",
2447 " '...a.es.....e...ss..p...a.sa.ae.ae........e...pssha.h...',\n",
2448 " '.paa.e.e..esa......es.......p..e......a.a.ee............',\n",
2449 " '.ps...e......a..eee..a...e.sa.h...s...e..s.........p.aee',\n",
2450 " '.s...h.pse.ee..e..a..he..ea...h...ep...a..h.e....p..e...',\n",
2451 " 'as..e..eee.aa..........a..es..se..se..h....psaaeh..hs..s',\n",
2452 " '.a......s.e...sa..........ep..h.e.h...a.e.ee......eeeaes',\n",
2453 " 'eee...s...e.....e.ha.a.se...........e.sa.e.es...s.he...s',\n",
2454 " '..e.a..e.sah....e...a.a.a....a..ha.........e.........pa.',\n",
2455 " '...e....e.hh....e..esse......ep...aes.a...ah.e.e...e..e.',\n",
2456 " 'asa....h.e..e..sah.hh.a...e..h....haeeee.s.ee.a.e.se....',\n",
2457 " '..e...h.......a....e...h..eh...a.....a.a.a..sese....s.a.',\n",
2458 " '.a.........e...h.........as..eaee...s.......p.a...ea.e.e',\n",
2459 " '.s.....s......sp..s..e.ph...h.a...s......a.s.p.....aa..a',\n",
2460 " 'h.eh..e...e.ae...s..h..a......e....e.e....s.....a.......',\n",
2461 " 'pp...ea.....aa.a.e.e....ee.a.......e................e...',\n",
2462 " '...s..s.....p.p....ss...e.as...s..ea......h..h...p...ep.',\n",
2463 " '..a.s..s..sa.es...ae......a..eea.s.......s..ha.e...s.h..',\n",
2464 " '.e...e......ee..a...s..aae...........eh............a..aa',\n",
2465 " '..ee.....h.s...ea...e.e.e....a....pe....aha...e......ee.',\n",
2466 " '.pa.....a.es..ssp....ee...a.h....ss.s..p......p.aeea....',\n",
2467 " 'aha.........a....e...a.e..........ee........e...aheea.e.',\n",
2468 " 'aaep.....shee..pa.e..e......e..h.es......s.s........p..a']"
2469 ]
2470 }
2471 ],
2472 "prompt_number": 19
2473 },
2474 {
2475 "cell_type": "code",
2476 "collapsed": false,
2477 "input": [
2478 "columns = [''.join(c) for c in zip(*rows)]\n",
2479 "columns"
2480 ],
2481 "language": "python",
2482 "metadata": {},
2483 "outputs": [
2484 {
2485 "metadata": {},
2486 "output_type": "pyout",
2487 "prompt_number": 20,
2488 "text": [
2489 "['aosriliaoeddaitihpkywnraa',\n",
2490 " 'ffiwppssaeiystascplneopha',\n",
2491 " 'cietascgoeeiaeoiedyaieaae',\n",
2492 " 'aolaatidtinedrlihislneoup',\n",
2493 " 'erhntooecdagnltittostlltr',\n",
2494 " 'utleelhdtifdnicyuegnedinr',\n",
2495 " 'ososxeiobslnthiieasvgottc',\n",
2496 " 'tdsrefpeboemhtysintsoiocr',\n",
2497 " 'tdtvntsesgiencmirdcddnano',\n",
2498 " 'aodonreeocsremikriioihfts',\n",
2499 " 'ceogedvoeeahiidvetfsiuech',\n",
2500 " 'teaismeaiohhtoetdmyalssbe',\n",
2501 " 'huleauearmoieinwaapnegoae',\n",
2502 " 'rmoigadmnncoirtieaieeiowr',\n",
2503 " 'isyyrrttsritiatscipsdtslr',\n",
2504 " 'ocawoiecatfrsrhptavitesop',\n",
2505 " 'lresbewideeeaflroiitaapna',\n",
2506 " 'eusstefcljvthdtbsedfrofel',\n",
2507 " 'temdleatyhmcuonsnlvanrnfe',\n",
2508 " 'crngeirttafehedireseoiltd',\n",
2509 " 'snnpsinirgashtxnhosnsenoi',\n",
2510 " 'efdvrahfratsuntevnmlrceae',\n",
2511 " 'reionoenubaeaitlnnntceetn',\n",
2512 " 'ttgirlbansnimhtparcgavoeg',\n",
2513 " 'hlnaonldrealotmhoeeoaeoci',\n",
2514 " 'saniieercntdnnardeidemtvd',\n",
2515 " 'harsrwaeeirreesmodaannaor',\n",
2516 " 'tfhaysosptnbfhboiastdtcwr',\n",
2517 " 'rsoopatrtlicyilhkoittrhde',\n",
2518 " 'athaboottwaehieiodiecallo',\n",
2519 " 'hwheghhshtgplkaaebteutlwu',\n",
2520 " 'kitoerterrnroaegtosatmivh',\n",
2521 " 'yesadttrenhinmencinittrnv',\n",
2522 " 'onnecltoubagwrtliunsffsne',\n",
2523 " 'rtadlseshmtahdlsnmeidpses',\n",
2524 " 'prorltpenineamileeacrexeu',\n",
2525 " 'fviniontkemsensvnltrbusdr',\n",
2526 " 'roliwbcrtlioeaiierioecoto',\n",
2527 " 'gontaekhasbaedrtuotohufiy',\n",
2528 " 'encrltaccandeatortotttpit',\n",
2529 " 'oennanoierilonwdrnmmmadon',\n",
2530 " 'arsxlsncceutsataitrsfhfis',\n",
2531 " 'dhseelhtetfanouisthmiatgo',\n",
2532 " 'puiievwpeeehedrsdtbftmfts',\n",
2533 " 'pacgnfeslsniespdcgnhotrei',\n",
2534 " 'jhrriitarrreyefpoihaonngn',\n",
2535 " 'nrepgvmawntvasanutnurepmu',\n",
2536 " 'gaasrdvengoeneiyrniedwrti',\n",
2537 " 'lvnsroyhistbeildardnroaau',\n",
2538 " 'tenhnvplrntriytdglpiunehi',\n",
2539 " 'ereawtrdehrcsceclrrriieeo',\n",
2540 " 'reedyprheeneelaavilsacaef',\n",
2541 " 'neihroesebyntsoaiergodyap',\n",
2542 " 'etidlaofaiploieomnehyeltr',\n",
2543 " 'fsitienxeoaegaftmnpyaeoed',\n",
2544 " 'eveomensssivyneauionamnfa']"
2545 ]
2546 }
2547 ],
2548 "prompt_number": 20
2549 },
2550 {
2551 "cell_type": "code",
2552 "collapsed": false,
2553 "input": [
2554 "letter_positions = {letter: [(r, c) for r, row in enumerate(rows) for c, char in enumerate(row) if char == letter] \n",
2555 " for letter in deduplicate('phaseseven')}\n",
2556 "letter_positions"
2557 ],
2558 "language": "python",
2559 "metadata": {},
2560 "outputs": [
2561 {
2562 "metadata": {},
2563 "output_type": "pyout",
2564 "prompt_number": 21,
2565 "text": [
2566 "{'a': [(0, 0),\n",
2567 " (0, 3),\n",
2568 " (0, 9),\n",
2569 " (0, 29),\n",
2570 " (0, 41),\n",
2571 " (1, 25),\n",
2572 " (1, 26),\n",
2573 " (1, 44),\n",
2574 " (1, 47),\n",
2575 " (2, 11),\n",
2576 " (2, 15),\n",
2577 " (2, 34),\n",
2578 " (2, 47),\n",
2579 " (3, 3),\n",
2580 " (3, 24),\n",
2581 " (3, 27),\n",
2582 " (3, 29),\n",
2583 " (3, 32),\n",
2584 " (3, 50),\n",
2585 " (4, 2),\n",
2586 " (4, 3),\n",
2587 " (4, 12),\n",
2588 " (4, 38),\n",
2589 " (4, 40),\n",
2590 " (5, 13),\n",
2591 " (5, 21),\n",
2592 " (5, 28),\n",
2593 " (5, 53),\n",
2594 " (6, 18),\n",
2595 " (6, 26),\n",
2596 " (6, 39),\n",
2597 " (7, 0),\n",
2598 " (7, 11),\n",
2599 " (7, 12),\n",
2600 " (7, 23),\n",
2601 " (7, 45),\n",
2602 " (7, 46),\n",
2603 " (8, 1),\n",
2604 " (8, 15),\n",
2605 " (8, 38),\n",
2606 " (8, 53),\n",
2607 " (9, 19),\n",
2608 " (9, 21),\n",
2609 " (9, 39),\n",
2610 " (10, 4),\n",
2611 " (10, 10),\n",
2612 " (10, 20),\n",
2613 " (10, 22),\n",
2614 " (10, 24),\n",
2615 " (10, 29),\n",
2616 " (10, 33),\n",
2617 " (10, 54),\n",
2618 " (11, 34),\n",
2619 " (11, 38),\n",
2620 " (11, 42),\n",
2621 " (12, 0),\n",
2622 " (12, 2),\n",
2623 " (12, 16),\n",
2624 " (12, 22),\n",
2625 " (12, 35),\n",
2626 " (12, 46),\n",
2627 " (13, 14),\n",
2628 " (13, 31),\n",
2629 " (13, 37),\n",
2630 " (13, 39),\n",
2631 " (13, 41),\n",
2632 " (13, 54),\n",
2633 " (14, 1),\n",
2634 " (14, 25),\n",
2635 " (14, 30),\n",
2636 " (14, 46),\n",
2637 " (14, 51),\n",
2638 " (15, 30),\n",
2639 " (15, 41),\n",
2640 " (15, 51),\n",
2641 " (15, 52),\n",
2642 " (15, 55),\n",
2643 " (16, 12),\n",
2644 " (16, 23),\n",
2645 " (16, 48),\n",
2646 " (17, 6),\n",
2647 " (17, 12),\n",
2648 " (17, 13),\n",
2649 " (17, 15),\n",
2650 " (17, 27),\n",
2651 " (18, 26),\n",
2652 " (18, 35),\n",
2653 " (19, 2),\n",
2654 " (19, 11),\n",
2655 " (19, 18),\n",
2656 " (19, 26),\n",
2657 " (19, 31),\n",
2658 " (19, 45),\n",
2659 " (20, 16),\n",
2660 " (20, 23),\n",
2661 " (20, 24),\n",
2662 " (20, 51),\n",
2663 " (20, 54),\n",
2664 " (20, 55),\n",
2665 " (21, 16),\n",
2666 " (21, 29),\n",
2667 " (21, 40),\n",
2668 " (21, 42),\n",
2669 " (22, 2),\n",
2670 " (22, 8),\n",
2671 " (22, 26),\n",
2672 " (22, 48),\n",
2673 " (22, 51),\n",
2674 " (23, 0),\n",
2675 " (23, 2),\n",
2676 " (23, 12),\n",
2677 " (23, 21),\n",
2678 " (23, 48),\n",
2679 " (23, 52),\n",
2680 " (24, 0),\n",
2681 " (24, 1),\n",
2682 " (24, 16),\n",
2683 " (24, 55)],\n",
2684 " 'n': [(0, 46),\n",
2685 " (0, 52),\n",
2686 " (1, 20),\n",
2687 " (1, 33),\n",
2688 " (1, 39),\n",
2689 " (2, 19),\n",
2690 " (2, 20),\n",
2691 " (2, 24),\n",
2692 " (2, 25),\n",
2693 " (2, 33),\n",
2694 " (2, 38),\n",
2695 " (2, 40),\n",
2696 " (2, 48),\n",
2697 " (2, 49),\n",
2698 " (3, 4),\n",
2699 " (3, 36),\n",
2700 " (3, 40),\n",
2701 " (4, 8),\n",
2702 " (4, 9),\n",
2703 " (4, 22),\n",
2704 " (4, 44),\n",
2705 " (4, 49),\n",
2706 " (5, 24),\n",
2707 " (5, 40),\n",
2708 " (6, 20),\n",
2709 " (6, 36),\n",
2710 " (6, 41),\n",
2711 " (6, 54),\n",
2712 " (6, 55),\n",
2713 " (7, 22),\n",
2714 " (8, 13),\n",
2715 " (8, 23),\n",
2716 " (8, 35),\n",
2717 " (8, 47),\n",
2718 " (9, 13),\n",
2719 " (9, 25),\n",
2720 " (9, 32),\n",
2721 " (9, 46),\n",
2722 " (9, 49),\n",
2723 " (10, 3),\n",
2724 " (10, 23),\n",
2725 " (10, 27),\n",
2726 " (10, 31),\n",
2727 " (10, 35),\n",
2728 " (10, 39),\n",
2729 " (10, 44),\n",
2730 " (10, 51),\n",
2731 " (11, 6),\n",
2732 " (11, 52),\n",
2733 " (12, 4),\n",
2734 " (12, 5),\n",
2735 " (12, 8),\n",
2736 " (12, 25),\n",
2737 " (12, 32),\n",
2738 " (12, 42),\n",
2739 " (12, 47),\n",
2740 " (13, 21),\n",
2741 " (13, 25),\n",
2742 " (13, 36),\n",
2743 " (13, 40),\n",
2744 " (13, 55),\n",
2745 " (14, 12),\n",
2746 " (14, 18),\n",
2747 " (15, 20),\n",
2748 " (15, 32),\n",
2749 " (15, 46),\n",
2750 " (16, 18),\n",
2751 " (16, 22),\n",
2752 " (16, 34),\n",
2753 " (16, 36),\n",
2754 " (17, 7),\n",
2755 " (17, 21),\n",
2756 " (17, 22),\n",
2757 " (17, 40),\n",
2758 " (17, 47),\n",
2759 " (17, 53),\n",
2760 " (17, 54),\n",
2761 " (18, 22),\n",
2762 " (18, 32),\n",
2763 " (18, 33),\n",
2764 " (18, 44),\n",
2765 " (18, 46),\n",
2766 " (19, 1),\n",
2767 " (19, 5),\n",
2768 " (19, 12),\n",
2769 " (19, 20),\n",
2770 " (19, 48),\n",
2771 " (19, 55),\n",
2772 " (20, 3),\n",
2773 " (20, 18),\n",
2774 " (20, 26),\n",
2775 " (21, 0),\n",
2776 " (21, 8),\n",
2777 " (21, 26),\n",
2778 " (21, 45),\n",
2779 " (21, 49),\n",
2780 " (22, 18),\n",
2781 " (22, 20),\n",
2782 " (22, 45),\n",
2783 " (22, 55),\n",
2784 " (23, 5),\n",
2785 " (23, 8),\n",
2786 " (23, 16),\n",
2787 " (23, 32),\n",
2788 " (23, 33),\n",
2789 " (24, 22),\n",
2790 " (24, 40),\n",
2791 " (24, 45)],\n",
2792 " 's': [(0, 20),\n",
2793 " (0, 25),\n",
2794 " (1, 6),\n",
2795 " (1, 14),\n",
2796 " (1, 28),\n",
2797 " (1, 54),\n",
2798 " (2, 0),\n",
2799 " (2, 7),\n",
2800 " (2, 17),\n",
2801 " (2, 32),\n",
2802 " (2, 41),\n",
2803 " (2, 42),\n",
2804 " (3, 6),\n",
2805 " (3, 16),\n",
2806 " (3, 17),\n",
2807 " (3, 26),\n",
2808 " (3, 47),\n",
2809 " (3, 48),\n",
2810 " (4, 11),\n",
2811 " (4, 20),\n",
2812 " (5, 2),\n",
2813 " (5, 27),\n",
2814 " (5, 34),\n",
2815 " (5, 41),\n",
2816 " (6, 1),\n",
2817 " (6, 8),\n",
2818 " (7, 1),\n",
2819 " (7, 27),\n",
2820 " (7, 30),\n",
2821 " (7, 34),\n",
2822 " (7, 44),\n",
2823 " (7, 52),\n",
2824 " (7, 55),\n",
2825 " (8, 8),\n",
2826 " (8, 14),\n",
2827 " (8, 55),\n",
2828 " (9, 6),\n",
2829 " (9, 23),\n",
2830 " (9, 38),\n",
2831 " (9, 44),\n",
2832 " (9, 48),\n",
2833 " (9, 55),\n",
2834 " (10, 9),\n",
2835 " (11, 20),\n",
2836 " (11, 21),\n",
2837 " (11, 36),\n",
2838 " (12, 1),\n",
2839 " (12, 15),\n",
2840 " (12, 41),\n",
2841 " (12, 50),\n",
2842 " (13, 44),\n",
2843 " (13, 46),\n",
2844 " (13, 52),\n",
2845 " (14, 26),\n",
2846 " (14, 36),\n",
2847 " (15, 1),\n",
2848 " (15, 7),\n",
2849 " (15, 14),\n",
2850 " (15, 18),\n",
2851 " (15, 34),\n",
2852 " (15, 43),\n",
2853 " (16, 17),\n",
2854 " (16, 42),\n",
2855 " (18, 3),\n",
2856 " (18, 6),\n",
2857 " (18, 19),\n",
2858 " (18, 20),\n",
2859 " (18, 27),\n",
2860 " (18, 31),\n",
2861 " (19, 4),\n",
2862 " (19, 7),\n",
2863 " (19, 10),\n",
2864 " (19, 14),\n",
2865 " (19, 33),\n",
2866 " (19, 41),\n",
2867 " (19, 51),\n",
2868 " (20, 20),\n",
2869 " (21, 11),\n",
2870 " (22, 11),\n",
2871 " (22, 14),\n",
2872 " (22, 15),\n",
2873 " (22, 33),\n",
2874 " (22, 34),\n",
2875 " (22, 36),\n",
2876 " (24, 9),\n",
2877 " (24, 34),\n",
2878 " (24, 41),\n",
2879 " (24, 43)],\n",
2880 " 'p': [(0, 35),\n",
2881 " (0, 43),\n",
2882 " (0, 44),\n",
2883 " (3, 20),\n",
2884 " (3, 46),\n",
2885 " (4, 1),\n",
2886 " (4, 28),\n",
2887 " (5, 1),\n",
2888 " (5, 51),\n",
2889 " (6, 7),\n",
2890 " (6, 35),\n",
2891 " (6, 49),\n",
2892 " (7, 43),\n",
2893 " (8, 27),\n",
2894 " (10, 53),\n",
2895 " (11, 30),\n",
2896 " (14, 44),\n",
2897 " (15, 15),\n",
2898 " (15, 23),\n",
2899 " (15, 45),\n",
2900 " (17, 0),\n",
2901 " (17, 1),\n",
2902 " (18, 12),\n",
2903 " (18, 14),\n",
2904 " (18, 49),\n",
2905 " (18, 54),\n",
2906 " (21, 34),\n",
2907 " (22, 1),\n",
2908 " (22, 16),\n",
2909 " (22, 39),\n",
2910 " (22, 46),\n",
2911 " (24, 3),\n",
2912 " (24, 15),\n",
2913 " (24, 52)],\n",
2914 " 'v': [(1, 36),\n",
2915 " (1, 48),\n",
2916 " (1, 55),\n",
2917 " (3, 8),\n",
2918 " (3, 21),\n",
2919 " (5, 43),\n",
2920 " (5, 46),\n",
2921 " (5, 49),\n",
2922 " (6, 10),\n",
2923 " (6, 47),\n",
2924 " (10, 17),\n",
2925 " (11, 46),\n",
2926 " (11, 55),\n",
2927 " (15, 10),\n",
2928 " (15, 36),\n",
2929 " (16, 21),\n",
2930 " (16, 51),\n",
2931 " (18, 15),\n",
2932 " (18, 18),\n",
2933 " (19, 6),\n",
2934 " (21, 23),\n",
2935 " (23, 25),\n",
2936 " (23, 31),\n",
2937 " (24, 32)],\n",
2938 " 'h': [(0, 12),\n",
2939 " (0, 24),\n",
2940 " (0, 26),\n",
2941 " (0, 30),\n",
2942 " (1, 42),\n",
2943 " (1, 45),\n",
2944 " (2, 4),\n",
2945 " (2, 27),\n",
2946 " (2, 29),\n",
2947 " (2, 30),\n",
2948 " (3, 49),\n",
2949 " (3, 52),\n",
2950 " (5, 30),\n",
2951 " (6, 5),\n",
2952 " (6, 21),\n",
2953 " (6, 30),\n",
2954 " (6, 42),\n",
2955 " (7, 38),\n",
2956 " (7, 48),\n",
2957 " (7, 51),\n",
2958 " (8, 30),\n",
2959 " (8, 34),\n",
2960 " (9, 18),\n",
2961 " (9, 50),\n",
2962 " (10, 11),\n",
2963 " (10, 32),\n",
2964 " (11, 10),\n",
2965 " (11, 11),\n",
2966 " (11, 43),\n",
2967 " (12, 7),\n",
2968 " (12, 17),\n",
2969 " (12, 19),\n",
2970 " (12, 20),\n",
2971 " (12, 29),\n",
2972 " (12, 34),\n",
2973 " (13, 6),\n",
2974 " (13, 23),\n",
2975 " (13, 27),\n",
2976 " (14, 15),\n",
2977 " (15, 24),\n",
2978 " (15, 28),\n",
2979 " (16, 0),\n",
2980 " (16, 3),\n",
2981 " (16, 20),\n",
2982 " (18, 42),\n",
2983 " (18, 45),\n",
2984 " (19, 44),\n",
2985 " (19, 53),\n",
2986 " (20, 38),\n",
2987 " (21, 9),\n",
2988 " (21, 41),\n",
2989 " (22, 28),\n",
2990 " (23, 1),\n",
2991 " (23, 49),\n",
2992 " (24, 10),\n",
2993 " (24, 31)],\n",
2994 " 'e': [(0, 4),\n",
2995 " (0, 17),\n",
2996 " (0, 21),\n",
2997 " (0, 39),\n",
2998 " (0, 50),\n",
2999 " (0, 53),\n",
3000 " (0, 55),\n",
3001 " (1, 10),\n",
3002 " (1, 11),\n",
3003 " (1, 18),\n",
3004 " (1, 22),\n",
3005 " (1, 32),\n",
3006 " (1, 40),\n",
3007 " (1, 49),\n",
3008 " (1, 51),\n",
3009 " (1, 52),\n",
3010 " (2, 2),\n",
3011 " (2, 16),\n",
3012 " (2, 46),\n",
3013 " (2, 50),\n",
3014 " (2, 51),\n",
3015 " (2, 55),\n",
3016 " (3, 5),\n",
3017 " (3, 12),\n",
3018 " (3, 30),\n",
3019 " (3, 33),\n",
3020 " (3, 42),\n",
3021 " (4, 5),\n",
3022 " (4, 7),\n",
3023 " (4, 10),\n",
3024 " (4, 19),\n",
3025 " (4, 31),\n",
3026 " (4, 42),\n",
3027 " (4, 43),\n",
3028 " (5, 6),\n",
3029 " (5, 16),\n",
3030 " (5, 17),\n",
3031 " (5, 18),\n",
3032 " (5, 25),\n",
3033 " (5, 38),\n",
3034 " (5, 54),\n",
3035 " (5, 55),\n",
3036 " (6, 9),\n",
3037 " (6, 11),\n",
3038 " (6, 12),\n",
3039 " (6, 15),\n",
3040 " (6, 22),\n",
3041 " (6, 25),\n",
3042 " (6, 34),\n",
3043 " (6, 44),\n",
3044 " (6, 52),\n",
3045 " (7, 4),\n",
3046 " (7, 7),\n",
3047 " (7, 8),\n",
3048 " (7, 9),\n",
3049 " (7, 26),\n",
3050 " (7, 31),\n",
3051 " (7, 35),\n",
3052 " (7, 47),\n",
3053 " (8, 10),\n",
3054 " (8, 26),\n",
3055 " (8, 32),\n",
3056 " (8, 40),\n",
3057 " (8, 42),\n",
3058 " (8, 43),\n",
3059 " (8, 50),\n",
3060 " (8, 51),\n",
3061 " (8, 52),\n",
3062 " (8, 54),\n",
3063 " (9, 0),\n",
3064 " (9, 1),\n",
3065 " (9, 2),\n",
3066 " (9, 10),\n",
3067 " (9, 16),\n",
3068 " (9, 24),\n",
3069 " (9, 36),\n",
3070 " (9, 41),\n",
3071 " (9, 43),\n",
3072 " (9, 51),\n",
3073 " (10, 2),\n",
3074 " (10, 7),\n",
3075 " (10, 16),\n",
3076 " (10, 43),\n",
3077 " (11, 3),\n",
3078 " (11, 8),\n",
3079 " (11, 16),\n",
3080 " (11, 19),\n",
3081 " (11, 22),\n",
3082 " (11, 29),\n",
3083 " (11, 35),\n",
3084 " (11, 45),\n",
3085 " (11, 47),\n",
3086 " (11, 51),\n",
3087 " (11, 54),\n",
3088 " (12, 9),\n",
3089 " (12, 12),\n",
3090 " (12, 26),\n",
3091 " (12, 36),\n",
3092 " (12, 37),\n",
3093 " (12, 38),\n",
3094 " (12, 39),\n",
3095 " (12, 43),\n",
3096 " (12, 44),\n",
3097 " (12, 48),\n",
3098 " (12, 51),\n",
3099 " (13, 2),\n",
3100 " (13, 19),\n",
3101 " (13, 26),\n",
3102 " (13, 45),\n",
3103 " (13, 47),\n",
3104 " (14, 11),\n",
3105 " (14, 29),\n",
3106 " (14, 31),\n",
3107 " (14, 32),\n",
3108 " (14, 50),\n",
3109 " (14, 53),\n",
3110 " (14, 55),\n",
3111 " (15, 21),\n",
3112 " (16, 2),\n",
3113 " (16, 6),\n",
3114 " (16, 10),\n",
3115 " (16, 13),\n",
3116 " (16, 30),\n",
3117 " (16, 35),\n",
3118 " (16, 37),\n",
3119 " (17, 5),\n",
3120 " (17, 17),\n",
3121 " (17, 19),\n",
3122 " (17, 24),\n",
3123 " (17, 25),\n",
3124 " (17, 35),\n",
3125 " (17, 52),\n",
3126 " (18, 24),\n",
3127 " (18, 34),\n",
3128 " (18, 53),\n",
3129 " (19, 13),\n",
3130 " (19, 19),\n",
3131 " (19, 29),\n",
3132 " (19, 30),\n",
3133 " (19, 47),\n",
3134 " (20, 1),\n",
3135 " (20, 5),\n",
3136 " (20, 12),\n",
3137 " (20, 13),\n",
3138 " (20, 25),\n",
3139 " (20, 37),\n",
3140 " (21, 2),\n",
3141 " (21, 3),\n",
3142 " (21, 15),\n",
3143 " (21, 20),\n",
3144 " (21, 22),\n",
3145 " (21, 24),\n",
3146 " (21, 35),\n",
3147 " (21, 46),\n",
3148 " (21, 53),\n",
3149 " (21, 54),\n",
3150 " (22, 10),\n",
3151 " (22, 21),\n",
3152 " (22, 22),\n",
3153 " (22, 49),\n",
3154 " (22, 50),\n",
3155 " (23, 17),\n",
3156 " (23, 23),\n",
3157 " (23, 34),\n",
3158 " (23, 35),\n",
3159 " (23, 44),\n",
3160 " (23, 50),\n",
3161 " (23, 51),\n",
3162 " (23, 54),\n",
3163 " (24, 2),\n",
3164 " (24, 11),\n",
3165 " (24, 12),\n",
3166 " (24, 18),\n",
3167 " (24, 21),\n",
3168 " (24, 28),\n",
3169 " (24, 33)]}"
3170 ]
3171 }
3172 ],
3173 "prompt_number": 21
3174 },
3175 {
3176 "cell_type": "code",
3177 "collapsed": false,
3178 "input": [
3179 "keycolumn = make_cadenus_keycolumn(reverse=True)\n",
3180 "inverse_keycolumn = {v: l for l, v in keycolumn.items()}\n",
3181 "inverse_keycolumn"
3182 ],
3183 "language": "python",
3184 "metadata": {},
3185 "outputs": [
3186 {
3187 "metadata": {},
3188 "output_type": "pyout",
3189 "prompt_number": 22,
3190 "text": [
3191 "{0: 'a',\n",
3192 " 1: 'z',\n",
3193 " 2: 'y',\n",
3194 " 3: 'x',\n",
3195 " 4: 'w',\n",
3196 " 5: 'u',\n",
3197 " 6: 't',\n",
3198 " 7: 's',\n",
3199 " 8: 'r',\n",
3200 " 9: 'q',\n",
3201 " 10: 'p',\n",
3202 " 11: 'o',\n",
3203 " 12: 'n',\n",
3204 " 13: 'm',\n",
3205 " 14: 'l',\n",
3206 " 15: 'k',\n",
3207 " 16: 'j',\n",
3208 " 17: 'i',\n",
3209 " 18: 'h',\n",
3210 " 19: 'g',\n",
3211 " 20: 'f',\n",
3212 " 21: 'e',\n",
3213 " 22: 'd',\n",
3214 " 23: 'c',\n",
3215 " 24: 'b'}"
3216 ]
3217 }
3218 ],
3219 "prompt_number": 22
3220 },
3221 {
3222 "cell_type": "code",
3223 "collapsed": false,
3224 "input": [
3225 "def valid_partial_solution(solution, inverse_keycolumn):\n",
3226 " row_indices = [p[0] for p in sorted(solution, key=lambda x: x[1])]\n",
3227 " row_letters = [inverse_keycolumn[i] for i in row_indices]\n",
3228 " letter_pairs = ngrams(row_letters, 2)\n",
3229 " return all(p[0] <= p[1] for p in letter_pairs)"
3230 ],
3231 "language": "python",
3232 "metadata": {},
3233 "outputs": [],
3234 "prompt_number": 23
3235 },
3236 {
3237 "cell_type": "code",
3238 "collapsed": false,
3239 "input": [
3240 "solutions = [[p] for p in letter_positions['p']]\n",
3241 "for letter in 'ha': #'haseseven':\n",
3242 " new_solutions = []\n",
3243 " for solution in solutions:\n",
3244 " used_columns = [p[1] for p in solution]\n",
3245 " for position in letter_positions[letter]:\n",
3246 " if position[1] not in used_columns:\n",
3247 " if valid_partial_solution(solution + [position], inverse_keycolumn):\n",
3248 " new_solutions += [solution + [position]]\n",
3249 " solutions = new_solutions\n",
3250 "len(solutions)"
3251 ],
3252 "language": "python",
3253 "metadata": {},
3254 "outputs": [
3255 {
3256 "metadata": {},
3257 "output_type": "pyout",
3258 "prompt_number": 24,
3259 "text": [
3260 "43005"
3261 ]
3262 }
3263 ],
3264 "prompt_number": 24
3265 },
3266 {
3267 "cell_type": "code",
3268 "collapsed": false,
3269 "input": [
3270 "valid_partial_solution(solutions[1], inverse_keycolumn)"
3271 ],
3272 "language": "python",
3273 "metadata": {},
3274 "outputs": [
3275 {
3276 "metadata": {},
3277 "output_type": "pyout",
3278 "prompt_number": 25,
3279 "text": [
3280 "True"
3281 ]
3282 }
3283 ],
3284 "prompt_number": 25
3285 },
3286 {
3287 "cell_type": "code",
3288 "collapsed": false,
3289 "input": [
3290 "display = []\n",
3291 "for p in solutions[1]:\n",
3292 " this_column = columns[p[1]]\n",
3293 " rotated_column = this_column[p[0]:] + this_column[:p[0]]\n",
3294 " display += [rotated_column]\n",
3295 "display_rows = [''.join(r) for r in zip(*display)]\n",
3296 "display_rows"
3297 ],
3298 "language": "python",
3299 "metadata": {},
3300 "outputs": [
3301 {
3302 "metadata": {},
3303 "output_type": "pyout",
3304 "prompt_number": 26,
3305 "text": [
3306 "['pha',\n",
3307 " 'ruo',\n",
3308 " 'oll',\n",
3309 " 'rea',\n",
3310 " 'laa',\n",
3311 " 'tut',\n",
3312 " 'pei',\n",
3313 " 'ead',\n",
3314 " 'nrt',\n",
3315 " 'imi',\n",
3316 " 'non',\n",
3317 " 'eie',\n",
3318 " 'aed',\n",
3319 " 'mir',\n",
3320 " 'inl',\n",
3321 " 'lwi',\n",
3322 " 'eah',\n",
3323 " 'eai',\n",
3324 " 'aps',\n",
3325 " 'cnl',\n",
3326 " 'ren',\n",
3327 " 'ege',\n",
3328 " 'xoo',\n",
3329 " 'eau',\n",
3330 " 'uep']"
3331 ]
3332 }
3333 ],
3334 "prompt_number": 26
3335 },
3336 {
3337 "cell_type": "code",
3338 "collapsed": false,
3339 "input": [
3340 "def display_solution(solution, columns):\n",
3341 " display = []\n",
3342 " for p in solution:\n",
3343 " this_column = columns[p[1]]\n",
3344 " rotated_column = this_column[p[0]:] + this_column[:p[0]]\n",
3345 " display += [rotated_column]\n",
3346 " return [''.join(r) for r in zip(*display)]"
3347 ],
3348 "language": "python",
3349 "metadata": {},
3350 "outputs": [],
3351 "prompt_number": 27
3352 },
3353 {
3354 "cell_type": "code",
3355 "collapsed": false,
3356 "input": [
3357 "display_solution(solutions[0], columns)"
3358 ],
3359 "language": "python",
3360 "metadata": {},
3361 "outputs": [
3362 {
3363 "metadata": {},
3364 "output_type": "pyout",
3365 "prompt_number": 28,
3366 "text": [
3367 "['pha',\n",
3368 " 'ruo',\n",
3369 " 'ols',\n",
3370 " 'rer',\n",
3371 " 'lai',\n",
3372 " 'tul',\n",
3373 " 'pei',\n",
3374 " 'eaa',\n",
3375 " 'nro',\n",
3376 " 'ime',\n",
3377 " 'nod',\n",
3378 " 'eid',\n",
3379 " 'aea',\n",
3380 " 'mii',\n",
3381 " 'int',\n",
3382 " 'lwi',\n",
3383 " 'eah',\n",
3384 " 'eap',\n",
3385 " 'apk',\n",
3386 " 'cny',\n",
3387 " 'rew',\n",
3388 " 'egn',\n",
3389 " 'xor',\n",
3390 " 'eaa',\n",
3391 " 'uea']"
3392 ]
3393 }
3394 ],
3395 "prompt_number": 28
3396 },
3397 {
3398 "cell_type": "code",
3399 "collapsed": false,
3400 "input": [
3401 "sum(Ptrigrams(r) for r in display_rows)"
3402 ],
3403 "language": "python",
3404 "metadata": {},
3405 "outputs": [
3406 {
3407 "metadata": {},
3408 "output_type": "pyout",
3409 "prompt_number": 29,
3410 "text": [
3411 "-109.09171451522874"
3412 ]
3413 }
3414 ],
3415 "prompt_number": 29
3416 },
3417 {
3418 "cell_type": "code",
3419 "collapsed": false,
3420 "input": [
3421 "def score_solution(solution, columns):\n",
3422 " display = []\n",
3423 " for p in solution:\n",
3424 " this_column = columns[p[1]]\n",
3425 " rotated_column = this_column[p[0]:] + this_column[:p[0]]\n",
3426 " display += [rotated_column]\n",
3427 " display_rows = [''.join(r) for r in zip(*display)]\n",
3428 " return sum(Ptrigrams(r) for r in display_rows)"
3429 ],
3430 "language": "python",
3431 "metadata": {},
3432 "outputs": [],
3433 "prompt_number": 30
3434 },
3435 {
3436 "cell_type": "code",
3437 "collapsed": false,
3438 "input": [
3439 "[(s, display_solution(s, columns), score_solution(s, columns)) for s in solutions[:10]]"
3440 ],
3441 "language": "python",
3442 "metadata": {},
3443 "outputs": [
3444 {
3445 "metadata": {},
3446 "output_type": "pyout",
3447 "prompt_number": 31,
3448 "text": [
3449 "[([(0, 35), (0, 12), (0, 0)],\n",
3450 " ['pha',\n",
3451 " 'ruo',\n",
3452 " 'ols',\n",
3453 " 'rer',\n",
3454 " 'lai',\n",
3455 " 'tul',\n",
3456 " 'pei',\n",
3457 " 'eaa',\n",
3458 " 'nro',\n",
3459 " 'ime',\n",
3460 " 'nod',\n",
3461 " 'eid',\n",
3462 " 'aea',\n",
3463 " 'mii',\n",
3464 " 'int',\n",
3465 " 'lwi',\n",
3466 " 'eah',\n",
3467 " 'eap',\n",
3468 " 'apk',\n",
3469 " 'cny',\n",
3470 " 'rew',\n",
3471 " 'egn',\n",
3472 " 'xor',\n",
3473 " 'eaa',\n",
3474 " 'uea'],\n",
3475 " -112.23213925765266),\n",
3476 " ([(0, 35), (0, 12), (0, 3)],\n",
3477 " ['pha',\n",
3478 " 'ruo',\n",
3479 " 'oll',\n",
3480 " 'rea',\n",
3481 " 'laa',\n",
3482 " 'tut',\n",
3483 " 'pei',\n",
3484 " 'ead',\n",
3485 " 'nrt',\n",
3486 " 'imi',\n",
3487 " 'non',\n",
3488 " 'eie',\n",
3489 " 'aed',\n",
3490 " 'mir',\n",
3491 " 'inl',\n",
3492 " 'lwi',\n",
3493 " 'eah',\n",
3494 " 'eai',\n",
3495 " 'aps',\n",
3496 " 'cnl',\n",
3497 " 'ren',\n",
3498 " 'ege',\n",
3499 " 'xoo',\n",
3500 " 'eau',\n",
3501 " 'uep'],\n",
3502 " -109.09171451522874),\n",
3503 " ([(0, 35), (0, 12), (0, 9)],\n",
3504 " ['pha',\n",
3505 " 'ruo',\n",
3506 " 'old',\n",
3507 " 'reo',\n",
3508 " 'lan',\n",
3509 " 'tur',\n",
3510 " 'pee',\n",
3511 " 'eae',\n",
3512 " 'nro',\n",
3513 " 'imc',\n",
3514 " 'nos',\n",
3515 " 'eir',\n",
3516 " 'aee',\n",
3517 " 'mim',\n",
3518 " 'ini',\n",
3519 " 'lwk',\n",
3520 " 'ear',\n",
3521 " 'eai',\n",
3522 " 'api',\n",
3523 " 'cno',\n",
3524 " 'rei',\n",
3525 " 'egh',\n",
3526 " 'xof',\n",
3527 " 'eat',\n",
3528 " 'ues'],\n",
3529 " -105.51902198106185),\n",
3530 " ([(0, 35), (0, 12), (0, 29)],\n",
3531 " ['pha',\n",
3532 " 'rut',\n",
3533 " 'olh',\n",
3534 " 'rea',\n",
3535 " 'lab',\n",
3536 " 'tuo',\n",
3537 " 'peo',\n",
3538 " 'eat',\n",
3539 " 'nrt',\n",
3540 " 'imw',\n",
3541 " 'noa',\n",
3542 " 'eie',\n",
3543 " 'aeh',\n",
3544 " 'mii',\n",
3545 " 'ine',\n",
3546 " 'lwi',\n",
3547 " 'eao',\n",
3548 " 'ead',\n",
3549 " 'api',\n",
3550 " 'cne',\n",
3551 " 'rec',\n",
3552 " 'ega',\n",
3553 " 'xol',\n",
3554 " 'eal',\n",
3555 " 'ueo'],\n",
3556 " -106.91642615054437),\n",
3557 " ([(0, 35), (0, 12), (0, 41)],\n",
3558 " ['pha',\n",
3559 " 'rur',\n",
3560 " 'ols',\n",
3561 " 'rex',\n",
3562 " 'lal',\n",
3563 " 'tus',\n",
3564 " 'pen',\n",
3565 " 'eac',\n",
3566 " 'nrc',\n",
3567 " 'ime',\n",
3568 " 'nou',\n",
3569 " 'eit',\n",
3570 " 'aes',\n",
3571 " 'mia',\n",
3572 " 'int',\n",
3573 " 'lwa',\n",
3574 " 'eai',\n",
3575 " 'eat',\n",
3576 " 'apr',\n",
3577 " 'cns',\n",
3578 " 'ref',\n",
3579 " 'egh',\n",
3580 " 'xof',\n",
3581 " 'eai',\n",
3582 " 'ues'],\n",
3583 " -100.92420426683796),\n",
3584 " ([(0, 35), (0, 12), (1, 44)],\n",
3585 " ['pha',\n",
3586 " 'ruc',\n",
3587 " 'olg',\n",
3588 " 'ren',\n",
3589 " 'laf',\n",
3590 " 'tue',\n",
3591 " 'pes',\n",
3592 " 'eal',\n",
3593 " 'nrs',\n",
3594 " 'imn',\n",
3595 " 'noi',\n",
3596 " 'eie',\n",
3597 " 'aes',\n",
3598 " 'mip',\n",
3599 " 'ind',\n",
3600 " 'lwc',\n",
3601 " 'eag',\n",
3602 " 'ean',\n",
3603 " 'aph',\n",
3604 " 'cno',\n",
3605 " 'ret',\n",
3606 " 'egr',\n",
3607 " 'xoe',\n",
3608 " 'eai',\n",
3609 " 'uep'],\n",
3610 " -108.53207489276411),\n",
3611 " ([(0, 35), (0, 12), (1, 47)],\n",
3612 " ['pha',\n",
3613 " 'rua',\n",
3614 " 'ols',\n",
3615 " 'rer',\n",
3616 " 'lad',\n",
3617 " 'tuv',\n",
3618 " 'pee',\n",
3619 " 'ean',\n",
3620 " 'nrg',\n",
3621 " 'imo',\n",
3622 " 'noe',\n",
3623 " 'ein',\n",
3624 " 'aee',\n",
3625 " 'mii',\n",
3626 " 'iny',\n",
3627 " 'lwr',\n",
3628 " 'ean',\n",
3629 " 'eai',\n",
3630 " 'ape',\n",
3631 " 'cnd',\n",
3632 " 'rew',\n",
3633 " 'egr',\n",
3634 " 'xot',\n",
3635 " 'eai',\n",
3636 " 'ueg'],\n",
3637 " -109.50900823047225),\n",
3638 " ([(0, 35), (0, 12), (2, 47)],\n",
3639 " ['pha',\n",
3640 " 'rus',\n",
3641 " 'olr',\n",
3642 " 'red',\n",
3643 " 'lav',\n",
3644 " 'tue',\n",
3645 " 'pen',\n",
3646 " 'eag',\n",
3647 " 'nro',\n",
3648 " 'ime',\n",
3649 " 'non',\n",
3650 " 'eie',\n",
3651 " 'aei',\n",
3652 " 'miy',\n",
3653 " 'inr',\n",
3654 " 'lwn',\n",
3655 " 'eai',\n",
3656 " 'eae',\n",
3657 " 'apd',\n",
3658 " 'cnw',\n",
3659 " 'rer',\n",
3660 " 'egt',\n",
3661 " 'xoi',\n",
3662 " 'eag',\n",
3663 " 'uea'],\n",
3664 " -114.40196859359595),\n",
3665 " ([(0, 35), (0, 12), (3, 50)],\n",
3666 " ['pha',\n",
3667 " 'ruw',\n",
3668 " 'olt',\n",
3669 " 'rer',\n",
3670 " 'lad',\n",
3671 " 'tue',\n",
3672 " 'peh',\n",
3673 " 'ear',\n",
3674 " 'nrc',\n",
3675 " 'ims',\n",
3676 " 'noc',\n",
3677 " 'eie',\n",
3678 " 'aec',\n",
3679 " 'mil',\n",
3680 " 'inr',\n",
3681 " 'lwr',\n",
3682 " 'ear',\n",
3683 " 'eai',\n",
3684 " 'api',\n",
3685 " 'cne',\n",
3686 " 'ree',\n",
3687 " 'ego',\n",
3688 " 'xoe',\n",
3689 " 'ear',\n",
3690 " 'uee'],\n",
3691 " -106.68850150792129),\n",
3692 " ([(0, 35), (0, 12), (4, 38)],\n",
3693 " ['pha',\n",
3694 " 'rue',\n",
3695 " 'olk',\n",
3696 " 'reh',\n",
3697 " 'laa',\n",
3698 " 'tus',\n",
3699 " 'peb',\n",
3700 " 'eaa',\n",
3701 " 'nre',\n",
3702 " 'imd',\n",
3703 " 'nor',\n",
3704 " 'eit',\n",
3705 " 'aeu',\n",
3706 " 'mio',\n",
3707 " 'int',\n",
3708 " 'lwo',\n",
3709 " 'eah',\n",
3710 " 'eau',\n",
3711 " 'apf',\n",
3712 " 'cni',\n",
3713 " 'rey',\n",
3714 " 'egg',\n",
3715 " 'xoo',\n",
3716 " 'ean',\n",
3717 " 'uet'],\n",
3718 " -108.49770543928673)]"
3719 ]
3720 }
3721 ],
3722 "prompt_number": 31
3723 },
3724 {
3725 "cell_type": "code",
3726 "collapsed": false,
3727 "input": [
3728 "sorted(solutions[:10], key=lambda s: score_solution(s, columns), reverse=True)"
3729 ],
3730 "language": "python",
3731 "metadata": {},
3732 "outputs": [
3733 {
3734 "metadata": {},
3735 "output_type": "pyout",
3736 "prompt_number": 32,
3737 "text": [
3738 "[[(0, 35), (0, 12), (0, 41)],\n",
3739 " [(0, 35), (0, 12), (0, 9)],\n",
3740 " [(0, 35), (0, 12), (3, 50)],\n",
3741 " [(0, 35), (0, 12), (0, 29)],\n",
3742 " [(0, 35), (0, 12), (4, 38)],\n",
3743 " [(0, 35), (0, 12), (1, 44)],\n",
3744 " [(0, 35), (0, 12), (0, 3)],\n",
3745 " [(0, 35), (0, 12), (1, 47)],\n",
3746 " [(0, 35), (0, 12), (0, 0)],\n",
3747 " [(0, 35), (0, 12), (2, 47)]]"
3748 ]
3749 }
3750 ],
3751 "prompt_number": 32
3752 },
3753 {
3754 "cell_type": "code",
3755 "collapsed": false,
3756 "input": [
3757 "solutions = sorted(solutions, key=lambda s: score_solution(s, columns), reverse=True)[:10000]"
3758 ],
3759 "language": "python",
3760 "metadata": {},
3761 "outputs": [],
3762 "prompt_number": 33
3763 },
3764 {
3765 "cell_type": "code",
3766 "collapsed": false,
3767 "input": [
3768 "for letter in 'seseven': #'haseeight':\n",
3769 " new_solutions = []\n",
3770 " for solution in solutions:\n",
3771 " used_columns = [p[1] for p in solution]\n",
3772 " for position in letter_positions[letter]:\n",
3773 " if position[1] not in used_columns:\n",
3774 " if valid_partial_solution(solution + [position], inverse_keycolumn):\n",
3775 " new_solutions += [solution + [position]]\n",
3776 " solutions = sorted(new_solutions, key=lambda s: score_solution(s, columns), reverse=True)[:10000]\n",
3777 "len(solutions)"
3778 ],
3779 "language": "python",
3780 "metadata": {},
3781 "outputs": [
3782 {
3783 "metadata": {},
3784 "output_type": "pyout",
3785 "prompt_number": 34,
3786 "text": [
3787 "10000"
3788 ]
3789 }
3790 ],
3791 "prompt_number": 34
3792 },
3793 {
3794 "cell_type": "code",
3795 "collapsed": false,
3796 "input": [
3797 "display_solution(solutions[0], columns)"
3798 ],
3799 "language": "python",
3800 "metadata": {},
3801 "outputs": [
3802 {
3803 "metadata": {},
3804 "output_type": "pyout",
3805 "prompt_number": 35,
3806 "text": [
3807 "['phaseseven',\n",
3808 " 'ninmelcalh',\n",
3809 " 'andodrinho',\n",
3810 " 'lmedyierts',\n",
3811 " 'reaapstnen',\n",
3812 " 'entaryafts',\n",
3813 " 'sconhysefe',\n",
3814 " 'birnerctan',\n",
3815 " 'entaergeno',\n",
3816 " 'wioontomoi',\n",
3817 " 'ittretedus',\n",
3818 " 'dttheselin',\n",
3819 " 'ertalriesn',\n",
3820 " 'enpraiaatp',\n",
3821 " 'evisateths',\n",
3822 " 'aytrvioymi',\n",
3823 " 'feewiaihin',\n",
3824 " 'lsnaltemai',\n",
3825 " 'racessdctr',\n",
3826 " 'odreacyugg',\n",
3827 " 'itliciaooa',\n",
3828 " 'ittrapinds',\n",
3829 " 'trareseshh',\n",
3830 " 'aecefdanst',\n",
3831 " 'ancertalex']"
3832 ]
3833 }
3834 ],
3835 "prompt_number": 35
3836 },
3837 {
3838 "cell_type": "code",
3839 "collapsed": false,
3840 "input": [
3841 "hinted_keywords = [w for w in keywords if w[0] =='f' if len(transpositions_of(w)) == 7]\n",
3842 "len(hinted_keywords)"
3843 ],
3844 "language": "python",
3845 "metadata": {},
3846 "outputs": [
3847 {
3848 "metadata": {},
3849 "output_type": "pyout",
3850 "prompt_number": 36,
3851 "text": [
3852 "849"
3853 ]
3854 }
3855 ],
3856 "prompt_number": 36
3857 },
3858 {
3859 "cell_type": "code",
3860 "collapsed": false,
3861 "input": [
3862 "hinted_keywords[:10]"
3863 ],
3864 "language": "python",
3865 "metadata": {},
3866 "outputs": [
3867 {
3868 "metadata": {},
3869 "output_type": "pyout",
3870 "prompt_number": 37,
3871 "text": [
3872 "['fabrics',\n",
3873 " 'facings',\n",
3874 " 'faction',\n",
3875 " 'factors',\n",
3876 " 'factory',\n",
3877 " 'faculty',\n",
3878 " 'fadeout',\n",
3879 " 'failure',\n",
3880 " 'fainest',\n",
3881 " 'fainted']"
3882 ]
3883 }
3884 ],
3885 "prompt_number": 37
3886 },
3887 {
3888 "cell_type": "code",
3889 "collapsed": false,
3890 "input": [
3891 "first_chunk = c8bl[:175]\n",
3892 "len(first_chunk)"
3893 ],
3894 "language": "python",
3895 "metadata": {},
3896 "outputs": [
3897 {
3898 "metadata": {},
3899 "output_type": "pyout",
3900 "prompt_number": 38,
3901 "text": [
3902 "175"
3903 ]
3904 }
3905 ],
3906 "prompt_number": 38
3907 },
3908 {
3909 "cell_type": "code",
3910 "collapsed": false,
3911 "input": [
3912 "[cadenus_decipher(first_chunk, w, keycolumn)[:20] for w in hinted_keywords]"
3913 ],
3914 "language": "python",
3915 "metadata": {},
3916 "outputs": [
3917 {
3918 "metadata": {},
3919 "output_type": "pyout",
3920 "prompt_number": 39,
3921 "text": [
3922 "['gatlrlnjtonethnirreh',\n",
3923 " 'raorejnptreanhriaeso',\n",
3924 " 'raohoanptraesrriasul',\n",
3925 " 'raohhanptraemrriasln',\n",
3926 " 'raorhaeptrnemsrianln',\n",
3927 " 'raonlneptrnissriaaoc',\n",
3928 " 'garhrarjtartsnnifphn',\n",
3929 " 'raoaalapteesnfriunnr',\n",
3930 " 'raonanhpterfrariutpn',\n",
3931 " 'garehhrjteaaraniessp',\n",
3932 " 'raonhalpterafnriutsp',\n",
3933 " 'fainrleptorniseirtno',\n",
3934 " 'raoaanhptemfrariunpn',\n",
3935 " 'raloannptirsrhrioalt',\n",
3936 " 'falmireptinonseiosrn',\n",
3937 " 'ralhaanptiafmrriospn',\n",
3938 " 'faeilenptnoisreirroo',\n",
3939 " 'raeoeanptneafhrirusp',\n",
3940 " 'earotktntvrugheivarj',\n",
3941 " 'gaeorhojtarernnisaep',\n",
3942 " 'gaeorhnjtarerhnisaep',\n",
3943 " 'raeooaeptareesrisaun',\n",
3944 " 'garnahrjtvenranivrep',\n",
3945 " 'raalaenptmifsrrinopo',\n",
3946 " 'faoeoepptnneareihrus',\n",
3947 " 'falhonpptnaerreirsut',\n",
3948 " 'fanroanpthiesreiaoul',\n",
3949 " 'fanhonpptraerreinsut',\n",
3950 " 'rahnaanptaofmrrisepn',\n",
3951 " 'fahrrinptaitoreisohh',\n",
3952 " 'rarrjaaptnensfrineon',\n",
3953 " 'gaaohrmjtsrrnnninapn',\n",
3954 " 'gaaarhrjtsenraninnnp',\n",
3955 " 'gasrlhrjtntnraniehrp',\n",
3956 " 'fasanomptnensneieean',\n",
3957 " 'raalrempftinsnrpiono',\n",
3958 " 'raaorejpftneanrpihes',\n",
3959 " 'ghrrlanjratnthnpfhri',\n",
3960 " 'gharnarjreaetvnpnfai',\n",
3961 " 'frtroenppwthsredoheo',\n",
3962 " 'frahoepppeaearednsus',\n",
3963 " 'raeaoalpfnsntirprlhi',\n",
3964 " 'raaiahnpfmotarrpnhis',\n",
3965 " 'froiianppnoosredhhrl',\n",
3966 " 'rahrinnpfaeeorrpsere',\n",
3967 " 'rahaaiupfaeselrpsnlr',\n",
3968 " 'raaerejpfsreanrpnpes',\n",
3969 " 'graeohnjetarrhneisap',\n",
3970 " 'fitahanpoimesrerenln',\n",
3971 " 'grtaaahjeosntrnernei',\n",
3972 " 'rotaaanpeosetrrurnni',\n",
3973 " 'roieaaopeeanfnrureep',\n",
3974 " 'rrejahnpernfarrepops',\n",
3975 " 'rrejarepernfnsrepopn',\n",
3976 " 'fopalrnpertntheuiirh',\n",
3977 " 'frpnhrlperoapneeiesd',\n",
3978 " 'foperehpernpaaeuirds',\n",
3979 " 'fopalaapersnteeuinri',\n",
3980 " 'rrjalaepensnfrreonrp',\n",
3981 " 'fopaarnpersmpreuinnd',\n",
3982 " 'roatalhpeeifnarunepr',\n",
3983 " 'gtfiehrjuterranrrrep',\n",
3984 " 'rrainanpeneofhreerep',\n",
3985 " 'filhranpoiapmrerosdn',\n",
3986 " 'rrrajaapevtnnfrevioe',\n",
3987 " 'roeaaanpeatefhrusinp',\n",
3988 " 'rreinanpeaeofhresrep',\n",
3989 " 'ronealnperrfnhrutppr',\n",
3990 " 'fioraenpohpmsreredno',\n",
3991 " 'fonprlnperrpnheutidr',\n",
3992 " 'finlrenporipsrertodo',\n",
3993 " 'rrlatajpenfisnrerpen',\n",
3994 " 'rooaeaepenfntaruhpri',\n",
3995 " 'fiairnhpomopraernhdn',\n",
3996 " 'pfomrteddsnnwstcnsno',\n",
3997 " 'rrninalpeheofnrearep',\n",
3998 " 'fonrraeperipmseunodn',\n",
3999 " 'fonrnrhperirpaeunotd',\n",
4000 " 'pfnsoaiddsoseetccrne',\n",
4001 " 'grnatahjeetonrnesire',\n",
4002 " 'grnarhrjeetnranesinp',\n",
4003 " 'ronarampeetnfnrusinp',\n",
4004 " 'roaaeaepeifresrueppn',\n",
4005 " 'finnnorpoesnsperscan',\n",
4006 " 'rosaanmpeoftnnrurpia',\n",
4007 " 'flapannpitrsrheoiilt',\n",
4008 " 'raaeoaopntaefnreieup',\n",
4009 " 'faaeorppntaevreeieuv',\n",
4010 " 'eaattktnntrogheeivrj',\n",
4011 " 'gaanthnjeteorhnniarp',\n",
4012 " 'rlaealnpitnfnhroirpr',\n",
4013 " 'faanorppeteevreniauv',\n",
4014 " 'raaejanpetanfhrnisop',\n",
4015 " 'gaarehrjntvaraneivep',\n",
4016 " 'raaeuaopetalfnrnisip',\n",
4017 " 'faaooeppetnearenihus',\n",
4018 " 'gaanehrjnthrraneiaep',\n",
4019 " 'raannalpethofnrniaep',\n",
4020 " 'eaahtktnntaogheeisrj',\n",
4021 " 'ftaaormpwtshnneoinen',\n",
4022 " 'ftashanpwtnemreoieln',\n",
4023 " 'ftashnapwtnenmeoiela',\n",
4024 " 'faasoeppetnearenieus',\n",
4025 " 'faaeoeppetsearenious',\n",
4026 " 'farnorppepeevrendauv',\n",
4027 " 'farnonrpepeehiendaua',\n",
4028 " 'farnoeppepeearendsus',\n",
4029 " 'gfrirhrjteearanrernp',\n",
4030 " 'raoieaopneeafnreurep',\n",
4031 " 'paoprhndeeeiartnufos',\n",
4032 " 'paoprredeeeinstnufon',\n",
4033 " 'faoeirnpeeaeihenusro',\n",
4034 " 'raolhaepeenafrrnursp',\n",
4035 " 'gaaahhrjestarannlisp',\n",
4036 " 'rlrahalpittafnrohisp',\n",
4037 " 'gaviehrjnvearaneorep',\n",
4038 " 'raaoorapesneatrnlhuf',\n",
4039 " 'flaoinrpisnorpeolhrt',\n",
4040 " 'ptrlfondwtndhhtohrce',\n",
4041 " 'pthafnhdwemdratolncn',\n",
4042 " 'ftrhnaipwtartoeohsni',\n",
4043 " 'rlaaniapissrefrolntr',\n",
4044 " 'rlralaepitsnfrrohnrp',\n",
4045 " 'rlraraepitsnfrrohnnp',\n",
4046 " 'fthsranpwenpmreoledn',\n",
4047 " 'fthnraepweapmseolidn',\n",
4048 " 'plasinpdisnoretolert',\n",
4049 " 'rlnaniepinfresroaptr',\n",
4050 " 'faauirlpeslopnennird',\n",
4051 " 'raaeuaepesalfrrnnsip',\n",
4052 " 'flnnrrepinrtpseoatwd',\n",
4053 " 'faaeuirpesalopennsir',\n",
4054 " 'ptnocemdwnhesntoaeto',\n",
4055 " 'raannaepesrofrrnnnep',\n",
4056 " 'flanrrapisripmeonnod',\n",
4057 " 'ftamrropwsnnpseonsnd',\n",
4058 " 'plarinpdisnoretonnrt',\n",
4059 " 'plnninpdineoretoasrt',\n",
4060 " 'pleinpndisorertoortf',\n",
4061 " 'ftehnrapwseapmeoolid',\n",
4062 " 'fvaaoeppvteeareoinus',\n",
4063 " 'raaeoaopstnefnrlirup',\n",
4064 " 'fvaeoeppvtneareoirus',\n",
4065 " 'grianhrjtesrranhrnnp',\n",
4066 " 'fhpaarepertmnseliinn',\n",
4067 " 'raotaanpseiefhrluenp',\n",
4068 " 'rronhaepterafrrhunsp',\n",
4069 " 'rrlealnptirfnhrhoppr',\n",
4070 " 'fvaeoeppvereareonpus',\n",
4071 " 'frlprlnptirpnhehoidr',\n",
4072 " 'rvarajapvnetnfroeeio',\n",
4073 " 'raaoahapseetafrlnuis',\n",
4074 " 'frwrohnptopharehades',\n",
4075 " 'rroeanhpthrfrarheppn',\n",
4076 " 'ranelanpsrrifhrltpop',\n",
4077 " 'rroeaanpthrsfrrhepnp',\n",
4078 " 'gaoanhrjsnteranlhirp',\n",
4079 " 'rrlajanptntnfhrhriop',\n",
4080 " 'grlaehrjtntsranhriop',\n",
4081 " 'eaotatknsnothgelhrir',\n",
4082 " 'rrltornptnieahrhreuf',\n",
4083 " 'rhliatnpenefhhrlrrpa',\n",
4084 " 'faoionppsneerrelhrut',\n",
4085 " 'raornaepsnaotnrlhfei',\n",
4086 " 'faoeonppsnrerrelhput',\n",
4087 " 'faoropnpsnperrelhdui',\n",
4088 " 'raoaianpsnfotrrlhphi',\n",
4089 " 'rhaanaspemfrtnrlnpni',\n",
4090 " 'rrljasaptnntnfrhroie',\n",
4091 " 'fhaprhnpemrparelnids',\n",
4092 " 'frlposrptnrenpehriue',\n",
4093 " 'paouinpdsnloretlhirt',\n",
4094 " 'frliatnptnotwhehrhio',\n",
4095 " 'frlwaohptnothaehraie',\n",
4096 " 'rrliahaptnotafrhrhis',\n",
4097 " 'fhawahnpemotarelnais',\n",
4098 " 'raoeooapsnnertrlhrua',\n",
4099 " 'paoiinpdsnooretlhhrt',\n",
4100 " 'frliataptnoswtehrhno',\n",
4101 " 'rrlnauaptnhtlfrhraii',\n",
4102 " 'fhahirnpemaoprelnsrd',\n",
4103 " 'fharaorpemnsapelnnne',\n",
4104 " 'fhasrorpemnpanelnede',\n",
4105 " 'fhatrmrpeswpnnelnods',\n",
4106 " 'paalinpdssioretlnort',\n",
4107 " 'rraoealptshrfnrhnepp',\n",
4108 " 'fhnoeaepenarmselaepn',\n",
4109 " 'paaoremdessnfntennnd',\n",
4110 " 'paslinpdsnioretleort',\n",
4111 " 'fhnirmrpeeopnnelsrds',\n",
4112 " 'frnrailptentoiehsnir',\n",
4113 " 'roajraapntnenfrhioee',\n",
4114 " 'faailrepmtoinseniron',\n",
4115 " 'foaeoeppntnearehirus',\n",
4116 " 'glanohnjntrrrhnritap',\n",
4117 " 'rlanoonpntrrehrritau',\n",
4118 " 'goaeehrjntaaranhisep',\n",
4119 " 'roaeuaapntalferhisip',\n",
4120 " 'roaeeoapntaaefrhiseu',\n",
4121 " 'flanrlepntrtiseritwo',\n",
4122 " 'rlanhoopntraerrritsu',\n",
4123 " 'faaapnrpmtsroneninie',\n",
4124 " 'flaeonppntserreriout',\n",
4125 " 'glhrranjnreathnrpefi',\n",
4126 " 'flrrpnhpnperoaerdeie',\n",
4127 " 'flrwrohpnpothaerdahe',\n",
4128 " 'rlaninnpnfreohrrptre',\n",
4129 " 'forosimpspaoenenderu',\n",
4130 " 'farnrlepmpriisendnoo',\n",
4131 " 'goratahjnetonrnheire',\n",
4132 " 'raoraenpmeatsrrnufio',\n",
4133 " 'rlrejanpnernfhrrepop',\n",
4134 " 'gorhraejneratanhepfi',\n",
4135 " 'glrhranjnerathnrepfi',\n",
4136 " 'rloanenpnefrrhrruptp',\n",
4137 " 'rlrjahapnentafrreois',\n",
4138 " 'paoprhndmeeiartnufos',\n",
4139 " 'rorejaepneanfrrhesop',\n",
4140 " 'flonprnpnerrpherutid',\n",
4141 " 'rloneaepnehafrrruaep',\n",
4142 " 'foapianpnsrotrehlihi',\n",
4143 " 'foapirnpnsroprehlihd',\n",
4144 " 'flrliinpntioeherhorr',\n",
4145 " 'flrohatpnthatwerhesi',\n",
4146 " 'rlrohaepnthafrrrhesp',\n",
4147 " 'rahnhaepmerafrrnlnsp',\n",
4148 " 'rlrhnaepntaofrrrhsep',\n",
4149 " 'rlrsoaepntnhfrrrheep',\n",
4150 " 'raaoraepmsenfrrnnunp',\n",
4151 " 'raonnrapsroretrnaene',\n",
4152 " 'raiuaanpselfmrrnripn',\n",
4153 " 'faieoeppseaearenreus',\n",
4154 " 'faraoeppspeearendnus',\n",
4155 " 'falaninpsitrorenoitr',\n",
4156 " 'fatnrirpswrtopenonhh',\n",
4157 " 'paerhomdstneantnvnle',\n",
4158 " 'gantahrjseierannaenp',\n",
4159 " 'raetlalpsniifnrnreop',\n",
4160 " 'raetlanpsniifrrnreop',\n",
4161 " 'faoirhapsaenemenernl',\n",
4162 " 'raoeaanpshrfmrrneppn',\n",
4163 " 'ranalalpsrfntirntpri',\n",
4164 " 'fanpaoepsrrserentilu',\n",
4165 " 'fanuirlpsrlopnentird',\n",
4166 " 'faatonrpsmierienneun',\n",
4167 " 'pallinpdsnioretnrort',\n",
4168 " 'paltropdsnwthetnrohe',\n",
4169 " 'galnaohjsnrtrrnnrtia',\n",
4170 " 'paaoinedsmhorftnnern',\n",
4171 " 'fnonisrpnssonpeancre',\n",
4172 " 'ranotaapsreiefrnnuen',\n",
4173 " 'famriaopsnnothensnri',\n",
4174 " 'famriropsnnopsensnrd',\n",
4175 " 'pnnsiopdnsoohetacrre',\n",
4176 " 'ratalrnptositnrirnoh',\n",
4177 " 'ealktvanttgovseihjro',\n",
4178 " 'gaoharajtrrnelniapee',\n",
4179 " 'gaorahfjtrenrtniaeep',\n",
4180 " 'raooathptreeuariaunr',\n",
4181 " 'raorrhtptrntanrianhs',\n",
4182 " 'faoatolpteeuaeeiunre',\n",
4183 " 'failnraptoirtleironh',\n",
4184 " 'raonhanpterafrriutsp',\n",
4185 " 'rarojaaptennsfriehol',\n",
4186 " 'raolnanptenrfhriurtp',\n",
4187 " 'failthoptonheneirral',\n",
4188 " 'faionoiptosarneirnis',\n",
4189 " 'faorrasptenilceiunoe',\n",
4190 " 'fatlvnnptwivnseioooa',\n",
4191 " 'gaaavlajtenvcfnineoe',\n",
4192 " 'ralnahnptirfasrionps',\n",
4193 " 'falmireptinonseiosrn',\n",
4194 " 'gaahhlajtearnfninspr',\n",
4195 " 'ranoafrpteeedariaunc',\n",
4196 " 'ranrnnapteehofriaeae',\n",
4197 " 'ranonfcptrrtdhritsnc',\n",
4198 " 'raeooasptarelcrisaue',\n",
4199 " 'raeoeroptarsehrisaoe',\n",
4200 " 'raoenuvptnnohurihrec',\n",
4201 " 'raoeluvptnnihurihroc',\n",
4202 " 'galavlajtnmvcfnirnoe',\n",
4203 " 'raahnanptmaofrrinsep',\n",
4204 " 'ganorctjthrehwniaaeo',\n",
4205 " 'fanroanpthiesreiaoul',\n",
4206 " 'ganhhnajtrarrfninspt',\n",
4207 " 'ranhaoyptrafherinspe',\n",
4208 " 'fahattmptacwuneiseor',\n",
4209 " 'gahehfhjtarrtonisepo',\n",
4210 " 'gahehlajtarrnfnisepr',\n",
4211 " 'fanlnifptnisoteiaocr',\n",
4212 " 'faamriaptsnnoceinsnr',\n",
4213 " 'raalnripftnhtorpirah',\n",
4214 " 'ghanrtajrtheonnpiaer',\n",
4215 " 'raahnylpftaoenrpisen',\n",
4216 " 'raarnyopftnoenrpinen',\n",
4217 " 'gharaaajrtnsmfnpinnn',\n",
4218 " 'raaraoypftnsserpinnn',\n",
4219 " 'ghtanaojromntnnprnai',\n",
4220 " 'ghrosefjraoyttnpfgdt',\n",
4221 " 'ghrraocjraamdhnpflns',\n",
4222 " 'oykrtcsgegaiatfnjfel',\n",
4223 " 'ekhrtulngraiheejpfec',\n",
4224 " 'rarstolpfpyuherpdere',\n",
4225 " 'fryltolppeiuaeednore',\n",
4226 " 'ghaatoojrnfsdrnpepys',\n",
4227 " 'gharooojrnerdrnpeeas',\n",
4228 " 'raaoithpfeeeuarpnurr',\n",
4229 " 'raafontpfesrturpnrsn',\n",
4230 " 'frlanirppisroaedoltr',\n",
4231 " 'friintnppooruhedhrtr',\n",
4232 " 'raeirolpfaeeherpsree',\n",
4233 " 'frawkrrppmogvnednajv',\n",
4234 " 'ghonavhjrnrtuonphtir',\n",
4235 " 'frloiroppnnaeaedrhae',\n",
4236 " 'raankrspfmaghtrpnije',\n",
4237 " 'frosanappsnenmedneea',\n",
4238 " 'rahrinopfaeeoorpsere',\n",
4239 " 'frsyoteppnesugedennr',\n",
4240 " 'raeniaepfsrotarpothi',\n",
4241 " 'granoahjethrsrneiaal',\n",
4242 " 'fiihrhepoeaeeaerrsel',\n",
4243 " 'roeseooperytonrupevg',\n",
4244 " 'roeaathperfeuaruppnr',\n",
4245 " 'grtaooujehsrdhnernas',\n",
4246 " 'roaaeoopeferonrupnpg',\n",
4247 " 'rraaesopefnrmhrepepn',\n",
4248 " 'rraeesspefarmnrepspn',\n",
4249 " 'roaliyfpefneetruprrn',\n",
4250 " 'roaaionpefmeohrupnrg',\n",
4251 " 'fopalrrpersneheuinre',\n",
4252 " 'frainsopeneomaeeeren',\n",
4253 " 'roaaranpeefvterunpvi',\n",
4254 " 'filanvspoieevyeronao',\n",
4255 " 'fileoonpoindoherorsg',\n",
4256 " 'roatsecpenrrteruevht',\n",
4257 " 'roahalrpeeafnprunspr',\n",
4258 " 'foahroopeeaidoeunsos',\n",
4259 " 'roahlaipeeanthrunsri',\n",
4260 " 'roeaasapeatemirusinn',\n",
4261 " 'finaltnportiuhertior',\n",
4262 " 'finalthportiuaertior',\n",
4263 " 'roeaaswpeatemfrusinn',\n",
4264 " 'etravehnuvtuhrervirk',\n",
4265 " 'greavlrjeatutanesirh',\n",
4266 " 'rrejaorpeanfnpresoph',\n",
4267 " 'rresserpeamnfpresntd',\n",
4268 " 'fonsetopermgooeutnhd',\n",
4269 " 'fiotdeopohuotnererot',\n",
4270 " 'fintdkfporuogtertroj',\n",
4271 " 'roeaavtpeaeturrusnir',\n",
4272 " 'rolaaatpenftmrrurpin',\n",
4273 " 'grohtaajenrotnnehpri',\n",
4274 " 'rooataepenfisnruhpel',\n",
4275 " 'fiargfipompjteerndnr',\n",
4276 " 'fiargvapompjvierndno',\n",
4277 " 'rolahsepenfaytrurpsd',\n",
4278 " 'rolasaapenfnterurpei',\n",
4279 " 'rolasrhpenfnterurpeh',\n",
4280 " 'filrsroponpntserrdeh',\n",
4281 " 'filinrnponorpherrhtd',\n",
4282 " 'rolesatpennntarurrei',\n",
4283 " 'ronoaafperrtetrunain',\n",
4284 " 'fonrraeperipmseunodn',\n",
4285 " 'fonrnrhperirpaeunotd',\n",
4286 " 'fonrharperiateeunosi',\n",
4287 " 'ronnstrperhcaprunaei',\n",
4288 " 'rosaorfpenfgtsruepfh',\n",
4289 " 'fonarropeetneaeusine',\n",
4290 " 'finarrhpoetneeersine',\n",
4291 " 'ronantipeetsuirusicr',\n",
4292 " 'gaattirjntotoaneirsr',\n",
4293 " 'raajvaepetnostrniool',\n",
4294 " 'flaplerpitrntveoiirt',\n",
4295 " 'faareoopntvaeaeeiveu',\n",
4296 " 'raaveftpntoutsreiolo',\n",
4297 " 'rlatroopithionroiatg',\n",
4298 " 'faavetopetoluaenioor',\n",
4299 " 'raannalpethofnrniaep',\n",
4300 " 'raannanpetrofhrninep',\n",
4301 " 'faanrofpetrieteninou',\n",
4302 " 'rlahoelpitartnroisat',\n",
4303 " 'faahgtepetajugenisnr',\n",
4304 " 'gaahehfjntarrtneisep',\n",
4305 " 'rlahnanpitarfrroistp',\n",
4306 " 'rlahiyepitahearoisin',\n",
4307 " 'rlahiylpitahenroisin',\n",
4308 " 'rlariyopitnhenroinin',\n",
4309 " 'faahntopetatuaenisnr',\n",
4310 " 'ftahnrspwtattleoisnh',\n",
4311 " 'rlarsetpitnntaroinet',\n",
4312 " 'flaarimpitsnoneoinnr',\n",
4313 " 'gaannhajeterrfnnisnp',\n",
4314 " 'raartsopnfpsmhrepdyn',\n",
4315 " 'farrntopepatuaendlnr',\n",
4316 " 'farnonrpepeehiendaua',\n",
4317 " 'farnroopephieoendaou',\n",
4318 " 'raahinopefaeoornpsre',\n",
4319 " 'raaaotfpefieitrnpeue',\n",
4320 " 'flrnriepipenoneodsnr',\n",
4321 " 'rlannaapifenmtropsan',\n",
4322 " 'faoiesopneeamaeeuren',\n",
4323 " 'flienoopionhdoeorras',\n",
4324 " 'flinhoopioradoeortss',\n",
4325 " 'fliseerpiolstveorlst',\n",
4326 " 'fliteoopiohsoneorasg',\n",
4327 " 'fliteonpiohsoheorasg',\n",
4328 " 'plilhrvdionaeutorrse',\n",
4329 " 'favhhtopevekuaenosgr',\n",
4330 " 'plavdrvdisveeutologe',\n",
4331 " 'flrvtoopitvcdoeohoas',\n",
4332 " 'flrseorpitledaeohlds',\n",
4333 " 'flrseorpitledaeohlds',\n",
4334 " 'plavervdisoeeutolode',\n",
4335 " 'rlaoanipisnfrerolhpt',\n",
4336 " 'flrliefpitnorteohrrp',\n",
4337 " 'pthafnhdwemdratolncn',\n",
4338 " 'planervdishgeutolahe',\n",
4339 " 'ftrhnaipwtartoeohsni',\n",
4340 " 'rlrsalrpitnfnprohepr',\n",
4341 " 'faatctopesieuaennehr',\n",
4342 " 'ftnronfpwnphsteoadec',\n",
4343 " 'flnierhpinoreaeoarpe',\n",
4344 " 'paaeuivdesaloutnnsir',\n",
4345 " 'raalofrpesnsdprnnrnc',\n",
4346 " 'flaadoopismedoeonngs',\n",
4347 " 'flamrrnpisnipreonsod',\n",
4348 " 'ftamrropwsnnpseonsnd',\n",
4349 " 'ftardkapwsnogmeonnoj',\n",
4350 " 'ftnndkopwnsogneoacoj',\n",
4351 " 'rletaropishtiorooait',\n",
4352 " 'flemrropisnipoeoosod',\n",
4353 " 'grianeajtesrgfnhrnnh',\n",
4354 " 'rajtvsvpsnivcurloeoe',\n",
4355 " 'frpjoonptrndohehiosg',\n",
4356 " 'prpraordteissvthfoln',\n",
4357 " 'prinhovdtoraeuthrnsu',\n",
4358 " 'rrlranoptiatarrhofii',\n",
4359 " 'palrnrvdsithtutlowah',\n",
4360 " 'raianhrpsofraprlhpts',\n",
4361 " 'rrorarrpthatvnrhefiv',\n",
4362 " 'fveeaoopvareeaeospnu',\n",
4363 " 'ranhaovpsrateurltsiu',\n",
4364 " 'fhafyoipeeseneelernh',\n",
4365 " 'rrhfaiuptetiehrhlrhr',\n",
4366 " 'rrvdapoptvoceorhooef',\n",
4367 " 'prvgovgdtvheuftholur',\n",
4368 " 'frvgsaeptvhrcaeholhe',\n",
4369 " 'rhahirepesaiptrllsed',\n",
4370 " 'rrlajaoptntnfnrhriop',\n",
4371 " 'faoaponpsntrerelhiiu',\n",
4372 " 'grlthaojtnortnnhrrpi',\n",
4373 " 'rrliaatptneflnrhrrpe',\n",
4374 " 'rhliatnpenefhhrlrrpa',\n",
4375 " 'rrlaaotptnftsrrhrpin',\n",
4376 " 'gaoherfjsnrrptnlhped',\n",
4377 " 'frlrlhlptnpireehrdop',\n",
4378 " 'raoaahepsnfeehrlhpns',\n",
4379 " 'fharwanpemposhelndal',\n",
4380 " 'raoanaipsnfrtorlhpti',\n",
4381 " 'rhaanhrpemfraprlnpns',\n",
4382 " 'faormropespnnneendsn',\n",
4383 " 'rrlahhfptnfaesrhrpsl',\n",
4384 " 'rrlasaoptnfntsrhrpei',\n",
4385 " 'fharshepempnraelndep',\n",
4386 " 'fhaphsrpemdrmnelntpn',\n",
4387 " 'fhaproipemrpneelnidh',\n",
4388 " 'prlrlfadtntidlthrwoc',\n",
4389 " 'frliatfptnotwtehrhio',\n",
4390 " 'frlirdfptnopetehrhdg',\n",
4391 " 'frlitrnptnowphehrhod',\n",
4392 " 'frlwvyaptnovdcehraoo',\n",
4393 " 'rrlnauaptnhtlfrhraii',\n",
4394 " 'rhansaapemrnftrlnnep',\n",
4395 " 'frlhorgptnaephehrsud',\n",
4396 " 'fhahscepemayaaelnsdl',\n",
4397 " 'rhasathpemntaorlneii',\n",
4398 " 'rhnhaarperafmprlnspn',\n",
4399 " 'rraoataptsrtnnrhnair',\n",
4400 " 'fratornptswhprehnoed',\n",
4401 " 'faaneoopssrreaelntpu',\n",
4402 " 'fraoraiptshntoehneni',\n",
4403 " 'fhaanaspesmrerelnnne',\n",
4404 " 'fhaarrhpesmnprelnnnd',\n",
4405 " 'frnplaopterissehsiol',\n",
4406 " 'frnrhfopteiesoehsolr',\n",
4407 " 'frnratrpteisnhehsolr',\n",
4408 " 'raaohaapmtracnrniase',\n",
4409 " 'gaaoradjmtrnsenniann',\n",
4410 " 'goaeorojntareanhisae',\n",
4411 " 'foaeeoopntaaeaehiseu',\n",
4412 " 'foaeuaipntaleoehisin',\n",
4413 " 'raasoalpmtoefnrnirup',\n",
4414 " 'glasntajntoewfnrirto',\n",
4415 " 'raasaeopmtoatornircv',\n",
4416 " 'gohieaajnreanfnhpree',\n",
4417 " 'rlaiuarpnfelearrprin',\n",
4418 " 'gohraocjnramdhnhpfns',\n",
4419 " 'glhraosjnramdtnrpfns',\n",
4420 " 'gohassujnrfyrhnhppeh',\n",
4421 " 'rlarshtpnfpyerrrpdel',\n",
4422 " 'gohytuvjnreohunhpndc',\n",
4423 " 'roakfrfpnfgttsrhpjuh',\n",
4424 " 'flrkrolpnpgeaeerdjee',\n",
4425 " 'gohyahfjnrenetnhpnes',\n",
4426 " 'rlakserpnfgrtvrrpjht',\n",
4427 " 'faronvlpmpotvcendgno',\n",
4428 " 'roaoooipsfosrnrnpgns',\n",
4429 " 'flrraropnpaaeaerdlce',\n",
4430 " 'rlaninrpnfreoarrptre',\n",
4431 " 'rlanrnopnfratdrrptln',\n",
4432 " 'rlansorpnfroeprrptru',\n",
4433 " 'farosiopmphoooenderr',\n",
4434 " 'farlahepmposraendsnp',\n",
4435 " 'flrnriypnphioeerdaoh',\n",
4436 " 'flrhnropnpateaerdsne',\n",
4437 " 'farrshdpmpnneeendnel',\n",
4438 " 'fliihrhpnoeaeeerrrse',\n",
4439 " 'floposfpnerdyteruise',\n",
4440 " 'pafnrofdmdrtettncnwu',\n",
4441 " 'plinurvdnohleutrraie',\n",
4442 " 'rlosnerpneoetprrurtv',\n",
4443 " 'faisafopmooasoenrrcr',\n",
4444 " 'flrohirpnthaoperhesr',\n",
4445 " 'plrohivdnthaoutrhesr',\n",
4446 " 'fahnhtipmeraioenlnse',\n",
4447 " 'fahnhirpmeraopenlnsr',\n",
4448 " 'flrhrorpntaieperhsou',\n",
4449 " 'plrsoivdntnhoutrheer',\n",
4450 " 'fahsnirpmenropenlenr',\n",
4451 " 'fahnsirpmeaoopenlirr',\n",
4452 " 'foniniapsnesolenarcr',\n",
4453 " 'fanpalfpmnrtitenaiio',\n",
4454 " 'paairovdmsoneutnnrnu',\n",
4455 " 'paafroadmsdneetnncnu',\n",
4456 " 'flaitirpnsohopernhar',\n",
4457 " 'raonnrapsroretrnaene',\n",
4458 " 'faesltopsryiuaenpeor',\n",
4459 " 'faraltopspeiuaendnor',\n",
4460 " 'fnponsopnresmseaiucn',\n",
4461 " 'fneisaapnuontmealrei',\n",
4462 " 'fatiatnpswemneenornr',\n",
4463 " 'gaaetctjsntiasnnevel',\n",
4464 " 'faoirirpshenotenernr',\n",
4465 " 'faneoogpsrreafentpue',\n",
4466 " 'ranalrapsrfnpcrntprd',\n",
4467 " 'faoooynpshadereneesn',\n",
4468 " 'pallrhpdsnitirtnrohi',\n",
4469 " 'faodoynpssederenngsn',\n",
4470 " 'rnaovirpnmsviprannoe',\n",
4471 " 'faorrrapssnipmennnod',\n",
4472 " 'faorrrmpssnipnennnod',\n",
4473 " 'ranaaajpsrfetnrnnpni',\n",
4474 " 'panfgrddsrdjtetnncnh',\n",
4475 " 'famriaopsnnothensnri',\n",
4476 " 'fnnilrfpnsoipteacrod',\n",
4477 " 'fnstokmpnocdgnearasj',\n",
4478 " 'gaohsaojtrrlerniapln',\n",
4479 " 'raonnafptrsnctriacae',\n",
4480 " 'raonhvopterauoriutsr',\n",
4481 " 'garortajtenpufniehrr',\n",
4482 " 'raolnanptenrfhriurtp',\n",
4483 " 'raauafrptelntvrinieo',\n",
4484 " 'gaaeelsjtntttmnievth',\n",
4485 " 'falaverptinveeeioeod',\n",
4486 " 'ralnahnptirfasrionps',\n",
4487 " 'gaanrrfjtnhepdnieaer',\n",
4488 " 'raanohfptereadrinnus',\n",
4489 " 'faeiltoptnoiureirror',\n",
4490 " 'raeonftptartdsrissnc',\n",
4491 " 'gaeororjtareaanisaee',\n",
4492 " 'ranhusfptrahndritsct',\n",
4493 " 'ranhusfptrahndritsct',\n",
4494 " 'ranhusiptrahnhritsct',\n",
4495 " 'raaaskaptmfngnrinpej',\n",
4496 " 'raaieflptmostnrinhoo',\n",
4497 " 'ranhaoyptrafherinspe',\n",
4498 " 'fahattmptacwuneiseor',\n",
4499 " 'faratsnptncwmseineon',\n",
4500 " 'ranaotfptsfgntricpfr',\n",
4501 " 'faroparptnerseeinuin',\n",
4502 " 'rahiknoptahgrorisijt',\n",
4503 " 'rahionoptahorerisigt',\n",
4504 " 'raalreyptsinterinonv',\n",
4505 " 'raaaotfpftmgntrpinfr',\n",
4506 " 'ghaheotjrtaroanpiseg',\n",
4507 " 'ghrosefjraoyttnpfgdt',\n",
4508 " 'ghrysorjraeyrnnpfnds',\n",
4509 " 'fryltolppeiuaeednore',\n",
4510 " 'friintnppooruhedhrtr',\n",
4511 " 'frnaplkpprsrngedtnir',\n",
4512 " 'ghorreajrnaeatnphfes',\n",
4513 " 'raliyrdpfnoevorprhnv',\n",
4514 " 'ghlnavtjrnrturnprtir',\n",
4515 " 'frloknippnngsoedrhjc',\n",
4516 " 'frarilrppmnoiaednnro',\n",
4517 " 'frahiltppmaoiuednsro',\n",
4518 " 'frarilsppmnoimednnro',\n",
4519 " 'frarilsppmnoimednnro',\n",
4520 " 'frsninsppnsoamedtcri',\n",
4521 " 'ranhrhrpfratehrpnshl',\n",
4522 " 'frhonrrppaerieedsuno',\n",
4523 " 'frhrkaippangmoedsnjn',\n",
4524 " 'grtvealjeovattnerosi',\n",
4525 " 'rrejahtpernfaurepops',\n",
4526 " 'poprhredeeiaeatufose',\n",
4527 " 'pipaaoedoesmeatrfnnu',\n",
4528 " 'rraoltrpeneeapreeusi',\n",
4529 " 'foaigsrpeeofyaeunrtd',\n",
4530 " 'pftterrddwulevtcoroe',\n",
4531 " 'foafrripeesanoeunrln',\n",
4532 " 'foahroopeeaidoeunsos',\n",
4533 " 'roeaasapeatemirusinn',\n",
4534 " 'finaltnportiuhertior',\n",
4535 " 'greavlsjeatutmnesirh',\n",
4536 " 'roeotcspeadsemrussyt',\n",
4537 " 'fonsetopermgooeutnhd',\n",
4538 " 'rrevkdopeaugtrresrjo',\n",
4539 " 'grohtsojenroyonehprd',\n",
4540 " 'frlrrolpenppeeeerdru',\n",
4541 " 'filrthsponphenerrdal',\n",
4542 " 'roaasarpemfntnrunpei',\n",
4543 " 'filinrnponorpherrhtd',\n",
4544 " 'fonrharperiateeunosi',\n",
4545 " 'fomrstopeninuseusoer',\n",
4546 " 'pirnfoldonsdhetrncce',\n",
4547 " 'ronaenopeefrrorusppt',\n",
4548 " 'raajafapetnftnrniopr',\n",
4549 " 'raajaafpetnfstrniopl',\n",
4550 " 'raanntapetroosrniner',\n",
4551 " 'rlahtrupitaothroisrh',\n",
4552 " 'faahgtepetajugenisnr',\n",
4553 " 'rlahnanpitarfrroistp',\n",
4554 " 'gaahgovjetahounnislg',\n",
4555 " 'gaahgotjetahoannislg',\n",
4556 " 'rlaraeypitnsteroinnv',\n",
4557 " 'flaarimpitsnoneoinnr',\n",
4558 " 'ftashaopwtnemgeoieln',\n",
4559 " 'raaejaspnfrnemreppon',\n",
4560 " 'raaretrpefphuarnpdkr',\n",
4561 " 'farnrorpeprieaendnou',\n",
4562 " 'farnrltpephiiuendaoo',\n",
4563 " 'flrnirrpipeoneeodsrn',\n",
4564 " 'flienorpionrdaeorrns',\n",
4565 " 'farrinipneveooeeevre',\n",
4566 " 'flinhoopioradoeortss',\n",
4567 " 'plapprrdiserevtolfie',\n",
4568 " 'flahagrpisatheeolsil',\n",
4569 " 'flrhifapitaosneohsrr',\n",
4570 " 'flrsrlipitnpnoeohedr',\n",
4571 " 'gaaorocjesrnoannnans',\n",
4572 " 'flarpropispdeoeonrte',\n",
4573 " 'rlariyspisnheyronnin',\n",
4574 " 'rleerucpistpheroovdc',\n",
4575 " 'flenrrypisaipeeooiod',\n",
4576 " 'fapjrrrpsrnehaelioee',\n",
4577 " 'frlrahoptitnenehowes',\n",
4578 " 'raaloofpseidrtrlnosa',\n",
4579 " 'fhtfhcopewteeoelorsi',\n",
4580 " 'frlfhnhptitearehorsi',\n",
4581 " 'palfacfdsiteedtlorei',\n",
4582 " 'frhfodsptesoemehlrgg',\n",
4583 " 'prhttaedtewuisthlorh',\n",
4584 " 'rrhfaiuptetiehrhlrhr',\n",
4585 " 'rrvitaaptvhicnrhoiee',\n",
4586 " 'prviroadtvhienthoiou',\n",
4587 " 'frvgnhaptvhoeneholes',\n",
4588 " 'fhvnecrpevssanelocsl',\n",
4589 " 'phvnstidevslaotlocli',\n",
4590 " 'paahnuadesarrmtelsii',\n",
4591 " 'gaohaatjsnrtmvnlhpin',\n",
4592 " 'grlhtrojtnroprnhrprd',\n",
4593 " 'grlhtutjtnrirrnhrpei',\n",
4594 " 'rrlailvptnfeivrhrpro',\n",
4595 " 'faorphrpsnpreeelhdil',\n",
4596 " 'faoropnpsnperrelhdui',\n",
4597 " 'faormropespnnneendsn',\n",
4598 " 'rhaansrpemfrnprlnpne',\n",
4599 " 'fharnsapemprneelndne',\n",
4600 " 'rhaahanpemfatrrlnpsi',\n",
4601 " 'fharhhapemparnelndsp',\n",
4602 " 'frlrsaiptnpneoehrdee',\n",
4603 " 'rhaashlpemfnenrlnpes',\n",
4604 " 'rrlfksdptnpgmorhrejn',\n",
4605 " 'frlprosptnrpsmehridn',\n",
4606 " 'prlpisodtneonethrfre',\n",
4607 " 'frlpvdnptnrvotehrioo',\n",
4608 " 'rrliahiptnotahrhrhis',\n",
4609 " 'frlwvyaptnovdcehraoo',\n",
4610 " 'rhansaapemrnftrlnnep',\n",
4611 " 'pharesidemnfnotlnnde',\n",
4612 " 'rrlhofoptnaepdrhrsue',\n",
4613 " 'fhahiptpemaoduelnsrt',\n",
4614 " 'grlsattjtnntahnhreii',\n",
4615 " 'grlsattjtnntahnhreii',\n",
4616 " 'frneofoptrgetdehnhur',\n",
4617 " 'fhnhraiperapmoelnsdn',\n",
4618 " 'pratiahdtswosithnohl',\n",
4619 " 'fratornptswhprehnoed',\n",
4620 " 'rraoealptshrfnrhnepp',\n",
4621 " 'rhaaniupesmrerrlnnnr',\n",
4622 " 'fhaanaspesmrerelnnne',\n",
4623 " 'roajanfpntnsrtrhiolt',\n",
4624 " 'goanlfojntentanhirro',\n",
4625 " 'glanohnjntrrrhnritap',\n",
4626 " 'rlanoonpntrrehrritau',\n",
4627 " 'flaorevpnthtnveriewe',\n",
4628 " 'faaoranpmthtlneniewe',\n",
4629 " 'rlanuvrpntrluarritir',\n",
4630 " 'rlahaaopntafmhrrispn',\n",
4631 " 'gohrystjnraeyunhpfnd',\n",
4632 " 'glhryssjnraeymnrpfnd',\n",
4633 " 'elkatoenngfirgerjpes',\n",
4634 " 'gohyfuvjnreshunhpnrc',\n",
4635 " 'faronnapmpohteendgan',\n",
4636 " 'forynhepsperatendnns',\n",
4637 " 'flrrpnhpnperoaerdeie',\n",
4638 " 'roaeinepnfaeonrhpsre',\n",
4639 " 'rlannyrpnfhoehrrpaen',\n",
4640 " 'fornohfpspsgltendcfc',\n",
4641 " 'glroanejnerthgnreaia',\n",
4642 " 'gothrsrjnurayenhrpfd',\n",
4643 " 'ploprhrdneeiaetrufos',\n",
4644 " 'faopohspmerdomenuiso',\n",
4645 " 'failftrpmoisuaenrorr',\n",
4646 " 'faieerlpmolsanenrosl',\n",
4647 " 'fainuorpmorldaenrnis',\n",
4648 " 'foisrropsooaeoenrrte',\n",
4649 " 'plisaafdnooaedtrrrcn',\n",
4650 " 'fahinyopmeordrenlrno',\n",
4651 " 'fahnhirpmeraopenlnsr',\n",
4652 " 'foairoypssondeennrns',\n",
4653 " 'roamrsfpssnnytrnnsnd',\n",
4654 " 'faerylipsaheioenseno',\n",
4655 " 'faaihnypsmoendennrla',\n",
4656 " 'faaoiropsmhonoennern',\n",
4657 " 'raarnaspsmnofyrnnnep',\n",
4658 " 'ranaaajpsrfetnrnnpni',\n",
4659 " 'pnnftsndnsdwmttaccon',\n",
4660 " 'pnnhtsndnslamttaccin',\n",
4661 " 'fnstorypnoceheearaue',\n",
4662 " 'gaorasgjtrenmhniaeen',\n",
4663 " 'raonhvopterauoriutsr',\n",
4664 " 'garnuecjtehhtanieacv',\n",
4665 " 'faeiltoptnoiureirror',\n",
4666 " 'gaeororjtareaanisaee',\n",
4667 " 'ranhusfptrahndritsct',\n",
4668 " 'faloceeptnsaaseirnle',\n",
4669 " 'raheltaptatiuiristor',\n",
4670 " 'rahelfrptatidnristoc',\n",
4671 " 'raaalonpftmiohrpinog',\n",
4672 " 'raahnylpftaoenrpisen',\n",
4673 " 'raahnoapftaoomrpiseg',\n",
4674 " 'raaoisrpfeeemnrpnurn',\n",
4675 " 'friintrppooruvedhrtr',\n",
4676 " 'frahiltppmaoiuednsro',\n",
4677 " 'frahiltppmaoiuednsro',\n",
4678 " 'frarilsppmnoimednnro',\n",
4679 " 'frsninsppnsoamedtcri',\n",
4680 " 'frhonrrppaerieedsuno',\n",
4681 " 'fiirohrpoeneaeerrnus',\n",
4682 " 'roaliyrpefneevruprrn',\n",
4683 " 'foadyhepeloeraeueonp',\n",
4684 " 'foeaasepeatemgeusinn',\n",
4685 " 'foeaastpeatemceusinn',\n",
4686 " 'rreavespeatuhmresirk',\n",
4687 " 'fonprlsperrpnmeutidr',\n",
4688 " 'filrtovponphsverrdan',\n",
4689 " 'gaantcrjetevasnniaul',\n",
4690 " 'rlanvrapitruanroitrl',\n",
4691 " 'raarvylpntvueireivrn',\n",
4692 " 'raanntapetroosrniner',\n",
4693 " 'gaahoaujetagernnisfe',\n",
4694 " 'rlahiylpitahenroisin',\n",
4695 " 'ftashnapwtnenmeoiela',\n",
4696 " 'rlaneynpitatehroiivn',\n",
4697 " 'raaejyfpnfrnetreppon',\n",
4698 " 'farnrlspepriimendnoo',\n",
4699 " 'flientrpionhuheorrar',\n",
4700 " 'flaahcnpistaaseolisl',\n",
4701 " 'gaavttajesvaiennloie',\n",
4702 " 'flareoepispndaeonres',\n",
4703 " 'fapjrrrpsrnehaelioee',\n",
4704 " 'rrlailvptnfeivrhrpro',\n",
4705 " 'rrlaponptnfdrtrhrpts',\n",
4706 " 'faorgropsnpjeaelhdne',\n",
4707 " 'fharroapemppnselndrh',\n",
4708 " 'rhaansrpemfrnprlnpne',\n",
4709 " 'rhaahanpemfatrrlnpsi',\n",
4710 " 'fhaphthpemdruaelntpr',\n",
4711 " 'prlhrofdtnaisdthrson',\n",
4712 " 'phahfnedemadrgtlnscn',\n",
4713 " 'paorafndesnsdstennnc',\n",
4714 " 'ransreopshnetdrlatev',\n",
4715 " 'frneofoptrgetdehnhur',\n",
4716 " 'fhnaorepenmapselaned',\n",
4717 " 'rhaaniupesmrerrlnnnr',\n",
4718 " 'rhnraudpeenmrorlsnni',\n",
4719 " 'rlanoonpntrrehrritau',\n",
4720 " 'rlanoonpntrrehrritau',\n",
4721 " 'foanpospntrrelehitiu',\n",
4722 " 'rlanuvrpntrluarritir',\n",
4723 " 'roakfrfpnfgttsrhpjuh',\n",
4724 " 'gohyfuvjnreshunhpnrc',\n",
4725 " 'gohyahfjnrenetnhpnes',\n",
4726 " 'gohyahfjnrenetnhpnes',\n",
4727 " 'forynhepsperatendnns',\n",
4728 " 'farrlnopmpacooendlee',\n",
4729 " 'farlahepmposraendsnp',\n",
4730 " 'glroanejnerthgnreaia',\n",
4731 " 'rooaeeapnefarerhupsp',\n",
4732 " 'gotnfecjnuedranhrrcp',\n",
4733 " 'flinurrpnohleherraie',\n",
4734 " 'fairoffpmonestenrnur',\n",
4735 " 'flohdydpneaoeeeruson',\n",
4736 " 'ponfnradsndspstnaccr',\n",
4737 " 'roamrsfpssnnytrnnsnd',\n",
4738 " 'roamrsfpssnnytrnnsnd',\n",
4739 " 'faeryltpsaheiwenseno',\n",
4740 " 'fartdrypsnneedennrge',\n",
4741 " 'fartdonpsnnedsennrgs',\n",
4742 " 'fnstorypnoceheearaue',\n",
4743 " 'raalfhspteidcmrinoch',\n",
4744 " 'gaanrfijtnheponieaee',\n",
4745 " 'fanhusiptrahnoeitsct',\n",
4746 " 'frahiltppmaoiuednsro',\n",
4747 " 'rahrnnopfaerodrpsene',\n",
4748 " 'roaliyrpefneevruprrn',\n",
4749 " 'foailsopeeoeyoeunrsd',\n",
4750 " 'roeavtspeatusmrusiry',\n",
4751 " 'grohosujenrryhnehpad',\n",
4752 " 'frlrrolpenppeeeerdru',\n",
4753 " 'rooasahpenflmeruhpln',\n",
4754 " 'gaanhfejnterttneirpr',\n",
4755 " 'raajafapetnftnrniopr',\n",
4756 " 'raarvylpntvueireivrn',\n",
4757 " 'gartptfjnerdwtneevto',\n",
4758 " 'flientrpionhuheorrar',\n",
4759 " 'flareoepispndaeonres',\n",
4760 " 'fharohepempnlaelndhc',\n",
4761 " 'paneoafdshgeedtlahun',\n",
4762 " 'rlanoonpntrrehrritau',\n",
4763 " 'raarcvapmfpevsrnpdho',\n",
4764 " 'rlarnerpnfarrprrplie',\n",
4765 " 'flinurrpnohleherraie',\n",
4766 " 'fahoroopmeannoenlenh',\n",
4767 " 'raallrmpftnianrpirol',\n",
4768 " 'rlanvrapitruanroitrl',\n",
4769 " 'faonpfcpeeedtaenuatr',\n",
4770 " 'raallrmpftnianrpirol']"
4771 ]
4772 }
4773 ],
4774 "prompt_number": 39
4775 },
4776 {
4777 "cell_type": "code",
4778 "collapsed": false,
4779 "input": [
4780 "[w for w in hinted_keywords if cadenus_decipher(first_chunk, w, keycolumn).startswith('phaseseven')]"
4781 ],
4782 "language": "python",
4783 "metadata": {},
4784 "outputs": [
4785 {
4786 "metadata": {},
4787 "output_type": "pyout",
4788 "prompt_number": 40,
4789 "text": [
4790 "[]"
4791 ]
4792 }
4793 ],
4794 "prompt_number": 40
4795 },
4796 {
4797 "cell_type": "code",
4798 "collapsed": false,
4799 "input": [
4800 "def cadenus_break_worker(message, keyword, keycolumn, fitness):\n",
4801 " message_chunks = chunks(message, 175)\n",
4802 " plaintext = ''.join(cadenus_decipher(c, keyword, keycolumn) for c in message_chunks)\n",
4803 " fit = fitness(plaintext)\n",
4804 " return (keyword, keycolumn), fit"
4805 ],
4806 "language": "python",
4807 "metadata": {},
4808 "outputs": [],
4809 "prompt_number": 41
4810 },
4811 {
4812 "cell_type": "code",
4813 "collapsed": false,
4814 "input": [
4815 "def cadenus_break(message, words=keywords, fitness=Pbigrams):\n",
4816 " c = make_cadenus_keycolumn(reverse=True)\n",
4817 " results = starmap(cadenus_break_worker, [(message, \n",
4818 " w, \n",
4819 " make_cadenus_keycolumn(doubled_letters='vw', start=s, reverse=r), \n",
4820 " fitness)\n",
4821 " for w in words for s in string.ascii_lowercase for r in [True, False]])\n",
4822 " # return list(results)\n",
4823 " return max(results, key=lambda k: k[1])"
4824 ],
4825 "language": "python",
4826 "metadata": {},
4827 "outputs": [],
4828 "prompt_number": 42
4829 },
4830 {
4831 "cell_type": "code",
4832 "collapsed": false,
4833 "input": [
4834 "key8b, fitness = cadenus_break(c8bl, words=hinted_keywords, fitness=Ptrigrams)\n",
4835 "key8b, fitness"
4836 ],
4837 "language": "python",
4838 "metadata": {},
4839 "outputs": [
4840 {
4841 "metadata": {},
4842 "output_type": "pyout",
4843 "prompt_number": 43,
4844 "text": [
4845 "(('finalist',\n",
4846 " {'l': 20,\n",
4847 " 'u': 11,\n",
4848 " 'p': 16,\n",
4849 " 'q': 15,\n",
4850 " 'j': 22,\n",
4851 " 'm': 19,\n",
4852 " 'f': 1,\n",
4853 " 'r': 14,\n",
4854 " 'b': 5,\n",
4855 " 'v': 10,\n",
4856 " 'e': 2,\n",
4857 " 'x': 9,\n",
4858 " 'z': 7,\n",
4859 " 'i': 23,\n",
4860 " 'k': 21,\n",
4861 " 'w': 10,\n",
4862 " 'o': 17,\n",
4863 " 't': 12,\n",
4864 " 'y': 8,\n",
4865 " 'a': 6,\n",
4866 " 's': 13,\n",
4867 " 'c': 4,\n",
4868 " 'd': 3,\n",
4869 " 'g': 0,\n",
4870 " 'h': 24,\n",
4871 " 'n': 18}),\n",
4872 " -5286.197562931952)"
4873 ]
4874 }
4875 ],
4876 "prompt_number": 43
4877 },
4878 {
4879 "cell_type": "code",
4880 "collapsed": false,
4881 "input": [
4882 "cadenus_decipher(first_chunk, key8b[0], key8b[1])"
4883 ],
4884 "language": "python",
4885 "metadata": {},
4886 "outputs": [
4887 {
4888 "metadata": {},
4889 "output_type": "pyout",
4890 "prompt_number": 44,
4891 "text": [
4892 "'wledgctftrojhrtheonovoresoovrpanegoarerufofinaltnportiuhertiorafthehasdwarenncompleeeandoastestssoveconlrudedtlsreisnntignfrrrthesinaaltranlicthaaehesecisityseemiceshuneanykhf'"
4893 ]
4894 }
4895 ],
4896 "prompt_number": 44
4897 },
4898 {
4899 "cell_type": "code",
4900 "collapsed": false,
4901 "input": [
4902 "[(w, s, d1+d2, r)\n",
4903 " for w in hinted_keywords \n",
4904 " for d1 in string.ascii_lowercase[:25]\n",
4905 " for d2 in string.ascii_lowercase\n",
4906 " for s in string.ascii_lowercase \n",
4907 " for r in [True, False]\n",
4908 " if d2 > d1\n",
4909 " if cadenus_decipher(first_chunk, w, make_cadenus_keycolumn(doubled_letters=d1+d2, start=s, reverse=r)).startswith('phaseseven')]"
4910 ],
4911 "language": "python",
4912 "metadata": {},
4913 "outputs": [
4914 {
4915 "metadata": {},
4916 "output_type": "pyout",
4917 "prompt_number": 45,
4918 "text": [
4919 "[]"
4920 ]
4921 }
4922 ],
4923 "prompt_number": 45
4924 },
4925 {
4926 "cell_type": "code",
4927 "collapsed": false,
4928 "input": [
4929 "[(w, s, d1+d2, r, cadenus_decipher(first_chunk, w, make_cadenus_keycolumn(doubled_letters=d1+d2, start=s, reverse=r)))\n",
4930 " for w in hinted_keywords \n",
4931 " for d1 in string.ascii_lowercase[:25]\n",
4932 " for d2 in string.ascii_lowercase\n",
4933 " for s in string.ascii_lowercase \n",
4934 " for r in [True, False]\n",
4935 " if d2 > d1\n",
4936 " if cadenus_decipher(first_chunk, w, make_cadenus_keycolumn(doubled_letters=d1+d2, start=s, reverse=r)).startswith('phase')]"
4937 ],
4938 "language": "python",
4939 "metadata": {},
4940 "outputs": [
4941 {
4942 "metadata": {},
4943 "output_type": "pyout",
4944 "prompt_number": 53,
4945 "text": [
4946 "[('filbert',\n",
4947 " 'm',\n",
4948 " 'lu',\n",
4949 " False,\n",
4950 " 'phasennrkmffnhignsdaaojsrcisrncheentoeetueweisvhsounsucoaleyrhreitdioseotototdhsoagreeysifaglenhtlhonriuelseairscnrteameteiwnntneefefcrartataieposrlandrlvtartalvhctofnorehdpro'),\n",
4951 " ('foolerys',\n",
4952 " 'z',\n",
4953 " 'lm',\n",
4954 " True,\n",
4955 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
4956 " ('foolerys',\n",
4957 " 'z',\n",
4958 " 'lq',\n",
4959 " True,\n",
4960 " 'phaseoeeeesnnufleyehhdoddraccseoeshengoenotthsaeovnlnesgurcrnofriearrtiatttsutacihtracaearaielrmanhhtpnleikhdseaigrtcssejpoemlwnrdinlfoisnfnteofetrourstrnrltrtvnaiwhsvafooeyoi'),\n",
4961 " ('foolerys',\n",
4962 " 'z',\n",
4963 " 'lr',\n",
4964 " True,\n",
4965 " 'phaseoeeeeynnufledehhdodoraccseoeshengsenotthnaeovnlresgurcanofrietrrtiatitsutacehtracararaielpmanhhtdnleikhtseaigrocssejpdemlwnrsinlfoifnfnteosetrourrtrnrlthtvnaiwesvafoosyoi'),\n",
4966 " ('foolerys',\n",
4967 " 'z',\n",
4968 " 'lw',\n",
4969 " True,\n",
4970 " 'phaseoeeeennnuflerehhdodaraccseteshengienottheaeovnlresgurcpnofriedrrtiatttsutacohtracadaraielsmanhhtfnleikhsseaigrrcssejphemlwnreinlfoisnfnteosetrourytrnrltdtvnaiwosvafoooyoi'),\n",
4971 " ('foolerys',\n",
4972 " 'z',\n",
4973 " 'mn',\n",
4974 " True,\n",
4975 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
4976 " ('foolerys',\n",
4977 " 'z',\n",
4978 " 'mo',\n",
4979 " True,\n",
4980 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
4981 " ('foolerys',\n",
4982 " 'z',\n",
4983 " 'mp',\n",
4984 " True,\n",
4985 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
4986 " ('foolerys',\n",
4987 " 'z',\n",
4988 " 'mq',\n",
4989 " True,\n",
4990 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
4991 " ('foolerys',\n",
4992 " 'z',\n",
4993 " 'mr',\n",
4994 " True,\n",
4995 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
4996 " ('foolerys',\n",
4997 " 'z',\n",
4998 " 'ms',\n",
4999 " True,\n",
5000 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5001 " ('foolerys',\n",
5002 " 'z',\n",
5003 " 'mt',\n",
5004 " True,\n",
5005 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5006 " ('foolerys',\n",
5007 " 'z',\n",
5008 " 'mu',\n",
5009 " True,\n",
5010 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5011 " ('foolerys',\n",
5012 " 'z',\n",
5013 " 'mv',\n",
5014 " True,\n",
5015 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5016 " ('foolerys',\n",
5017 " 'z',\n",
5018 " 'mw',\n",
5019 " True,\n",
5020 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5021 " ('foolerys',\n",
5022 " 'z',\n",
5023 " 'mx',\n",
5024 " True,\n",
5025 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5026 " ('foolerys',\n",
5027 " 'z',\n",
5028 " 'my',\n",
5029 " True,\n",
5030 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5031 " ('foolerys',\n",
5032 " 'z',\n",
5033 " 'mz',\n",
5034 " True,\n",
5035 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5036 " ('foolerys',\n",
5037 " 'z',\n",
5038 " 'no',\n",
5039 " True,\n",
5040 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5041 " ('foolerys',\n",
5042 " 'z',\n",
5043 " 'np',\n",
5044 " True,\n",
5045 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5046 " ('foolerys',\n",
5047 " 'z',\n",
5048 " 'nq',\n",
5049 " True,\n",
5050 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5051 " ('foolerys',\n",
5052 " 'z',\n",
5053 " 'nr',\n",
5054 " True,\n",
5055 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5056 " ('foolerys',\n",
5057 " 'z',\n",
5058 " 'ns',\n",
5059 " True,\n",
5060 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5061 " ('foolerys',\n",
5062 " 'z',\n",
5063 " 'nt',\n",
5064 " True,\n",
5065 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5066 " ('foolerys',\n",
5067 " 'z',\n",
5068 " 'nu',\n",
5069 " True,\n",
5070 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5071 " ('foolerys',\n",
5072 " 'z',\n",
5073 " 'nv',\n",
5074 " True,\n",
5075 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5076 " ('foolerys',\n",
5077 " 'z',\n",
5078 " 'nw',\n",
5079 " True,\n",
5080 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5081 " ('foolerys',\n",
5082 " 'z',\n",
5083 " 'nx',\n",
5084 " True,\n",
5085 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5086 " ('foolerys',\n",
5087 " 'z',\n",
5088 " 'ny',\n",
5089 " True,\n",
5090 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5091 " ('foolerys',\n",
5092 " 'z',\n",
5093 " 'nz',\n",
5094 " True,\n",
5095 " 'phaseoeeeernnuflehehhdoderaccseseshengsenotthyaeovnldesgurconofrieorrtiatstsutacnhtracararaielamanhhttnleikhiseaigrecssejpremlwnrpinlfoidnfnteotetrourotrnrltdtvnaiwssvafoofyoi'),\n",
5096 " ('filleting',\n",
5097 " 'm',\n",
5098 " 'lu',\n",
5099 " False,\n",
5100 " 'phasentekmysrhfgndmnrdjsonnpcncofareoestiiteinreovunrvuruleavhtrittocwiotiohothsenoaaeyrhoeilepagehondsfdisetnteinroeugetedsrhwnesoalfrafrnctiesseeoanrtatrarhrscactealafehslll')]"
5101 ]
5102 }
5103 ],
5104 "prompt_number": 53
5105 },
5106 {
5107 "cell_type": "code",
5108 "collapsed": false,
5109 "input": [
5110 "[(w, s, d1+chr(ord(d1)+1), r)\n",
5111 " for w in hinted_keywords \n",
5112 " for d1 in string.ascii_lowercase[:25]\n",
5113 " # for d2 in string.ascii_lowercase\n",
5114 " for s in string.ascii_lowercase \n",
5115 " for r in [True, False]\n",
5116 " # if d2 > d1\n",
5117 " if cadenus_decipher(first_chunk, w, make_cadenus_keycolumn(doubled_letters=d1+chr(ord(d1)+1), start=s, reverse=r)).startswith('phases')]"
5118 ],
5119 "language": "python",
5120 "metadata": {},
5121 "outputs": [
5122 {
5123 "metadata": {},
5124 "output_type": "pyout",
5125 "prompt_number": 46,
5126 "text": [
5127 "[]"
5128 ]
5129 }
5130 ],
5131 "prompt_number": 46
5132 },
5133 {
5134 "cell_type": "code",
5135 "collapsed": false,
5136 "input": [
5137 "cadenus_decipher(first_chunk, 'filbert', make_cadenus_keycolumn(doubled_letters='lu', start='m', reverse=False))"
5138 ],
5139 "language": "python",
5140 "metadata": {},
5141 "outputs": [
5142 {
5143 "metadata": {},
5144 "output_type": "pyout",
5145 "prompt_number": 52,
5146 "text": [
5147 "'phasennrkmffnhignsdaaojsrcisrncheentoeetueweisvhsounsucoaleyrhreitdioseotototdhsoagreeysifaglenhtlhonriuelseairscnrteameteiwnntneefefcrartataieposrlandrlvtartalvhctofnorehdpro'"
5148 ]
5149 }
5150 ],
5151 "prompt_number": 52
5152 },
5153 {
5154 "cell_type": "code",
5155 "collapsed": false,
5156 "input": [
5157 "chunks(first_chunk, 175)"
5158 ],
5159 "language": "python",
5160 "metadata": {},
5161 "outputs": [
5162 {
5163 "metadata": {},
5164 "output_type": "pyout",
5165 "prompt_number": 48,
5166 "text": [
5167 "['afcaeuottacthrioletcserthshtrahkyorpfrgeoadppjnglternefeofiortsddoeeumscruernfetlaafstwientrvoonerhuahravereetsvsielhlostdoaloyaesmnndignnrhohhtsnaoilncnssicreanneeiiierwtanes']"
5168 ]
5169 }
5170 ],
5171 "prompt_number": 48
5172 },
5173 {
5174 "cell_type": "code",
5175 "collapsed": false,
5176 "input": [],
5177 "language": "python",
5178 "metadata": {},
5179 "outputs": [],
5180 "prompt_number": 48
5181 }
5182 ],
5183 "metadata": {}
5184 }
5185 ]
5186 }