Fixed typo
[advent-of-code-15.git] / advent06.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 1,
6 "metadata": {
7 "collapsed": true
8 },
9 "outputs": [],
10 "source": [
11 "pi6 = open('advent06.txt').read().strip()"
12 ]
13 },
14 {
15 "cell_type": "code",
16 "execution_count": 2,
17 "metadata": {
18 "collapsed": false
19 },
20 "outputs": [
21 {
22 "data": {
23 "text/plain": [
24 "[[False, False, False, False, False, False, False, False, False, False],\n",
25 " [False, False, False, False, False, False, False, False, False, False],\n",
26 " [False, False, False, False, False, False, False, False, False, False],\n",
27 " [False, False, False, False, False, False, False, False, False, False],\n",
28 " [False, False, False, False, False, False, False, False, False, False],\n",
29 " [False, False, False, False, False, False, False, False, False, False],\n",
30 " [False, False, False, False, False, False, False, False, False, False],\n",
31 " [False, False, False, False, False, False, False, False, False, False],\n",
32 " [False, False, False, False, False, False, False, False, False, False],\n",
33 " [False, False, False, False, False, False, False, False, False, False]]"
34 ]
35 },
36 "execution_count": 2,
37 "metadata": {},
38 "output_type": "execute_result"
39 }
40 ],
41 "source": [
42 "grid = [list([False]*10) for _ in range(10)]\n",
43 "grid"
44 ]
45 },
46 {
47 "cell_type": "code",
48 "execution_count": 3,
49 "metadata": {
50 "collapsed": false
51 },
52 "outputs": [
53 {
54 "data": {
55 "text/plain": [
56 "[[False, False, False, False, False, False, False, False, False, False],\n",
57 " [False, True, False, False, False, False, False, False, False, False],\n",
58 " [False, False, False, False, False, False, False, False, False, False],\n",
59 " [False, False, False, False, False, False, False, False, False, False],\n",
60 " [False, False, False, False, False, False, False, False, False, False],\n",
61 " [False, False, False, False, False, False, False, False, False, False],\n",
62 " [False, False, False, False, False, False, False, False, False, False],\n",
63 " [False, False, False, False, False, False, False, False, False, False],\n",
64 " [False, False, False, False, False, False, False, False, False, False],\n",
65 " [False, False, False, False, False, False, False, False, False, False]]"
66 ]
67 },
68 "execution_count": 3,
69 "metadata": {},
70 "output_type": "execute_result"
71 }
72 ],
73 "source": [
74 "grid[1][1] = True\n",
75 "grid"
76 ]
77 },
78 {
79 "cell_type": "code",
80 "execution_count": 4,
81 "metadata": {
82 "collapsed": true
83 },
84 "outputs": [],
85 "source": [
86 "def print_grid(grid):\n",
87 " print('\\n'.join(''.join('*' if l else '.' for l in line) for line in grid))"
88 ]
89 },
90 {
91 "cell_type": "code",
92 "execution_count": 5,
93 "metadata": {
94 "collapsed": false
95 },
96 "outputs": [
97 {
98 "name": "stdout",
99 "output_type": "stream",
100 "text": [
101 "..........\n",
102 ".*........\n",
103 "..........\n",
104 "..........\n",
105 "..........\n",
106 "..........\n",
107 "..........\n",
108 "..........\n",
109 "..........\n",
110 "..........\n"
111 ]
112 }
113 ],
114 "source": [
115 "print_grid(grid)"
116 ]
117 },
118 {
119 "cell_type": "code",
120 "execution_count": 6,
121 "metadata": {
122 "collapsed": true
123 },
124 "outputs": [],
125 "source": [
126 "def turn_on(r1, c1, r2, c2, grid):\n",
127 " for r in range(r1, r2+1):\n",
128 " for c in range(c1, c2+1):\n",
129 " grid[r][c] = True "
130 ]
131 },
132 {
133 "cell_type": "code",
134 "execution_count": 7,
135 "metadata": {
136 "collapsed": true
137 },
138 "outputs": [],
139 "source": [
140 "def turn_off(r1, c1, r2, c2, grid):\n",
141 " for r in range(r1, r2+1):\n",
142 " for c in range(c1, c2+1):\n",
143 " grid[r][c] = False "
144 ]
145 },
146 {
147 "cell_type": "code",
148 "execution_count": 8,
149 "metadata": {
150 "collapsed": true
151 },
152 "outputs": [],
153 "source": [
154 "def toggle(r1, c1, r2, c2, grid):\n",
155 " for r in range(r1, r2+1):\n",
156 " for c in range(c1, c2+1):\n",
157 " grid[r][c] = not grid[r][c] "
158 ]
159 },
160 {
161 "cell_type": "code",
162 "execution_count": 9,
163 "metadata": {
164 "collapsed": false
165 },
166 "outputs": [
167 {
168 "name": "stdout",
169 "output_type": "stream",
170 "text": [
171 "****......\n",
172 "****......\n",
173 "****......\n",
174 "**..***...\n",
175 "**........\n",
176 "**.....**.\n",
177 "****...**.\n",
178 ".........*\n",
179 ".......***\n",
180 ".......***\n"
181 ]
182 }
183 ],
184 "source": [
185 "grid = [list([False]*10) for _ in range(10)]\n",
186 "turn_on(3, 2, 5, 6, grid)\n",
187 "turn_off(4, 4, 7, 7, grid)\n",
188 "toggle(0, 0, 6, 3, grid)\n",
189 "turn_on(7, 7, 9, 9, grid)\n",
190 "toggle(5, 7, 7, 8, grid)\n",
191 "print_grid(grid)"
192 ]
193 },
194 {
195 "cell_type": "code",
196 "execution_count": 10,
197 "metadata": {
198 "collapsed": false
199 },
200 "outputs": [
201 {
202 "data": {
203 "text/plain": [
204 "36"
205 ]
206 },
207 "execution_count": 10,
208 "metadata": {},
209 "output_type": "execute_result"
210 }
211 ],
212 "source": [
213 "sum(sum(line) for line in grid)"
214 ]
215 },
216 {
217 "cell_type": "code",
218 "execution_count": 11,
219 "metadata": {
220 "collapsed": true
221 },
222 "outputs": [],
223 "source": [
224 "def parse(line):\n",
225 " words = line.split(' ')\n",
226 " if line.startswith('turn'):\n",
227 " command = words[1]\n",
228 " s = words[2].split(',')\n",
229 " f = words[4].split(',')\n",
230 " else:\n",
231 " command = words[0]\n",
232 " s = words[1].split(',')\n",
233 " f = words[3].split(',')\n",
234 " # print(command, s, f)\n",
235 " r1 = min(int(s[0]), int(f[0]))\n",
236 " r2 = max(int(s[0]), int(f[0]))\n",
237 " c1 = min(int(s[1]), int(f[1]))\n",
238 " c2 = max(int(s[1]), int(f[1]))\n",
239 " return command, r1, c1, r2, c2"
240 ]
241 },
242 {
243 "cell_type": "code",
244 "execution_count": 12,
245 "metadata": {
246 "collapsed": false
247 },
248 "outputs": [
249 {
250 "data": {
251 "text/plain": [
252 "('toggle', 489, 959, 759, 964)"
253 ]
254 },
255 "execution_count": 12,
256 "metadata": {},
257 "output_type": "execute_result"
258 }
259 ],
260 "source": [
261 "parse('toggle 489,959 through 759,964')"
262 ]
263 },
264 {
265 "cell_type": "code",
266 "execution_count": 13,
267 "metadata": {
268 "collapsed": true
269 },
270 "outputs": [],
271 "source": [
272 "def do_line(line, grid):\n",
273 " command, r1, c1, r2, c2 = parse(line)\n",
274 " if command == 'on':\n",
275 " turn_on(r1, c1, r2, c2, grid)\n",
276 " elif command == 'off':\n",
277 " turn_off(r1, c1, r2, c2, grid)\n",
278 " else:\n",
279 " toggle(r1, c1, r2, c2, grid)"
280 ]
281 },
282 {
283 "cell_type": "code",
284 "execution_count": 14,
285 "metadata": {
286 "collapsed": true
287 },
288 "outputs": [],
289 "source": [
290 "grid = [list([False]*1000) for _ in range(1000)]"
291 ]
292 },
293 {
294 "cell_type": "code",
295 "execution_count": 15,
296 "metadata": {
297 "collapsed": false
298 },
299 "outputs": [
300 {
301 "data": {
302 "text/plain": [
303 "569999"
304 ]
305 },
306 "execution_count": 15,
307 "metadata": {},
308 "output_type": "execute_result"
309 }
310 ],
311 "source": [
312 "grid = [list([False]*1000) for _ in range(1000)]\n",
313 "for line in pi6.splitlines():\n",
314 " do_line(line.strip(), grid)\n",
315 "sum(sum(line) for line in grid)"
316 ]
317 },
318 {
319 "cell_type": "code",
320 "execution_count": 16,
321 "metadata": {
322 "collapsed": false
323 },
324 "outputs": [
325 {
326 "name": "stdout",
327 "output_type": "stream",
328 "text": [
329 "turn on 489,959 through 759,964\n"
330 ]
331 },
332 {
333 "data": {
334 "text/plain": [
335 "1626"
336 ]
337 },
338 "execution_count": 16,
339 "metadata": {},
340 "output_type": "execute_result"
341 }
342 ],
343 "source": [
344 "grid = [list([False]*1000) for _ in range(1000)]\n",
345 "do_line(pi6.splitlines()[0].strip(), grid)\n",
346 "print(pi6.splitlines()[0].strip())\n",
347 "sum(sum(line) for line in grid)"
348 ]
349 },
350 {
351 "cell_type": "code",
352 "execution_count": 17,
353 "metadata": {
354 "collapsed": false
355 },
356 "outputs": [
357 {
358 "data": {
359 "text/plain": [
360 "1626"
361 ]
362 },
363 "execution_count": 17,
364 "metadata": {},
365 "output_type": "execute_result"
366 }
367 ],
368 "source": [
369 "((759-489)+1)*((964-959)+1)"
370 ]
371 },
372 {
373 "cell_type": "code",
374 "execution_count": 18,
375 "metadata": {
376 "collapsed": true
377 },
378 "outputs": [],
379 "source": [
380 "def do_line2(line, grid):\n",
381 " command, r1, c1, r2, c2 = parse(line)\n",
382 " if command == 'on':\n",
383 " turn_on2(r1, c1, r2, c2, grid)\n",
384 " elif command == 'off':\n",
385 " turn_off2(r1, c1, r2, c2, grid)\n",
386 " else:\n",
387 " toggle2(r1, c1, r2, c2, grid)"
388 ]
389 },
390 {
391 "cell_type": "code",
392 "execution_count": 19,
393 "metadata": {
394 "collapsed": true
395 },
396 "outputs": [],
397 "source": [
398 "def turn_on2(r1, c1, r2, c2, grid):\n",
399 " for r in range(r1, r2+1):\n",
400 " for c in range(c1, c2+1):\n",
401 " grid[r][c] +=1 \n",
402 "\n",
403 "def turn_off2(r1, c1, r2, c2, grid):\n",
404 " for r in range(r1, r2+1):\n",
405 " for c in range(c1, c2+1):\n",
406 " grid[r][c] -= 1\n",
407 " if grid[r][c] < 0:\n",
408 " grid[r][c] = 0\n",
409 "\n",
410 "def toggle2(r1, c1, r2, c2, grid):\n",
411 " for r in range(r1, r2+1):\n",
412 " for c in range(c1, c2+1):\n",
413 " grid[r][c] += 2"
414 ]
415 },
416 {
417 "cell_type": "code",
418 "execution_count": 20,
419 "metadata": {
420 "collapsed": false
421 },
422 "outputs": [
423 {
424 "data": {
425 "text/plain": [
426 "17836115"
427 ]
428 },
429 "execution_count": 20,
430 "metadata": {},
431 "output_type": "execute_result"
432 }
433 ],
434 "source": [
435 "grid2 = [list([0]*1000) for _ in range(1000)]\n",
436 "for line in pi6.splitlines():\n",
437 " do_line2(line.strip(), grid2)\n",
438 "sum(sum(line) for line in grid2)"
439 ]
440 },
441 {
442 "cell_type": "code",
443 "execution_count": 21,
444 "metadata": {
445 "collapsed": false
446 },
447 "outputs": [
448 {
449 "data": {
450 "text/plain": [
451 "[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
452 " [0, 2, 0, 0, 0, 0, 0, 0, 0, 0],\n",
453 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
454 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
455 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
456 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
457 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
458 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
459 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
460 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]"
461 ]
462 },
463 "execution_count": 21,
464 "metadata": {},
465 "output_type": "execute_result"
466 }
467 ],
468 "source": [
469 "grid = [list([0]*10) for _ in range(10)]\n",
470 "grid[1][1] += 2\n",
471 "grid"
472 ]
473 },
474 {
475 "cell_type": "code",
476 "execution_count": null,
477 "metadata": {
478 "collapsed": true
479 },
480 "outputs": [],
481 "source": []
482 }
483 ],
484 "metadata": {
485 "kernelspec": {
486 "display_name": "Python 3",
487 "language": "python",
488 "name": "python3"
489 },
490 "language_info": {
491 "codemirror_mode": {
492 "name": "ipython",
493 "version": 3
494 },
495 "file_extension": ".py",
496 "mimetype": "text/x-python",
497 "name": "python",
498 "nbconvert_exporter": "python",
499 "pygments_lexer": "ipython3",
500 "version": "3.4.3"
501 }
502 },
503 "nbformat": 4,
504 "nbformat_minor": 0
505 }