{ "cells": [ { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import random" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['^', '^', '^', 'v', 'v', 'v', '=']" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "instructions = list('^^^vvv=')\n", "instructions" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def build_sequence(instructions, length=100):\n", " non_exits = [i for i in instructions if i != '=']\n", " seq = [random.choice(non_exits)]\n", " last_was_exit = False\n", " for _ in range(length-2):\n", " if last_was_exit:\n", " seq.append(random.choice(non_exits))\n", " last_was_exit = False\n", " else:\n", " i = random.choice(instructions)\n", " last_was_exit = (i == '=')\n", " seq.append(i)\n", " seq.append(instructions[-1])\n", " return ''.join(seq)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'v=^^^vv^=='" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "build_sequence(instructions, 10)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'vvv^v^^^^v^v=^vvv=v^vvv^=v^^v=v^^^^vv^=v^vvv^v^^vv^^vvvvv^^vv^v=^v=v^^^vvv^v^vv=v^vv^^=^vv^^vvvv=^^='" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seq = build_sequence(instructions)\n", "seq" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def value(instr):\n", " if instr == '^':\n", " return 1\n", " elif instr == 'v':\n", " return -1\n", " else:\n", " return 0 " ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def final(sequence):\n", " return sum(value(i) for i in sequence)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-1" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "final(seq)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def running(sequence):\n", " current = 0\n", " currents = []\n", " exits = []\n", " for i in sequence:\n", " if value(i) == 0:\n", " exits.append(current)\n", " else:\n", " current += value(i)\n", " currents.append(current)\n", " return currents, exits" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "([1,\n", " 2,\n", " 3,\n", " 2,\n", " 3,\n", " 4,\n", " 5,\n", " 4,\n", " 5,\n", " 4,\n", " 5,\n", " 4,\n", " 3,\n", " 4,\n", " 3,\n", " 2,\n", " 3,\n", " 4,\n", " 3,\n", " 2,\n", " 3,\n", " 4,\n", " 5,\n", " 6,\n", " 5,\n", " 4,\n", " 3,\n", " 4,\n", " 3,\n", " 2,\n", " 1,\n", " 2,\n", " 3,\n", " 4,\n", " 3,\n", " 4,\n", " 3,\n", " 2,\n", " 1,\n", " 2,\n", " 1,\n", " 2,\n", " 3,\n", " 2,\n", " 3,\n", " 4,\n", " 3,\n", " 2,\n", " 1,\n", " 0,\n", " -1,\n", " -2,\n", " -3,\n", " -4,\n", " -3,\n", " -2,\n", " -1,\n", " -2,\n", " -3,\n", " -4,\n", " -3,\n", " -2,\n", " -1,\n", " -2,\n", " -3,\n", " -2,\n", " -3,\n", " -4,\n", " -5,\n", " -4,\n", " -3,\n", " -4,\n", " -5,\n", " -4,\n", " -5,\n", " -4,\n", " -3,\n", " -2,\n", " -1,\n", " 0,\n", " -1,\n", " 0,\n", " -1,\n", " -2,\n", " -3,\n", " -2,\n", " -1,\n", " 0,\n", " -1],\n", " [5, 4, 2, 1, -2, -2, -3, -5, -5, -1, -1])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "running(seq)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "^vvv^^v^=vv=v^v=^vvvv^=^vv^vvv^=v=v^^v=^^v=v^=v^^vv^^==v^^v^v=vvv^^^^=vvv^^v=v=vv^^^^v^v=vv^v^=^^^^v=v=v^^^vv^vv^v^^vvv^v==^vv=^vv^vv^^vv=^=v=vv^vv^=v^^^^vvvvv=vv^^^v=^=^=vv^v=v^^^^vv=^^^^vv^^v=vv^^v^^v^vv^^==^v^=^^^^v=^v^v^v=vv^=vvv^v=^v^^^^vv^v^v^^v^v^v^^^vv^^v^^v=v^v^v^v^^v^vvvv^=^v=^^vvvv^^vv^vv^v=^v=^vvvvv^vv=vv^=v^=^^^^^=^vvvvv^=^v^=^^^v^^v^=v^^^vv^v^^vv^=^v^^^vvv=^v^^v^v^^vvvvv^vvv=^v=^^vv^^v^^vvvv=v^=v^vvvvvvv=^==^vv=v=vv=^^^^=vv^vvv^^v^vv^^^v^^v=v^^=^^^^vv^v==v^v^^v^^v^=^^^==v^^^vv^==vvvvvvv^=vv^=vv^^=v^^vvv^^^vvv^^vv=v=^^vvv^^^^v=^^vv^v^^=^v=v=^vv^^vvv^^^^vv^=v^^v^^v^v=v^^^^vvv^^=vv^=vv^^v^v^^v=v^^vv^=^v^^^=v^^v=v^vv^=^v^^v=vv^=^v^^^v^=v==v^vvvvv^vvvv^^v=^^vv^^v^^^^^=^v=^v^=^vv^v=^^^vvvv^^vv^^==^==^^^^v=v^vvvv=^v^=^vv^^v^^vvvvv=^v^^==^=^^v==v=vv^vv^^vvv=^vvvv=v=^vv=^v^^vv==vvv^^^=vv^^^vv=v=^vvv^^v^v=v^^v=^=v^vvvvvvvv===^=^vvv^vv^^vvvv^=^v^^^=^^^vvvvv^==v^^v=vvv^v=vv^vv^vv=vvv^vv^=^^^v^vv^vvv=v^vv^v^vvvvvv^^v^^^^vv^v=^=^v=v^^vvv^vv^^=^v^vv^v^=v=v^v^vvv=^^=^vv^vvv==^^v^^vvv^v^=\n", "Final: -48\n", "Highest 1, lowest -49, final -48.\n", "Highest exit 0, lowest exit -49.\n" ] } ], "source": [ "seq = build_sequence(instructions, 1000)\n", "print(seq)\n", "print('Final: ', final(seq))\n", "fs, es = running(seq)\n", "print('Highest {}, lowest {}, final {}.'.format(max(fs), min(fs), fs[-1]))\n", "print('Highest exit {}, lowest exit {}.'.format(max(es), min(es)))" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Highest 216, lowest -6, final 209.\n", "Highest exit 215, lowest exit -5.\n" ] } ], "source": [ "valid_seq = False\n", "while not valid_seq:\n", " seq = build_sequence(instructions, 10000)\n", " fs, es = running(seq)\n", " if min(fs) > -10 and fs[-1] > 0:\n", " valid_seq = True\n", "\n", "open('02-lifts.txt', 'w').write(seq)\n", "print('Highest {}, lowest {}, final {}.'.format(max(fs), min(fs), fs[-1]))\n", "print('Highest exit {}, lowest exit {}.'.format(max(es), min(es)))" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('v^^^^^v=v=', ([-1, 0, 1, 2, 3, 4, 3, 2], [3, 2]))" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "small_seq = build_sequence(instructions, 10)\n", "small_seq, running(small_seq)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }