Renamed day 4 directory
[ou-summer-of-code-2017.git] / 07-interpreter / machine-code.ipynb
index c6b62b09b7c78ee0c2711e08796ec6639a839e65..69cd43ff07b09f91c79e0082aa7cd6c0aa40b2a1 100644 (file)
     {
      "data": {
       "text/plain": [
-       "{'pc': 6,\n",
+       "{'a': 0,\n",
+       " 1: 10,\n",
+       " 'pc': 6,\n",
+       " 'c': 20,\n",
        " 'instructions': [(<function __main__.set_literal>, ['a', 10]),\n",
        "  (<function __main__.dec>, ['a']),\n",
        "  (<function __main__.inc>, ['b']),\n",
        "  (<function __main__.sto>, ['b', 1]),\n",
        "  (<function __main__.jpz>, ['a', 2]),\n",
        "  (<function __main__.jmp>, [-4])],\n",
-       " 1: 10,\n",
-       " 'c': 20,\n",
-       " 'a': 0,\n",
        " 'b': 10}"
       ]
      },
     {
      "data": {
       "text/plain": [
-       "{'pc': 6,\n",
+       "{'a': 0,\n",
+       " 1: 10,\n",
+       " 'pc': 6,\n",
+       " 'c': 20,\n",
        " 'instructions': [(<function __main__.set_literal>, ['a', 10]),\n",
        "  (<function __main__.dec>, ['a']),\n",
        "  (<function __main__.inc>, ['b']),\n",
        "  (<function __main__.sto>, ['b', 1]),\n",
        "  (<function __main__.jpz>, ['a', 2]),\n",
        "  (<function __main__.jmp>, [-4])],\n",
-       " 1: 10,\n",
-       " 'c': 20,\n",
-       " 'a': 0,\n",
        " 'b': 10}"
       ]
      },
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
+   "execution_count": 39,
    "metadata": {},
    "outputs": [
     {
        "'1: 0, a: 0, b: 0, c: 27, pc: 11'"
       ]
      },
-     "execution_count": 28,
+     "execution_count": 39,
      "metadata": {},
      "output_type": "execute_result"
     }
     "show_machine(execute(program, initial_state={'a': 9, 'b': 3}))"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": 40,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "set c 0\n",
+      "sto a 1\n",
+      "jpz b 8\n",
+      "dec b\n",
+      "ld a 1\n",
+      "jpz a 4\n",
+      "inc c\n",
+      "dec a\n",
+      "jmp -3\n",
+      "jmp -7\n",
+      "sto a 1\n"
+     ]
+    }
+   ],
+   "source": [
+    "labelled_instructions = [i.strip() for i in program.split('\\n') if i.strip() if not i.strip().startswith('#')]\n",
+    "instructions = replace_labels(labelled_instructions)\n",
+    "print('\\n'.join(instructions))"
+   ]
+  },
   {
    "cell_type": "code",
    "execution_count": 29,
   },
   {
    "cell_type": "code",
-   "execution_count": 49,
+   "execution_count": 30,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
+      "set a 2\n",
+      "set b 5\n",
       "set c 0\n",
       "sto a 1\n",
       "jpz b 8\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 51,
+   "execution_count": 31,
    "metadata": {},
    "outputs": [
     {
        "'1: 0, a: 52, b: 0, c: 0, pc: 48'"
       ]
      },
-     "execution_count": 51,
+     "execution_count": 31,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 30,
+   "execution_count": 32,
    "metadata": {},
    "outputs": [
     {
        "40"
       ]
      },
-     "execution_count": 30,
+     "execution_count": 32,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 31,
+   "execution_count": 33,
    "metadata": {
     "collapsed": true
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 32,
+   "execution_count": 34,
    "metadata": {},
    "outputs": [
     {
        "52"
       ]
      },
-     "execution_count": 32,
+     "execution_count": 34,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 33,
+   "execution_count": 35,
    "metadata": {},
    "outputs": [
     {
        "(250504, 937)"
       ]
      },
-     "execution_count": 33,
+     "execution_count": 35,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 34,
-   "metadata": {},
+   "execution_count": 36,
+   "metadata": {
+    "scrolled": true
+   },
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "[]"
+       "[(1, 0, 1),\n",
+       " (2, 0, 2),\n",
+       " (3, 0, 16),\n",
+       " (4, 0, 4),\n",
+       " (5, 0, 16),\n",
+       " (6, 0, 16),\n",
+       " (7, 0, 52),\n",
+       " (8, 0, 8),\n",
+       " (9, 0, 52),\n",
+       " (10, 0, 16),\n",
+       " (11, 0, 52),\n",
+       " (12, 0, 16),\n",
+       " (13, 0, 40),\n",
+       " (14, 0, 52),\n",
+       " (15, 0, 160),\n",
+       " (16, 0, 16),\n",
+       " (17, 0, 52),\n",
+       " (18, 0, 52),\n",
+       " (19, 0, 88),\n",
+       " (20, 0, 20),\n",
+       " (21, 0, 64),\n",
+       " (22, 0, 52),\n",
+       " (23, 0, 160),\n",
+       " (24, 0, 24),\n",
+       " (25, 0, 88),\n",
+       " (26, 0, 40),\n",
+       " (27, 0, 9232),\n",
+       " (28, 0, 52),\n",
+       " (29, 0, 88),\n",
+       " (30, 0, 160),\n",
+       " (31, 0, 9232),\n",
+       " (32, 0, 32),\n",
+       " (33, 0, 100),\n",
+       " (34, 0, 52),\n",
+       " (35, 0, 160),\n",
+       " (36, 0, 52),\n",
+       " (37, 0, 112),\n",
+       " (38, 0, 88),\n",
+       " (39, 0, 304),\n",
+       " (40, 0, 40),\n",
+       " (41, 0, 9232),\n",
+       " (42, 0, 64),\n",
+       " (43, 0, 196),\n",
+       " (44, 0, 52),\n",
+       " (45, 0, 136),\n",
+       " (46, 0, 160),\n",
+       " (47, 0, 9232),\n",
+       " (48, 0, 48),\n",
+       " (49, 0, 148),\n",
+       " (50, 0, 88),\n",
+       " (51, 0, 232),\n",
+       " (52, 0, 52),\n",
+       " (53, 0, 160),\n",
+       " (54, 0, 9232),\n",
+       " (55, 0, 9232),\n",
+       " (56, 0, 56),\n",
+       " (57, 0, 196),\n",
+       " (58, 0, 88),\n",
+       " (59, 0, 304),\n",
+       " (60, 0, 160),\n",
+       " (61, 0, 184),\n",
+       " (62, 0, 9232),\n",
+       " (63, 0, 9232),\n",
+       " (64, 0, 64),\n",
+       " (65, 0, 196),\n",
+       " (66, 0, 100),\n",
+       " (67, 0, 304),\n",
+       " (68, 0, 68),\n",
+       " (69, 0, 208),\n",
+       " (70, 0, 160),\n",
+       " (71, 0, 9232),\n",
+       " (72, 0, 72),\n",
+       " (73, 0, 9232),\n",
+       " (74, 0, 112),\n",
+       " (75, 0, 340),\n",
+       " (76, 0, 88),\n",
+       " (77, 0, 232),\n",
+       " (78, 0, 304),\n",
+       " (79, 0, 808),\n",
+       " (80, 0, 80),\n",
+       " (81, 0, 244),\n",
+       " (82, 0, 9232),\n",
+       " (83, 0, 9232),\n",
+       " (84, 0, 84),\n",
+       " (85, 0, 256),\n",
+       " (86, 0, 196),\n",
+       " (87, 0, 592),\n",
+       " (88, 0, 88),\n",
+       " (89, 0, 304),\n",
+       " (90, 0, 136),\n",
+       " (91, 0, 9232),\n",
+       " (92, 0, 160),\n",
+       " (93, 0, 280),\n",
+       " (94, 0, 9232),\n",
+       " (95, 0, 9232),\n",
+       " (96, 0, 96),\n",
+       " (97, 0, 9232),\n",
+       " (98, 0, 148),\n",
+       " (99, 0, 448)]"
       ]
      },
-     "execution_count": 34,
+     "execution_count": 36,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 52,
+   "execution_count": 38,
    "metadata": {},
    "outputs": [
     {
        "'1: 0, a: 250504, b: 0, c: 0, pc: 48'"
       ]
      },
-     "execution_count": 52,
+     "execution_count": 38,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 53,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "sto a 1\n",
-      "set b 0\n",
-      "dec a\n",
-      "jpz a 42\n",
-      "inc a\n",
-      "cpy a c\n",
-      "set b 0\n",
-      "dec c\n",
-      "jpz b 3\n",
-      "dec b\n",
-      "jmp 2\n",
-      "inc b\n",
-      "jpz c 2\n",
-      "jmp -6\n",
-      "jpz b 11\n",
-      "cpy a b\n",
-      "jpz b 6\n",
-      "dec b\n",
-      "inc c\n",
-      "inc c\n",
-      "inc c\n",
-      "jmp -5\n",
-      "inc c\n",
-      "cpy c a\n",
-      "jmp 12\n",
-      "set c 0\n",
-      "set b 0\n",
-      "dec a\n",
-      "jpz b 4\n",
-      "dec b\n",
-      "inc c\n",
-      "jmp 2\n",
-      "inc b\n",
-      "jpz a 2\n",
-      "jmp -7\n",
-      "cpy c a\n",
-      "cpy a b\n",
-      "ld c 1\n",
-      "jpz c 5\n",
-      "jpz b 5\n",
-      "dec b\n",
-      "dec c\n",
-      "jmp -4\n",
-      "sto a 1\n",
-      "jmp -42\n",
-      "ld a 1\n",
-      "set c 0\n",
-      "sto c 1\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "342"
-      ]
-     },
-     "execution_count": 53,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
    "source": [
-    "labelled_instructions = [i.strip() for i in program.split('\\n') \n",
-    "                             if i.strip() \n",
-    "                             if not i.strip().startswith('#')]\n",
-    "instructions = replace_labels(labelled_instructions)\n",
-    "print('\\n'.join(instructions))\n",
-    "open('07-program.txt', 'w').write('\\n'.join(instructions))"
+    "labelled_instructions = [i.strip() for i in program.split('\\n') \n",
+    "                             if i.strip() \n",
+    "                             if not i.strip().startswith('#')]\n",
+    "instructions = replace_labels(labelled_instructions)\n",
+    "print('\\n'.join(instructions))\n",
+    "open('07-program.txt', 'w').write('\\n'.join(instructions))"
    ]
   },
   {