Tidying up day 2 polyglot
[ou-summer-of-code-2017.git] / 02-lifts / part1-brainfuck.ipynb
index 608180dc54efa4f618578bfedeea73c247ff24f5..06487a84192e6b64f747de812e78c6a6b9bc5556 100644 (file)
@@ -2,8 +2,10 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 121,
-   "metadata": {},
+   "execution_count": 2,
+   "metadata": {
+    "collapsed": true
+   },
    "outputs": [],
    "source": [
     "#!/usr/bin/python\n",
@@ -27,6 +29,7 @@
     "\n",
     "    cells, codeptr, cellptr = [0], 0, 0\n",
     "    inputptr = 0\n",
+    "    output = []\n",
     "\n",
     "    try:\n",
     "        while codeptr < len(code):\n",
     "\n",
     "            if command == \"[\" and cells[cellptr] == 0: codeptr = bracemap[codeptr]\n",
     "            if command == \"]\" and cells[cellptr] != 0: codeptr = bracemap[codeptr]\n",
-    "            if command == \".\": sys.stdout.write(chr(cells[cellptr]))\n",
+    "            if command == \".\": output += [cells[cellptr]] # sys.stdout.write(chr(cells[cellptr]))\n",
     "            if command == \",\": \n",
     "                if inp is not None:\n",
     "                    if inputptr >= len(inp):\n",
-    "                        raise EOFError\n",
-    "                    cells[cellptr] = ord(inp[inputptr])\n",
-    "                    inputptr += 1\n",
+    "                        # raise EOFError\n",
+    "                        cells[cellptr] = 0\n",
+    "                    else:\n",
+    "                        cells[cellptr] = ord(inp[inputptr])\n",
+    "                        inputptr += 1\n",
     "                else:\n",
     "                    cells[cellptr] = ord(getch.getch())\n",
     "\n",
     "            codeptr += 1\n",
     "    except EOFError:\n",
     "        pass\n",
-    "    return cells, codeptr, cellptr\n",
+    "    return cells, codeptr, cellptr, output\n",
     "\n",
     "\n",
     "def cleanup(code):\n",
@@ -91,7 +96,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 128,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [
     {
        "(118, 94, 61)"
       ]
      },
-     "execution_count": 128,
+     "execution_count": 3,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 129,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [
     {
        "24"
       ]
      },
-     "execution_count": 129,
+     "execution_count": 4,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 5,
    "metadata": {
     "collapsed": true
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Hello World!\n"
-     ]
-    },
     {
      "data": {
       "text/plain": [
-       "([0, 0, 72, 100, 87, 33, 10], 106, 6)"
+       "([0, 0, 72, 100, 87, 33, 10],\n",
+       " 106,\n",
+       " 6,\n",
+       " [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 10])"
       ]
      },
-     "execution_count": 20,
+     "execution_count": 6,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "hello"
-     ]
-    },
     {
      "data": {
       "text/plain": [
-       "([111], 3, 0)"
+       "([0], 5, 0, [104, 101, 108, 108, 111])"
       ]
      },
-     "execution_count": 19,
+     "execution_count": 7,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "evaluate(',[.,]', input='hello')"
+    "evaluate(',[.,]', inp='hello')"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 196,
-   "metadata": {},
+   "execution_count": 8,
+   "metadata": {
+    "collapsed": true
+   },
    "outputs": [],
    "source": [
     "program = '>' + '+' * 94 + '>' + '+' * 24\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 200,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "([94, 94, 24, 0, 3, 0], 255, 5)"
+       "([94, 94, 24, 0, 3, 0], 259, 4, [3])"
       ]
      },
-     "execution_count": 200,
+     "execution_count": 9,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 198,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [
     {
        "'>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++<[-<+>>>+<<]>>[-<<+>>]>>,[<<<<<[->>>>>-<<<<<]>>>>>[<<<[->+<<<+>>]>[-<+>]<<<[->>>>>-<<<<<]>>>>>[<+>[-]]<-->]<+<<<[-<+>>>+<<]>>[-<<+>>]>>,]<.'"
       ]
      },
