X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;ds=sidebyside;f=02-lifts%2Fpart1-brainfuck.ipynb;h=06487a84192e6b64f747de812e78c6a6b9bc5556;hb=35334be6542c54514e0a1bf11d247063c2c1ed51;hp=608180dc54efa4f618578bfedeea73c247ff24f5;hpb=2b991385df5650b724c3044e1aa4a82ca949b12e;p=ou-summer-of-code-2017.git diff --git a/02-lifts/part1-brainfuck.ipynb b/02-lifts/part1-brainfuck.ipynb index 608180d..06487a8 100644 --- a/02-lifts/part1-brainfuck.ipynb +++ b/02-lifts/part1-brainfuck.ipynb @@ -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", @@ -50,20 +53,22 @@ "\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": [ { @@ -100,7 +105,7 @@ "(118, 94, 61)" ] }, - "execution_count": 128, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -136,7 +141,7 @@ }, { "cell_type": "code", - "execution_count": 129, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -145,7 +150,7 @@ "24" ] }, - "execution_count": 129, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -156,7 +161,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": { "collapsed": true }, @@ -167,23 +172,19 @@ }, { "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" } @@ -194,35 +195,30 @@ }, { "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", @@ -292,16 +288,16 @@ }, { "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" } @@ -312,7 +308,7 @@ }, { "cell_type": "code", - "execution_count": 198, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -321,7 +317,7 @@ "'>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++<[-<+>>>+<<]>>[-<<+>>]>>,[<<<<<[->>>>>-<<<<<]>>>>>[<<<[->+<<<+>>]>[-<+>]<<<[->>>>>-<<<<<]>>>>>[<+>[-]]<-->]<+<<<[-<+>>>+<<]>>[-<<+>>]>>,]<.'" ] }, - "execution_count": 198, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -332,16 +328,47 @@ }, { "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" } @@ -353,7 +380,7 @@ }, { "cell_type": "code", - "execution_count": 124, + "execution_count": 13, "metadata": { "collapsed": true }, @@ -370,7 +397,7 @@ }, { "cell_type": "code", - "execution_count": 125, + "execution_count": 14, "metadata": { "collapsed": true }, @@ -385,7 +412,7 @@ }, { "cell_type": "code", - "execution_count": 126, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -394,7 +421,7 @@ "209" ] }, - "execution_count": 126, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -405,7 +432,7 @@ }, { "cell_type": "code", - "execution_count": 193, + "execution_count": 16, "metadata": { "scrolled": true }, @@ -414,56 +441,56 @@ "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" ] } ], @@ -474,7 +501,7 @@ }, { "cell_type": "code", - "execution_count": 194, + "execution_count": 17, "metadata": { "scrolled": true }, @@ -482,10 +509,10 @@ { "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" } @@ -496,13 +523,33 @@ }, { "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()]" ] }, {