{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pi6 = open('advent06.txt').read().strip()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[[False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False]]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid = [list([False]*10) for _ in range(10)]\n", "grid" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[[False, False, False, False, False, False, False, False, False, False],\n", " [False, True, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False],\n", " [False, False, False, False, False, False, False, False, False, False]]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid[1][1] = True\n", "grid" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def print_grid(grid):\n", " print('\\n'.join(''.join('*' if l else '.' for l in line) for line in grid))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "..........\n", ".*........\n", "..........\n", "..........\n", "..........\n", "..........\n", "..........\n", "..........\n", "..........\n", "..........\n" ] } ], "source": [ "print_grid(grid)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def turn_on(r1, c1, r2, c2, grid):\n", " for r in range(r1, r2+1):\n", " for c in range(c1, c2+1):\n", " grid[r][c] = True " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def turn_off(r1, c1, r2, c2, grid):\n", " for r in range(r1, r2+1):\n", " for c in range(c1, c2+1):\n", " grid[r][c] = False " ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def toggle(r1, c1, r2, c2, grid):\n", " for r in range(r1, r2+1):\n", " for c in range(c1, c2+1):\n", " grid[r][c] = not grid[r][c] " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "****......\n", "****......\n", "****......\n", "**..***...\n", "**........\n", "**.....**.\n", "****...**.\n", ".........*\n", ".......***\n", ".......***\n" ] } ], "source": [ "grid = [list([False]*10) for _ in range(10)]\n", "turn_on(3, 2, 5, 6, grid)\n", "turn_off(4, 4, 7, 7, grid)\n", "toggle(0, 0, 6, 3, grid)\n", "turn_on(7, 7, 9, 9, grid)\n", "toggle(5, 7, 7, 8, grid)\n", "print_grid(grid)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "36" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(sum(line) for line in grid)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def parse(line):\n", " words = line.split(' ')\n", " if line.startswith('turn'):\n", " command = words[1]\n", " s = words[2].split(',')\n", " f = words[4].split(',')\n", " else:\n", " command = words[0]\n", " s = words[1].split(',')\n", " f = words[3].split(',')\n", " # print(command, s, f)\n", " r1 = min(int(s[0]), int(f[0]))\n", " r2 = max(int(s[0]), int(f[0]))\n", " c1 = min(int(s[1]), int(f[1]))\n", " c2 = max(int(s[1]), int(f[1]))\n", " return command, r1, c1, r2, c2" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "('toggle', 489, 959, 759, 964)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "parse('toggle 489,959 through 759,964')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def do_line(line, grid):\n", " command, r1, c1, r2, c2 = parse(line)\n", " if command == 'on':\n", " turn_on(r1, c1, r2, c2, grid)\n", " elif command == 'off':\n", " turn_off(r1, c1, r2, c2, grid)\n", " else:\n", " toggle(r1, c1, r2, c2, grid)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "grid = [list([False]*1000) for _ in range(1000)]" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "569999" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid = [list([False]*1000) for _ in range(1000)]\n", "for line in pi6.splitlines():\n", " do_line(line.strip(), grid)\n", "sum(sum(line) for line in grid)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "turn on 489,959 through 759,964\n" ] }, { "data": { "text/plain": [ "1626" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid = [list([False]*1000) for _ in range(1000)]\n", "do_line(pi6.splitlines()[0].strip(), grid)\n", "print(pi6.splitlines()[0].strip())\n", "sum(sum(line) for line in grid)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1626" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "((759-489)+1)*((964-959)+1)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def do_line2(line, grid):\n", " command, r1, c1, r2, c2 = parse(line)\n", " if command == 'on':\n", " turn_on2(r1, c1, r2, c2, grid)\n", " elif command == 'off':\n", " turn_off2(r1, c1, r2, c2, grid)\n", " else:\n", " toggle2(r1, c1, r2, c2, grid)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def turn_on2(r1, c1, r2, c2, grid):\n", " for r in range(r1, r2+1):\n", " for c in range(c1, c2+1):\n", " grid[r][c] +=1 \n", "\n", "def turn_off2(r1, c1, r2, c2, grid):\n", " for r in range(r1, r2+1):\n", " for c in range(c1, c2+1):\n", " grid[r][c] -= 1\n", " if grid[r][c] < 0:\n", " grid[r][c] = 0\n", "\n", "def toggle2(r1, c1, r2, c2, grid):\n", " for r in range(r1, r2+1):\n", " for c in range(c1, c2+1):\n", " grid[r][c] += 2" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "17836115" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid2 = [list([0]*1000) for _ in range(1000)]\n", "for line in pi6.splitlines():\n", " do_line2(line.strip(), grid2)\n", "sum(sum(line) for line in grid2)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [0, 2, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid = [list([0]*10) for _ in range(10)]\n", "grid[1][1] += 2\n", "grid" ] }, { "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.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }