Done challenge 3
[cipher-tools.git] / Untitled.ipynb
index 0a8a3e0b4f9d865154fa9fcdb6927cd4f126e672..023ad1180d381a33dd19e1c351555557ef524457 100644 (file)
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 2,
+   "metadata": {},
    "outputs": [],
    "source": [
-    "from enigma import *"
+    "from support.utilities import *\n",
+    "from support.language_models import *\n",
+    "from support.norms import *\n",
+    "from cipher.keyword_cipher import *"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 3,
+   "metadata": {},
    "outputs": [],
    "source": [
-    "e31 = Enigma(reflector_b_spec, \n",
-    "                 wheel_i_spec, wheel_i_pegs,\n",
-    "                 wheel_v_spec, wheel_v_pegs,\n",
-    "                 wheel_iii_spec, wheel_iii_pegs,\n",
-    "                 6, 20, 24, \n",
-    "                    'ua pf rq so ni ey bg hl tx zj')\n"
+    "def keyword_encipher_p(message, keyword, wrap_alphabet=KeywordWrapAlphabet.from_a):\n",
+    "    cipher_alphabet = keyword_cipher_alphabet_of(keyword, wrap_alphabet)\n",
+    "    cipher_translation = {p: c for p, c in zip(string.ascii_lowercase, cipher_alphabet)}\n",
+    "    return cat(keyword_encipher_letter(letter, cipher_translation) for letter in message)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 8,
+   "metadata": {},
    "outputs": [],
    "source": [
-    "def advance(e, n):\n",
-    "    def print_state(e):\n",
-    "        print('        self.assertEqual(self.enigma31.wheel_positions, {})'.format(e.wheel_positions))\n",
-    "        print(\"        self.assertEqual(cat(self.enigma31.wheel_positions_l), '{}')\".format(cat(e.wheel_positions_l)))\n",
-    "        print('        self.assertEqual(self.enigma31.peg_positions, {})'.format(e.peg_positions))\n",
-    "        print()\n",
-    "              \n",
-    "        \n",
-    "    \n",
-    "    print_state(e)\n",
-    "    for i in range(n):\n",
-    "        print('        self.engima31.advance()')\n",
-    "        e.advance()\n",
-    "        print_state(e)\n"
+    "def keyword_decipher_p(message, keyword, wrap_alphabet=KeywordWrapAlphabet.from_a):\n",
+    "    cipher_alphabet = keyword_cipher_alphabet_of(keyword, wrap_alphabet)\n",
+    "    plaintext_translation = {c: p for p, c in zip(string.ascii_lowercase, cipher_alphabet)}\n",
+    "    return cat(keyword_encipher_letter(letter, plaintext_translation) for letter in message)"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 4,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def keyword_encipher_letter(letter, cipher_translation):\n",
+    "    if letter in cipher_translation:\n",
+    "        return cipher_translation[letter]\n",
+    "    else:\n",
+    "        return letter"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
    "outputs": [
     {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "        self.assertEqual(self.enigma31.wheel_positions, (21, 5, 22))\n",
-      "        self.assertEqual(cat(self.enigma31.wheel_positions_l), 'ayt')\n",
-      "        self.assertEqual(self.enigma31.peg_positions, ([16], [1], [2]))\n",
-      "\n",
-      "        self.engima31.advance()\n",
-      "        self.assertEqual(self.enigma31.wheel_positions, (21, 5, 23))\n",
-      "        self.assertEqual(cat(self.enigma31.wheel_positions_l), 'ayu')\n",
-      "        self.assertEqual(self.enigma31.peg_positions, ([16], [1], [1]))\n",
-      "\n",
-      "        self.engima31.advance()\n",
-      "        self.assertEqual(self.enigma31.wheel_positions, (21, 5, 24))\n",
-      "        self.assertEqual(cat(self.enigma31.wheel_positions_l), 'ayv')\n",
-      "        self.assertEqual(self.enigma31.peg_positions, ([16], [1], [0]))\n",
-      "\n",
-      "        self.engima31.advance()\n",
-      "        self.assertEqual(self.enigma31.wheel_positions, (21, 6, 25))\n",
-      "        self.assertEqual(cat(self.enigma31.wheel_positions_l), 'azw')\n",
-      "        self.assertEqual(self.enigma31.peg_positions, ([16], [0], [25]))\n",
-      "\n",
-      "        self.engima31.advance()\n",
-      "        self.assertEqual(self.enigma31.wheel_positions, (22, 7, 0))\n",
-      "        self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bax')\n",
-      "        self.assertEqual(self.enigma31.peg_positions, ([15], [25], [24]))\n",
-      "\n",
-      "        self.engima31.advance()\n",
-      "        self.assertEqual(self.enigma31.wheel_positions, (22, 7, 1))\n",
-      "        self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bay')\n",
-      "        self.assertEqual(self.enigma31.peg_positions, ([15], [25], [23]))\n",
-      "\n"
-     ]
+     "data": {
+      "text/plain": [
+       "'qopq hoppkdo'"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
     }
    ],
    "source": [
-    "e31.set_wheels('a', 'y', 't')\n",
-    "advance(e31, 5)"
+    "keyword_encipher('test message', 'keyword')"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 9,
+   "metadata": {},
    "outputs": [
     {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "        self.assertEqual(self.enigma31.wheel_positions, (21, 6, 21))\n",
-      "        self.assertEqual(cat(self.enigma31.wheel_positions_l), 'azs')\n",
-      "        self.assertEqual(self.enigma31.peg_positions, ([16], [0], [3]))\n",
-      "\n",
-      "        self.engima31.advance()\n",
-      "        self.assertEqual(self.enigma31.wheel_positions, (22, 7, 22))\n",
-      "        self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bat')\n",
-      "        self.assertEqual(self.enigma31.peg_positions, ([15], [25], [2]))\n",
-      "\n",
-      "        self.engima31.advance()\n",
-      "        self.assertEqual(self.enigma31.wheel_positions, (22, 7, 23))\n",
-      "        self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bau')\n",
-      "        self.assertEqual(self.enigma31.peg_positions, ([15], [25], [1]))\n",
-      "\n",
-      "        self.engima31.advance()\n",
-      "        self.assertEqual(self.enigma31.wheel_positions, (22, 7, 24))\n",
-      "        self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bav')\n",
-      "        self.assertEqual(self.enigma31.peg_positions, ([15], [25], [0]))\n",
-      "\n",
-      "        self.engima31.advance()\n",
-      "        self.assertEqual(self.enigma31.wheel_positions, (22, 8, 25))\n",
-      "        self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bbw')\n",
-      "        self.assertEqual(self.enigma31.peg_positions, ([15], [24], [25]))\n",
-      "\n",
-      "        self.engima31.advance()\n",
-      "        self.assertEqual(self.enigma31.wheel_positions, (22, 8, 0))\n",
-      "        self.assertEqual(cat(self.enigma31.wheel_positions_l), 'bbx')\n",
-      "        self.assertEqual(self.enigma31.peg_positions, ([15], [24], [24]))\n",
-      "\n"
-     ]
+     "data": {
+      "text/plain": [
+       "'qopq hoppkdo'"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
     }
    ],
    "source": [
-    "e31.set_wheels('a', 'z', 's')\n",
-    "advance(e31, 5)"
+    "keyword_encipher_p('test message', 'keyword')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'test message'"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "keyword_decipher_p('qopq hoppkdo', 'keyword')"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "metadata": {
-    "collapsed": true
-   },
+   "metadata": {},
    "outputs": [],
    "source": []
   }
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.5.1+"
+   "version": "3.4.5"
   }
  },
  "nbformat": 4,
- "nbformat_minor": 0
+ "nbformat_minor": 2
 }