11 "pi6 = open('advent06.txt').read().strip()"
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]]"
38 "output_type": "execute_result"
42 "grid = [list([False]*10) for _ in range(10)]\n",
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]]"
70 "output_type": "execute_result"
74 "grid[1][1] = True\n",
86 "def print_grid(grid):\n",
87 " print('\\n'.join(''.join('*' if l else '.' for l in line) for line in grid))"
99 "output_type": "stream",
120 "execution_count": 6,
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 "
134 "execution_count": 7,
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 "
148 "execution_count": 8,
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] "
162 "execution_count": 9,
169 "output_type": "stream",
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",
196 "execution_count": 10,
207 "execution_count": 10,
209 "output_type": "execute_result"
213 "sum(sum(line) for line in grid)"
218 "execution_count": 11,
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",
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"
244 "execution_count": 12,
252 "('toggle', 489, 959, 759, 964)"
255 "execution_count": 12,
257 "output_type": "execute_result"
261 "parse('toggle 489,959 through 759,964')"
266 "execution_count": 13,
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",
279 " toggle(r1, c1, r2, c2, grid)"
284 "execution_count": 14,
290 "grid = [list([False]*1000) for _ in range(1000)]"
295 "execution_count": 15,
306 "execution_count": 15,
308 "output_type": "execute_result"
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)"
320 "execution_count": 16,
327 "output_type": "stream",
329 "turn on 489,959 through 759,964\n"
338 "execution_count": 16,
340 "output_type": "execute_result"
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)"
352 "execution_count": 17,
363 "execution_count": 17,
365 "output_type": "execute_result"
369 "((759-489)+1)*((964-959)+1)"
374 "execution_count": 18,
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",
387 " toggle2(r1, c1, r2, c2, grid)"
392 "execution_count": 19,
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",
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",
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",
418 "execution_count": 20,
429 "execution_count": 20,
431 "output_type": "execute_result"
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)"
443 "execution_count": 21,
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]]"
463 "execution_count": 21,
465 "output_type": "execute_result"
469 "grid = [list([0]*10) for _ in range(10)]\n",
476 "execution_count": null,
486 "display_name": "Python 3",
487 "language": "python",
495 "file_extension": ".py",
496 "mimetype": "text/x-python",
498 "nbconvert_exporter": "python",
499 "pygments_lexer": "ipython3",