Updated for challenge 9
[cipher-tools.git] / 2019 / 2019-challenge1.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 1,
6 "metadata": {},
7 "outputs": [],
8 "source": [
9 "import os,sys,inspect\n",
10 "currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))\n",
11 "parentdir = os.path.dirname(currentdir)\n",
12 "sys.path.insert(0,parentdir) "
13 ]
14 },
15 {
16 "cell_type": "code",
17 "execution_count": 2,
18 "metadata": {},
19 "outputs": [],
20 "source": [
21 "from cipher.caesar import *\n",
22 "from support.text_prettify import *"
23 ]
24 },
25 {
26 "cell_type": "code",
27 "execution_count": 5,
28 "metadata": {},
29 "outputs": [],
30 "source": [
31 "c1a = open('1a.ciphertext').read()\n",
32 "c1b = open('1b.ciphertext').read()"
33 ]
34 },
35 {
36 "cell_type": "code",
37 "execution_count": 6,
38 "metadata": {},
39 "outputs": [
40 {
41 "name": "stdout",
42 "output_type": "stream",
43 "text": [
44 "HARRY, I AM NOT SURE IF YOU WERE COPIED IN TO THE MEMO ABOUT RECENT EVENTS BUT HERE IS A SUMMARY.\n",
45 "TWO DAYS AGO, AN OFF-DUTY GUIDANCE OFFICER ALERTED MISSION CONTROL TO A POTENTIAL PROBLEM WITH THE APOLLO FLIGHT. THE PLANNED DESCENT TRAJECTORY APPEARED TO BE RUNNING ON A COLLISION COURSE WITH THE SOVIET LUNAR ORBITER LUNA-FIFTEEN, AND THERE WAS AT LEAST THE POTENTIAL FOR THIS TO CAUSE AN ABORT, OR, WORSE AN ACCIDENT. BORMAN TELEXED MOSCOW AND ASKED FOR A VARIATION OF ORBIT AND, PRETTY MUCH TO EVERYONE'S SURPRISE, THEY AGREED. AS A RESULT, THE MISSION IS PROCEEDING AS PLANNED.\n",
46 "NO ONE IS REALLY SURE WHY THE SOVIETS AGREED TO HELP, GIVEN THAT ABORTING IT WOULD HAVE PUT EGG ON OUR FACES, BUT THAT QUESTION IS ONE FOR THE ANALYSTS AT LANGLEY. A MORE IMMEDIATE CONCERN FOR ME WAS WHY THE PROBLEM HADN'T BEEN SPOTTED EARLIER. FRANK TOLD ME THAT IF HE HAD KNOWN IN TIME THEN WE COULD HAVE PLANNED THE ORBIT AND DESCENT TO AVOID THE ISSUE IN THE FIRST PLACE.\n",
47 "OF COURSE, MISTAKES DO HAPPEN, BUT I CHECKED WITH THE TEAM AND ONE OF THEM RECALLED RUNNING SIMULATIONS ON THIS LAST MONTH. SHE SAID SHE HAD FLAGGED THE ISSUE FOR THE ATTENTION OF FLIGHT CONTROL, BUT NO-ONE THERE REMEMBERED SEEING IT. I ASKED TO SEE THE FILE BUT IT LOOKS LIKE A BUNCH OF GARBAGE, WHICH, I ASSUME, IS WHY NO-ONE RESPONDED TO IT. THE COMPUTER TEAM DON'T RECOGNISE THE FORMAT AND THEY SUGGESTED THAT IT WAS PROBABLY JUST A BUG IN THE REPORT WRITING SOFTWARE, BUT NO-ONE RECALLS SEEING ANYTHING LIKE IT BEFORE AND IT IS WORRYING THAT THIS COULD HAVE BEEN SO SERIOUS. COULD YOU TAKE A LOOK AT THE FILE AND LET ME KNOW WHAT YOU SEE?\n",
48 "MEG.\n",
49 "PS WHEN YOU ARE PLANNING TO GET BACK HERE FROM HUNTSVILLE?\n",
50 "\n"
51 ]
52 },
53 {
54 "data": {
55 "text/plain": [
56 "1666"
57 ]
58 },
59 "execution_count": 6,
60 "metadata": {},
61 "output_type": "execute_result"
62 }
63 ],
64 "source": [
65 "key_a, score_a = caesar_break(c1a)\n",
66 "print(caesar_decipher(c1a, key_a))\n",
67 "open('1a.plaintext', 'w').write(caesar_decipher(c1a, key_a))"
68 ]
69 },
70 {
71 "cell_type": "code",
72 "execution_count": 7,
73 "metadata": {},
74 "outputs": [
75 {
76 "name": "stdout",
77 "output_type": "stream",
78 "text": [
79 "MEMO\n",
80 "FROM: TRAJECTORY TEAM APOLLO GUIDANCE\n",
81 "TO: GUIDANCE OFFICER\n",
82 "SUBJECT: HAZARDS IN LUNAR ORBIT\n",
83 "RADAR TRACKING HAS SHOWN THAT THE SOVIET LUNAR ORBITER LUNA FIFTEEN IS POTENTIALLY ON A COLLISION COURSE WITH THE SCHEDULED DESCENT PATH FOR EAGLE. THE CURRENT RISK IS LOW TO MEDIUM, BUT ACTION SHOULD BE TAKEN TO MINIMISE OR ELIMINATE IT.\n",
84 "THE CURRENT RANGE OF OPTIONS INCLUDES:\n",
85 "RE-CALCULATION OF ALTERNATIVE DESCENT PATHS TO THE PRIMARY AND SECONDARY LANDING TARGETS.\n",
86 "RE-DESIGNATION OF LANDING SITES WHICH USE DESCENT PATHS WHICH DO NOT INTERSECT THE ORBITER PATH.\n",
87 "ABORT MISSION\n",
88 "THE FIRST AND SECOND OPTIONS CARRY THE ADDITIONAL RISKS ASSOCIATED WITH ANY SIGNIFICANT LATE STAGE CHANGE TO THE MISSION PLAN. THE THIRD OPTION CARRIES THE REAL THREAT THAT WE WILL FAIL TO FULFIL THE PRIMARY OBJECTIVE OF A MANNED LANDING BEFORE THE END OF THE YEAR.\n",
89 "ONE ALTERNATIVE TO THESE OPTIONS WOULD BE TO REQUEST FURTHER INFORMATION FROM THE SOVIETS TO CLARIFY THE MISSION PLAN FOR THEIR ORBITER. IT IS POSSIBLE THAT THEY ARE ALREADY PLANNING TO MODIFY ITS TRAJECTORY AND THAT NO FURTHER ACTION WILL BE NEEDED ON OUR PART, BUT CHANGES TO THE ORBIT COULD INCREASE THE RISK AND WE MIGHT LOSE TRACKING REDUCING THE LIKELIHOOD THAT WE CAN MANAGE THE SITUATION.\n",
90 "\n"
91 ]
92 },
93 {
94 "data": {
95 "text/plain": [
96 "1238"
97 ]
98 },
99 "execution_count": 7,
100 "metadata": {},
101 "output_type": "execute_result"
102 }
103 ],
104 "source": [
105 "key_b, score_b = caesar_break(c1b)\n",
106 "print(caesar_decipher(c1b, key_b))\n",
107 "open('1b.plaintext', 'w').write(caesar_decipher(c1b, key_b))"
108 ]
109 },
110 {
111 "cell_type": "code",
112 "execution_count": 8,
113 "metadata": {},
114 "outputs": [
115 {
116 "data": {
117 "text/plain": [
118 "(16, 13)"
119 ]
120 },
121 "execution_count": 8,
122 "metadata": {},
123 "output_type": "execute_result"
124 }
125 ],
126 "source": [
127 "key_a, key_b"
128 ]
129 },
130 {
131 "cell_type": "code",
132 "execution_count": null,
133 "metadata": {},
134 "outputs": [],
135 "source": []
136 }
137 ],
138 "metadata": {
139 "kernelspec": {
140 "display_name": "Python 3",
141 "language": "python",
142 "name": "python3"
143 },
144 "language_info": {
145 "codemirror_mode": {
146 "name": "ipython",
147 "version": 3
148 },
149 "file_extension": ".py",
150 "mimetype": "text/x-python",
151 "name": "python",
152 "nbconvert_exporter": "python",
153 "pygments_lexer": "ipython3",
154 "version": "3.6.8"
155 }
156 },
157 "nbformat": 4,
158 "nbformat_minor": 2
159 }