Added tests for enigma machine and bombe
[cipher-training.git] / bombe.ipynb
index c340539c46ee1642bb80f01ac9ee08a8b0e1fed0..99770da11e6c9b203fb3b309c4ea06707ae77b9d 100644 (file)
@@ -2,7 +2,7 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 1,
    "metadata": {
     "collapsed": true
    },
     "collapsed": true
    },
    "outputs": [],
-   "source": [
-    "# wheel_i_spec = 'ekmflgdqvzntowyhxuspaibrcj'\n",
-    "# wheel_ii_spec = 'ajdksiruxblhwtmcqgznpyfvoe'\n",
-    "# wheel_iii_spec = 'bdfhjlcprtxvznyeiwgakmusqo'\n",
-    "# wheel_iv_spec = 'esovpzjayquirhxlnftgkdcmwb'\n",
-    "# wheel_v_spec = 'vzbrgityupsdnhlxawmjqofeck'\n",
-    "# wheel_vi_spec = 'jpgvoumfyqbenhzrdkasxlictw'\n",
-    "# wheel_vii_spec = 'nzjhgrcxmyswboufaivlpekqdt'\n",
-    "# wheel_viii_spec = 'fkqhtlxocbjspdzramewniuygv'\n",
-    "# beta_wheel_spec = 'leyjvcnixwpbqmdrtakzgfuhos'\n",
-    "# gamma_wheel_spec = 'fsokanuerhmbtiycwlqpzxvgjd'\n",
-    "\n",
-    "# wheel_i_pegs = ['q']\n",
-    "# wheel_ii_pegs = ['e']\n",
-    "# wheel_iii_pegs = ['v']\n",
-    "# wheel_iv_pegs = ['j']\n",
-    "# wheel_v_pegs = ['z']\n",
-    "# wheel_vi_pegs = ['z', 'm']\n",
-    "# wheel_vii_pegs = ['z', 'm']\n",
-    "# wheel_viii_pegs = ['z', 'm']\n",
-    "\n",
-    "# reflector_b_spec = 'ay br cu dh eq fs gl ip jx kn mo tz vw'\n",
-    "# reflector_c_spec = 'af bv cp dj ei go hy kr lz mx nw tq su'"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {
-    "collapsed": true
-   },
-   "outputs": [],
    "source": [
     "Signal = collections.namedtuple('Signal', ['bank', 'wire'])\n",
     "Connection = collections.namedtuple('Connection', ['banks', 'scrambler'])\n",
@@ -62,7 +30,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 4,
    "metadata": {
     "collapsed": true
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 5,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 804,
+   "execution_count": 6,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 805,
+   "execution_count": 7,
    "metadata": {
     "collapsed": true
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 806,
+   "execution_count": 8,
    "metadata": {
     "collapsed": false
    },
        "'opgndxcrwomnlnecjz'"
       ]
      },
-     "execution_count": 806,
+     "execution_count": 8,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 807,
+   "execution_count": 9,
    "metadata": {
     "collapsed": false
    },
        "'aas'"
       ]
      },
-     "execution_count": 807,
+     "execution_count": 9,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 808,
+   "execution_count": 10,
    "metadata": {
     "collapsed": false
    },
        " MenuIem(before='e', after='z', number=18)]"
       ]
      },
-     "execution_count": 808,
+     "execution_count": 10,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 809,
+   "execution_count": 11,
    "metadata": {
     "collapsed": true
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 810,
+   "execution_count": 12,
    "metadata": {
     "collapsed": false
    },
        " MenuIem(before='e', after='z', number=18)]"
       ]
      },
-     "execution_count": 810,
+     "execution_count": 12,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 811,
+   "execution_count": 13,
    "metadata": {
     "collapsed": false
    },
        "'s'"
       ]
      },
-     "execution_count": 811,
+     "execution_count": 13,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 812,
+   "execution_count": 14,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 813,
+   "execution_count": 15,
    "metadata": {
     "collapsed": false
    },
        "18"
       ]
      },
-     "execution_count": 813,
+     "execution_count": 15,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 814,
+   "execution_count": 16,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 815,
+   "execution_count": 17,
    "metadata": {
     "collapsed": false
    },
        "False"
       ]
      },
-     "execution_count": 815,
+     "execution_count": 17,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 816,
+   "execution_count": 18,
    "metadata": {
     "collapsed": false
    },
        " 'z': True}"
       ]
      },
-     "execution_count": 816,
+     "execution_count": 18,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 817,
+   "execution_count": 19,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 818,
+   "execution_count": 20,
    "metadata": {
     "collapsed": false
    },
        "('a', 'a', 'a')"
       ]
      },
-     "execution_count": 818,
+     "execution_count": 20,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 819,
+   "execution_count": 21,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 820,
+   "execution_count": 22,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 821,
+   "execution_count": 23,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 822,
+   "execution_count": 24,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 823,
+   "execution_count": 25,
    "metadata": {
     "collapsed": false
    },
        "1"
       ]
      },
-     "execution_count": 823,
+     "execution_count": 25,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 824,
+   "execution_count": 26,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 825,
+   "execution_count": 27,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 826,
+   "execution_count": 28,
    "metadata": {
     "collapsed": false
    },
        "('a', 'a', 'b')"
       ]
      },
-     "execution_count": 826,
+     "execution_count": 28,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 827,
+   "execution_count": 29,
    "metadata": {
     "collapsed": false
    },
        "False"
       ]
      },
