X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=bombe.ipynb;h=93e0ccbfcd5ac4996251c5eb08db7e6deadd969b;hb=f817fcd4b8d45e4c95d71853278e28fb2d5c6f54;hp=99770da11e6c9b203fb3b309c4ea06707ae77b9d;hpb=a718663ac5643f2ee292a6b5784aa4d4ea95ee17;p=cipher-tools.git diff --git a/bombe.ipynb b/bombe.ipynb index 99770da..93e0ccb 100644 --- a/bombe.ipynb +++ b/bombe.ipynb @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": { "collapsed": true }, @@ -75,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -116,6 +116,7 @@ " self.connections += [Connection([bank_before, bank_after], scrambler)]\n", " \n", " def read_menu(self, menu):\n", + " self.connections = []\n", " for item in menu:\n", " scrambler = Scrambler(self.wheel1_spec, self.wheel2_spec, self.wheel3_spec,\n", " self.reflector_spec,\n", @@ -199,7 +200,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 32, "metadata": { "collapsed": false }, @@ -211,7 +212,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 33, "metadata": { "collapsed": true }, @@ -227,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 34, "metadata": { "collapsed": false }, @@ -238,7 +239,7 @@ "'opgndxcrwomnlnecjz'" ] }, - "execution_count": 8, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -252,7 +253,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -263,7 +264,7 @@ "'aas'" ] }, - "execution_count": 9, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -274,7 +275,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 36, "metadata": { "collapsed": false }, @@ -302,7 +303,7 @@ " MenuIem(before='e', after='z', number=18)]" ] }, - "execution_count": 10, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -314,7 +315,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 37, "metadata": { "collapsed": true }, @@ -327,7 +328,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 38, "metadata": { "collapsed": false }, @@ -355,7 +356,7 @@ " MenuIem(before='e', after='z', number=18)]" ] }, - "execution_count": 12, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -366,7 +367,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 39, "metadata": { "collapsed": false }, @@ -377,7 +378,7 @@ "'s'" ] }, - "execution_count": 13, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -388,7 +389,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 42, "metadata": { "collapsed": false }, @@ -399,7 +400,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 43, "metadata": { "collapsed": false }, @@ -410,7 +411,7 @@ "18" ] }, - "execution_count": 15, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -421,7 +422,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -430,6 +431,24 @@ "name": "stdout", "output_type": "stream", "text": [ + "['t', 'o'] aaa\n", + "['h', 'p'] aab\n", + "['i', 'g'] aac\n", + "['s', 'n'] aad\n", + "['i', 'd'] aae\n", + "['s', 'x'] aaf\n", + "['a', 'c'] aag\n", + "['t', 'r'] aah\n", + "['e', 'w'] aai\n", + "['s', 'o'] aaj\n", + "['t', 'm'] aak\n", + "['m', 'n'] aal\n", + "['e', 'l'] aam\n", + "['s', 'n'] aan\n", + "['s', 'e'] aao\n", + "['a', 'c'] aap\n", + "['g', 'j'] aaq\n", + "['e', 'z'] aar\n", "['t', 'o'] aaa\n", "['h', 'p'] aab\n", "['i', 'g'] aac\n", @@ -458,7 +477,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 44, "metadata": { "collapsed": false }, @@ -466,10 +485,54 @@ { "data": { "text/plain": [ - "False" + "'ot:hp:gi:ns:di:sx:ac:rt:ew:os:mt:mn:el:ns:es:ac:gj:ez'" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "':'.join(cat(sorted(c.banks)) for c in bombe.connections)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'aaa:aab:aac:aad:aae:aaf:aag:aah:aai:aaj:aak:aal:aam:aan:aao:aap:aaq:aar'" ] }, - "execution_count": 17, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "':'.join(cat(c.scrambler.wheel_positions_l) for c in bombe.connections)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } @@ -480,7 +543,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 57, "metadata": { "collapsed": false }, @@ -488,35 +551,35 @@ { "data": { "text/plain": [ - "{'a': True,\n", - " 'b': True,\n", - " 'c': True,\n", - " 'd': True,\n", - " 'e': True,\n", - " 'f': True,\n", - " 'g': True,\n", - " 'h': True,\n", - " 'i': True,\n", - " 'j': True,\n", - " 'k': True,\n", - " 'l': True,\n", - " 'm': True,\n", - " 'n': True,\n", - " 'o': True,\n", - " 'p': True,\n", - " 'q': True,\n", - " 'r': True,\n", - " 's': True,\n", + "{'a': False,\n", + " 'b': False,\n", + " 'c': False,\n", + " 'd': False,\n", + " 'e': False,\n", + " 'f': False,\n", + " 'g': False,\n", + " 'h': False,\n", + " 'i': False,\n", + " 'j': False,\n", + " 'k': False,\n", + " 'l': False,\n", + " 'm': False,\n", + " 'n': False,\n", + " 'o': False,\n", + " 'p': False,\n", + " 'q': False,\n", + " 'r': False,\n", + " 's': False,\n", " 't': True,\n", - " 'u': True,\n", - " 'v': True,\n", - " 'w': True,\n", - " 'x': True,\n", - " 'y': True,\n", - " 'z': True}" + " 'u': False,\n", + " 'v': False,\n", + " 'w': False,\n", + " 'x': False,\n", + " 'y': False,\n", + " 'z': False}" ] }, - "execution_count": 18, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } @@ -527,7 +590,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 48, "metadata": { "collapsed": false }, @@ -578,7 +641,58 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 49, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a : abcdefghijklmnopqrstuvwxyz\n", + "b : a.cde.ghij.lmnop.rst..wx.z\n", + "c : abcdefghijklmnopqrstuvwxyz\n", + "d : abcdefghijklmnopqrstuvwx.z\n", + "e : abcdefghijklmnopqrstuvwxyz\n", + "f : a.cde.ghij.lmnop.rst..wx.z\n", + "g : abcdefghijklmnopqrst.vwxyz\n", + "h : abcdefghijklmnopqrstuvwxyz\n", + "i : abcdefghijklmnopqrstu.wxyz\n", + "j : abcdefghi.klmnopqrstuvwxyz\n", + "k : a.cde.ghij.lmnop.rst..wx.z\n", + "l : abcdefghijklmnopqrstuvwxyz\n", + "m : abcdefghijklmnopqrstuvwxyz\n", + "n : abcdefghijklmnopqrstuvwxyz\n", + "o : abcdefghijklmnopqrstuvwxyz\n", + "p : abcdefghijklmnopqrstuvwxyz\n", + "q : a.cde.ghij.lmnop.rst..wx.z\n", + "r : abcdefghijklmnopqrstuvwxyz\n", + "s : abcdefghijklmnopqrstuvwxyz\n", + "t : abcdefghijklmnopqrstuvwxyz\n", + "u : a.cde..hij.lmnop.rst..wx.z\n", + "v : a.cde.gh.j.lmnop.rst..wx.z\n", + "w : abcdefghijklmnopqrstuvwxyz\n", + "x : abcdefghijklmnopqrstuvwxyz\n", + "y : a.c.e.ghij.lmnop.rst..wx.z\n", + "z : abcdefghijklmnopqrstuvwxyz\n" + ] + } + ], + "source": [ + "for b in sorted(bombe.banks):\n", + " print(b, ': ', end='')\n", + " for w in sorted(bombe.banks[b]):\n", + " if bombe.banks[b][w]:\n", + " print(w, end='')\n", + " else:\n", + " print('.', end='')\n", + " print('')" + ] + }, + { + "cell_type": "code", + "execution_count": 50, "metadata": { "collapsed": false }, @@ -589,7 +703,7 @@ "('a', 'a', 'a')" ] }, - "execution_count": 20, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -600,7 +714,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 51, "metadata": { "collapsed": false }, @@ -638,7 +752,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 52, "metadata": { "collapsed": false }, @@ -650,7 +764,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 53, "metadata": { "collapsed": false }, @@ -704,7 +818,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 54, "metadata": { "collapsed": false }, @@ -758,7 +872,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 55, "metadata": { "collapsed": false }, @@ -769,7 +883,7 @@ "1" ] }, - "execution_count": 25, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } @@ -780,7 +894,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -793,7 +907,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -806,7 +920,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -817,7 +931,7 @@ "('a', 'a', 'b')" ] }, - "execution_count": 28, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -828,7 +942,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -839,7 +953,7 @@ "False" ] }, - "execution_count": 29, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -850,7 +964,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": { "collapsed": false }, @@ -861,7 +975,7 @@ "('p', 'p', 'p')" ] }, - "execution_count": 30, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -872,7 +986,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": { "collapsed": false }, @@ -923,7 +1037,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -934,7 +1048,7 @@ "17576" ] }, - "execution_count": 32, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -946,7 +1060,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": { "collapsed": false }, @@ -957,7 +1071,7 @@ "(('a', 'a', 'b'), True)" ] }, - "execution_count": 33, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -969,7 +1083,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "metadata": { "collapsed": false }, @@ -980,7 +1094,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": { "collapsed": false }, @@ -991,7 +1105,7 @@ "[('a', 'a', 'b')]" ] }, - "execution_count": 35, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -1007,7 +1121,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": { "collapsed": true }, @@ -1029,7 +1143,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "metadata": { "collapsed": false }, @@ -1040,7 +1154,7 @@ "[('a', 'a', 'b')]" ] }, - "execution_count": 37, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1051,7 +1165,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 58, "metadata": { "collapsed": false }, @@ -1070,7 +1184,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 59, "metadata": { "collapsed": false }, @@ -1081,7 +1195,7 @@ "('e', 'l', 'e')" ] }, - "execution_count": 39, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -1093,7 +1207,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 39, "metadata": { "collapsed": false }, @@ -1104,7 +1218,7 @@ "'dhnpforeeimgg'" ] }, - "execution_count": 40, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1118,7 +1232,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 40, "metadata": { "collapsed": false }, @@ -1129,7 +1243,7 @@ "('j', 'e', 'o')" ] }, - "execution_count": 41, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1140,7 +1254,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 41, "metadata": { "collapsed": false }, @@ -1163,7 +1277,7 @@ " MenuIem(before='t', after='g', number=13)]" ] }, - "execution_count": 42, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1175,7 +1289,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 42, "metadata": { "collapsed": false, "scrolled": true @@ -1248,7 +1362,7 @@ " ('z', 'z', 'k')]" ] }, - "execution_count": 43, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1265,7 +1379,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 43, "metadata": { "collapsed": false }, @@ -1276,7 +1390,7 @@ "62" ] }, - "execution_count": 44, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1287,7 +1401,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 44, "metadata": { "collapsed": false, "scrolled": true @@ -1311,7 +1425,7 @@ " ('y', 'n', 'c')]" ] }, - "execution_count": 45, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -1328,7 +1442,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 45, "metadata": { "collapsed": false }, @@ -1351,7 +1465,7 @@ " ('y', 'n', 'c')]" ] }, - "execution_count": 46, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1362,7 +1476,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 46, "metadata": { "collapsed": false }, @@ -1379,7 +1493,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 47, "metadata": { "collapsed": false }, @@ -1390,7 +1504,7 @@ "13" ] }, - "execution_count": 48, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -1401,7 +1515,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 48, "metadata": { "collapsed": false }, @@ -1413,7 +1527,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 49, "metadata": { "collapsed": false }, @@ -1424,7 +1538,7 @@ "Signal(bank='e', wire='e')" ] }, - "execution_count": 50, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1435,7 +1549,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 50, "metadata": { "collapsed": false }, @@ -1446,7 +1560,7 @@ "True" ] }, - "execution_count": 51, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -1457,7 +1571,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 51, "metadata": { "collapsed": false }, @@ -1468,7 +1582,7 @@ "True" ] }, - "execution_count": 52, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -1479,7 +1593,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 52, "metadata": { "collapsed": false }, @@ -1533,7 +1647,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 53, "metadata": { "collapsed": false }, @@ -1587,7 +1701,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 54, "metadata": { "collapsed": false }, @@ -1595,15 +1709,15 @@ { "data": { "text/plain": [ - "{frozenset({'b', 'g'}),\n", - " frozenset({'e', 'y'}),\n", - " frozenset({'t', 'x'}),\n", - " frozenset({'m'}),\n", + "{frozenset({'m'}),\n", " frozenset({'i', 'n'}),\n", - " frozenset({'f', 'p'})}" + " frozenset({'f', 'p'}),\n", + " frozenset({'t', 'x'}),\n", + " frozenset({'e', 'y'}),\n", + " frozenset({'b', 'g'})}" ] }, - "execution_count": 55, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" } @@ -1615,7 +1729,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 55, "metadata": { "collapsed": false }, @@ -1626,7 +1740,7 @@ "True" ] }, - "execution_count": 56, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } @@ -1637,7 +1751,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 56, "metadata": { "collapsed": false }, @@ -1645,13 +1759,13 @@ { "data": { "text/plain": [ - "({frozenset({1, 2}), frozenset({2, 3}), frozenset({3, 4})},\n", + "({frozenset({1, 2}), frozenset({3, 4}), frozenset({2, 3})},\n", " frozenset({1, 2}),\n", " frozenset({3, 4}),\n", " frozenset({2, 3}))" ] }, - "execution_count": 57, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } @@ -1670,7 +1784,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 57, "metadata": { "collapsed": false }, @@ -1681,7 +1795,7 @@ "False" ] }, - "execution_count": 58, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } @@ -1692,7 +1806,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 58, "metadata": { "collapsed": false }, @@ -1703,7 +1817,7 @@ "False" ] }, - "execution_count": 59, + "execution_count": 58, "metadata": {}, "output_type": "execute_result" }