},
{
"cell_type": "code",
- "execution_count": 42,
+ "execution_count": 15,
"metadata": {
"collapsed": true
},
},
{
"cell_type": "code",
- "execution_count": 39,
+ "execution_count": 16,
"metadata": {
"collapsed": true
},
},
{
"cell_type": "code",
- "execution_count": 40,
+ "execution_count": 18,
"metadata": {},
"outputs": [
{
{
"data": {
"text/plain": [
- "{'instructions': [(<function __main__.set_literal>, ['a', 10]),\n",
+ "{1: 10,\n",
+ " 'a': 0,\n",
+ " 'c': 20,\n",
+ " 'pc': 6,\n",
+ " 'b': 10,\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",
- " 'pc': 6,\n",
- " 'b': 10}"
+ " (<function __main__.jmp>, [-4])]}"
]
},
"execution_count": 22,
{
"data": {
"text/plain": [
- "{'instructions': [(<function __main__.set_literal>, ['a', 10]),\n",
+ "{1: 10,\n",
+ " 'a': 0,\n",
+ " 'c': 20,\n",
+ " 'pc': 6,\n",
+ " 'b': 10,\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",
- " 'pc': 6,\n",
- " 'b': 10}"
+ " (<function __main__.jmp>, [-4])]}"
]
},
"execution_count": 23,
},
{
"cell_type": "code",
- "execution_count": 85,
+ "execution_count": 26,
"metadata": {},
"outputs": [
{
"'1: 8, a: 0, b: 1, c: 8, pc: 11'"
]
},
- "execution_count": 85,
+ "execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
},
{
"cell_type": "code",
- "execution_count": 43,
+ "execution_count": 27,
"metadata": {},
"outputs": [
{
"'a: 4, b: 0, c: 12, pc: 9'"
]
},
- "execution_count": 43,
+ "execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
+ "execution_count": 48,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'1: 0, a: 0, b: 0, c: 27, pc: 11'"
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# c holds a!\n",
+ "# c holds a * b\n",
"program = \"\"\"\n",
- "??????????????\n",
" set c 0\n",
- " cpy a b\n",
- " # start of main loop\n",
- "loop: jpz b end\n",
+ " sto a 1\n",
+ "loop: jpz b end \n",
" dec b\n",
+ " ld a 1\n",
+ "smul: jpz a emul\n",
" inc c\n",
- " inc c\n",
- " inc c\n",
- " jmp loop\n",
+ " dec a\n",
+ " jmp smul\n",
+ "emul: jmp loop \n",
" \n",
- " # end of program \n",
- " \n",
- "end: jmp 1\n",
+ "end: sto a 1\n",
"\"\"\"\n",
- "# m = new_machine()\n",
- "# program_from_listing(program, m)\n",
- "# run(m)\n",
- "show_machine(execute(program, initial_state={'a': 4}))"
+ "m = new_machine()\n",
+ "program_from_listing(program, m)\n",
+ "run(m)\n",
+ "show_machine(execute(program, initial_state={'a': 9, 'b': 3}))"
]
},
{
"cell_type": "code",
- "execution_count": 82,
+ "execution_count": 49,
+ "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') \n",
+ " if i.strip() \n",
+ " if not i.strip().startswith('#')]\n",
+ "instructions = replace_labels(labelled_instructions)\n",
+ "print('\\n'.join(instructions))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "'1: 52, a: 0, b: 0, c: 0, pc: 46'"
+ "'1: 0, a: 52, b: 0, c: 0, pc: 48'"
]
},
- "execution_count": 82,
+ "execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
" \n",
" # end of program \n",
" \n",
- "end: set c 0\n",
+ "end: ld a 1\n",
+ " set c 0\n",
+ " sto c 1\n",
"\"\"\"\n",
"# m = new_machine()\n",
"# program_from_listing(program, m)\n",
},
{
"cell_type": "code",
- "execution_count": 56,
+ "execution_count": 30,
"metadata": {},
"outputs": [
{
"40"
]
},
- "execution_count": 56,
+ "execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
},
{
"cell_type": "code",
- "execution_count": 63,
+ "execution_count": 31,
"metadata": {
"collapsed": true
},
},
{
"cell_type": "code",
- "execution_count": 64,
+ "execution_count": 32,
"metadata": {},
"outputs": [
{
"52"
]
},
- "execution_count": 64,
+ "execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
},
{
"cell_type": "code",
- "execution_count": 80,
+ "execution_count": 33,
"metadata": {},
"outputs": [
{
"(250504, 937)"
]
},
- "execution_count": 80,
+ "execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
},
{
"cell_type": "code",
- "execution_count": 73,
+ "execution_count": 34,
"metadata": {},
"outputs": [
{
"[]"
]
},
- "execution_count": 73,
+ "execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
},
{
"cell_type": "code",
- "execution_count": 83,
+ "execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "'1: 250504, a: 0, b: 0, c: 0, pc: 46'"
+ "'1: 0, a: 250504, b: 0, c: 0, pc: 48'"
]
},
- "execution_count": 83,
+ "execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
"show_machine(execute(program, initial_state={'a': 937}))"
]
},
+ {
+ "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"
+ }
+ ],
+ "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))"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,