-     "execution_count": 827,
+     "execution_count": 29,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 828,
+   "execution_count": 30,
    "metadata": {
     "collapsed": false
    },
        "('p', 'p', 'p')"
       ]
      },
-     "execution_count": 828,
+     "execution_count": 30,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 829,
+   "execution_count": 31,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 830,
+   "execution_count": 32,
    "metadata": {
     "collapsed": false
    },
        "17576"
       ]
      },
-     "execution_count": 830,
+     "execution_count": 32,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 831,
+   "execution_count": 33,
    "metadata": {
     "collapsed": false
    },
        "(('a', 'a', 'b'), True)"
       ]
      },
-     "execution_count": 831,
+     "execution_count": 33,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 832,
+   "execution_count": 34,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 833,
+   "execution_count": 35,
    "metadata": {
     "collapsed": false
    },
        "[('a', 'a', 'b')]"
       ]
      },
-     "execution_count": 833,
+     "execution_count": 35,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 857,
+   "execution_count": 36,
    "metadata": {
     "collapsed": true
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 835,
+   "execution_count": 37,
    "metadata": {
     "collapsed": false
    },
        "[('a', 'a', 'b')]"
       ]
      },
-     "execution_count": 835,
+     "execution_count": 37,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 836,
+   "execution_count": 38,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 837,
+   "execution_count": 39,
    "metadata": {
     "collapsed": false
    },
        "('e', 'l', 'e')"
       ]
      },
-     "execution_count": 837,
+     "execution_count": 39,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 838,
+   "execution_count": 40,
    "metadata": {
     "collapsed": false
    },
        "'dhnpforeeimgg'"
       ]
      },
-     "execution_count": 838,
+     "execution_count": 40,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 839,
+   "execution_count": 41,
    "metadata": {
     "collapsed": false
    },
        "('j', 'e', 'o')"
       ]
      },
-     "execution_count": 839,
+     "execution_count": 41,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 840,
+   "execution_count": 42,
    "metadata": {
     "collapsed": false
    },
        " MenuIem(before='t', after='g', number=13)]"
       ]
      },
-     "execution_count": 840,
+     "execution_count": 42,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 841,
+   "execution_count": 43,
    "metadata": {
     "collapsed": false,
     "scrolled": true
        " ('z', 'z', 'k')]"
       ]
      },
-     "execution_count": 841,
+     "execution_count": 43,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 842,
+   "execution_count": 44,
    "metadata": {
     "collapsed": false
    },
        "62"
       ]
      },
-     "execution_count": 842,
+     "execution_count": 44,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 843,
+   "execution_count": 45,
    "metadata": {
     "collapsed": false,
     "scrolled": true
        " ('y', 'n', 'c')]"
       ]
      },
-     "execution_count": 843,
+     "execution_count": 45,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 858,
+   "execution_count": 46,
    "metadata": {
     "collapsed": false
    },
        " ('y', 'n', 'c')]"
       ]
      },
-     "execution_count": 858,
+     "execution_count": 46,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 844,
+   "execution_count": 47,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 845,
+   "execution_count": 48,
    "metadata": {
     "collapsed": false
    },
        "13"
       ]
      },
-     "execution_count": 845,
+     "execution_count": 48,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 846,
+   "execution_count": 49,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 847,
+   "execution_count": 50,
    "metadata": {
     "collapsed": false
    },
        "Signal(bank='e', wire='e')"
       ]
      },
-     "execution_count": 847,
+     "execution_count": 50,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 848,
+   "execution_count": 51,
    "metadata": {
     "collapsed": false
    },
        "True"
       ]
      },
-     "execution_count": 848,
+     "execution_count": 51,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 849,
+   "execution_count": 52,
    "metadata": {
     "collapsed": false
    },
        "True"
       ]
      },
-     "execution_count": 849,
+     "execution_count": 52,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 850,
+   "execution_count": 53,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 851,
+   "execution_count": 54,
    "metadata": {
     "collapsed": false
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 852,
+   "execution_count": 55,
    "metadata": {
     "collapsed": false
    },
     {
      "data": {
       "text/plain": [
-       "{frozenset({'e', 'y'}),\n",
+       "{frozenset({'b', 'g'}),\n",
+       " frozenset({'e', 'y'}),\n",
        " frozenset({'t', 'x'}),\n",
-       " frozenset({'i', 'n'}),\n",
        " frozenset({'m'}),\n",
-       " frozenset({'b', 'g'}),\n",
+       " frozenset({'i', 'n'}),\n",
        " frozenset({'f', 'p'})}"
       ]
      },
-     "execution_count": 852,
+     "execution_count": 55,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 853,
+   "execution_count": 56,
    "metadata": {
     "collapsed": false
    },
        "True"
       ]
      },
-     "execution_count": 853,
+     "execution_count": 56,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 854,
+   "execution_count": 57,
    "metadata": {
     "collapsed": false
    },
        " frozenset({2, 3}))"
       ]
      },
-     "execution_count": 854,
+     "execution_count": 57,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 855,
+   "execution_count": 58,
    "metadata": {
     "collapsed": false
    },
        "False"
       ]
      },
-     "execution_count": 855,
+     "execution_count": 58,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 856,
+   "execution_count": 59,
    "metadata": {
     "collapsed": false
    },
        "False"
       ]
      },
-     "execution_count": 856,
+     "execution_count": 59,
      "metadata": {},
      "output_type": "execute_result"
     }