--- /dev/null
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline\n",
+ "\n",
+ "from cipherbreak import *\n",
+ "\n",
+ "c6a = sanitise(open('2015/6a.ciphertext').read())\n",
+ "c6b = sanitise(open('2015/6b.ciphertext').read())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(('hammering', <KeywordWrapAlphabet.from_largest: 3>), -2247.716859509375)"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "(key_a_word, key_a_wrap), score = keyword_break_mp(c6a)\n",
+ "(key_a_word, key_a_wrap), score"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "freslitiacehartaypoinseailinthareagevtiaeceyiaepptestwboarinartayptwmthhegthctpifktwupenwinartasenhfsipaodartsewiomthhegtpstaayunliktlyfoinfiwtnfthoidigustyousjuniosfiprtsfltskcehinvolvtwmigrabtcosarfrtfkingrtsbefkgsounwenwbenkeffounahareaihellimtenacrtniheiwarthousftcehflohtaoromtbuaarinkingebouaiaiemnoahustiamekthhtnhtaoarinkhrtceharthousftartmthhegthhaillkttpfomingenwiemguthhingareahrtrehgonthoartstmuhabthomtoartshousftdosousinatlligtnfthomtaringihboartsingmtebouaartaontodartmthhegthcrywothousenaegonihakttpaeunainguhebouaousellithiaihnoaliktartaringhctestbtingehktwaobiwdosestaringhctestliktlyaoriwtdsomontenoartsedatsellenyceyidolloctwontodousdstnfrfollteguthaodsitwsifrhasehhtenwceafrtwrtsasyaopifkupartktydsomlofktshttmhaorevtbttnefonifoulwnaflteslyhttcreacehgoingonbuahrtwiwnahttmaobtebltaooptnlofktsenwltdaobviouhlyuphtaedatshrtrewgontiaookelookealofktsiarehedelhtbefkhoiemguthhingartmontycehaektnbuanoaringpsoviwtwintxfrengtfoulwyouwigesounwciaryousfonaefahinartbsiaihrenwsuhhientmbehhithenwhttidartyestgtaaingarthemthosaodfommunifeaionhmeybtyoufoulwcesnartmbyartceywitelfrtmihatnpsojtfacehartfowtnemtdosartnezieaombombtddosairewesuninciarartmwusingartcescrtnctctstasyingaokttpartisrenwhoddartrtevyceatshupplystmtmbtsartbombinginvtmoskareacehuhosseartsousnoswifellithenyceyiaihhaillaophtfstahoartdefaouspsoaegonihaknochebouaiaihhignidifenaihuhptfaartktyaoarihcroltmyhatsylithinartisiwtnaiayidctkntccroartyctstcoskingdosctmigrabtebltaodigustouacreaartyestupaoontlehaaringefaingonerunfriaookelookeahomtodartdstnfrwtewwsophedatsartdsitwsifrhasehhtinfiwtnaenwdounwarteaaefrtwfommunifeaionirevtnarewaimtaofsefkiabuaiarinkiameybtevigtntstegeinbuairevtnarewefrenftaoasybebbegthasifkoniaytagivtiaaoyousblefkfrembtsenwhttcreaartyfenmektodiaellartbtharessy\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(keyword_decipher(c6a, key_a_word, wrap_alphabet=key_a_wrap))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'icrdvsfshmrghcfhpzysxdrhsvsxfghcrhnrkfshrmrpshrzzfrdflayhcsxhcfhpzflwfggrnfgmfzsiufljzrxlsxhcfhdrxgidszhyehcfdrlsywfggrnfzdfhhpjxvsufvpiysxislfxifgysesnjdfpyjdtjxsydiszcfdivfdumrgsxkyvkflwsnchafmydhcicfiusxncfdariundyjxlrxlarxuriiyjxhghcrhsgrvvswfrxhmcfxsgrslhcfgyjdifmrgivygfhycywfajhhcsxusxnrayjhshsrwxyhgjdfshwrufggfxgfhyhcsxugcfmrghcfgyjdifhcfwfggrnfgghsvvuffziywsxnrxlsrwnjfggsxnhcrhgcfcrgnyxfgyhcfdfwjghafgywfyhcfdgyjdifeydyjdsxhfvvsnfxifgywfhcsxnsgayhcfdsxnwfrayjhhcfhyxfyehcfwfggrnfgmcplyfgyjdrxhrnyxsghuffzhrjxhsxnjgrayjhyjdrvvsfgshsgxyhvsufhcfhcsxngmfrdfafsxnrguflhyasleydrdfhcsxngmfrdfvsufvphycslfedywyxfrxyhcfdrehfdrvvrxpmrpseyvvymflyxfyeyjdedfxiciyvvfrnjfghyedsfldsicghdrggfrxlmrhicflcfdhdphyzsiujzhcfufpedywvyiufdgffwghycrkfaffxriyxsiyjvlxhivfrdvpgffmcrhmrgnysxnyxajhgcflslxhgffwhyafravfhyyzfxvyiufdrxlvfehyaksyjgvpjzgfhrehfdgcfcrlnyxfshyyurvyyurhvyiufdshcrgrervgfariugysrwnjfggsxnhcfwyxfpmrghrufxajhxyhcsxnzdykslflsxfoicrxnfiyjvlpyjlsnrdyjxlmshcpyjdiyxhrihgsxhcfadshsgcrxldjggsrxfwarggsfgrxlgffsehcfprdfnfhhsxnhcfgrwfgydhyeiywwjxsirhsyxgwrpafpyjiyjvlmrdxhcfwaphcfmrplsfrvicfwsghfxzdytfihmrghcfiylfxrwfeydhcfxrqsrhywaywafeeydhscrlrdjxsxmshchcfwljdsxnhcfmrdmcfxmfmfdfhdpsxnhyuffzhcfsdcrxlgyeehcfcfrkpmrhfdgjzzvpdfwfwafdhcfaywasxnsxkfwyduhcrhmrgjgyddrhcfdyjdxydlsirvvsfgrxpmrpshsgghsvvhyzgfidfhgyhcferihyjdzdyhrnyxsghuxymgrayjhshsggsnxsesirxhsgjgzfihhcfufphyhcsgmcyvfwpghfdpvsfgsxhcfsdslfxhshpsemfuxfmmcyhcfpmfdfmydusxneydmfwsnchafravfhyesnjdfyjhmcrhhcfprdfjzhyyxfvrghhcsxnrihsxnyxrcjxicshyyurvyyurhgywfyehcfedfxiclfrlldyzgrehfdhcfedsfldsicghdrggfsxislfxhrxleyjxlhcfrhhricfliywwjxsirhsyxscrkfxhcrlhswfhyidriushajhshcsxushwrpafrksnfxfdfrnrsxajhscrkfxhcrlricrxifhyhdparaarnfghdsiuyxshpfhnskfshhypyjdavriuicrwafdrxlgffmcrhhcfpirxwrufyeshrvvhcfafghcrddp'"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "c6a"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'CHARLIE IT WAS THE TYPO IN RAT I LINES THAT GAVE IT AWAY IT APPEARED BOTH IN THE TYPED MESSAGES WE PICKED UP AND IN THE TRANSCRIPT OF THE RADIO MESSAGE PRETTY UNLIKELY COINCIDENCE SO I FIGURE YOUR JUNIOR CIPHER CLERK WAS INVOLVED MIGHT BE WORTH CHECKING HER BACKGROUND AND BANK ACCOUNTS THAT IS ALL I MEANT WHEN I SAID THE SOURCE WAS CLOSE TO HOME BUT THINKING ABOUT IT I AM NOT SURE IT MAKES SENSE TO THINK SHE WAS THE SOURCE THE MESSAGES STILL KEEP COMING AND I AM GUESSING THAT SHE HAS GONE SO THERE MUST BE SOME OTHER SOURCE FOR OUR INTELLIGENCE SOMETHING IS BOTHERING ME ABOUT THE TONE OF THE MESSAGES WHY DOES OUR ANTAGONIST KEEP TAUNTING US ABOUT OUR ALLIES IT IS NOT LIKE THE THINGS WE ARE BEING ASKED TO BID FOR ARE THINGS WE ARE LIKELY TO HIDE FROM ONE ANOTHER AFTER ALL ANYWAY I FOLLOWED ONE OF OUR FRENCH COLLEAGUES TO FRIEDRICHSTRASSE AND WATCHED HER TRY TO PICKUP THE KEY FROM LOCKER SEEMS TO HAVE BEEN A CON I COULDNT CLEARLY SEE WHAT WAS GOING ON BUT SHE DIDNT SEEM TO BE ABLE TO OPEN LOCKER AND LEFT OBVIOUSLY UPSET AFTER SHE HAD GONE I TOOK A LOOK AT LOCKER IT HAS A FALSE BACK SO I AM GUESSING THE MONEY WAS TAKEN BUT NOTHING PROVIDED IN EXCHANGE COULD YOU DIG AROUND WITH YOUR CONTACTS IN THE BRITISH AND RUSSIAN EMBASSIES AND SEE IF THEY ARE GETTING THE SAME SORT OF COMMUNICATIONS MAYBE YOU COULD WARN THEM BY THE WAY DIE ALCHEMIST EN PROJECT WAS THE CODENAME FOR THE NAZI ATOM BOMB EFFORT I HAD A RUN IN WITH THEM DURING THE WAR WHEN WE WERE TRYING TO KEEP THEIR HANDS OFF THE HEAVY WATER SUPPLY REMEMBER THE BOMBING IN VE MORK THAT WAS US OR RATHER OUR NORDIC ALLIES ANYWAY IT IS STILL TOP SECRET SO THE FACT OUR PROTAGONIST KNOWS ABOUT IT IS SIGNIFICANT I SUSPECT THE KEY TO THIS WHOLE MYSTERY LIES IN THEIR IDENTITY IF WE KNEW WHO THEY WERE WORKING FOR WE MIGHT BE ABLE TO FIGURE OUT WHAT THEY ARE UP TO ONE LAST THING ACTING ON A HUNCH I TOOK A LOOK AT SOME OF THE FRENCH DEAD DROPS AFTER THE FRIEDRICHSTRASSE INCIDENT AND FOUND THE ATTACHED COMMUNICATION I HAVENT HAD TIME TO CRACK IT BUT I THINK IT MAYBE AVI GENERE AGAIN BUT I HAVENT HAD A CHANCE TO TRY BABBAGE STRICK ON IT YET GIVE IT TO YOUR BLACK CHAMBER AND SEE WHAT THEY CAN MAKE OF IT ALL THE BEST HARRY'"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "translations = {'c': 'H', 'r': 'A', 'd': 'R', 'p': 'Y', 'i': 'C', 'd': 'R', 'v': 'L', 's': 'I', 'f': 'E', \n",
+ " 'h': 'T', 'a': 'B', 'g': 'S', 'm': 'W', 'y': 'O', 'z': 'P', 'n': 'G', 'j': 'U', 't': 'J',\n",
+ " 'x': 'N', 'k': 'V', 'l': 'D', 'w': 'M', 'u': 'K', 'e': 'F', 'q': 'Z', 'o': 'X'}\n",
+ "translation_table = ''.maketrans(translations)\n",
+ "plaintext = ' '.join(segment(c6a.translate(translation_table)))\n",
+ "plaintext"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'BHRFESTCUVDWGXYZAIJKLMNOP'"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "''.join(translations[l] for l in sorted(translations))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'railfencstuvwxyzdghjkmopq'"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "inverted_translations = {translations[a]: a for a in translations}\n",
+ "''.join(inverted_translations[l] for l in sorted(inverted_translations))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'railfencstuvwxyzbdghjkmopq'"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "keyword_cipher_alphabet_of('railfences', wrap_alphabet=KeywordWrapAlphabet.from_last)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "charlie it was the typo in rat i lines that gave it away it appeared both in the typed messages we picked up and in the transcript of the radio message pretty unlikely coincidence so i figure your junior cipher clerk was involved might be worth checking her background and bank accounts that is all i meant when i said the source was close to home but thinking about it i am not sure it makes sense to think she was the source the messages still keep coming and i am guessing that she has gone so there must be some other source for our intelligence something is bothering me about the tone of the messages why does our antagonist keep taunting us about our allies it is not like the things we are being asked to bid for are things we are likely to hide from one another after all anyway i followed one of our french colleagues to friedrichstrasse and watched her try to pickup the key from locker seems to have been a con i couldnt clearly see what was going on but she didnt seem to be able to open locker and left obviously upset after she had gone i took a look at locker it has a false back so i am guessing the money was taken but nothing provided in exchange could you dig around with your contacts in the british and russian embassies and see if they are getting the same sort of communications maybe you could warn them by the way die alchemist en project was the codename for the nazi atom bomb effort i had a run in with them during the war when we were trying to keep their hands off the heavy water supply remember the bombing in ve mork that was us or rather our nordic allies anyway it is still top secret so the fact our protagonist knows about it is significant i suspect the key to this whole mystery lies in their identity if we knew who they were working for we might be able to figure out what they are up to one last thing acting on a hunch i took a look at some of the french dead drops after the friedrichstrasse incident and found the attached communication i havent had time to crack it but i think it maybe avi genere again but i havent had a chance to try babbage strick on it yet give it to your black chamber and see what they can make of it all the best harry\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(' '.join(segment(keyword_decipher(c6a, 'railfences', wrap_alphabet=KeywordWrapAlphabet.from_last))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "('kremlin', -908.5396262316657)"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "key_b, score = vigenere_frequency_break(c6b)\n",
+ "key_b, score"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "the americans have robbed you rather than trying to outbid you they got to the lockers first and arranged to steal your money and the valuable intelligence i provided for you they can not be trusted none of your allies can be trusted they believe that they can cheat you but they do not understand that you can only cheat in a game and this is not a game if you try to playa game of chess like your allies we will find ourselves in a stalemate you have been warned so let us start again i can let you have the address of another safehouse at a small discount on our original price and i will include the identity of a british double agent working in your embassy shall we say four hundred thousand francs to be paid directly to an account of my choosing if you want to know more about the treachery of your so called friends then let us meet in the park by the british embassy on friday at eleven\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(' '.join(segment(sanitise(vigenere_decipher(sanitise(c6b), key_b)))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.4.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
-iQIcBAABCAAGBQJWTz/TAAoJEJPB2e07PgbqmWUP/3Hps+dixX3O6YHcemin0oHv
-q3DFujbaFJK+qHh6ofKMYk/vItdFE5mLXgpoSfCtn9aPyt9A8JuYnsxdpjs3Y6L5
-r+f38QUuMNa9xtqff05My4TSIjWq5XX6pM8sQE2u1t7TZEz1DVDghxb+aaFhbHK1
-fG9GvuOCo/7p+3nXAhg+JIoczYlZkN5huduAA/1w1g87rPCPQKovcQ/d17ZspqU0
-WyClNyAUiFg7sbYp+CqQqhQyYCKOe0fw9JU1Kyh23YeKMqsgS5DOu5ZW7Kl+Bcrl
-qQttbt0TInHhcPMzYTYCr1ylR0uCbCkTXyEfDTjcbd9VKcILIFWLGclkew25AKRr
-wmdbjfvmMpiwE5yqGh5tBpLVNZLJzQ1YoZuilNJnqQTtNN0qSB5SBKXHf+BA01tE
-Ryz1SW7K0ocgyKUf5hcZv+qAfX0EfyrxDnnxgIn80Pwua42m4cYQKqNLUywPdtkE
-wx9UnYirc9WnNW/ctma2b5Y0ANu4YxLMF1l9abjzzLhDXhxHdv6/2wSSPstyKOD1
-iZWHMeVQ4ntq3+S5W/TL2dKBgbDl4QUXs81aGNMQE72p1uoThFPiWWXuEwUVr+H3
-/c+2sIyGTixBKgGdP4k7TxXlhGSeL/rz61TLuziLQEDfYJrvuHKX6kW/CtkpPmIP
-mO/ClCMdn+yaHmn+t07o
-=xfaA
+iQIcBAABCAAGBQJWWJa0AAoJEJPB2e07PgbqOFkP/jmfCjzYoLGLAcbfUNDTl+kB
+5M81aiy73fMNJV2+GoGBflZpJ1Br0/yi+kSMFmK2Vv68jpHNuGaL+ihncVhE2TbE
+2LvhwbFYGugkKNBYt8nDDb2VMMKoaTU9xqpPxYTI1FAIKTDVCimZw3BurzJsd8P1
+Ow9OEA6LwzP2wJksOj+W+f0i4eATPbq8S3/1uoccgoWLmMgwq2GenDKqZIYs1H0a
+PFPld3Q/WC5BsMt7+Cn4JPQfe+IlfKrfWKTCx0ycs2zONWljvxrNf16qt9681sDm
+FKMsBGjB5yfvUAXs1iMhxWrXFY+dZlBkMeQmyDy/4BGzJMu3XlJOcMG0JaDCaeHW
++JTUIl7cRMj/DsKbZO4ENFIHe8RL5rrgW1gVOlhT3WJVY9WAi57PDnAvo1CQTjXe
+3w7/KVu5YU7YiAZnF6p1W3DU1N0VyD7zTWgltj0r85CWAalJgqzat1Uyku5MWLbA
+KGof90lYreYrhFbQ8lLepKEI2c5MyBkrW4CO6/IPJlRAT2qQNLZBRNbz3FQK8bWz
+QOg7LeRtrBaKDAFaOV2tkfCS41XxipEVlSlHCS4R0M7Lwl91FWKQ9+60cAVUcUEJ
+NPyCUseKkemvEYp6I3NKjEzB2VNJbaobEWXMff33xvoZqc46+oCyrLsvutdr/Zwj
+8fTRls78YF61wxgZsLa0
+=++sq
-----END PGP SIGNATURE-----
```
#### Expect
```
-size exec file contents
- ./
-60 .directory 0e83b2cb4dc042236e38c6f8b2575dd0e30b70d4d396795008d5fb3facea2872
-384 .gitignore a93de2ae5c2a47a38599751d1f914566569dfa09dd1778e207117db6c71421dd
- 2012/
-1678 1a.ciphertext c7c16198650e7d91577683acca664a0e588ac5474046a028dea3d9dc4b388df8
-1678 1a.plaintext 1b34de5b1d1422a3089c54d751dfd3938449c98526137a0b8b3b6561a700f9b5
-3312 1b.ciphertext ec263c5cb415f99924e5744846c618b2566a072ac79f6b3cfdde294b99c491fd
-3323 1b.plaintext a7fde879259e64fccca52618a9c008f2111e485ed1c6bfad863c90d8e6ceacae
-1716 2a.ciphertext 2203112c5b43e09b61d8e2918554831559efc7a1157aafda85c25d5ae67f2f0f
-1716 2a.plaintext 28afae88a3b3f0e553f326be7efb896587cb4ac43b9fd664d2cc3f9b2489de35
-2268 2b.ciphertext 587ba7bb4c39d6bd23cbefdcef63d1211d81f6340d401027f9b8e97c97a71b6c
-2268 2b.plaintext 4ee16e37ec82a6ea5446c3d03689bcf608d7408cf79542accaabc297fe6d9f97
-1549 3a.ciphertext fcfff1c90fb5e0cb4240b0617cd7a0bfb1f81ee513a572b44562a0e9db9b4a1b
-1549 3a.plaintext 54c6b1ec3364c34a824ee693c00fa41c466f4bfccad281c4111ce1966232c9f4
-2009 3b.ciphertext 4a568ac5e67430cd30a2bfd73214a7b3984b3117be16f649ea99c40d3de551c3
-2118 3b.plaintext a2b398c99fe1f00d3e7c558c5a9ea9d6739120d63e84b17f19d8f524ae9adf26
-1495 4a.ciphertext 4cbf7aa5d463087f40c3ca724a3860f38b8cad1fc281374eb4567df004d3b5ca
-1559 4a.plaintext b1c02b4ed9df29fcefb046aec75a7702f6e6c1cd28bd56cc67bec1f4ae2af4fb
-2137 4b.ciphertext 829ef4812a023567b9652c57f92da6f48c0b854694eac1a7c9452645723e15db
-2212 4b.plaintext d811c945afab0212c346531fd557c0f1d9a3fb0207835152a1426deda9e0b2a1
-1449 5a.ciphertext 9fb9fbe92a26b3d1b2f54909e732a0d1afde90f97483affcfa9bbacb4edf3d77
-1524 5a.plaintext 203ea3702e17269cbed804f019dd887ae7fc27b2585f1551fc758692e5ba14dd
-2561 5b.ciphertext c0bc2532c853e723fb7c3529c60ca859b7d61af238a98ddaabe0c01423e2a3ab
-2618 5b.plaintext 61431a5bfd9a0e1e21e8ac7ba764ba46cc4b2a3e7adf22fff13153fdc278a451
-1225 6a.ciphertext d22c65b2445ab1228c8351239c37310188d4ec9e173825da43f79509d957aada
-1285 6a.plaintext 27e574c224ad11d7b6258ef6212e8961decac5af3e93c9b08b0919c82c376f98
-1478 6b.ciphertext e80fc065648e8a4207a7d698cd0f39722d69df819fdf756a7d30e2886670542c
-1544 6b.plaintext 424fc647b26f1ef153ec73eda2745896813bc1c6b498a5a0b0b05ff931ec5bf6
-1331 7a.ciphertext d73fe6633bafb097a283396bb5a9b8a5f025031453d1df14156f9c41e898fac3
-1412 7a.plaintext e13149a6f2df3d7d466f761d58c4a8ca3a82fbbc4f6dca983e83442e5caa748f
-2551 7b.ciphertext 15200bf858dede4f6cabffaac54c14d37171cd4f7641a059258cd44b6cb98e7d
-2661 7b.plaintext 430d167225a8f8c98d6e3f69aaca5846ba7d112567b987f3481832b07b03fc05
-1125 8a.ciphertext 5c47ee5314dc118b515b2ab8dc5ed14c492294e70a67f9329ed10d3486fd9ba6
-1195 8a.plaintext a1deee4fa908fb536035435eb066d5c1fed91f962cfd0390f5c51fbb60caceb7
-1783 8b.ciphertext c782e2765c9e3cb0ec72cc77f063ad7f90f2a003d5078b452c24ce3a4549f696
-1783 8b.plaintext 925b270f35dce522f0447085f78795a6f8101013648c836b029f0535f4d752e6
- 2013/
-1340 1a.ciphertext 6b69f06bd684fdaa79ff35497715af6ded3c176277859d1d774bb2569dd53a97
-1340 1a.plaintext cbdaac33a7943a752ba5dd21cf7af23bdbdd22e4a5feb0bccecce45d605d0581
-1495 1b.ciphertext 2e0389e2c7d3156892f7d361ee79f86eb79d34812fca37d8ce692cb6f3976446
-1495 1b.plaintext 717b1f8955515a5d5d2f049f0ffe137820d71f8b2a1689e1a29ec30ed7c9d473
-1135 2a.ciphertext 85ad3dac4751a8db90f391d0f06935a5ef2118d9ac72e05fe0518d7f77bff058
-1135 2a.plaintext 11cdf7c462c536085daced417023adaeff2f6b7a6162ccd12b340b079bd36b48
-926 2b.ciphertext 0fc59b28e4cd2db0aa9f28a603e2b25988a6688f05f90a59b205088093721340
-973 2b.plaintext 019c012f87531e2f9173acae952e7d4a304ed1a62ef341e71455a128d3e7056f
-983 3a.ciphertext 20ab3ad9342e51d82243a678eaf2bc9187553bcedb50c830541a54f34dc9b3dd
-1090 3b.ciphertext c35efccfb68ce3eaa5e7c699ed36a09f23aa719125e4df9f2faef11da1cd5d8a
-1134 4a.ciphertext 523d35a8b412bf2e2a88b160529cae76c512d08f2a589ba53b2ac3c4d4184858
-1061 4b.ciphertext 2cdebce220d9d20ef4c85f208999f81940383a9181bbb0e63b37b7031edcb688
-875 5a.ciphertext b841414d1fbf8af991df389b1b9466d0401c39074f7433dcf3e90648b4d9ab5f
-957 5b.ciphertext 5b6303144fde83cdcdb74976da515933444b7c29efd8ad15d33e65edd2ef78fb
-712 6a.ciphertext 1313d5ffe4e6d2ee82b4f4bbffbe522d5e073775baa53a11bec10c2a693bc7da
-1888 6b.ciphertext 137618d9d92a8a28b7b7fff9a385c4c2db76dff10e0d326895cb0723a63a6adc
-2132 7a.ciphertext d604c136b793701d7501c72821d4069975ce098c2da55fac29331f0045c62b5f
-1565 7b.ciphertext adeef9d9e985c534c40acee5c6734d04195895a32efd9452a89cafef1fdc91b8
-182 mona-lisa-words.txt d7d05c9c86f6282fa66df5f4ca795c89f01cef88a9ce8c921ce4484b3d6078a7
-1190 solutions.txt bd14d8cb1b6694ee4b07d7f38f4df7931e89c10247f101878b6056647bf67cee
-135303 2013-challenge6.ipynb 5b37a8b10db4c8d9831827a2acdffdcdb65369557d15b3e08a900ee8e088da73
-31542 2013-challenge7.ipynb 6de8c15b9cca8b166be4ab86df94898544803e7ed46f8042e363414bed1d2dcc
- 2014/
-735 1a.ciphertext 3adb9e2747c6e3b4033c8042a6dcccb7c2e45988d64c5c78ec0a2c472dc88f95
-610 1b.ciphertext bc11485a47af830fa0ded0b07feebf042c0a6956dc71daa60b525067e96c220a
-767 2a.ciphertext 3881a4f1fc0fadc064bc27d3052800b5eb497e833b208c2cee381b466c9b1db8
-398 2b.ciphertext 78faf9d7a0aad25a9fa72f886c398bc0b684a389bc5624ab4514e93685157a93
-958 3a.ciphertext 0d0524b194961bdbe6fe200cfe983a9338abcca5adabb6776769387967a50711
-658 3b.ciphertext f75662b32e941df727ef411f522ad348016b82e40f957fd6f51eb1b972c7456d
-784 4a.ciphertext 44ae2388243a1782045b0d105612696bf3505517aa7a64f84c7b890e311aa54b
-798 4b.ciphertext d3c54580f2008f81f3a9d2bbc46ef861da192a5c9828ff79807a02dc20b5f3cb
-1191 5a.ciphertext e2bb31d68c7d3359c28f28dabe31ca679f8128903fd91fddc0eceb49483ef169
-994 5b.ciphertext b8087115c18209060ba9e0ce1032a9593fdeabbb55a86507c634b64c62a7c290
-1168 6a.ciphertext b7718e6b9e2ee029f7987178f702aad2e829d5f96d17a0e48b4365de4f5f1f6b
-634 6b.ciphertext 6049395e22af4f76540970c90faf301cf2999cefbc008a651ab36fe413e8aedc
-1650 7a.ciphertext 8a856dc907c04dea27d7d12f530c1c3e11dff6b51fb593bea10a8d68e0240cf6
-988 7b.ciphertext cfb66667a8011226be0be7c98e9deb7efa02e9a53cad67743baf166c20136ada
-1391 8a.ciphertext ac2b18d13ef44be0fb233d2455c51897b4df59491bbdd23ef82fbd9490bc86b1
-7001 8b.ciphertext 8d7e366e8fbb5766717481eeec77b089d3e8f9e708ac198d56176cb0882a9472
-3882 2014-challenge1.ipynb 07715f100d97af32ad5a13b56ade2f5753e17e32404e2eda0dcb9634736298f5
-28071 2014-challenge2.ipynb 1535404ae5a412160c82d19e38f7069a2eaca600bd433e77877bd13e14929e6b
-29190 2014-challenge3.ipynb 1454c5e5014eac93c42e88611f3f6b3f014bf70a8e9d8e87ef4725f8d12a27b7
-32758 2014-challenge4.ipynb 1794b0b2c6fd4630f6d9ffe15ffdad52d04af23082eddc920ec02ba4740032e4
-23322 2014-challenge5.ipynb fb3bb531c62ed943528715cc19e800293e3cd4a176ce3a3fe01e7e585386907e
-40307 2014-challenge6.ipynb 5085a4ae2a562c87983cbff817ac89826973341551980563ae0c77ab747a5dff
-44472 2014-challenge7.ipynb 9800d39c881f22f67f1182f6ca73bbf40a123d0deb598a6009f545f421955241
-188080 2014-challenge8.ipynb c59bcfbb39e48e6e151cc0c86fe48add67844954cf3c65d560bbda0c972a8376
- 2015/
-874 1a.ciphertext 5d0d71f24522e1c05127feb601bf8dc82566f3d2795fb51c4a60e22d900bb5eb
-394 1b.ciphertext a35e8265aea45ab5f7c5eb141e5e65c85ecc24c7d87f3e8197dfe6795a7d3226
-1193 2a.ciphertext 412db1381dcb01f858bf848e48ada16aa4603cbb348c1f092ae39b06d2efa5f9
-544 2b.ciphertext 5ff59d7cff1c4d27dee6414769bdbcfb0b0ab9c5931e772bf9f6442eeb9b6855
-898 3a.ciphertext 5a9f89002db8520dbad882565a0130d3a462ed967e9cebeca828e9f727a267c4
-549 3b.ciphertext efe393ad39849468a04bec4a49d259074fa60c54aa3eac832af5f858fcd06bcd
-917 4a.ciphertext 9c30e8793c161f3f0e1ef0aeb39c854166f9e8e84c149541c9d71d07ff3d37bd
-1032 4b.ciphertext e99143388a6eacb81442ef594bdb0820992eaf89f3a0def9250b4b60ce7ef04b
-1576 5a.ciphertext 73011f47f1412903e23a718da397ed3ba3a0306e72299d5abf401d93fc451205
-840 5b.ciphertext 69f3e64a2fa925a84f1f0b09b30bf901564436519f1c8b515121219fcd544638
-3620 2015-challenge1.ipynb 2ab544f48c22a3a2e665b03ae094ac2de04aee8bdb37366209276a937d248d6a
-4092 2015-challenge2.ipynb 58c2aeca6c73a8fef71d0cc8321469358803f392c02fd44631dd0b25c2755f4a
-3987 2015-challenge3.ipynb dfec26ba881c7ad0af54d072aeba4d08162661e863266936963130548ff86b65
-8030 2015-challenge4.ipynb f77ead0eae7fcd67039d500a31ad1748a4df115905adecd0e93e56f72bbdcfa0
-5039 2015-challenge5.ipynb b0c28829c329d7a2752f4991006e6d78a10415d7609b893b80b3bdb788d6e533
-18025 LICENSE a01259a1b522cf0de95824f9860613b453153eebac468e96196d5d7dba84786c
-7999 LJ!-Qt!-Fghxft-dferts%3B-hsjeukaxxn-sfedw.ipynb 429b6c6995096ff19c28a5ee342bef8ea4774200bdf9aaf6268de3cb8b28df28
-429647 Programming+for+A+level+Computing+through+automated+cipher+breaking.pdf 2f4008ad7217d7902c99bbfc7394c9b9128a3073f4c5d096ef4653d753358b9d|6c1eb93f74c8e3fd5a180e80ce7b315cb642a9f5f66805a4398f6b793dd9b852
-61 README.md 277247b410300ee16477b12ca54ad878d81c8061f6134e2e1cadccaf299de3a3
-469 affine_break_parameter_trials.csv 1a9d635d0af2f41fc6f1e83ae87d6372034259321ba288a11fb024e98ed52f4f|dd9c840434de596a30c84e79de26a9824b36c217a84876c2aab0579b76999735
-6488666 big.txt fa066c7d40f0f201ac4144e652aa62430e58a6b3805ec70650f678da5804e87b
-16832 cadenus-ciphers.ipynb 50e49b3ec5e6440b86fe13472b9f4ab9e133e5665c7280b2abf7a6b57bb8a89a
-514 caesar_break_parameter_trials.csv 6586223bcc00e06e3ff79d107202d6c29ef962a6dd544add00610c5907407e85|1cb7cc77831ef3ef4f994a9ea77e82a841b38acdde45ede9cedbe7a54f1e8e46
-41380 cipher.py 39536843924325b9acdc6aad387c55240fc12a9c23caeaee6ef67e0d7b94e95c
-28349 cipherbreak.py 2a4cdf810302d5645064e460a4409f32173b02fc4e7c7ce0a84d1458a04007bc
-11564 count_1edit.txt 3bf563ef032ba151ec1a4b2d1f33f50c49f4a47e4dc5b8152394bc5b63f57655|b5fbacbebcc25f5011ce97bc9ac967a09c50eef28b4aa98379a6c426df6ac08b
-223 count_1l.txt 335388d457db6ef1da05d8b55ab879e9be7d4e021085efc8d9dfeac0e4a79aa9
-4956241 count_1w.txt 51df159fd3de12b20e403c108f526e96dbd723d9cabdd5f17955cdc16059e690
-9270 count_2l.txt bc2895f800189070c193907cd8bca956ad65fed2e25c14300d4bb5b6a243ba99
-5566017 count_2w.txt 781c0596c3eea532d30bef9f3dba1d5137d652f00376260822c761a7584dfb8c
-220441 count_3l.txt 8702c95530c7d0d182ab94dc03ed7681fcf969819f6db011a58de31411dc6365
-320508 count_big.txt 3ba257fba1934bd138413d8274e79b56c5992431a27692fd562929aa43ec01a3
-3355 find_best_affine_break_parameters.py 6b11004bb93ac26ec7d42d33504e758edbaf9d55365ae2e4ca2fca7589263f25
-3027 find_best_caesar_break_parameters.py 0347d80309179d937a88fd1c8684490a513ccd086366c5a0dd55b8a2fe5c565f
-1236 find_wikipedia_titles.py f040bf855dfec7fff9d8e5eba2fb509179bc53bc02a20b26b7fc61fef983aa45
-37128 hill-ciphers.ipynb ce802c2be807b4565858b568d3a82c65a3957aa625344189f8f2a055237b3fdd
-5516 language_models.py 9f6c60892b385a8443202edda95074eb28e2b66981e25e27f4153b887e2c9ee3
-368 lettercount.py ed36497d62cf75b91994055e4a18848b2fabe5ce793cd76a77fabfc94d81d4f3
-592 make-cracking-dictionary.py 71791e64e4853cd9ca292cb436bbe8c72dd60f509811174df93ed2067683d5c1
-7077 norms.py a657a36c1741e6f3a513386b318fcc99e6b11f98ec64a48284b47462ff2acf30
-8411 norms.pyc ac7a18765c7bcc27e406d8f38d943408097b3384a271502185d53482e6ec0da7|002b186e716cec64869a00bd2d72e16614931e696daa0cf3529d634a0f270e42
-112847 plot-caesar-parameters.ipynb 639459b4b2e434f9f0852c012ed9a8a8d87bd1cb6c2d65ca5abfdb0e42c3dea6
-23863 railfence-experiment-1.ipynb e34a61cef19b3249a3d6d731fe054769c02233b0be661161ebf45bada3b7b97b
-18628 railfence-experiment-2.ipynb 8c4d90c1c934b764deba0956bb4be81868e463789dc8fe02e5621ab3a95c0889
-881 segment.py 94d257cc6151861ef3d3033c4d2d03d8c121b0a982344abf400f65fd507fed28
-4538523 shakespeare.txt 6f9c770efced5c3d87efa6197cd3091b982341372e36c6357f865df91ddecde6
-451530 spell-errors.txt a4abe6ce6c24280f9a8d0485cbf78ddd2e58279ca01293692630a08ba4b13407
-69351 unknown-word-probability-investigation.ipynb 8a9cd7163f10bf2bfb3e286445eddcfc953f80abfdef4e29dac27617a53c3d41
-3291641 war-and-peace.txt 3ed0f41cfdf660846878943bad5b9d575bcae1e4a92ee9a7f43d3c9dba2af344|6799e48d3fd0a6f4c40b9951ec86de6da81f0b9cd36e413490ac511542ca54d3
-868202 words.txt aa77abbcba3c6dee1306d93adcedc2b2ccb8a4e0344a39d0676732ff58ebd5e5
-868384 words_2013.txt 57faa4841fe28dd82a5da4488b6381c194df6e1ecc04e61fb9f60e842bbca18c
+size exec file contents
+ ./
+60 .directory 0e83b2cb4dc042236e38c6f8b2575dd0e30b70d4d396795008d5fb3facea2872
+384 .gitignore a93de2ae5c2a47a38599751d1f914566569dfa09dd1778e207117db6c71421dd
+ 2012/
+1678 1a.ciphertext c7c16198650e7d91577683acca664a0e588ac5474046a028dea3d9dc4b388df8
+1678 1a.plaintext 1b34de5b1d1422a3089c54d751dfd3938449c98526137a0b8b3b6561a700f9b5
+3312 1b.ciphertext ec263c5cb415f99924e5744846c618b2566a072ac79f6b3cfdde294b99c491fd
+3323 1b.plaintext a7fde879259e64fccca52618a9c008f2111e485ed1c6bfad863c90d8e6ceacae
+1716 2a.ciphertext 2203112c5b43e09b61d8e2918554831559efc7a1157aafda85c25d5ae67f2f0f
+1716 2a.plaintext 28afae88a3b3f0e553f326be7efb896587cb4ac43b9fd664d2cc3f9b2489de35
+2268 2b.ciphertext 587ba7bb4c39d6bd23cbefdcef63d1211d81f6340d401027f9b8e97c97a71b6c
+2268 2b.plaintext 4ee16e37ec82a6ea5446c3d03689bcf608d7408cf79542accaabc297fe6d9f97
+1549 3a.ciphertext fcfff1c90fb5e0cb4240b0617cd7a0bfb1f81ee513a572b44562a0e9db9b4a1b
+1549 3a.plaintext 54c6b1ec3364c34a824ee693c00fa41c466f4bfccad281c4111ce1966232c9f4
+2009 3b.ciphertext 4a568ac5e67430cd30a2bfd73214a7b3984b3117be16f649ea99c40d3de551c3
+2118 3b.plaintext a2b398c99fe1f00d3e7c558c5a9ea9d6739120d63e84b17f19d8f524ae9adf26
+1495 4a.ciphertext 4cbf7aa5d463087f40c3ca724a3860f38b8cad1fc281374eb4567df004d3b5ca
+1559 4a.plaintext b1c02b4ed9df29fcefb046aec75a7702f6e6c1cd28bd56cc67bec1f4ae2af4fb
+2137 4b.ciphertext 829ef4812a023567b9652c57f92da6f48c0b854694eac1a7c9452645723e15db
+2212 4b.plaintext d811c945afab0212c346531fd557c0f1d9a3fb0207835152a1426deda9e0b2a1
+1449 5a.ciphertext 9fb9fbe92a26b3d1b2f54909e732a0d1afde90f97483affcfa9bbacb4edf3d77
+1524 5a.plaintext 203ea3702e17269cbed804f019dd887ae7fc27b2585f1551fc758692e5ba14dd
+2561 5b.ciphertext c0bc2532c853e723fb7c3529c60ca859b7d61af238a98ddaabe0c01423e2a3ab
+2618 5b.plaintext 61431a5bfd9a0e1e21e8ac7ba764ba46cc4b2a3e7adf22fff13153fdc278a451
+1225 6a.ciphertext d22c65b2445ab1228c8351239c37310188d4ec9e173825da43f79509d957aada
+1285 6a.plaintext 27e574c224ad11d7b6258ef6212e8961decac5af3e93c9b08b0919c82c376f98
+1478 6b.ciphertext e80fc065648e8a4207a7d698cd0f39722d69df819fdf756a7d30e2886670542c
+1544 6b.plaintext 424fc647b26f1ef153ec73eda2745896813bc1c6b498a5a0b0b05ff931ec5bf6
+1331 7a.ciphertext d73fe6633bafb097a283396bb5a9b8a5f025031453d1df14156f9c41e898fac3
+1412 7a.plaintext e13149a6f2df3d7d466f761d58c4a8ca3a82fbbc4f6dca983e83442e5caa748f
+2551 7b.ciphertext 15200bf858dede4f6cabffaac54c14d37171cd4f7641a059258cd44b6cb98e7d
+2661 7b.plaintext 430d167225a8f8c98d6e3f69aaca5846ba7d112567b987f3481832b07b03fc05
+1125 8a.ciphertext 5c47ee5314dc118b515b2ab8dc5ed14c492294e70a67f9329ed10d3486fd9ba6
+1195 8a.plaintext a1deee4fa908fb536035435eb066d5c1fed91f962cfd0390f5c51fbb60caceb7
+1783 8b.ciphertext c782e2765c9e3cb0ec72cc77f063ad7f90f2a003d5078b452c24ce3a4549f696
+1783 8b.plaintext 925b270f35dce522f0447085f78795a6f8101013648c836b029f0535f4d752e6
+ 2013/
+1340 1a.ciphertext 6b69f06bd684fdaa79ff35497715af6ded3c176277859d1d774bb2569dd53a97
+1340 1a.plaintext cbdaac33a7943a752ba5dd21cf7af23bdbdd22e4a5feb0bccecce45d605d0581
+1495 1b.ciphertext 2e0389e2c7d3156892f7d361ee79f86eb79d34812fca37d8ce692cb6f3976446
+1495 1b.plaintext 717b1f8955515a5d5d2f049f0ffe137820d71f8b2a1689e1a29ec30ed7c9d473
+1135 2a.ciphertext 85ad3dac4751a8db90f391d0f06935a5ef2118d9ac72e05fe0518d7f77bff058
+1135 2a.plaintext 11cdf7c462c536085daced417023adaeff2f6b7a6162ccd12b340b079bd36b48
+926 2b.ciphertext 0fc59b28e4cd2db0aa9f28a603e2b25988a6688f05f90a59b205088093721340
+973 2b.plaintext 019c012f87531e2f9173acae952e7d4a304ed1a62ef341e71455a128d3e7056f
+983 3a.ciphertext 20ab3ad9342e51d82243a678eaf2bc9187553bcedb50c830541a54f34dc9b3dd
+1090 3b.ciphertext c35efccfb68ce3eaa5e7c699ed36a09f23aa719125e4df9f2faef11da1cd5d8a
+1134 4a.ciphertext 523d35a8b412bf2e2a88b160529cae76c512d08f2a589ba53b2ac3c4d4184858
+1061 4b.ciphertext 2cdebce220d9d20ef4c85f208999f81940383a9181bbb0e63b37b7031edcb688
+875 5a.ciphertext b841414d1fbf8af991df389b1b9466d0401c39074f7433dcf3e90648b4d9ab5f
+957 5b.ciphertext 5b6303144fde83cdcdb74976da515933444b7c29efd8ad15d33e65edd2ef78fb
+712 6a.ciphertext 1313d5ffe4e6d2ee82b4f4bbffbe522d5e073775baa53a11bec10c2a693bc7da
+1888 6b.ciphertext 137618d9d92a8a28b7b7fff9a385c4c2db76dff10e0d326895cb0723a63a6adc
+2132 7a.ciphertext d604c136b793701d7501c72821d4069975ce098c2da55fac29331f0045c62b5f
+1565 7b.ciphertext adeef9d9e985c534c40acee5c6734d04195895a32efd9452a89cafef1fdc91b8
+182 mona-lisa-words.txt d7d05c9c86f6282fa66df5f4ca795c89f01cef88a9ce8c921ce4484b3d6078a7
+1190 solutions.txt bd14d8cb1b6694ee4b07d7f38f4df7931e89c10247f101878b6056647bf67cee
+135303 2013-challenge6.ipynb 5b37a8b10db4c8d9831827a2acdffdcdb65369557d15b3e08a900ee8e088da73
+31542 2013-challenge7.ipynb 6de8c15b9cca8b166be4ab86df94898544803e7ed46f8042e363414bed1d2dcc
+ 2014/
+735 1a.ciphertext 3adb9e2747c6e3b4033c8042a6dcccb7c2e45988d64c5c78ec0a2c472dc88f95
+610 1b.ciphertext bc11485a47af830fa0ded0b07feebf042c0a6956dc71daa60b525067e96c220a
+767 2a.ciphertext 3881a4f1fc0fadc064bc27d3052800b5eb497e833b208c2cee381b466c9b1db8
+398 2b.ciphertext 78faf9d7a0aad25a9fa72f886c398bc0b684a389bc5624ab4514e93685157a93
+958 3a.ciphertext 0d0524b194961bdbe6fe200cfe983a9338abcca5adabb6776769387967a50711
+658 3b.ciphertext f75662b32e941df727ef411f522ad348016b82e40f957fd6f51eb1b972c7456d
+784 4a.ciphertext 44ae2388243a1782045b0d105612696bf3505517aa7a64f84c7b890e311aa54b
+798 4b.ciphertext d3c54580f2008f81f3a9d2bbc46ef861da192a5c9828ff79807a02dc20b5f3cb
+1191 5a.ciphertext e2bb31d68c7d3359c28f28dabe31ca679f8128903fd91fddc0eceb49483ef169
+994 5b.ciphertext b8087115c18209060ba9e0ce1032a9593fdeabbb55a86507c634b64c62a7c290
+1168 6a.ciphertext b7718e6b9e2ee029f7987178f702aad2e829d5f96d17a0e48b4365de4f5f1f6b
+634 6b.ciphertext 6049395e22af4f76540970c90faf301cf2999cefbc008a651ab36fe413e8aedc
+1650 7a.ciphertext 8a856dc907c04dea27d7d12f530c1c3e11dff6b51fb593bea10a8d68e0240cf6
+988 7b.ciphertext cfb66667a8011226be0be7c98e9deb7efa02e9a53cad67743baf166c20136ada
+1391 8a.ciphertext ac2b18d13ef44be0fb233d2455c51897b4df59491bbdd23ef82fbd9490bc86b1
+7001 8b.ciphertext 8d7e366e8fbb5766717481eeec77b089d3e8f9e708ac198d56176cb0882a9472
+3882 2014-challenge1.ipynb 07715f100d97af32ad5a13b56ade2f5753e17e32404e2eda0dcb9634736298f5
+28071 2014-challenge2.ipynb 1535404ae5a412160c82d19e38f7069a2eaca600bd433e77877bd13e14929e6b
+29190 2014-challenge3.ipynb 1454c5e5014eac93c42e88611f3f6b3f014bf70a8e9d8e87ef4725f8d12a27b7
+32758 2014-challenge4.ipynb 1794b0b2c6fd4630f6d9ffe15ffdad52d04af23082eddc920ec02ba4740032e4
+23322 2014-challenge5.ipynb fb3bb531c62ed943528715cc19e800293e3cd4a176ce3a3fe01e7e585386907e
+40307 2014-challenge6.ipynb 5085a4ae2a562c87983cbff817ac89826973341551980563ae0c77ab747a5dff
+44472 2014-challenge7.ipynb 9800d39c881f22f67f1182f6ca73bbf40a123d0deb598a6009f545f421955241
+188080 2014-challenge8.ipynb c59bcfbb39e48e6e151cc0c86fe48add67844954cf3c65d560bbda0c972a8376
+ 2015/
+874 1a.ciphertext 5d0d71f24522e1c05127feb601bf8dc82566f3d2795fb51c4a60e22d900bb5eb
+394 1b.ciphertext a35e8265aea45ab5f7c5eb141e5e65c85ecc24c7d87f3e8197dfe6795a7d3226
+1193 2a.ciphertext 412db1381dcb01f858bf848e48ada16aa4603cbb348c1f092ae39b06d2efa5f9
+544 2b.ciphertext 5ff59d7cff1c4d27dee6414769bdbcfb0b0ab9c5931e772bf9f6442eeb9b6855
+898 3a.ciphertext 5a9f89002db8520dbad882565a0130d3a462ed967e9cebeca828e9f727a267c4
+549 3b.ciphertext efe393ad39849468a04bec4a49d259074fa60c54aa3eac832af5f858fcd06bcd
+917 4a.ciphertext 9c30e8793c161f3f0e1ef0aeb39c854166f9e8e84c149541c9d71d07ff3d37bd
+1032 4b.ciphertext e99143388a6eacb81442ef594bdb0820992eaf89f3a0def9250b4b60ce7ef04b
+1576 5a.ciphertext 73011f47f1412903e23a718da397ed3ba3a0306e72299d5abf401d93fc451205
+840 5b.ciphertext 69f3e64a2fa925a84f1f0b09b30bf901564436519f1c8b515121219fcd544638
+2114 6a.ciphertext 64834f6db2055a3c1944d0c22e635fc411cb210ca71a7d737008f42de4febab9
+867 6b.ciphertext abc25188099a927323379ff6e3abad85312aca3cd01338848437c654f6ee5f72
+3620 2015-challenge1.ipynb 2ab544f48c22a3a2e665b03ae094ac2de04aee8bdb37366209276a937d248d6a
+4092 2015-challenge2.ipynb 58c2aeca6c73a8fef71d0cc8321469358803f392c02fd44631dd0b25c2755f4a
+3987 2015-challenge3.ipynb dfec26ba881c7ad0af54d072aeba4d08162661e863266936963130548ff86b65
+8030 2015-challenge4.ipynb f77ead0eae7fcd67039d500a31ad1748a4df115905adecd0e93e56f72bbdcfa0
+5039 2015-challenge5.ipynb b0c28829c329d7a2752f4991006e6d78a10415d7609b893b80b3bdb788d6e533
+14079 2015-challenge6.ipynb 7bd1dcff4b764d75e002622ce6a4cc3c00625aa311ef886e5a436822660c565c
+18025 LICENSE a01259a1b522cf0de95824f9860613b453153eebac468e96196d5d7dba84786c
+7999 LJ!-Qt!-Fghxft-dferts%3B-hsjeukaxxn-sfedw.ipynb 429b6c6995096ff19c28a5ee342bef8ea4774200bdf9aaf6268de3cb8b28df28
+61 README.md 277247b410300ee16477b12ca54ad878d81c8061f6134e2e1cadccaf299de3a3
+469 affine_break_parameter_trials.csv 1a9d635d0af2f41fc6f1e83ae87d6372034259321ba288a11fb024e98ed52f4f|dd9c840434de596a30c84e79de26a9824b36c217a84876c2aab0579b76999735
+6488666 big.txt fa066c7d40f0f201ac4144e652aa62430e58a6b3805ec70650f678da5804e87b
+16832 cadenus-ciphers.ipynb 50e49b3ec5e6440b86fe13472b9f4ab9e133e5665c7280b2abf7a6b57bb8a89a
+514 caesar_break_parameter_trials.csv 6586223bcc00e06e3ff79d107202d6c29ef962a6dd544add00610c5907407e85|1cb7cc77831ef3ef4f994a9ea77e82a841b38acdde45ede9cedbe7a54f1e8e46
+41380 cipher.py 39536843924325b9acdc6aad387c55240fc12a9c23caeaee6ef67e0d7b94e95c
+28349 cipherbreak.py 2a4cdf810302d5645064e460a4409f32173b02fc4e7c7ce0a84d1458a04007bc
+11564 count_1edit.txt 3bf563ef032ba151ec1a4b2d1f33f50c49f4a47e4dc5b8152394bc5b63f57655|b5fbacbebcc25f5011ce97bc9ac967a09c50eef28b4aa98379a6c426df6ac08b
+223 count_1l.txt 335388d457db6ef1da05d8b55ab879e9be7d4e021085efc8d9dfeac0e4a79aa9
+4956241 count_1w.txt 51df159fd3de12b20e403c108f526e96dbd723d9cabdd5f17955cdc16059e690
+9270 count_2l.txt bc2895f800189070c193907cd8bca956ad65fed2e25c14300d4bb5b6a243ba99
+5566017 count_2w.txt 781c0596c3eea532d30bef9f3dba1d5137d652f00376260822c761a7584dfb8c
+220441 count_3l.txt 8702c95530c7d0d182ab94dc03ed7681fcf969819f6db011a58de31411dc6365
+320508 count_big.txt 3ba257fba1934bd138413d8274e79b56c5992431a27692fd562929aa43ec01a3
+3355 find_best_affine_break_parameters.py 6b11004bb93ac26ec7d42d33504e758edbaf9d55365ae2e4ca2fca7589263f25
+3027 find_best_caesar_break_parameters.py 0347d80309179d937a88fd1c8684490a513ccd086366c5a0dd55b8a2fe5c565f
+1236 find_wikipedia_titles.py f040bf855dfec7fff9d8e5eba2fb509179bc53bc02a20b26b7fc61fef983aa45
+37128 hill-ciphers.ipynb ce802c2be807b4565858b568d3a82c65a3957aa625344189f8f2a055237b3fdd
+5516 language_models.py 9f6c60892b385a8443202edda95074eb28e2b66981e25e27f4153b887e2c9ee3
+368 lettercount.py ed36497d62cf75b91994055e4a18848b2fabe5ce793cd76a77fabfc94d81d4f3
+592 make-cracking-dictionary.py 71791e64e4853cd9ca292cb436bbe8c72dd60f509811174df93ed2067683d5c1
+7077 norms.py a657a36c1741e6f3a513386b318fcc99e6b11f98ec64a48284b47462ff2acf30
+8411 norms.pyc ac7a18765c7bcc27e406d8f38d943408097b3384a271502185d53482e6ec0da7|002b186e716cec64869a00bd2d72e16614931e696daa0cf3529d634a0f270e42
+112847 plot-caesar-parameters.ipynb 639459b4b2e434f9f0852c012ed9a8a8d87bd1cb6c2d65ca5abfdb0e42c3dea6
+23863 railfence-experiment-1.ipynb e34a61cef19b3249a3d6d731fe054769c02233b0be661161ebf45bada3b7b97b
+18628 railfence-experiment-2.ipynb 8c4d90c1c934b764deba0956bb4be81868e463789dc8fe02e5621ab3a95c0889
+881 segment.py 94d257cc6151861ef3d3033c4d2d03d8c121b0a982344abf400f65fd507fed28
+4538523 shakespeare.txt 6f9c770efced5c3d87efa6197cd3091b982341372e36c6357f865df91ddecde6
+451530 spell-errors.txt a4abe6ce6c24280f9a8d0485cbf78ddd2e58279ca01293692630a08ba4b13407
+69351 unknown-word-probability-investigation.ipynb 8a9cd7163f10bf2bfb3e286445eddcfc953f80abfdef4e29dac27617a53c3d41
+3291641 war-and-peace.txt 3ed0f41cfdf660846878943bad5b9d575bcae1e4a92ee9a7f43d3c9dba2af344|6799e48d3fd0a6f4c40b9951ec86de6da81f0b9cd36e413490ac511542ca54d3
+868202 words.txt aa77abbcba3c6dee1306d93adcedc2b2ccb8a4e0344a39d0676732ff58ebd5e5
+868384 words_2013.txt 57faa4841fe28dd82a5da4488b6381c194df6e1ecc04e61fb9f60e842bbca18c
```
#### Ignore