-     "execution_count": 198,
+     "execution_count": 10,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 123,
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "with open('part1.clean.bf', 'w') as f:\n",
+    "    for i, c in enumerate(''.join(cleanup(program))):\n",
+    "        f.write('{:03} {}\\n'.format(i, c))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "([60, 60, 0, 15, 0], 152, 4)"
+       "260"
       ]
      },
-     "execution_count": 123,
+     "execution_count": 20,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "open('part1.clean.bf', 'w').write(''.join(cleanup(program))+'\\n')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "([94, 94, 24, 0, 209, 0], 259, 4, [209])"
+      ]
+     },
+     "execution_count": 12,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 124,
+   "execution_count": 13,
    "metadata": {
     "collapsed": true
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 125,
+   "execution_count": 14,
    "metadata": {
     "collapsed": true
    },
   },
   {
    "cell_type": "code",
-   "execution_count": 126,
+   "execution_count": 15,
    "metadata": {},
    "outputs": [
     {
        "209"
       ]
      },
-     "execution_count": 126,
+     "execution_count": 15,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 193,
+   "execution_count": 16,
    "metadata": {
     "scrolled": true
    },
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "0 ([94, 94, 24, 0, 0, 0], 144, 5) \n",
-      "-1 ([94, 94, 24, 0, 255, 0], 255, 5) v\n",
-      "-2 ([94, 94, 24, 0, 254, 0], 255, 5) vv\n",
-      "-3 ([94, 94, 24, 0, 253, 0], 255, 5) vvv\n",
-      "-2 ([94, 94, 24, 0, 254, 0], 255, 5) vvv^\n",
-      "-1 ([94, 94, 24, 0, 255, 0], 255, 5) vvv^^\n",
-      "-2 ([94, 94, 24, 0, 254, 0], 255, 5) vvv^^v\n",
-      "-1 ([94, 94, 24, 0, 255, 0], 255, 5) vvv^^v^\n",
-      "-2 ([94, 94, 24, 0, 254, 0], 255, 5) vvv^^v^v\n",
-      "-2 ([94, 94, 24, 0, 254, 0], 255, 5) vvv^^v^v=\n",
-      "-3 ([94, 94, 24, 0, 253, 0], 255, 5) vvv^^v^v=v\n",
-      "-4 ([94, 94, 24, 0, 252, 0], 255, 5) vvv^^v^v=vv\n",
-      "-3 ([94, 94, 24, 0, 253, 0], 255, 5) vvv^^v^v=vv^\n",
-      "-4 ([94, 94, 24, 0, 252, 0], 255, 5) vvv^^v^v=vv^v\n",
-      "-3 ([94, 94, 24, 0, 253, 0], 255, 5) vvv^^v^v=vv^v^\n",
-      "-2 ([94, 94, 24, 0, 254, 0], 255, 5) vvv^^v^v=vv^v^^\n",
-      "-3 ([94, 94, 24, 0, 253, 0], 255, 5) vvv^^v^v=vv^v^^v\n",
-      "-4 ([94, 94, 24, 0, 252, 0], 255, 5) vvv^^v^v=vv^v^^vv\n",
-      "-5 ([94, 94, 24, 0, 251, 0], 255, 5) vvv^^v^v=vv^v^^vvv\n",
-      "-6 ([94, 94, 24, 0, 250, 0], 255, 5) vvv^^v^v=vv^v^^vvvv\n",
-      "-5 ([94, 94, 24, 0, 251, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^\n",
-      "-4 ([94, 94, 24, 0, 252, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^\n",
-      "-5 ([94, 94, 24, 0, 251, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v\n",
-      "-5 ([94, 94, 24, 0, 251, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=\n",
-      "-4 ([94, 94, 24, 0, 252, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^\n",
-      "-4 ([94, 94, 24, 0, 252, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=\n",
-      "-3 ([94, 94, 24, 0, 253, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^\n",
-      "-2 ([94, 94, 24, 0, 254, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^\n",
-      "-2 ([94, 94, 24, 0, 254, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=\n",
-      "-1 ([94, 94, 24, 0, 255, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^\n",
-      "0 ([94, 94, 24, 0, 0, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^\n",
-      "1 ([94, 94, 24, 0, 1, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^\n",
-      "1 ([94, 94, 24, 0, 1, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=\n",
-      "2 ([94, 94, 24, 0, 2, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^\n",
-      "3 ([94, 94, 24, 0, 3, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^\n",
-      "4 ([94, 94, 24, 0, 4, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^\n",
-      "3 ([94, 94, 24, 0, 3, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v\n",
-      "3 ([94, 94, 24, 0, 3, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=\n",
-      "4 ([94, 94, 24, 0, 4, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^\n",
-      "5 ([94, 94, 24, 0, 5, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^\n",
-      "6 ([94, 94, 24, 0, 6, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^\n",
-      "6 ([94, 94, 24, 0, 6, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=\n",
-      "7 ([94, 94, 24, 0, 7, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^\n",
-      "8 ([94, 94, 24, 0, 8, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^\n",
-      "7 ([94, 94, 24, 0, 7, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^v\n",
-      "8 ([94, 94, 24, 0, 8, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^v^\n",
-      "9 ([94, 94, 24, 0, 9, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^v^^\n",
-      "8 ([94, 94, 24, 0, 8, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^v^^v\n",
-      "9 ([94, 94, 24, 0, 9, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^v^^v^\n",
-      "8 ([94, 94, 24, 0, 8, 0], 255, 5) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^v^^v^v\n"
+      "0 ([94, 94, 24, 0, 0, 0], 259, 4, [0]) \n",
+      "-1 ([94, 94, 24, 0, 255, 0], 259, 4, [255]) v\n",
+      "-2 ([94, 94, 24, 0, 254, 0], 259, 4, [254]) vv\n",
+      "-3 ([94, 94, 24, 0, 253, 0], 259, 4, [253]) vvv\n",
+      "-2 ([94, 94, 24, 0, 254, 0], 259, 4, [254]) vvv^\n",
+      "-1 ([94, 94, 24, 0, 255, 0], 259, 4, [255]) vvv^^\n",
+      "-2 ([94, 94, 24, 0, 254, 0], 259, 4, [254]) vvv^^v\n",
+      "-1 ([94, 94, 24, 0, 255, 0], 259, 4, [255]) vvv^^v^\n",
+      "-2 ([94, 94, 24, 0, 254, 0], 259, 4, [254]) vvv^^v^v\n",
+      "-2 ([94, 94, 24, 0, 254, 0], 259, 4, [254]) vvv^^v^v=\n",
+      "-3 ([94, 94, 24, 0, 253, 0], 259, 4, [253]) vvv^^v^v=v\n",
+      "-4 ([94, 94, 24, 0, 252, 0], 259, 4, [252]) vvv^^v^v=vv\n",
+      "-3 ([94, 94, 24, 0, 253, 0], 259, 4, [253]) vvv^^v^v=vv^\n",
+      "-4 ([94, 94, 24, 0, 252, 0], 259, 4, [252]) vvv^^v^v=vv^v\n",
+      "-3 ([94, 94, 24, 0, 253, 0], 259, 4, [253]) vvv^^v^v=vv^v^\n",
+      "-2 ([94, 94, 24, 0, 254, 0], 259, 4, [254]) vvv^^v^v=vv^v^^\n",
+      "-3 ([94, 94, 24, 0, 253, 0], 259, 4, [253]) vvv^^v^v=vv^v^^v\n",
+      "-4 ([94, 94, 24, 0, 252, 0], 259, 4, [252]) vvv^^v^v=vv^v^^vv\n",
+      "-5 ([94, 94, 24, 0, 251, 0], 259, 4, [251]) vvv^^v^v=vv^v^^vvv\n",
+      "-6 ([94, 94, 24, 0, 250, 0], 259, 4, [250]) vvv^^v^v=vv^v^^vvvv\n",
+      "-5 ([94, 94, 24, 0, 251, 0], 259, 4, [251]) vvv^^v^v=vv^v^^vvvv^\n",
+      "-4 ([94, 94, 24, 0, 252, 0], 259, 4, [252]) vvv^^v^v=vv^v^^vvvv^^\n",
+      "-5 ([94, 94, 24, 0, 251, 0], 259, 4, [251]) vvv^^v^v=vv^v^^vvvv^^v\n",
+      "-5 ([94, 94, 24, 0, 251, 0], 259, 4, [251]) vvv^^v^v=vv^v^^vvvv^^v=\n",
+      "-4 ([94, 94, 24, 0, 252, 0], 259, 4, [252]) vvv^^v^v=vv^v^^vvvv^^v=^\n",
+      "-4 ([94, 94, 24, 0, 252, 0], 259, 4, [252]) vvv^^v^v=vv^v^^vvvv^^v=^=\n",
+      "-3 ([94, 94, 24, 0, 253, 0], 259, 4, [253]) vvv^^v^v=vv^v^^vvvv^^v=^=^\n",
+      "-2 ([94, 94, 24, 0, 254, 0], 259, 4, [254]) vvv^^v^v=vv^v^^vvvv^^v=^=^^\n",
+      "-2 ([94, 94, 24, 0, 254, 0], 259, 4, [254]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=\n",
+      "-1 ([94, 94, 24, 0, 255, 0], 259, 4, [255]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^\n",
+      "0 ([94, 94, 24, 0, 0, 0], 259, 4, [0]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^\n",
+      "1 ([94, 94, 24, 0, 1, 0], 259, 4, [1]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^\n",
+      "1 ([94, 94, 24, 0, 1, 0], 259, 4, [1]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=\n",
+      "2 ([94, 94, 24, 0, 2, 0], 259, 4, [2]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^\n",
+      "3 ([94, 94, 24, 0, 3, 0], 259, 4, [3]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^\n",
+      "4 ([94, 94, 24, 0, 4, 0], 259, 4, [4]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^\n",
+      "3 ([94, 94, 24, 0, 3, 0], 259, 4, [3]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v\n",
+      "3 ([94, 94, 24, 0, 3, 0], 259, 4, [3]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=\n",
+      "4 ([94, 94, 24, 0, 4, 0], 259, 4, [4]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^\n",
+      "5 ([94, 94, 24, 0, 5, 0], 259, 4, [5]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^\n",
+      "6 ([94, 94, 24, 0, 6, 0], 259, 4, [6]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^\n",
+      "6 ([94, 94, 24, 0, 6, 0], 259, 4, [6]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=\n",
+      "7 ([94, 94, 24, 0, 7, 0], 259, 4, [7]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^\n",
+      "8 ([94, 94, 24, 0, 8, 0], 259, 4, [8]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^\n",
+      "7 ([94, 94, 24, 0, 7, 0], 259, 4, [7]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^v\n",
+      "8 ([94, 94, 24, 0, 8, 0], 259, 4, [8]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^v^\n",
+      "9 ([94, 94, 24, 0, 9, 0], 259, 4, [9]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^v^^\n",
+      "8 ([94, 94, 24, 0, 8, 0], 259, 4, [8]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^v^^v\n",
+      "9 ([94, 94, 24, 0, 9, 0], 259, 4, [9]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^v^^v^\n",
+      "8 ([94, 94, 24, 0, 8, 0], 259, 4, [8]) vvv^^v^v=vv^v^^vvvv^^v=^=^^=^^^=^^^v=^^^=^^v^^v^v\n"
      ]
     }
    ],
   },
   {
    "cell_type": "code",
-   "execution_count": 194,
+   "execution_count": 17,
    "metadata": {
     "scrolled": true
    },
     {
      "data": {
       "text/plain": [
-       "(209, ([94, 94, 24, 0, 209, 0], 255, 5))"
+       "(209, ([94, 94, 24, 0, 209, 0], 259, 4, [209]))"
       ]
      },
-     "execution_count": 194,
+     "execution_count": 17,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 199,
+   "execution_count": 21,
    "metadata": {
     "collapsed": true
    },
    "outputs": [],
    "source": [
-    "! bf -n part1.bf < 02-lifts.txt > part1.bf.out"
+    "! bf -n part1.clean.bf < 02-lifts.txt > part1.bf.out"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[209]"
+      ]
+     },
+     "execution_count": 23,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "[int(b) for b in open('part1.bf.out', 'rb').read()]"
    ]
   },
   {