First bit of the A-level miscellany
[cas-master-teacher-training.git] / Untitled0.ipynb
1 {
2 "metadata": {
3 "name": "",
4 "signature": "sha256:796179cdb4347de4d86a7db09f3e024ef710983a025f30cfe2a424e9a755bc6b"
5 },
6 "nbformat": 3,
7 "nbformat_minor": 0,
8 "worksheets": [
9 {
10 "cells": [
11 {
12 "cell_type": "code",
13 "collapsed": false,
14 "input": [
15 "members = ['Freddie', 'Brian', 'Roger', 'John']\n",
16 "tour_lineup = members\n",
17 "tour_lineup[0] = 'Paul'\n",
18 "print(tour_lineup)\n",
19 "print(members)"
20 ],
21 "language": "python",
22 "metadata": {},
23 "outputs": [
24 {
25 "output_type": "stream",
26 "stream": "stdout",
27 "text": [
28 "['Paul', 'Brian', 'Roger', 'John']\n",
29 "['Paul', 'Brian', 'Roger', 'John']\n"
30 ]
31 }
32 ],
33 "prompt_number": 1
34 },
35 {
36 "cell_type": "code",
37 "collapsed": false,
38 "input": [
39 "members[1:2]"
40 ],
41 "language": "python",
42 "metadata": {},
43 "outputs": [
44 {
45 "metadata": {},
46 "output_type": "pyout",
47 "prompt_number": 2,
48 "text": [
49 "['Brian']"
50 ]
51 }
52 ],
53 "prompt_number": 2
54 },
55 {
56 "cell_type": "code",
57 "collapsed": false,
58 "input": [
59 "members = ['Freddie', 'Brian', 'Roger', 'John']\n",
60 "tour_lineup = members\n",
61 "tour_lineup == members"
62 ],
63 "language": "python",
64 "metadata": {},
65 "outputs": [
66 {
67 "metadata": {},
68 "output_type": "pyout",
69 "prompt_number": 3,
70 "text": [
71 "True"
72 ]
73 }
74 ],
75 "prompt_number": 3
76 },
77 {
78 "cell_type": "code",
79 "collapsed": false,
80 "input": [
81 "tour_lineup = members[:]\n",
82 "tour_lineup == members"
83 ],
84 "language": "python",
85 "metadata": {},
86 "outputs": [
87 {
88 "metadata": {},
89 "output_type": "pyout",
90 "prompt_number": 4,
91 "text": [
92 "True"
93 ]
94 }
95 ],
96 "prompt_number": 4
97 },
98 {
99 "cell_type": "code",
100 "collapsed": false,
101 "input": [
102 "tour_lineup is members"
103 ],
104 "language": "python",
105 "metadata": {},
106 "outputs": [
107 {
108 "metadata": {},
109 "output_type": "pyout",
110 "prompt_number": 5,
111 "text": [
112 "False"
113 ]
114 }
115 ],
116 "prompt_number": 5
117 },
118 {
119 "cell_type": "code",
120 "collapsed": false,
121 "input": [
122 "[(a, b, int((a**2 + b**2)**0.5)) \n",
123 " for a in range(1, 20) \n",
124 " for b in range(a, 20) \n",
125 " if int((a**2 + b**2)**0.5) == (a**2 + b**2)**0.5]"
126 ],
127 "language": "python",
128 "metadata": {},
129 "outputs": [
130 {
131 "metadata": {},
132 "output_type": "pyout",
133 "prompt_number": 6,
134 "text": [
135 "[(3, 4, 5), (5, 12, 13), (6, 8, 10), (8, 15, 17), (9, 12, 15), (12, 16, 20)]"
136 ]
137 }
138 ],
139 "prompt_number": 6
140 },
141 {
142 "cell_type": "code",
143 "collapsed": false,
144 "input": [
145 "GRID_STRING = \"\"\"08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08\n",
146 "49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00\n",
147 "81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65\n",
148 "52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91\n",
149 "22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80\n",
150 "24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50\n",
151 "32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70\n",
152 "67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21\n",
153 "24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72\n",
154 "21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95\n",
155 "78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92\n",
156 "16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57\n",
157 "86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58\n",
158 "19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40\n",
159 "04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66\n",
160 "88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69\n",
161 "04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36\n",
162 "20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16\n",
163 "20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54\n",
164 "01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48\"\"\"\n",
165 "ROWS = COLUMNS = 20"
166 ],
167 "language": "python",
168 "metadata": {},
169 "outputs": [],
170 "prompt_number": 7
171 },
172 {
173 "cell_type": "code",
174 "collapsed": false,
175 "input": [
176 "grid_nums = [int(n) for n in GRID_STRING.split()]\n",
177 "grid_nums"
178 ],
179 "language": "python",
180 "metadata": {},
181 "outputs": [
182 {
183 "metadata": {},
184 "output_type": "pyout",
185 "prompt_number": 8,
186 "text": [
187 "[8,\n",
188 " 2,\n",
189 " 22,\n",
190 " 97,\n",
191 " 38,\n",
192 " 15,\n",
193 " 0,\n",
194 " 40,\n",
195 " 0,\n",
196 " 75,\n",
197 " 4,\n",
198 " 5,\n",
199 " 7,\n",
200 " 78,\n",
201 " 52,\n",
202 " 12,\n",
203 " 50,\n",
204 " 77,\n",
205 " 91,\n",
206 " 8,\n",
207 " 49,\n",
208 " 49,\n",
209 " 99,\n",
210 " 40,\n",
211 " 17,\n",
212 " 81,\n",
213 " 18,\n",
214 " 57,\n",
215 " 60,\n",
216 " 87,\n",
217 " 17,\n",
218 " 40,\n",
219 " 98,\n",
220 " 43,\n",
221 " 69,\n",
222 " 48,\n",
223 " 4,\n",
224 " 56,\n",
225 " 62,\n",
226 " 0,\n",
227 " 81,\n",
228 " 49,\n",
229 " 31,\n",
230 " 73,\n",
231 " 55,\n",
232 " 79,\n",
233 " 14,\n",
234 " 29,\n",
235 " 93,\n",
236 " 71,\n",
237 " 40,\n",
238 " 67,\n",
239 " 53,\n",
240 " 88,\n",
241 " 30,\n",
242 " 3,\n",
243 " 49,\n",
244 " 13,\n",
245 " 36,\n",
246 " 65,\n",
247 " 52,\n",
248 " 70,\n",
249 " 95,\n",
250 " 23,\n",
251 " 4,\n",
252 " 60,\n",
253 " 11,\n",
254 " 42,\n",
255 " 69,\n",
256 " 24,\n",
257 " 68,\n",
258 " 56,\n",
259 " 1,\n",
260 " 32,\n",
261 " 56,\n",
262 " 71,\n",
263 " 37,\n",
264 " 2,\n",
265 " 36,\n",
266 " 91,\n",
267 " 22,\n",
268 " 31,\n",
269 " 16,\n",
270 " 71,\n",
271 " 51,\n",
272 " 67,\n",
273 " 63,\n",
274 " 89,\n",
275 " 41,\n",
276 " 92,\n",
277 " 36,\n",
278 " 54,\n",
279 " 22,\n",
280 " 40,\n",
281 " 40,\n",
282 " 28,\n",
283 " 66,\n",
284 " 33,\n",
285 " 13,\n",
286 " 80,\n",
287 " 24,\n",
288 " 47,\n",
289 " 32,\n",
290 " 60,\n",
291 " 99,\n",
292 " 3,\n",
293 " 45,\n",
294 " 2,\n",
295 " 44,\n",
296 " 75,\n",
297 " 33,\n",
298 " 53,\n",
299 " 78,\n",
300 " 36,\n",
301 " 84,\n",
302 " 20,\n",
303 " 35,\n",
304 " 17,\n",
305 " 12,\n",
306 " 50,\n",
307 " 32,\n",
308 " 98,\n",
309 " 81,\n",
310 " 28,\n",
311 " 64,\n",
312 " 23,\n",
313 " 67,\n",
314 " 10,\n",
315 " 26,\n",
316 " 38,\n",
317 " 40,\n",
318 " 67,\n",
319 " 59,\n",
320 " 54,\n",
321 " 70,\n",
322 " 66,\n",
323 " 18,\n",
324 " 38,\n",
325 " 64,\n",
326 " 70,\n",
327 " 67,\n",
328 " 26,\n",
329 " 20,\n",
330 " 68,\n",
331 " 2,\n",
332 " 62,\n",
333 " 12,\n",
334 " 20,\n",
335 " 95,\n",
336 " 63,\n",
337 " 94,\n",
338 " 39,\n",
339 " 63,\n",
340 " 8,\n",
341 " 40,\n",
342 " 91,\n",
343 " 66,\n",
344 " 49,\n",
345 " 94,\n",
346 " 21,\n",
347 " 24,\n",
348 " 55,\n",
349 " 58,\n",
350 " 5,\n",
351 " 66,\n",
352 " 73,\n",
353 " 99,\n",
354 " 26,\n",
355 " 97,\n",
356 " 17,\n",
357 " 78,\n",
358 " 78,\n",
359 " 96,\n",
360 " 83,\n",
361 " 14,\n",
362 " 88,\n",
363 " 34,\n",
364 " 89,\n",
365 " 63,\n",
366 " 72,\n",
367 " 21,\n",
368 " 36,\n",
369 " 23,\n",
370 " 9,\n",
371 " 75,\n",
372 " 0,\n",
373 " 76,\n",
374 " 44,\n",
375 " 20,\n",
376 " 45,\n",
377 " 35,\n",
378 " 14,\n",
379 " 0,\n",
380 " 61,\n",
381 " 33,\n",
382 " 97,\n",
383 " 34,\n",
384 " 31,\n",
385 " 33,\n",
386 " 95,\n",
387 " 78,\n",
388 " 17,\n",
389 " 53,\n",
390 " 28,\n",
391 " 22,\n",
392 " 75,\n",
393 " 31,\n",
394 " 67,\n",
395 " 15,\n",
396 " 94,\n",
397 " 3,\n",
398 " 80,\n",
399 " 4,\n",
400 " 62,\n",
401 " 16,\n",
402 " 14,\n",
403 " 9,\n",
404 " 53,\n",
405 " 56,\n",
406 " 92,\n",
407 " 16,\n",
408 " 39,\n",
409 " 5,\n",
410 " 42,\n",
411 " 96,\n",
412 " 35,\n",
413 " 31,\n",
414 " 47,\n",
415 " 55,\n",
416 " 58,\n",
417 " 88,\n",
418 " 24,\n",
419 " 0,\n",
420 " 17,\n",
421 " 54,\n",
422 " 24,\n",
423 " 36,\n",
424 " 29,\n",
425 " 85,\n",
426 " 57,\n",
427 " 86,\n",
428 " 56,\n",
429 " 0,\n",
430 " 48,\n",
431 " 35,\n",
432 " 71,\n",
433 " 89,\n",
434 " 7,\n",
435 " 5,\n",
436 " 44,\n",
437 " 44,\n",
438 " 37,\n",
439 " 44,\n",
440 " 60,\n",
441 " 21,\n",
442 " 58,\n",
443 " 51,\n",
444 " 54,\n",
445 " 17,\n",
446 " 58,\n",
447 " 19,\n",
448 " 80,\n",
449 " 81,\n",
450 " 68,\n",
451 " 5,\n",
452 " 94,\n",
453 " 47,\n",
454 " 69,\n",
455 " 28,\n",
456 " 73,\n",
457 " 92,\n",
458 " 13,\n",
459 " 86,\n",
460 " 52,\n",
461 " 17,\n",
462 " 77,\n",
463 " 4,\n",
464 " 89,\n",
465 " 55,\n",
466 " 40,\n",
467 " 4,\n",
468 " 52,\n",
469 " 8,\n",
470 " 83,\n",
471 " 97,\n",
472 " 35,\n",
473 " 99,\n",
474 " 16,\n",
475 " 7,\n",
476 " 97,\n",
477 " 57,\n",
478 " 32,\n",
479 " 16,\n",
480 " 26,\n",
481 " 26,\n",
482 " 79,\n",
483 " 33,\n",
484 " 27,\n",
485 " 98,\n",
486 " 66,\n",
487 " 88,\n",
488 " 36,\n",
489 " 68,\n",
490 " 87,\n",
491 " 57,\n",
492 " 62,\n",
493 " 20,\n",
494 " 72,\n",
495 " 3,\n",
496 " 46,\n",
497 " 33,\n",
498 " 67,\n",
499 " 46,\n",
500 " 55,\n",
501 " 12,\n",
502 " 32,\n",
503 " 63,\n",
504 " 93,\n",
505 " 53,\n",
506 " 69,\n",
507 " 4,\n",
508 " 42,\n",
509 " 16,\n",
510 " 73,\n",
511 " 38,\n",
512 " 25,\n",
513 " 39,\n",
514 " 11,\n",
515 " 24,\n",
516 " 94,\n",
517 " 72,\n",
518 " 18,\n",
519 " 8,\n",
520 " 46,\n",
521 " 29,\n",
522 " 32,\n",
523 " 40,\n",
524 " 62,\n",
525 " 76,\n",
526 " 36,\n",
527 " 20,\n",
528 " 69,\n",
529 " 36,\n",
530 " 41,\n",
531 " 72,\n",
532 " 30,\n",
533 " 23,\n",
534 " 88,\n",
535 " 34,\n",
536 " 62,\n",
537 " 99,\n",
538 " 69,\n",
539 " 82,\n",
540 " 67,\n",
541 " 59,\n",
542 " 85,\n",
543 " 74,\n",
544 " 4,\n",
545 " 36,\n",
546 " 16,\n",
547 " 20,\n",
548 " 73,\n",
549 " 35,\n",
550 " 29,\n",
551 " 78,\n",
552 " 31,\n",
553 " 90,\n",
554 " 1,\n",
555 " 74,\n",
556 " 31,\n",
557 " 49,\n",
558 " 71,\n",
559 " 48,\n",
560 " 86,\n",
561 " 81,\n",
562 " 16,\n",
563 " 23,\n",
564 " 57,\n",
565 " 5,\n",
566 " 54,\n",
567 " 1,\n",
568 " 70,\n",
569 " 54,\n",
570 " 71,\n",
571 " 83,\n",
572 " 51,\n",
573 " 54,\n",
574 " 69,\n",
575 " 16,\n",
576 " 92,\n",
577 " 33,\n",
578 " 48,\n",
579 " 61,\n",
580 " 43,\n",
581 " 52,\n",
582 " 1,\n",
583 " 89,\n",
584 " 19,\n",
585 " 67,\n",
586 " 48]"
587 ]
588 }
589 ],
590 "prompt_number": 8
591 },
592 {
593 "cell_type": "code",
594 "collapsed": false,
595 "input": [
596 "g1 = []\n",
597 "for rowstart in range(0, ROWS * COLUMNS, COLUMNS):\n",
598 " g1.append(grid_nums[rowstart:rowstart+COLUMNS])\n",
599 "g1"
600 ],
601 "language": "python",
602 "metadata": {},
603 "outputs": [
604 {
605 "metadata": {},
606 "output_type": "pyout",
607 "prompt_number": 9,
608 "text": [
609 "[[8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8],\n",
610 " [49,\n",
611 " 49,\n",
612 " 99,\n",
613 " 40,\n",
614 " 17,\n",
615 " 81,\n",
616 " 18,\n",
617 " 57,\n",
618 " 60,\n",
619 " 87,\n",
620 " 17,\n",
621 " 40,\n",
622 " 98,\n",
623 " 43,\n",
624 " 69,\n",
625 " 48,\n",
626 " 4,\n",
627 " 56,\n",
628 " 62,\n",
629 " 0],\n",
630 " [81,\n",
631 " 49,\n",
632 " 31,\n",
633 " 73,\n",
634 " 55,\n",
635 " 79,\n",
636 " 14,\n",
637 " 29,\n",
638 " 93,\n",
639 " 71,\n",
640 " 40,\n",
641 " 67,\n",
642 " 53,\n",
643 " 88,\n",
644 " 30,\n",
645 " 3,\n",
646 " 49,\n",
647 " 13,\n",
648 " 36,\n",
649 " 65],\n",
650 " [52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91],\n",
651 " [22,\n",
652 " 31,\n",
653 " 16,\n",
654 " 71,\n",
655 " 51,\n",
656 " 67,\n",
657 " 63,\n",
658 " 89,\n",
659 " 41,\n",
660 " 92,\n",
661 " 36,\n",
662 " 54,\n",
663 " 22,\n",
664 " 40,\n",
665 " 40,\n",
666 " 28,\n",
667 " 66,\n",
668 " 33,\n",
669 " 13,\n",
670 " 80],\n",
671 " [24,\n",
672 " 47,\n",
673 " 32,\n",
674 " 60,\n",
675 " 99,\n",
676 " 3,\n",
677 " 45,\n",
678 " 2,\n",
679 " 44,\n",
680 " 75,\n",
681 " 33,\n",
682 " 53,\n",
683 " 78,\n",
684 " 36,\n",
685 " 84,\n",
686 " 20,\n",
687 " 35,\n",
688 " 17,\n",
689 " 12,\n",
690 " 50],\n",
691 " [32,\n",
692 " 98,\n",
693 " 81,\n",
694 " 28,\n",
695 " 64,\n",
696 " 23,\n",
697 " 67,\n",
698 " 10,\n",
699 " 26,\n",
700 " 38,\n",
701 " 40,\n",
702 " 67,\n",
703 " 59,\n",
704 " 54,\n",
705 " 70,\n",
706 " 66,\n",
707 " 18,\n",
708 " 38,\n",
709 " 64,\n",
710 " 70],\n",
711 " [67,\n",
712 " 26,\n",
713 " 20,\n",
714 " 68,\n",
715 " 2,\n",
716 " 62,\n",
717 " 12,\n",
718 " 20,\n",
719 " 95,\n",
720 " 63,\n",
721 " 94,\n",
722 " 39,\n",
723 " 63,\n",
724 " 8,\n",
725 " 40,\n",
726 " 91,\n",
727 " 66,\n",
728 " 49,\n",
729 " 94,\n",
730 " 21],\n",
731 " [24,\n",
732 " 55,\n",
733 " 58,\n",
734 " 5,\n",
735 " 66,\n",
736 " 73,\n",
737 " 99,\n",
738 " 26,\n",
739 " 97,\n",
740 " 17,\n",
741 " 78,\n",
742 " 78,\n",
743 " 96,\n",
744 " 83,\n",
745 " 14,\n",
746 " 88,\n",
747 " 34,\n",
748 " 89,\n",
749 " 63,\n",
750 " 72],\n",
751 " [21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95],\n",
752 " [78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92],\n",
753 " [16,\n",
754 " 39,\n",
755 " 5,\n",
756 " 42,\n",
757 " 96,\n",
758 " 35,\n",
759 " 31,\n",
760 " 47,\n",
761 " 55,\n",
762 " 58,\n",
763 " 88,\n",
764 " 24,\n",
765 " 0,\n",
766 " 17,\n",
767 " 54,\n",
768 " 24,\n",
769 " 36,\n",
770 " 29,\n",
771 " 85,\n",
772 " 57],\n",
773 " [86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58],\n",
774 " [19,\n",
775 " 80,\n",
776 " 81,\n",
777 " 68,\n",
778 " 5,\n",
779 " 94,\n",
780 " 47,\n",
781 " 69,\n",
782 " 28,\n",
783 " 73,\n",
784 " 92,\n",
785 " 13,\n",
786 " 86,\n",
787 " 52,\n",
788 " 17,\n",
789 " 77,\n",
790 " 4,\n",
791 " 89,\n",
792 " 55,\n",
793 " 40],\n",
794 " [4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66],\n",
795 " [88,\n",
796 " 36,\n",
797 " 68,\n",
798 " 87,\n",
799 " 57,\n",
800 " 62,\n",
801 " 20,\n",
802 " 72,\n",
803 " 3,\n",
804 " 46,\n",
805 " 33,\n",
806 " 67,\n",
807 " 46,\n",
808 " 55,\n",
809 " 12,\n",
810 " 32,\n",
811 " 63,\n",
812 " 93,\n",
813 " 53,\n",
814 " 69],\n",
815 " [4,\n",
816 " 42,\n",
817 " 16,\n",
818 " 73,\n",
819 " 38,\n",
820 " 25,\n",
821 " 39,\n",
822 " 11,\n",
823 " 24,\n",
824 " 94,\n",
825 " 72,\n",
826 " 18,\n",
827 " 8,\n",
828 " 46,\n",
829 " 29,\n",
830 " 32,\n",
831 " 40,\n",
832 " 62,\n",
833 " 76,\n",
834 " 36],\n",
835 " [20,\n",
836 " 69,\n",
837 " 36,\n",
838 " 41,\n",
839 " 72,\n",
840 " 30,\n",
841 " 23,\n",
842 " 88,\n",
843 " 34,\n",
844 " 62,\n",
845 " 99,\n",
846 " 69,\n",
847 " 82,\n",
848 " 67,\n",
849 " 59,\n",
850 " 85,\n",
851 " 74,\n",
852 " 4,\n",
853 " 36,\n",
854 " 16],\n",
855 " [20,\n",
856 " 73,\n",
857 " 35,\n",
858 " 29,\n",
859 " 78,\n",
860 " 31,\n",
861 " 90,\n",
862 " 1,\n",
863 " 74,\n",
864 " 31,\n",
865 " 49,\n",
866 " 71,\n",
867 " 48,\n",
868 " 86,\n",
869 " 81,\n",
870 " 16,\n",
871 " 23,\n",
872 " 57,\n",
873 " 5,\n",
874 " 54],\n",
875 " [1,\n",
876 " 70,\n",
877 " 54,\n",
878 " 71,\n",
879 " 83,\n",
880 " 51,\n",
881 " 54,\n",
882 " 69,\n",
883 " 16,\n",
884 " 92,\n",
885 " 33,\n",
886 " 48,\n",
887 " 61,\n",
888 " 43,\n",
889 " 52,\n",
890 " 1,\n",
891 " 89,\n",
892 " 19,\n",
893 " 67,\n",
894 " 48]]"
895 ]
896 }
897 ],
898 "prompt_number": 9
899 },
900 {
901 "cell_type": "code",
902 "collapsed": false,
903 "input": [
904 "g2 = {}\n",
905 "for x in range(COLUMNS):\n",
906 " for y in range(ROWS):\n",
907 " g2[(x, y)] = grid_nums[x + y * COLUMNS]\n",
908 "g2"
909 ],
910 "language": "python",
911 "metadata": {},
912 "outputs": [
913 {
914 "metadata": {},
915 "output_type": "pyout",
916 "prompt_number": 10,
917 "text": [
918 "{(7, 3): 42,\n",
919 " (6, 9): 76,\n",
920 " (17, 11): 29,\n",
921 " (19, 19): 48,\n",
922 " (16, 6): 18,\n",
923 " (7, 12): 7,\n",
924 " (19, 4): 80,\n",
925 " (18, 4): 13,\n",
926 " (18, 19): 67,\n",
927 " (8, 5): 44,\n",
928 " (10, 8): 78,\n",
929 " (9, 0): 75,\n",
930 " (11, 5): 53,\n",
931 " (10, 7): 94,\n",
932 " (14, 18): 81,\n",
933 " (12, 6): 59,\n",
934 " (10, 18): 49,\n",
935 " (0, 17): 20,\n",
936 " (15, 11): 24,\n",
937 " (14, 1): 69,\n",
938 " (13, 7): 8,\n",
939 " (12, 17): 82,\n",
940 " (0, 4): 22,\n",
941 " (15, 4): 28,\n",
942 " (1, 1): 49,\n",
943 " (4, 10): 22,\n",
944 " (3, 2): 73,\n",
945 " (2, 6): 81,\n",
946 " (5, 11): 35,\n",
947 " (4, 5): 99,\n",
948 " (6, 0): 0,\n",
949 " (4, 16): 38,\n",
950 " (7, 5): 2,\n",
951 " (19, 13): 40,\n",
952 " (7, 0): 40,\n",
953 " (16, 19): 89,\n",
954 " (17, 7): 49,\n",
955 " (18, 10): 56,\n",
956 " (17, 18): 57,\n",
957 " (16, 8): 34,\n",
958 " (8, 12): 5,\n",
959 " (9, 9): 45,\n",
960 " (10, 14): 57,\n",
961 " (8, 18): 74,\n",
962 " (11, 15): 67,\n",
963 " (9, 19): 92,\n",
964 " (15, 16): 32,\n",
965 " (14, 8): 14,\n",
966 " (13, 0): 78,\n",
967 " (12, 8): 96,\n",
968 " (11, 16): 18,\n",
969 " (15, 13): 77,\n",
970 " (13, 13): 52,\n",
971 " (2, 18): 35,\n",
972 " (0, 14): 4,\n",
973 " (3, 11): 42,\n",
974 " (2, 1): 99,\n",
975 " (1, 15): 36,\n",
976 " (4, 12): 35,\n",
977 " (2, 12): 0,\n",
978 " (5, 1): 81,\n",
979 " (3, 17): 41,\n",
980 " (16, 7): 66,\n",
981 " (6, 14): 99,\n",
982 " (19, 18): 54,\n",
983 " (17, 6): 38,\n",
984 " (7, 15): 72,\n",
985 " (19, 7): 21,\n",
986 " (18, 5): 12,\n",
987 " (7, 1): 57,\n",
988 " (18, 16): 76,\n",
989 " (8, 6): 26,\n",
990 " (10, 9): 35,\n",
991 " (9, 7): 63,\n",
992 " (11, 4): 54,\n",
993 " (10, 4): 36,\n",
994 " (14, 19): 52,\n",
995 " (12, 7): 63,\n",
996 " (11, 9): 14,\n",
997 " (10, 19): 33,\n",
998 " (0, 18): 20,\n",
999 " (15, 10): 14,\n",
1000 " (14, 6): 70,\n",
1001 " (13, 6): 54,\n",
1002 " (12, 18): 48,\n",
1003 " (1, 19): 70,\n",
1004 " (0, 5): 24,\n",
1005 " (15, 7): 91,\n",
1006 " (13, 19): 43,\n",
1007 " (1, 0): 2,\n",
1008 " (0, 8): 24,\n",
1009 " (4, 11): 96,\n",
1010 " (3, 5): 60,\n",
1011 " (2, 7): 20,\n",
1012 " (5, 10): 75,\n",
1013 " (4, 6): 64,\n",
1014 " (6, 1): 18,\n",
1015 " (5, 7): 62,\n",
1016 " (4, 17): 72,\n",
1017 " (16, 1): 4,\n",
1018 " (19, 12): 58,\n",
1019 " (17, 12): 54,\n",
1020 " (7, 17): 88,\n",
1021 " (19, 1): 0,\n",
1022 " (18, 11): 85,\n",
1023 " (7, 6): 10,\n",
1024 " (8, 13): 28,\n",
1025 " (9, 8): 17,\n",
1026 " (8, 0): 0,\n",
1027 " (10, 15): 33,\n",
1028 " (8, 19): 16,\n",
1029 " (11, 14): 32,\n",
1030 " (9, 18): 31,\n",
1031 " (15, 19): 1,\n",
1032 " (14, 9): 33,\n",
1033 " (12, 9): 0,\n",
1034 " (11, 19): 48,\n",
1035 " (15, 12): 58,\n",
1036 " (13, 12): 60,\n",
1037 " (2, 19): 54,\n",
1038 " (0, 15): 88,\n",
1039 " (3, 10): 28,\n",
1040 " (1, 14): 52,\n",
1041 " (4, 13): 5,\n",
1042 " (2, 13): 81,\n",
1043 " (5, 0): 15,\n",
1044 " (3, 16): 73,\n",
1045 " (6, 15): 20,\n",
1046 " (16, 9): 34,\n",
1047 " (16, 10): 9,\n",
1048 " (7, 14): 16,\n",
1049 " (6, 18): 90,\n",
1050 " (19, 6): 70,\n",
1051 " (18, 2): 36,\n",
1052 " (17, 10): 53,\n",
1053 " (18, 17): 36,\n",
1054 " (16, 2): 49,\n",
1055 " (8, 7): 95,\n",
1056 " (9, 6): 38,\n",
1057 " (11, 7): 39,\n",
1058 " (10, 5): 33,\n",
1059 " (14, 16): 29,\n",
1060 " (12, 0): 7,\n",
1061 " (11, 8): 78,\n",
1062 " (10, 16): 72,\n",
1063 " (0, 19): 1,\n",
1064 " (14, 7): 40,\n",
1065 " (13, 5): 36,\n",
1066 " (12, 19): 61,\n",
1067 " (1, 18): 73,\n",
1068 " (0, 6): 32,\n",
1069 " (15, 6): 66,\n",
1070 " (13, 18): 86,\n",
1071 " (1, 7): 26,\n",
1072 " (0, 9): 21,\n",
1073 " (3, 4): 71,\n",
1074 " (2, 4): 16,\n",
1075 " (5, 9): 0,\n",
1076 " (4, 7): 2,\n",
1077 " (6, 6): 67,\n",
1078 " (5, 6): 23,\n",
1079 " (4, 18): 78,\n",
1080 " (7, 7): 20,\n",
1081 " (5, 19): 51,\n",
1082 " (19, 15): 69,\n",
1083 " (17, 3): 2,\n",
1084 " (7, 16): 11,\n",
1085 " (19, 0): 8,\n",
1086 " (18, 8): 63,\n",
1087 " (17, 16): 62,\n",
1088 " (7, 4): 89,\n",
1089 " (9, 15): 46,\n",
1090 " (8, 1): 60,\n",
1091 " (10, 12): 44,\n",
1092 " (11, 1): 40,\n",
1093 " (9, 17): 62,\n",
1094 " (15, 18): 16,\n",
1095 " (14, 14): 26,\n",
1096 " (12, 10): 4,\n",
1097 " (11, 18): 71,\n",
1098 " (15, 15): 32,\n",
1099 " (13, 11): 17,\n",
1100 " (2, 16): 16,\n",
1101 " (0, 0): 8,\n",
1102 " (8, 14): 7,\n",
1103 " (1, 13): 80,\n",
1104 " (4, 14): 97,\n",
1105 " (2, 10): 53,\n",
1106 " (5, 15): 62,\n",
1107 " (3, 19): 71,\n",
1108 " (6, 12): 89,\n",
1109 " (17, 4): 33,\n",
1110 " (16, 12): 51,\n",
1111 " (6, 19): 54,\n",
1112 " (19, 9): 95,\n",
1113 " (18, 3): 36,\n",
1114 " (17, 9): 31,\n",
1115 " (18, 14): 98,\n",
1116 " (17, 17): 4,\n",
1117 " (16, 0): 50,\n",
1118 " (16, 15): 63,\n",
1119 " (9, 5): 75,\n",
1120 " (11, 6): 67,\n",
1121 " (10, 2): 40,\n",
1122 " (14, 17): 59,\n",
1123 " (12, 1): 98,\n",
1124 " (11, 11): 24,\n",
1125 " (10, 17): 99,\n",
1126 " (14, 4): 40,\n",
1127 " (13, 4): 40,\n",
1128 " (12, 12): 44,\n",
1129 " (1, 17): 69,\n",
1130 " (0, 7): 67,\n",
1131 " (15, 1): 48,\n",
1132 " (13, 17): 67,\n",
1133 " (1, 6): 98,\n",
1134 " (0, 10): 78,\n",
1135 " (17, 13): 89,\n",
1136 " (3, 7): 68,\n",
1137 " (2, 5): 32,\n",
1138 " (1, 11): 39,\n",
1139 " (5, 8): 73,\n",
1140 " (4, 0): 38,\n",
1141 " (6, 7): 12,\n",
1142 " (5, 5): 3,\n",
1143 " (4, 19): 83,\n",
1144 " (16, 3): 37,\n",
1145 " (6, 10): 31,\n",
1146 " (5, 18): 31,\n",
1147 " (19, 14): 66,\n",
1148 " (17, 2): 13,\n",
1149 " (7, 19): 69,\n",
1150 " (19, 3): 91,\n",
1151 " (18, 9): 33,\n",
1152 " (8, 15): 3,\n",
1153 " (9, 14): 97,\n",
1154 " (8, 2): 93,\n",
1155 " (10, 13): 92,\n",
1156 " (9, 3): 24,\n",
1157 " (11, 0): 5,\n",
1158 " (9, 16): 94,\n",
1159 " (14, 15): 12,\n",
1160 " (12, 11): 0,\n",
1161 " (15, 14): 79,\n",
1162 " (14, 2): 30,\n",
1163 " (13, 10): 62,\n",
1164 " (2, 17): 36,\n",
1165 " (0, 1): 49,\n",
1166 " (3, 12): 48,\n",
1167 " (1, 12): 56,\n",
1168 " (4, 15): 57,\n",
1169 " (3, 1): 40,\n",
1170 " (2, 11): 5,\n",
1171 " (5, 14): 35,\n",
1172 " (3, 18): 29,\n",
1173 " (6, 13): 47,\n",
1174 " (7, 8): 26,\n",
1175 " (6, 16): 39,\n",
1176 " (19, 8): 72,\n",
1177 " (18, 0): 91,\n",
1178 " (17, 8): 89,\n",
1179 " (16, 16): 40,\n",
1180 " (18, 15): 53,\n",
1181 " (8, 9): 20,\n",
1182 " (9, 4): 92,\n",
1183 " (7, 11): 47,\n",
1184 " (10, 3): 68,\n",
1185 " (12, 2): 53,\n",
1186 " (11, 10): 80,\n",
1187 " (14, 5): 84,\n",
1188 " (13, 3): 32,\n",
1189 " (12, 13): 86,\n",
1190 " (1, 16): 42,\n",
1191 " (3, 13): 68,\n",
1192 " (15, 0): 12,\n",
1193 " (13, 16): 46,\n",
1194 " (1, 5): 47,\n",
1195 " (0, 11): 16,\n",
1196 " (3, 6): 28,\n",
1197 " (2, 2): 31,\n",
1198 " (1, 10): 17,\n",
1199 " (4, 1): 17,\n",
1200 " (6, 4): 63,\n",
1201 " (5, 4): 67,\n",
1202 " (16, 4): 66,\n",
1203 " (6, 11): 31,\n",
1204 " (5, 17): 30,\n",
1205 " (19, 17): 16,\n",
1206 " (17, 1): 56,\n",
1207 " (7, 18): 1,\n",
1208 " (19, 2): 65,\n",
1209 " (18, 6): 64,\n",
1210 " (9, 13): 73,\n",
1211 " (8, 3): 69,\n",
1212 " (10, 10): 3,\n",
1213 " (9, 2): 71,\n",
1214 " (16, 13): 4,\n",
1215 " (11, 3): 56,\n",
1216 " (14, 12): 21,\n",
1217 " (12, 4): 22,\n",
1218 " (15, 9): 97,\n",
1219 " (14, 3): 56,\n",
1220 " (13, 9): 61,\n",
1221 " (0, 2): 81,\n",
1222 " (3, 15): 87,\n",
1223 " (1, 3): 70,\n",
1224 " (4, 8): 66,\n",
1225 " (3, 0): 97,\n",
1226 " (2, 8): 58,\n",
1227 " (5, 13): 94,\n",
1228 " (6, 2): 14,\n",
1229 " (16, 14): 33,\n",
1230 " (6, 17): 23,\n",
1231 " (19, 11): 57,\n",
1232 " (18, 1): 62,\n",
1233 " (17, 15): 93,\n",
1234 " (16, 17): 74,\n",
1235 " (18, 12): 17,\n",
1236 " (8, 10): 15,\n",
1237 " (9, 11): 58,\n",
1238 " (10, 0): 4,\n",
1239 " (8, 16): 24,\n",
1240 " (12, 3): 1,\n",
1241 " (11, 13): 13,\n",
1242 " (14, 10): 16,\n",
1243 " (13, 2): 88,\n",
1244 " (12, 14): 16,\n",
1245 " (15, 3): 71,\n",
1246 " (13, 15): 55,\n",
1247 " (1, 4): 31,\n",
1248 " (0, 12): 86,\n",
1249 " (3, 9): 9,\n",
1250 " (2, 3): 95,\n",
1251 " (1, 9): 36,\n",
1252 " (4, 2): 55,\n",
1253 " (2, 14): 8,\n",
1254 " (6, 5): 45,\n",
1255 " (5, 3): 60,\n",
1256 " (16, 5): 35,\n",
1257 " (6, 8): 99,\n",
1258 " (5, 16): 25,\n",
1259 " (19, 16): 36,\n",
1260 " (17, 0): 77,\n",
1261 " (7, 13): 69,\n",
1262 " (19, 5): 50,\n",
1263 " (18, 7): 94,\n",
1264 " (7, 9): 44,\n",
1265 " (18, 18): 5,\n",
1266 " (9, 12): 44,\n",
1267 " (8, 4): 41,\n",
1268 " (10, 11): 88,\n",
1269 " (9, 1): 87,\n",
1270 " (17, 5): 17,\n",
1271 " (11, 2): 67,\n",
1272 " (10, 6): 40,\n",
1273 " (16, 11): 36,\n",
1274 " (14, 13): 17,\n",
1275 " (12, 5): 78,\n",
1276 " (0, 16): 4,\n",
1277 " (15, 8): 88,\n",
1278 " (14, 0): 52,\n",
1279 " (13, 8): 83,\n",
1280 " (12, 16): 8,\n",
1281 " (0, 3): 52,\n",
1282 " (15, 5): 20,\n",
1283 " (3, 14): 83,\n",
1284 " (1, 2): 49,\n",
1285 " (4, 9): 75,\n",
1286 " (3, 3): 23,\n",
1287 " (2, 9): 23,\n",
1288 " (5, 12): 71,\n",
1289 " (4, 4): 51,\n",
1290 " (6, 3): 11,\n",
1291 " (8, 8): 97,\n",
1292 " (7, 2): 29,\n",
1293 " (7, 10): 67,\n",
1294 " (19, 10): 92,\n",
1295 " (17, 14): 27,\n",
1296 " (16, 18): 23,\n",
1297 " (18, 13): 55,\n",
1298 " (17, 19): 19,\n",
1299 " (8, 11): 55,\n",
1300 " (9, 10): 94,\n",
1301 " (10, 1): 17,\n",
1302 " (8, 17): 34,\n",
1303 " (11, 12): 37,\n",
1304 " (15, 17): 85,\n",
1305 " (14, 11): 54,\n",
1306 " (13, 1): 43,\n",
1307 " (12, 15): 46,\n",
1308 " (11, 17): 69,\n",
1309 " (15, 2): 3,\n",
1310 " (13, 14): 26,\n",
1311 " (0, 13): 19,\n",
1312 " (3, 8): 5,\n",
1313 " (2, 0): 22,\n",
1314 " (1, 8): 55,\n",
1315 " (4, 3): 4,\n",
1316 " (2, 15): 68,\n",
1317 " (5, 2): 79}"
1318 ]
1319 }
1320 ],
1321 "prompt_number": 10
1322 },
1323 {
1324 "cell_type": "code",
1325 "collapsed": false,
1326 "input": [
1327 "g2[(2, 2)]"
1328 ],
1329 "language": "python",
1330 "metadata": {},
1331 "outputs": [
1332 {
1333 "metadata": {},
1334 "output_type": "pyout",
1335 "prompt_number": 11,
1336 "text": [
1337 "31"
1338 ]
1339 }
1340 ],
1341 "prompt_number": 11
1342 },
1343 {
1344 "cell_type": "code",
1345 "collapsed": false,
1346 "input": [
1347 "g3 = [grid_nums[row * COLUMNS:(row+1) * COLUMNS] for row in range(ROWS)]\n",
1348 "g3"
1349 ],
1350 "language": "python",
1351 "metadata": {},
1352 "outputs": [
1353 {
1354 "metadata": {},
1355 "output_type": "pyout",
1356 "prompt_number": 12,
1357 "text": [
1358 "[[8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8],\n",
1359 " [49,\n",
1360 " 49,\n",
1361 " 99,\n",
1362 " 40,\n",
1363 " 17,\n",
1364 " 81,\n",
1365 " 18,\n",
1366 " 57,\n",
1367 " 60,\n",
1368 " 87,\n",
1369 " 17,\n",
1370 " 40,\n",
1371 " 98,\n",
1372 " 43,\n",
1373 " 69,\n",
1374 " 48,\n",
1375 " 4,\n",
1376 " 56,\n",
1377 " 62,\n",
1378 " 0],\n",
1379 " [81,\n",
1380 " 49,\n",
1381 " 31,\n",
1382 " 73,\n",
1383 " 55,\n",
1384 " 79,\n",
1385 " 14,\n",
1386 " 29,\n",
1387 " 93,\n",
1388 " 71,\n",
1389 " 40,\n",
1390 " 67,\n",
1391 " 53,\n",
1392 " 88,\n",
1393 " 30,\n",
1394 " 3,\n",
1395 " 49,\n",
1396 " 13,\n",
1397 " 36,\n",
1398 " 65],\n",
1399 " [52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91],\n",
1400 " [22,\n",
1401 " 31,\n",
1402 " 16,\n",
1403 " 71,\n",
1404 " 51,\n",
1405 " 67,\n",
1406 " 63,\n",
1407 " 89,\n",
1408 " 41,\n",
1409 " 92,\n",
1410 " 36,\n",
1411 " 54,\n",
1412 " 22,\n",
1413 " 40,\n",
1414 " 40,\n",
1415 " 28,\n",
1416 " 66,\n",
1417 " 33,\n",
1418 " 13,\n",
1419 " 80],\n",
1420 " [24,\n",
1421 " 47,\n",
1422 " 32,\n",
1423 " 60,\n",
1424 " 99,\n",
1425 " 3,\n",
1426 " 45,\n",
1427 " 2,\n",
1428 " 44,\n",
1429 " 75,\n",
1430 " 33,\n",
1431 " 53,\n",
1432 " 78,\n",
1433 " 36,\n",
1434 " 84,\n",
1435 " 20,\n",
1436 " 35,\n",
1437 " 17,\n",
1438 " 12,\n",
1439 " 50],\n",
1440 " [32,\n",
1441 " 98,\n",
1442 " 81,\n",
1443 " 28,\n",
1444 " 64,\n",
1445 " 23,\n",
1446 " 67,\n",
1447 " 10,\n",
1448 " 26,\n",
1449 " 38,\n",
1450 " 40,\n",
1451 " 67,\n",
1452 " 59,\n",
1453 " 54,\n",
1454 " 70,\n",
1455 " 66,\n",
1456 " 18,\n",
1457 " 38,\n",
1458 " 64,\n",
1459 " 70],\n",
1460 " [67,\n",
1461 " 26,\n",
1462 " 20,\n",
1463 " 68,\n",
1464 " 2,\n",
1465 " 62,\n",
1466 " 12,\n",
1467 " 20,\n",
1468 " 95,\n",
1469 " 63,\n",
1470 " 94,\n",
1471 " 39,\n",
1472 " 63,\n",
1473 " 8,\n",
1474 " 40,\n",
1475 " 91,\n",
1476 " 66,\n",
1477 " 49,\n",
1478 " 94,\n",
1479 " 21],\n",
1480 " [24,\n",
1481 " 55,\n",
1482 " 58,\n",
1483 " 5,\n",
1484 " 66,\n",
1485 " 73,\n",
1486 " 99,\n",
1487 " 26,\n",
1488 " 97,\n",
1489 " 17,\n",
1490 " 78,\n",
1491 " 78,\n",
1492 " 96,\n",
1493 " 83,\n",
1494 " 14,\n",
1495 " 88,\n",
1496 " 34,\n",
1497 " 89,\n",
1498 " 63,\n",
1499 " 72],\n",
1500 " [21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95],\n",
1501 " [78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92],\n",
1502 " [16,\n",
1503 " 39,\n",
1504 " 5,\n",
1505 " 42,\n",
1506 " 96,\n",
1507 " 35,\n",
1508 " 31,\n",
1509 " 47,\n",
1510 " 55,\n",
1511 " 58,\n",
1512 " 88,\n",
1513 " 24,\n",
1514 " 0,\n",
1515 " 17,\n",
1516 " 54,\n",
1517 " 24,\n",
1518 " 36,\n",
1519 " 29,\n",
1520 " 85,\n",
1521 " 57],\n",
1522 " [86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58],\n",
1523 " [19,\n",
1524 " 80,\n",
1525 " 81,\n",
1526 " 68,\n",
1527 " 5,\n",
1528 " 94,\n",
1529 " 47,\n",
1530 " 69,\n",
1531 " 28,\n",
1532 " 73,\n",
1533 " 92,\n",
1534 " 13,\n",
1535 " 86,\n",
1536 " 52,\n",
1537 " 17,\n",
1538 " 77,\n",
1539 " 4,\n",
1540 " 89,\n",
1541 " 55,\n",
1542 " 40],\n",
1543 " [4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66],\n",
1544 " [88,\n",
1545 " 36,\n",
1546 " 68,\n",
1547 " 87,\n",
1548 " 57,\n",
1549 " 62,\n",
1550 " 20,\n",
1551 " 72,\n",
1552 " 3,\n",
1553 " 46,\n",
1554 " 33,\n",
1555 " 67,\n",
1556 " 46,\n",
1557 " 55,\n",
1558 " 12,\n",
1559 " 32,\n",
1560 " 63,\n",
1561 " 93,\n",
1562 " 53,\n",
1563 " 69],\n",
1564 " [4,\n",
1565 " 42,\n",
1566 " 16,\n",
1567 " 73,\n",
1568 " 38,\n",
1569 " 25,\n",
1570 " 39,\n",
1571 " 11,\n",
1572 " 24,\n",
1573 " 94,\n",
1574 " 72,\n",
1575 " 18,\n",
1576 " 8,\n",
1577 " 46,\n",
1578 " 29,\n",
1579 " 32,\n",
1580 " 40,\n",
1581 " 62,\n",
1582 " 76,\n",
1583 " 36],\n",
1584 " [20,\n",
1585 " 69,\n",
1586 " 36,\n",
1587 " 41,\n",
1588 " 72,\n",
1589 " 30,\n",
1590 " 23,\n",
1591 " 88,\n",
1592 " 34,\n",
1593 " 62,\n",
1594 " 99,\n",
1595 " 69,\n",
1596 " 82,\n",
1597 " 67,\n",
1598 " 59,\n",
1599 " 85,\n",
1600 " 74,\n",
1601 " 4,\n",
1602 " 36,\n",
1603 " 16],\n",
1604 " [20,\n",
1605 " 73,\n",
1606 " 35,\n",
1607 " 29,\n",
1608 " 78,\n",
1609 " 31,\n",
1610 " 90,\n",
1611 " 1,\n",
1612 " 74,\n",
1613 " 31,\n",
1614 " 49,\n",
1615 " 71,\n",
1616 " 48,\n",
1617 " 86,\n",
1618 " 81,\n",
1619 " 16,\n",
1620 " 23,\n",
1621 " 57,\n",
1622 " 5,\n",
1623 " 54],\n",
1624 " [1,\n",
1625 " 70,\n",
1626 " 54,\n",
1627 " 71,\n",
1628 " 83,\n",
1629 " 51,\n",
1630 " 54,\n",
1631 " 69,\n",
1632 " 16,\n",
1633 " 92,\n",
1634 " 33,\n",
1635 " 48,\n",
1636 " 61,\n",
1637 " 43,\n",
1638 " 52,\n",
1639 " 1,\n",
1640 " 89,\n",
1641 " 19,\n",
1642 " 67,\n",
1643 " 48]]"
1644 ]
1645 }
1646 ],
1647 "prompt_number": 12
1648 },
1649 {
1650 "cell_type": "code",
1651 "collapsed": false,
1652 "input": [
1653 "g4 = {(x, y): grid_nums[x + y * COLUMNS] \n",
1654 " for x in range(COLUMNS) \n",
1655 " for y in range(ROWS)}\n",
1656 "g4"
1657 ],
1658 "language": "python",
1659 "metadata": {},
1660 "outputs": [
1661 {
1662 "metadata": {},
1663 "output_type": "pyout",
1664 "prompt_number": 13,
1665 "text": [
1666 "{(7, 3): 42,\n",
1667 " (6, 9): 76,\n",
1668 " (17, 11): 29,\n",
1669 " (19, 19): 48,\n",
1670 " (16, 6): 18,\n",
1671 " (7, 12): 7,\n",
1672 " (19, 4): 80,\n",
1673 " (18, 4): 13,\n",
1674 " (18, 19): 67,\n",
1675 " (8, 5): 44,\n",
1676 " (10, 8): 78,\n",
1677 " (9, 0): 75,\n",
1678 " (11, 5): 53,\n",
1679 " (10, 7): 94,\n",
1680 " (14, 18): 81,\n",
1681 " (12, 6): 59,\n",
1682 " (10, 18): 49,\n",
1683 " (0, 17): 20,\n",
1684 " (15, 11): 24,\n",
1685 " (14, 1): 69,\n",
1686 " (13, 7): 8,\n",
1687 " (12, 17): 82,\n",
1688 " (0, 4): 22,\n",
1689 " (15, 4): 28,\n",
1690 " (1, 1): 49,\n",
1691 " (4, 10): 22,\n",
1692 " (3, 2): 73,\n",
1693 " (2, 6): 81,\n",
1694 " (5, 11): 35,\n",
1695 " (4, 5): 99,\n",
1696 " (6, 0): 0,\n",
1697 " (4, 16): 38,\n",
1698 " (7, 5): 2,\n",
1699 " (19, 13): 40,\n",
1700 " (7, 0): 40,\n",
1701 " (16, 19): 89,\n",
1702 " (17, 7): 49,\n",
1703 " (18, 10): 56,\n",
1704 " (17, 18): 57,\n",
1705 " (16, 8): 34,\n",
1706 " (8, 12): 5,\n",
1707 " (9, 9): 45,\n",
1708 " (10, 14): 57,\n",
1709 " (8, 18): 74,\n",
1710 " (11, 15): 67,\n",
1711 " (9, 19): 92,\n",
1712 " (15, 16): 32,\n",
1713 " (14, 8): 14,\n",
1714 " (13, 0): 78,\n",
1715 " (12, 8): 96,\n",
1716 " (11, 16): 18,\n",
1717 " (15, 13): 77,\n",
1718 " (13, 13): 52,\n",
1719 " (2, 18): 35,\n",
1720 " (0, 14): 4,\n",
1721 " (3, 11): 42,\n",
1722 " (2, 1): 99,\n",
1723 " (1, 15): 36,\n",
1724 " (4, 12): 35,\n",
1725 " (2, 12): 0,\n",
1726 " (5, 1): 81,\n",
1727 " (3, 17): 41,\n",
1728 " (16, 7): 66,\n",
1729 " (6, 14): 99,\n",
1730 " (19, 18): 54,\n",
1731 " (17, 6): 38,\n",
1732 " (7, 15): 72,\n",
1733 " (19, 7): 21,\n",
1734 " (18, 5): 12,\n",
1735 " (7, 1): 57,\n",
1736 " (18, 16): 76,\n",
1737 " (8, 6): 26,\n",
1738 " (10, 9): 35,\n",
1739 " (9, 7): 63,\n",
1740 " (11, 4): 54,\n",
1741 " (10, 4): 36,\n",
1742 " (14, 19): 52,\n",
1743 " (12, 7): 63,\n",
1744 " (11, 9): 14,\n",
1745 " (10, 19): 33,\n",
1746 " (0, 18): 20,\n",
1747 " (15, 10): 14,\n",
1748 " (14, 6): 70,\n",
1749 " (13, 6): 54,\n",
1750 " (12, 18): 48,\n",
1751 " (1, 19): 70,\n",
1752 " (0, 5): 24,\n",
1753 " (15, 7): 91,\n",
1754 " (13, 19): 43,\n",
1755 " (1, 0): 2,\n",
1756 " (0, 8): 24,\n",
1757 " (4, 11): 96,\n",
1758 " (3, 5): 60,\n",
1759 " (2, 7): 20,\n",
1760 " (5, 10): 75,\n",
1761 " (4, 6): 64,\n",
1762 " (6, 1): 18,\n",
1763 " (5, 7): 62,\n",
1764 " (4, 17): 72,\n",
1765 " (16, 1): 4,\n",
1766 " (19, 12): 58,\n",
1767 " (17, 12): 54,\n",
1768 " (7, 17): 88,\n",
1769 " (19, 1): 0,\n",
1770 " (18, 11): 85,\n",
1771 " (7, 6): 10,\n",
1772 " (8, 13): 28,\n",
1773 " (9, 8): 17,\n",
1774 " (8, 0): 0,\n",
1775 " (10, 15): 33,\n",
1776 " (8, 19): 16,\n",
1777 " (11, 14): 32,\n",
1778 " (9, 18): 31,\n",
1779 " (15, 19): 1,\n",
1780 " (14, 9): 33,\n",
1781 " (12, 9): 0,\n",
1782 " (11, 19): 48,\n",
1783 " (15, 12): 58,\n",
1784 " (13, 12): 60,\n",
1785 " (2, 19): 54,\n",
1786 " (0, 15): 88,\n",
1787 " (3, 10): 28,\n",
1788 " (1, 14): 52,\n",
1789 " (4, 13): 5,\n",
1790 " (2, 13): 81,\n",
1791 " (5, 0): 15,\n",
1792 " (3, 16): 73,\n",
1793 " (6, 15): 20,\n",
1794 " (16, 9): 34,\n",
1795 " (16, 10): 9,\n",
1796 " (7, 14): 16,\n",
1797 " (6, 18): 90,\n",
1798 " (19, 6): 70,\n",
1799 " (18, 2): 36,\n",
1800 " (17, 10): 53,\n",
1801 " (18, 17): 36,\n",
1802 " (16, 2): 49,\n",
1803 " (8, 7): 95,\n",
1804 " (9, 6): 38,\n",
1805 " (11, 7): 39,\n",
1806 " (10, 5): 33,\n",
1807 " (14, 16): 29,\n",
1808 " (12, 0): 7,\n",
1809 " (11, 8): 78,\n",
1810 " (10, 16): 72,\n",
1811 " (0, 19): 1,\n",
1812 " (14, 7): 40,\n",
1813 " (13, 5): 36,\n",
1814 " (12, 19): 61,\n",
1815 " (1, 18): 73,\n",
1816 " (0, 6): 32,\n",
1817 " (15, 6): 66,\n",
1818 " (13, 18): 86,\n",
1819 " (1, 7): 26,\n",
1820 " (0, 9): 21,\n",
1821 " (3, 4): 71,\n",
1822 " (2, 4): 16,\n",
1823 " (5, 9): 0,\n",
1824 " (4, 7): 2,\n",
1825 " (6, 6): 67,\n",
1826 " (5, 6): 23,\n",
1827 " (4, 18): 78,\n",
1828 " (7, 7): 20,\n",
1829 " (5, 19): 51,\n",
1830 " (19, 15): 69,\n",
1831 " (17, 3): 2,\n",
1832 " (7, 16): 11,\n",
1833 " (19, 0): 8,\n",
1834 " (18, 8): 63,\n",
1835 " (17, 16): 62,\n",
1836 " (7, 4): 89,\n",
1837 " (9, 15): 46,\n",
1838 " (8, 1): 60,\n",
1839 " (10, 12): 44,\n",
1840 " (11, 1): 40,\n",
1841 " (9, 17): 62,\n",
1842 " (15, 18): 16,\n",
1843 " (14, 14): 26,\n",
1844 " (12, 10): 4,\n",
1845 " (11, 18): 71,\n",
1846 " (15, 15): 32,\n",
1847 " (13, 11): 17,\n",
1848 " (2, 16): 16,\n",
1849 " (0, 0): 8,\n",
1850 " (8, 14): 7,\n",
1851 " (1, 13): 80,\n",
1852 " (4, 14): 97,\n",
1853 " (2, 10): 53,\n",
1854 " (5, 15): 62,\n",
1855 " (3, 19): 71,\n",
1856 " (6, 12): 89,\n",
1857 " (17, 4): 33,\n",
1858 " (16, 12): 51,\n",
1859 " (6, 19): 54,\n",
1860 " (19, 9): 95,\n",
1861 " (18, 3): 36,\n",
1862 " (17, 9): 31,\n",
1863 " (18, 14): 98,\n",
1864 " (17, 17): 4,\n",
1865 " (16, 0): 50,\n",
1866 " (16, 15): 63,\n",
1867 " (9, 5): 75,\n",
1868 " (11, 6): 67,\n",
1869 " (10, 2): 40,\n",
1870 " (14, 17): 59,\n",
1871 " (12, 1): 98,\n",
1872 " (11, 11): 24,\n",
1873 " (10, 17): 99,\n",
1874 " (14, 4): 40,\n",
1875 " (13, 4): 40,\n",
1876 " (12, 12): 44,\n",
1877 " (1, 17): 69,\n",
1878 " (0, 7): 67,\n",
1879 " (15, 1): 48,\n",
1880 " (13, 17): 67,\n",
1881 " (1, 6): 98,\n",
1882 " (0, 10): 78,\n",
1883 " (17, 13): 89,\n",
1884 " (3, 7): 68,\n",
1885 " (2, 5): 32,\n",
1886 " (1, 11): 39,\n",
1887 " (5, 8): 73,\n",
1888 " (4, 0): 38,\n",
1889 " (6, 7): 12,\n",
1890 " (5, 5): 3,\n",
1891 " (4, 19): 83,\n",
1892 " (16, 3): 37,\n",
1893 " (6, 10): 31,\n",
1894 " (5, 18): 31,\n",
1895 " (19, 14): 66,\n",
1896 " (17, 2): 13,\n",
1897 " (7, 19): 69,\n",
1898 " (19, 3): 91,\n",
1899 " (18, 9): 33,\n",
1900 " (8, 15): 3,\n",
1901 " (9, 14): 97,\n",
1902 " (8, 2): 93,\n",
1903 " (10, 13): 92,\n",
1904 " (9, 3): 24,\n",
1905 " (11, 0): 5,\n",
1906 " (9, 16): 94,\n",
1907 " (14, 15): 12,\n",
1908 " (12, 11): 0,\n",
1909 " (15, 14): 79,\n",
1910 " (14, 2): 30,\n",
1911 " (13, 10): 62,\n",
1912 " (2, 17): 36,\n",
1913 " (0, 1): 49,\n",
1914 " (3, 12): 48,\n",
1915 " (1, 12): 56,\n",
1916 " (4, 15): 57,\n",
1917 " (3, 1): 40,\n",
1918 " (2, 11): 5,\n",
1919 " (5, 14): 35,\n",
1920 " (3, 18): 29,\n",
1921 " (6, 13): 47,\n",
1922 " (7, 8): 26,\n",
1923 " (6, 16): 39,\n",
1924 " (19, 8): 72,\n",
1925 " (18, 0): 91,\n",
1926 " (17, 8): 89,\n",
1927 " (16, 16): 40,\n",
1928 " (18, 15): 53,\n",
1929 " (8, 9): 20,\n",
1930 " (9, 4): 92,\n",
1931 " (7, 11): 47,\n",
1932 " (10, 3): 68,\n",
1933 " (12, 2): 53,\n",
1934 " (11, 10): 80,\n",
1935 " (14, 5): 84,\n",
1936 " (13, 3): 32,\n",
1937 " (12, 13): 86,\n",
1938 " (1, 16): 42,\n",
1939 " (3, 13): 68,\n",
1940 " (15, 0): 12,\n",
1941 " (13, 16): 46,\n",
1942 " (1, 5): 47,\n",
1943 " (0, 11): 16,\n",
1944 " (3, 6): 28,\n",
1945 " (2, 2): 31,\n",
1946 " (1, 10): 17,\n",
1947 " (4, 1): 17,\n",
1948 " (6, 4): 63,\n",
1949 " (5, 4): 67,\n",
1950 " (16, 4): 66,\n",
1951 " (6, 11): 31,\n",
1952 " (5, 17): 30,\n",
1953 " (19, 17): 16,\n",
1954 " (17, 1): 56,\n",
1955 " (7, 18): 1,\n",
1956 " (19, 2): 65,\n",
1957 " (18, 6): 64,\n",
1958 " (9, 13): 73,\n",
1959 " (8, 3): 69,\n",
1960 " (10, 10): 3,\n",
1961 " (9, 2): 71,\n",
1962 " (16, 13): 4,\n",
1963 " (11, 3): 56,\n",
1964 " (14, 12): 21,\n",
1965 " (12, 4): 22,\n",
1966 " (15, 9): 97,\n",
1967 " (14, 3): 56,\n",
1968 " (13, 9): 61,\n",
1969 " (0, 2): 81,\n",
1970 " (3, 15): 87,\n",
1971 " (1, 3): 70,\n",
1972 " (4, 8): 66,\n",
1973 " (3, 0): 97,\n",
1974 " (2, 8): 58,\n",
1975 " (5, 13): 94,\n",
1976 " (6, 2): 14,\n",
1977 " (16, 14): 33,\n",
1978 " (6, 17): 23,\n",
1979 " (19, 11): 57,\n",
1980 " (18, 1): 62,\n",
1981 " (17, 15): 93,\n",
1982 " (16, 17): 74,\n",
1983 " (18, 12): 17,\n",
1984 " (8, 10): 15,\n",
1985 " (9, 11): 58,\n",
1986 " (10, 0): 4,\n",
1987 " (8, 16): 24,\n",
1988 " (12, 3): 1,\n",
1989 " (11, 13): 13,\n",
1990 " (14, 10): 16,\n",
1991 " (13, 2): 88,\n",
1992 " (12, 14): 16,\n",
1993 " (15, 3): 71,\n",
1994 " (13, 15): 55,\n",
1995 " (1, 4): 31,\n",
1996 " (0, 12): 86,\n",
1997 " (3, 9): 9,\n",
1998 " (2, 3): 95,\n",
1999 " (1, 9): 36,\n",
2000 " (4, 2): 55,\n",
2001 " (2, 14): 8,\n",
2002 " (6, 5): 45,\n",
2003 " (5, 3): 60,\n",
2004 " (16, 5): 35,\n",
2005 " (6, 8): 99,\n",
2006 " (5, 16): 25,\n",
2007 " (19, 16): 36,\n",
2008 " (17, 0): 77,\n",
2009 " (7, 13): 69,\n",
2010 " (19, 5): 50,\n",
2011 " (18, 7): 94,\n",
2012 " (7, 9): 44,\n",
2013 " (18, 18): 5,\n",
2014 " (9, 12): 44,\n",
2015 " (8, 4): 41,\n",
2016 " (10, 11): 88,\n",
2017 " (9, 1): 87,\n",
2018 " (17, 5): 17,\n",
2019 " (11, 2): 67,\n",
2020 " (10, 6): 40,\n",
2021 " (16, 11): 36,\n",
2022 " (14, 13): 17,\n",
2023 " (12, 5): 78,\n",
2024 " (0, 16): 4,\n",
2025 " (15, 8): 88,\n",
2026 " (14, 0): 52,\n",
2027 " (13, 8): 83,\n",
2028 " (12, 16): 8,\n",
2029 " (0, 3): 52,\n",
2030 " (15, 5): 20,\n",
2031 " (3, 14): 83,\n",
2032 " (1, 2): 49,\n",
2033 " (4, 9): 75,\n",
2034 " (3, 3): 23,\n",
2035 " (2, 9): 23,\n",
2036 " (5, 12): 71,\n",
2037 " (4, 4): 51,\n",
2038 " (6, 3): 11,\n",
2039 " (8, 8): 97,\n",
2040 " (7, 2): 29,\n",
2041 " (7, 10): 67,\n",
2042 " (19, 10): 92,\n",
2043 " (17, 14): 27,\n",
2044 " (16, 18): 23,\n",
2045 " (18, 13): 55,\n",
2046 " (17, 19): 19,\n",
2047 " (8, 11): 55,\n",
2048 " (9, 10): 94,\n",
2049 " (10, 1): 17,\n",
2050 " (8, 17): 34,\n",
2051 " (11, 12): 37,\n",
2052 " (15, 17): 85,\n",
2053 " (14, 11): 54,\n",
2054 " (13, 1): 43,\n",
2055 " (12, 15): 46,\n",
2056 " (11, 17): 69,\n",
2057 " (15, 2): 3,\n",
2058 " (13, 14): 26,\n",
2059 " (0, 13): 19,\n",
2060 " (3, 8): 5,\n",
2061 " (2, 0): 22,\n",
2062 " (1, 8): 55,\n",
2063 " (4, 3): 4,\n",
2064 " (2, 15): 68,\n",
2065 " (5, 2): 79}"
2066 ]
2067 }
2068 ],
2069 "prompt_number": 13
2070 },
2071 {
2072 "cell_type": "code",
2073 "collapsed": false,
2074 "input": [
2075 "g4s = {(x, y): int(GRID_STRING[(x + y * COLUMNS) * 3:(x + y * COLUMNS) * 3 + 2]) \n",
2076 " for x in range(COLUMNS) \n",
2077 " for y in range(ROWS)}\n",
2078 "g4s"
2079 ],
2080 "language": "python",
2081 "metadata": {},
2082 "outputs": [
2083 {
2084 "metadata": {},
2085 "output_type": "pyout",
2086 "prompt_number": 14,
2087 "text": [
2088 "{(7, 3): 42,\n",
2089 " (6, 9): 76,\n",
2090 " (17, 11): 29,\n",
2091 " (19, 19): 48,\n",
2092 " (16, 6): 18,\n",
2093 " (7, 12): 7,\n",
2094 " (19, 4): 80,\n",
2095 " (18, 4): 13,\n",
2096 " (18, 19): 67,\n",
2097 " (8, 5): 44,\n",
2098 " (10, 8): 78,\n",
2099 " (9, 0): 75,\n",
2100 " (11, 5): 53,\n",
2101 " (10, 7): 94,\n",
2102 " (14, 18): 81,\n",
2103 " (12, 6): 59,\n",
2104 " (10, 18): 49,\n",
2105 " (0, 17): 20,\n",
2106 " (15, 11): 24,\n",
2107 " (14, 1): 69,\n",
2108 " (13, 7): 8,\n",
2109 " (12, 17): 82,\n",
2110 " (0, 4): 22,\n",
2111 " (15, 4): 28,\n",
2112 " (1, 1): 49,\n",
2113 " (4, 10): 22,\n",
2114 " (3, 2): 73,\n",
2115 " (2, 6): 81,\n",
2116 " (5, 11): 35,\n",
2117 " (4, 5): 99,\n",
2118 " (6, 0): 0,\n",
2119 " (4, 16): 38,\n",
2120 " (7, 5): 2,\n",
2121 " (19, 13): 40,\n",
2122 " (7, 0): 40,\n",
2123 " (16, 19): 89,\n",
2124 " (17, 7): 49,\n",
2125 " (18, 10): 56,\n",
2126 " (17, 18): 57,\n",
2127 " (16, 8): 34,\n",
2128 " (8, 12): 5,\n",
2129 " (9, 9): 45,\n",
2130 " (10, 14): 57,\n",
2131 " (8, 18): 74,\n",
2132 " (11, 15): 67,\n",
2133 " (9, 19): 92,\n",
2134 " (15, 16): 32,\n",
2135 " (14, 8): 14,\n",
2136 " (13, 0): 78,\n",
2137 " (12, 8): 96,\n",
2138 " (11, 16): 18,\n",
2139 " (15, 13): 77,\n",
2140 " (13, 13): 52,\n",
2141 " (2, 18): 35,\n",
2142 " (0, 14): 4,\n",
2143 " (3, 11): 42,\n",
2144 " (2, 1): 99,\n",
2145 " (1, 15): 36,\n",
2146 " (4, 12): 35,\n",
2147 " (2, 12): 0,\n",
2148 " (5, 1): 81,\n",
2149 " (3, 17): 41,\n",
2150 " (16, 7): 66,\n",
2151 " (6, 14): 99,\n",
2152 " (19, 18): 54,\n",
2153 " (17, 6): 38,\n",
2154 " (7, 15): 72,\n",
2155 " (19, 7): 21,\n",
2156 " (18, 5): 12,\n",
2157 " (7, 1): 57,\n",
2158 " (18, 16): 76,\n",
2159 " (8, 6): 26,\n",
2160 " (10, 9): 35,\n",
2161 " (9, 7): 63,\n",
2162 " (11, 4): 54,\n",
2163 " (10, 4): 36,\n",
2164 " (14, 19): 52,\n",
2165 " (12, 7): 63,\n",
2166 " (11, 9): 14,\n",
2167 " (10, 19): 33,\n",
2168 " (0, 18): 20,\n",
2169 " (15, 10): 14,\n",
2170 " (14, 6): 70,\n",
2171 " (13, 6): 54,\n",
2172 " (12, 18): 48,\n",
2173 " (1, 19): 70,\n",
2174 " (0, 5): 24,\n",
2175 " (15, 7): 91,\n",
2176 " (13, 19): 43,\n",
2177 " (1, 0): 2,\n",
2178 " (0, 8): 24,\n",
2179 " (4, 11): 96,\n",
2180 " (3, 5): 60,\n",
2181 " (2, 7): 20,\n",
2182 " (5, 10): 75,\n",
2183 " (4, 6): 64,\n",
2184 " (6, 1): 18,\n",
2185 " (5, 7): 62,\n",
2186 " (4, 17): 72,\n",
2187 " (16, 1): 4,\n",
2188 " (19, 12): 58,\n",
2189 " (17, 12): 54,\n",
2190 " (7, 17): 88,\n",
2191 " (19, 1): 0,\n",
2192 " (18, 11): 85,\n",
2193 " (7, 6): 10,\n",
2194 " (8, 13): 28,\n",
2195 " (9, 8): 17,\n",
2196 " (8, 0): 0,\n",
2197 " (10, 15): 33,\n",
2198 " (8, 19): 16,\n",
2199 " (11, 14): 32,\n",
2200 " (9, 18): 31,\n",
2201 " (15, 19): 1,\n",
2202 " (14, 9): 33,\n",
2203 " (12, 9): 0,\n",
2204 " (11, 19): 48,\n",
2205 " (15, 12): 58,\n",
2206 " (13, 12): 60,\n",
2207 " (2, 19): 54,\n",
2208 " (0, 15): 88,\n",
2209 " (3, 10): 28,\n",
2210 " (1, 14): 52,\n",
2211 " (4, 13): 5,\n",
2212 " (2, 13): 81,\n",
2213 " (5, 0): 15,\n",
2214 " (3, 16): 73,\n",
2215 " (6, 15): 20,\n",
2216 " (16, 9): 34,\n",
2217 " (16, 10): 9,\n",
2218 " (7, 14): 16,\n",
2219 " (6, 18): 90,\n",
2220 " (19, 6): 70,\n",
2221 " (18, 2): 36,\n",
2222 " (17, 10): 53,\n",
2223 " (18, 17): 36,\n",
2224 " (16, 2): 49,\n",
2225 " (8, 7): 95,\n",
2226 " (9, 6): 38,\n",
2227 " (11, 7): 39,\n",
2228 " (10, 5): 33,\n",
2229 " (14, 16): 29,\n",
2230 " (12, 0): 7,\n",
2231 " (11, 8): 78,\n",
2232 " (10, 16): 72,\n",
2233 " (0, 19): 1,\n",
2234 " (14, 7): 40,\n",
2235 " (13, 5): 36,\n",
2236 " (12, 19): 61,\n",
2237 " (1, 18): 73,\n",
2238 " (0, 6): 32,\n",
2239 " (15, 6): 66,\n",
2240 " (13, 18): 86,\n",
2241 " (1, 7): 26,\n",
2242 " (0, 9): 21,\n",
2243 " (3, 4): 71,\n",
2244 " (2, 4): 16,\n",
2245 " (5, 9): 0,\n",
2246 " (4, 7): 2,\n",
2247 " (6, 6): 67,\n",
2248 " (5, 6): 23,\n",
2249 " (4, 18): 78,\n",
2250 " (7, 7): 20,\n",
2251 " (5, 19): 51,\n",
2252 " (19, 15): 69,\n",
2253 " (17, 3): 2,\n",
2254 " (7, 16): 11,\n",
2255 " (19, 0): 8,\n",
2256 " (18, 8): 63,\n",
2257 " (17, 16): 62,\n",
2258 " (7, 4): 89,\n",
2259 " (9, 15): 46,\n",
2260 " (8, 1): 60,\n",
2261 " (10, 12): 44,\n",
2262 " (11, 1): 40,\n",
2263 " (9, 17): 62,\n",
2264 " (15, 18): 16,\n",
2265 " (14, 14): 26,\n",
2266 " (12, 10): 4,\n",
2267 " (11, 18): 71,\n",
2268 " (15, 15): 32,\n",
2269 " (13, 11): 17,\n",
2270 " (2, 16): 16,\n",
2271 " (0, 0): 8,\n",
2272 " (8, 14): 7,\n",
2273 " (1, 13): 80,\n",
2274 " (4, 14): 97,\n",
2275 " (2, 10): 53,\n",
2276 " (5, 15): 62,\n",
2277 " (3, 19): 71,\n",
2278 " (6, 12): 89,\n",
2279 " (17, 4): 33,\n",
2280 " (16, 12): 51,\n",
2281 " (6, 19): 54,\n",
2282 " (19, 9): 95,\n",
2283 " (18, 3): 36,\n",
2284 " (17, 9): 31,\n",
2285 " (18, 14): 98,\n",
2286 " (17, 17): 4,\n",
2287 " (16, 0): 50,\n",
2288 " (16, 15): 63,\n",
2289 " (9, 5): 75,\n",
2290 " (11, 6): 67,\n",
2291 " (10, 2): 40,\n",
2292 " (14, 17): 59,\n",
2293 " (12, 1): 98,\n",
2294 " (11, 11): 24,\n",
2295 " (10, 17): 99,\n",
2296 " (14, 4): 40,\n",
2297 " (13, 4): 40,\n",
2298 " (12, 12): 44,\n",
2299 " (1, 17): 69,\n",
2300 " (0, 7): 67,\n",
2301 " (15, 1): 48,\n",
2302 " (13, 17): 67,\n",
2303 " (1, 6): 98,\n",
2304 " (0, 10): 78,\n",
2305 " (17, 13): 89,\n",
2306 " (3, 7): 68,\n",
2307 " (2, 5): 32,\n",
2308 " (1, 11): 39,\n",
2309 " (5, 8): 73,\n",
2310 " (4, 0): 38,\n",
2311 " (6, 7): 12,\n",
2312 " (5, 5): 3,\n",
2313 " (4, 19): 83,\n",
2314 " (16, 3): 37,\n",
2315 " (6, 10): 31,\n",
2316 " (5, 18): 31,\n",
2317 " (19, 14): 66,\n",
2318 " (17, 2): 13,\n",
2319 " (7, 19): 69,\n",
2320 " (19, 3): 91,\n",
2321 " (18, 9): 33,\n",
2322 " (8, 15): 3,\n",
2323 " (9, 14): 97,\n",
2324 " (8, 2): 93,\n",
2325 " (10, 13): 92,\n",
2326 " (9, 3): 24,\n",
2327 " (11, 0): 5,\n",
2328 " (9, 16): 94,\n",
2329 " (14, 15): 12,\n",
2330 " (12, 11): 0,\n",
2331 " (15, 14): 79,\n",
2332 " (14, 2): 30,\n",
2333 " (13, 10): 62,\n",
2334 " (2, 17): 36,\n",
2335 " (0, 1): 49,\n",
2336 " (3, 12): 48,\n",
2337 " (1, 12): 56,\n",
2338 " (4, 15): 57,\n",
2339 " (3, 1): 40,\n",
2340 " (2, 11): 5,\n",
2341 " (5, 14): 35,\n",
2342 " (3, 18): 29,\n",
2343 " (6, 13): 47,\n",
2344 " (7, 8): 26,\n",
2345 " (6, 16): 39,\n",
2346 " (19, 8): 72,\n",
2347 " (18, 0): 91,\n",
2348 " (17, 8): 89,\n",
2349 " (16, 16): 40,\n",
2350 " (18, 15): 53,\n",
2351 " (8, 9): 20,\n",
2352 " (9, 4): 92,\n",
2353 " (7, 11): 47,\n",
2354 " (10, 3): 68,\n",
2355 " (12, 2): 53,\n",
2356 " (11, 10): 80,\n",
2357 " (14, 5): 84,\n",
2358 " (13, 3): 32,\n",
2359 " (12, 13): 86,\n",
2360 " (1, 16): 42,\n",
2361 " (3, 13): 68,\n",
2362 " (15, 0): 12,\n",
2363 " (13, 16): 46,\n",
2364 " (1, 5): 47,\n",
2365 " (0, 11): 16,\n",
2366 " (3, 6): 28,\n",
2367 " (2, 2): 31,\n",
2368 " (1, 10): 17,\n",
2369 " (4, 1): 17,\n",
2370 " (6, 4): 63,\n",
2371 " (5, 4): 67,\n",
2372 " (16, 4): 66,\n",
2373 " (6, 11): 31,\n",
2374 " (5, 17): 30,\n",
2375 " (19, 17): 16,\n",
2376 " (17, 1): 56,\n",
2377 " (7, 18): 1,\n",
2378 " (19, 2): 65,\n",
2379 " (18, 6): 64,\n",
2380 " (9, 13): 73,\n",
2381 " (8, 3): 69,\n",
2382 " (10, 10): 3,\n",
2383 " (9, 2): 71,\n",
2384 " (16, 13): 4,\n",
2385 " (11, 3): 56,\n",
2386 " (14, 12): 21,\n",
2387 " (12, 4): 22,\n",
2388 " (15, 9): 97,\n",
2389 " (14, 3): 56,\n",
2390 " (13, 9): 61,\n",
2391 " (0, 2): 81,\n",
2392 " (3, 15): 87,\n",
2393 " (1, 3): 70,\n",
2394 " (4, 8): 66,\n",
2395 " (3, 0): 97,\n",
2396 " (2, 8): 58,\n",
2397 " (5, 13): 94,\n",
2398 " (6, 2): 14,\n",
2399 " (16, 14): 33,\n",
2400 " (6, 17): 23,\n",
2401 " (19, 11): 57,\n",
2402 " (18, 1): 62,\n",
2403 " (17, 15): 93,\n",
2404 " (16, 17): 74,\n",
2405 " (18, 12): 17,\n",
2406 " (8, 10): 15,\n",
2407 " (9, 11): 58,\n",
2408 " (10, 0): 4,\n",
2409 " (8, 16): 24,\n",
2410 " (12, 3): 1,\n",
2411 " (11, 13): 13,\n",
2412 " (14, 10): 16,\n",
2413 " (13, 2): 88,\n",
2414 " (12, 14): 16,\n",
2415 " (15, 3): 71,\n",
2416 " (13, 15): 55,\n",
2417 " (1, 4): 31,\n",
2418 " (0, 12): 86,\n",
2419 " (3, 9): 9,\n",
2420 " (2, 3): 95,\n",
2421 " (1, 9): 36,\n",
2422 " (4, 2): 55,\n",
2423 " (2, 14): 8,\n",
2424 " (6, 5): 45,\n",
2425 " (5, 3): 60,\n",
2426 " (16, 5): 35,\n",
2427 " (6, 8): 99,\n",
2428 " (5, 16): 25,\n",
2429 " (19, 16): 36,\n",
2430 " (17, 0): 77,\n",
2431 " (7, 13): 69,\n",
2432 " (19, 5): 50,\n",
2433 " (18, 7): 94,\n",
2434 " (7, 9): 44,\n",
2435 " (18, 18): 5,\n",
2436 " (9, 12): 44,\n",
2437 " (8, 4): 41,\n",
2438 " (10, 11): 88,\n",
2439 " (9, 1): 87,\n",
2440 " (17, 5): 17,\n",
2441 " (11, 2): 67,\n",
2442 " (10, 6): 40,\n",
2443 " (16, 11): 36,\n",
2444 " (14, 13): 17,\n",
2445 " (12, 5): 78,\n",
2446 " (0, 16): 4,\n",
2447 " (15, 8): 88,\n",
2448 " (14, 0): 52,\n",
2449 " (13, 8): 83,\n",
2450 " (12, 16): 8,\n",
2451 " (0, 3): 52,\n",
2452 " (15, 5): 20,\n",
2453 " (3, 14): 83,\n",
2454 " (1, 2): 49,\n",
2455 " (4, 9): 75,\n",
2456 " (3, 3): 23,\n",
2457 " (2, 9): 23,\n",
2458 " (5, 12): 71,\n",
2459 " (4, 4): 51,\n",
2460 " (6, 3): 11,\n",
2461 " (8, 8): 97,\n",
2462 " (7, 2): 29,\n",
2463 " (7, 10): 67,\n",
2464 " (19, 10): 92,\n",
2465 " (17, 14): 27,\n",
2466 " (16, 18): 23,\n",
2467 " (18, 13): 55,\n",
2468 " (17, 19): 19,\n",
2469 " (8, 11): 55,\n",
2470 " (9, 10): 94,\n",
2471 " (10, 1): 17,\n",
2472 " (8, 17): 34,\n",
2473 " (11, 12): 37,\n",
2474 " (15, 17): 85,\n",
2475 " (14, 11): 54,\n",
2476 " (13, 1): 43,\n",
2477 " (12, 15): 46,\n",
2478 " (11, 17): 69,\n",
2479 " (15, 2): 3,\n",
2480 " (13, 14): 26,\n",
2481 " (0, 13): 19,\n",
2482 " (3, 8): 5,\n",
2483 " (2, 0): 22,\n",
2484 " (1, 8): 55,\n",
2485 " (4, 3): 4,\n",
2486 " (2, 15): 68,\n",
2487 " (5, 2): 79}"
2488 ]
2489 }
2490 ],
2491 "prompt_number": 14
2492 },
2493 {
2494 "cell_type": "code",
2495 "collapsed": false,
2496 "input": [
2497 "g2 == g4 == g4s"
2498 ],
2499 "language": "python",
2500 "metadata": {},
2501 "outputs": [
2502 {
2503 "metadata": {},
2504 "output_type": "pyout",
2505 "prompt_number": 15,
2506 "text": [
2507 "True"
2508 ]
2509 }
2510 ],
2511 "prompt_number": 15
2512 },
2513 {
2514 "cell_type": "code",
2515 "collapsed": false,
2516 "input": [
2517 "d = {}\n",
2518 "d[99]"
2519 ],
2520 "language": "python",
2521 "metadata": {},
2522 "outputs": [
2523 {
2524 "ename": "KeyError",
2525 "evalue": "99",
2526 "output_type": "pyerr",
2527 "traceback": [
2528 "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
2529 "\u001b[1;32m<ipython-input-16-fb0bb5c8abf1>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0md\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m{\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0md\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m99\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
2530 "\u001b[1;31mKeyError\u001b[0m: 99"
2531 ]
2532 }
2533 ],
2534 "prompt_number": 16
2535 },
2536 {
2537 "cell_type": "code",
2538 "collapsed": false,
2539 "input": [
2540 "import collections\n",
2541 "d = collections.defaultdict(int)\n",
2542 "d[99]"
2543 ],
2544 "language": "python",
2545 "metadata": {},
2546 "outputs": [
2547 {
2548 "metadata": {},
2549 "output_type": "pyout",
2550 "prompt_number": 17,
2551 "text": [
2552 "0"
2553 ]
2554 }
2555 ],
2556 "prompt_number": 17
2557 },
2558 {
2559 "cell_type": "code",
2560 "collapsed": false,
2561 "input": [
2562 "import string\n",
2563 "collections.Counter(l for l in open('sherlock-holmes.txt').read()\n",
2564 " if l in string.ascii_letters)"
2565 ],
2566 "language": "python",
2567 "metadata": {},
2568 "outputs": [
2569 {
2570 "metadata": {},
2571 "output_type": "pyout",
2572 "prompt_number": 18,
2573 "text": [
2574 "Counter({'e': 52876, 't': 37842, 'a': 34376, 'o': 33200, 'n': 28378, 'h': 27803, 's': 26432, 'i': 26366, 'r': 24304, 'd': 18349, 'l': 16854, 'u': 13070, 'm': 11055, 'w': 10508, 'c': 10172, 'y': 8976, 'f': 8785, 'g': 7733, 'p': 6652, 'b': 5883, 'v': 4367, 'I': 3774, 'k': 3465, 'H': 1244, 'T': 1139, 'S': 762, 'A': 761, 'W': 758, 'M': 732, 'x': 541, 'B': 479, 'Y': 455, 'q': 406, 'j': 338, 'C': 327, 'O': 312, 'N': 304, 'L': 291, 'E': 235, 'D': 214, 'R': 204, 'F': 190, 'P': 183, 'G': 154, 'z': 147, 'J': 114, 'V': 85, 'K': 78, 'U': 46, 'Q': 20, 'X': 8, 'Z': 2})"
2575 ]
2576 }
2577 ],
2578 "prompt_number": 18
2579 },
2580 {
2581 "cell_type": "code",
2582 "collapsed": false,
2583 "input": [
2584 "[(a, b, c) \n",
2585 " for a in range(1, 21) \n",
2586 " for b in range(a, 21)\n",
2587 " for c in range(b, 21)\n",
2588 " if a**2 + b**2 == c**2]"
2589 ],
2590 "language": "python",
2591 "metadata": {},
2592 "outputs": [
2593 {
2594 "metadata": {},
2595 "output_type": "pyout",
2596 "prompt_number": 19,
2597 "text": [
2598 "[(3, 4, 5), (5, 12, 13), (6, 8, 10), (8, 15, 17), (9, 12, 15), (12, 16, 20)]"
2599 ]
2600 }
2601 ],
2602 "prompt_number": 19
2603 },
2604 {
2605 "cell_type": "code",
2606 "collapsed": false,
2607 "input": [
2608 "g1"
2609 ],
2610 "language": "python",
2611 "metadata": {},
2612 "outputs": [
2613 {
2614 "metadata": {},
2615 "output_type": "pyout",
2616 "prompt_number": 20,
2617 "text": [
2618 "[[8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8],\n",
2619 " [49,\n",
2620 " 49,\n",
2621 " 99,\n",
2622 " 40,\n",
2623 " 17,\n",
2624 " 81,\n",
2625 " 18,\n",
2626 " 57,\n",
2627 " 60,\n",
2628 " 87,\n",
2629 " 17,\n",
2630 " 40,\n",
2631 " 98,\n",
2632 " 43,\n",
2633 " 69,\n",
2634 " 48,\n",
2635 " 4,\n",
2636 " 56,\n",
2637 " 62,\n",
2638 " 0],\n",
2639 " [81,\n",
2640 " 49,\n",
2641 " 31,\n",
2642 " 73,\n",
2643 " 55,\n",
2644 " 79,\n",
2645 " 14,\n",
2646 " 29,\n",
2647 " 93,\n",
2648 " 71,\n",
2649 " 40,\n",
2650 " 67,\n",
2651 " 53,\n",
2652 " 88,\n",
2653 " 30,\n",
2654 " 3,\n",
2655 " 49,\n",
2656 " 13,\n",
2657 " 36,\n",
2658 " 65],\n",
2659 " [52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91],\n",
2660 " [22,\n",
2661 " 31,\n",
2662 " 16,\n",
2663 " 71,\n",
2664 " 51,\n",
2665 " 67,\n",
2666 " 63,\n",
2667 " 89,\n",
2668 " 41,\n",
2669 " 92,\n",
2670 " 36,\n",
2671 " 54,\n",
2672 " 22,\n",
2673 " 40,\n",
2674 " 40,\n",
2675 " 28,\n",
2676 " 66,\n",
2677 " 33,\n",
2678 " 13,\n",
2679 " 80],\n",
2680 " [24,\n",
2681 " 47,\n",
2682 " 32,\n",
2683 " 60,\n",
2684 " 99,\n",
2685 " 3,\n",
2686 " 45,\n",
2687 " 2,\n",
2688 " 44,\n",
2689 " 75,\n",
2690 " 33,\n",
2691 " 53,\n",
2692 " 78,\n",
2693 " 36,\n",
2694 " 84,\n",
2695 " 20,\n",
2696 " 35,\n",
2697 " 17,\n",
2698 " 12,\n",
2699 " 50],\n",
2700 " [32,\n",
2701 " 98,\n",
2702 " 81,\n",
2703 " 28,\n",
2704 " 64,\n",
2705 " 23,\n",
2706 " 67,\n",
2707 " 10,\n",
2708 " 26,\n",
2709 " 38,\n",
2710 " 40,\n",
2711 " 67,\n",
2712 " 59,\n",
2713 " 54,\n",
2714 " 70,\n",
2715 " 66,\n",
2716 " 18,\n",
2717 " 38,\n",
2718 " 64,\n",
2719 " 70],\n",
2720 " [67,\n",
2721 " 26,\n",
2722 " 20,\n",
2723 " 68,\n",
2724 " 2,\n",
2725 " 62,\n",
2726 " 12,\n",
2727 " 20,\n",
2728 " 95,\n",
2729 " 63,\n",
2730 " 94,\n",
2731 " 39,\n",
2732 " 63,\n",
2733 " 8,\n",
2734 " 40,\n",
2735 " 91,\n",
2736 " 66,\n",
2737 " 49,\n",
2738 " 94,\n",
2739 " 21],\n",
2740 " [24,\n",
2741 " 55,\n",
2742 " 58,\n",
2743 " 5,\n",
2744 " 66,\n",
2745 " 73,\n",
2746 " 99,\n",
2747 " 26,\n",
2748 " 97,\n",
2749 " 17,\n",
2750 " 78,\n",
2751 " 78,\n",
2752 " 96,\n",
2753 " 83,\n",
2754 " 14,\n",
2755 " 88,\n",
2756 " 34,\n",
2757 " 89,\n",
2758 " 63,\n",
2759 " 72],\n",
2760 " [21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95],\n",
2761 " [78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92],\n",
2762 " [16,\n",
2763 " 39,\n",
2764 " 5,\n",
2765 " 42,\n",
2766 " 96,\n",
2767 " 35,\n",
2768 " 31,\n",
2769 " 47,\n",
2770 " 55,\n",
2771 " 58,\n",
2772 " 88,\n",
2773 " 24,\n",
2774 " 0,\n",
2775 " 17,\n",
2776 " 54,\n",
2777 " 24,\n",
2778 " 36,\n",
2779 " 29,\n",
2780 " 85,\n",
2781 " 57],\n",
2782 " [86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58],\n",
2783 " [19,\n",
2784 " 80,\n",
2785 " 81,\n",
2786 " 68,\n",
2787 " 5,\n",
2788 " 94,\n",
2789 " 47,\n",
2790 " 69,\n",
2791 " 28,\n",
2792 " 73,\n",
2793 " 92,\n",
2794 " 13,\n",
2795 " 86,\n",
2796 " 52,\n",
2797 " 17,\n",
2798 " 77,\n",
2799 " 4,\n",
2800 " 89,\n",
2801 " 55,\n",
2802 " 40],\n",
2803 " [4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66],\n",
2804 " [88,\n",
2805 " 36,\n",
2806 " 68,\n",
2807 " 87,\n",
2808 " 57,\n",
2809 " 62,\n",
2810 " 20,\n",
2811 " 72,\n",
2812 " 3,\n",
2813 " 46,\n",
2814 " 33,\n",
2815 " 67,\n",
2816 " 46,\n",
2817 " 55,\n",
2818 " 12,\n",
2819 " 32,\n",
2820 " 63,\n",
2821 " 93,\n",
2822 " 53,\n",
2823 " 69],\n",
2824 " [4,\n",
2825 " 42,\n",
2826 " 16,\n",
2827 " 73,\n",
2828 " 38,\n",
2829 " 25,\n",
2830 " 39,\n",
2831 " 11,\n",
2832 " 24,\n",
2833 " 94,\n",
2834 " 72,\n",
2835 " 18,\n",
2836 " 8,\n",
2837 " 46,\n",
2838 " 29,\n",
2839 " 32,\n",
2840 " 40,\n",
2841 " 62,\n",
2842 " 76,\n",
2843 " 36],\n",
2844 " [20,\n",
2845 " 69,\n",
2846 " 36,\n",
2847 " 41,\n",
2848 " 72,\n",
2849 " 30,\n",
2850 " 23,\n",
2851 " 88,\n",
2852 " 34,\n",
2853 " 62,\n",
2854 " 99,\n",
2855 " 69,\n",
2856 " 82,\n",
2857 " 67,\n",
2858 " 59,\n",
2859 " 85,\n",
2860 " 74,\n",
2861 " 4,\n",
2862 " 36,\n",
2863 " 16],\n",
2864 " [20,\n",
2865 " 73,\n",
2866 " 35,\n",
2867 " 29,\n",
2868 " 78,\n",
2869 " 31,\n",
2870 " 90,\n",
2871 " 1,\n",
2872 " 74,\n",
2873 " 31,\n",
2874 " 49,\n",
2875 " 71,\n",
2876 " 48,\n",
2877 " 86,\n",
2878 " 81,\n",
2879 " 16,\n",
2880 " 23,\n",
2881 " 57,\n",
2882 " 5,\n",
2883 " 54],\n",
2884 " [1,\n",
2885 " 70,\n",
2886 " 54,\n",
2887 " 71,\n",
2888 " 83,\n",
2889 " 51,\n",
2890 " 54,\n",
2891 " 69,\n",
2892 " 16,\n",
2893 " 92,\n",
2894 " 33,\n",
2895 " 48,\n",
2896 " 61,\n",
2897 " 43,\n",
2898 " 52,\n",
2899 " 1,\n",
2900 " 89,\n",
2901 " 19,\n",
2902 " 67,\n",
2903 " 48]]"
2904 ]
2905 }
2906 ],
2907 "prompt_number": 20
2908 },
2909 {
2910 "cell_type": "code",
2911 "collapsed": false,
2912 "input": [
2913 "[n for row in g1 for n in row]"
2914 ],
2915 "language": "python",
2916 "metadata": {},
2917 "outputs": [
2918 {
2919 "metadata": {},
2920 "output_type": "pyout",
2921 "prompt_number": 21,
2922 "text": [
2923 "[8,\n",
2924 " 2,\n",
2925 " 22,\n",
2926 " 97,\n",
2927 " 38,\n",
2928 " 15,\n",
2929 " 0,\n",
2930 " 40,\n",
2931 " 0,\n",
2932 " 75,\n",
2933 " 4,\n",
2934 " 5,\n",
2935 " 7,\n",
2936 " 78,\n",
2937 " 52,\n",
2938 " 12,\n",
2939 " 50,\n",
2940 " 77,\n",
2941 " 91,\n",
2942 " 8,\n",
2943 " 49,\n",
2944 " 49,\n",
2945 " 99,\n",
2946 " 40,\n",
2947 " 17,\n",
2948 " 81,\n",
2949 " 18,\n",
2950 " 57,\n",
2951 " 60,\n",
2952 " 87,\n",
2953 " 17,\n",
2954 " 40,\n",
2955 " 98,\n",
2956 " 43,\n",
2957 " 69,\n",
2958 " 48,\n",
2959 " 4,\n",
2960 " 56,\n",
2961 " 62,\n",
2962 " 0,\n",
2963 " 81,\n",
2964 " 49,\n",
2965 " 31,\n",
2966 " 73,\n",
2967 " 55,\n",
2968 " 79,\n",
2969 " 14,\n",
2970 " 29,\n",
2971 " 93,\n",
2972 " 71,\n",
2973 " 40,\n",
2974 " 67,\n",
2975 " 53,\n",
2976 " 88,\n",
2977 " 30,\n",
2978 " 3,\n",
2979 " 49,\n",
2980 " 13,\n",
2981 " 36,\n",
2982 " 65,\n",
2983 " 52,\n",
2984 " 70,\n",
2985 " 95,\n",
2986 " 23,\n",
2987 " 4,\n",
2988 " 60,\n",
2989 " 11,\n",
2990 " 42,\n",
2991 " 69,\n",
2992 " 24,\n",
2993 " 68,\n",
2994 " 56,\n",
2995 " 1,\n",
2996 " 32,\n",
2997 " 56,\n",
2998 " 71,\n",
2999 " 37,\n",
3000 " 2,\n",
3001 " 36,\n",
3002 " 91,\n",
3003 " 22,\n",
3004 " 31,\n",
3005 " 16,\n",
3006 " 71,\n",
3007 " 51,\n",
3008 " 67,\n",
3009 " 63,\n",
3010 " 89,\n",
3011 " 41,\n",
3012 " 92,\n",
3013 " 36,\n",
3014 " 54,\n",
3015 " 22,\n",
3016 " 40,\n",
3017 " 40,\n",
3018 " 28,\n",
3019 " 66,\n",
3020 " 33,\n",
3021 " 13,\n",
3022 " 80,\n",
3023 " 24,\n",
3024 " 47,\n",
3025 " 32,\n",
3026 " 60,\n",
3027 " 99,\n",
3028 " 3,\n",
3029 " 45,\n",
3030 " 2,\n",
3031 " 44,\n",
3032 " 75,\n",
3033 " 33,\n",
3034 " 53,\n",
3035 " 78,\n",
3036 " 36,\n",
3037 " 84,\n",
3038 " 20,\n",
3039 " 35,\n",
3040 " 17,\n",
3041 " 12,\n",
3042 " 50,\n",
3043 " 32,\n",
3044 " 98,\n",
3045 " 81,\n",
3046 " 28,\n",
3047 " 64,\n",
3048 " 23,\n",
3049 " 67,\n",
3050 " 10,\n",
3051 " 26,\n",
3052 " 38,\n",
3053 " 40,\n",
3054 " 67,\n",
3055 " 59,\n",
3056 " 54,\n",
3057 " 70,\n",
3058 " 66,\n",
3059 " 18,\n",
3060 " 38,\n",
3061 " 64,\n",
3062 " 70,\n",
3063 " 67,\n",
3064 " 26,\n",
3065 " 20,\n",
3066 " 68,\n",
3067 " 2,\n",
3068 " 62,\n",
3069 " 12,\n",
3070 " 20,\n",
3071 " 95,\n",
3072 " 63,\n",
3073 " 94,\n",
3074 " 39,\n",
3075 " 63,\n",
3076 " 8,\n",
3077 " 40,\n",
3078 " 91,\n",
3079 " 66,\n",
3080 " 49,\n",
3081 " 94,\n",
3082 " 21,\n",
3083 " 24,\n",
3084 " 55,\n",
3085 " 58,\n",
3086 " 5,\n",
3087 " 66,\n",
3088 " 73,\n",
3089 " 99,\n",
3090 " 26,\n",
3091 " 97,\n",
3092 " 17,\n",
3093 " 78,\n",
3094 " 78,\n",
3095 " 96,\n",
3096 " 83,\n",
3097 " 14,\n",
3098 " 88,\n",
3099 " 34,\n",
3100 " 89,\n",
3101 " 63,\n",
3102 " 72,\n",
3103 " 21,\n",
3104 " 36,\n",
3105 " 23,\n",
3106 " 9,\n",
3107 " 75,\n",
3108 " 0,\n",
3109 " 76,\n",
3110 " 44,\n",
3111 " 20,\n",
3112 " 45,\n",
3113 " 35,\n",
3114 " 14,\n",
3115 " 0,\n",
3116 " 61,\n",
3117 " 33,\n",
3118 " 97,\n",
3119 " 34,\n",
3120 " 31,\n",
3121 " 33,\n",
3122 " 95,\n",
3123 " 78,\n",
3124 " 17,\n",
3125 " 53,\n",
3126 " 28,\n",
3127 " 22,\n",
3128 " 75,\n",
3129 " 31,\n",
3130 " 67,\n",
3131 " 15,\n",
3132 " 94,\n",
3133 " 3,\n",
3134 " 80,\n",
3135 " 4,\n",
3136 " 62,\n",
3137 " 16,\n",
3138 " 14,\n",
3139 " 9,\n",
3140 " 53,\n",
3141 " 56,\n",
3142 " 92,\n",
3143 " 16,\n",
3144 " 39,\n",
3145 " 5,\n",
3146 " 42,\n",
3147 " 96,\n",
3148 " 35,\n",
3149 " 31,\n",
3150 " 47,\n",
3151 " 55,\n",
3152 " 58,\n",
3153 " 88,\n",
3154 " 24,\n",
3155 " 0,\n",
3156 " 17,\n",
3157 " 54,\n",
3158 " 24,\n",
3159 " 36,\n",
3160 " 29,\n",
3161 " 85,\n",
3162 " 57,\n",
3163 " 86,\n",
3164 " 56,\n",
3165 " 0,\n",
3166 " 48,\n",
3167 " 35,\n",
3168 " 71,\n",
3169 " 89,\n",
3170 " 7,\n",
3171 " 5,\n",
3172 " 44,\n",
3173 " 44,\n",
3174 " 37,\n",
3175 " 44,\n",
3176 " 60,\n",
3177 " 21,\n",
3178 " 58,\n",
3179 " 51,\n",
3180 " 54,\n",
3181 " 17,\n",
3182 " 58,\n",
3183 " 19,\n",
3184 " 80,\n",
3185 " 81,\n",
3186 " 68,\n",
3187 " 5,\n",
3188 " 94,\n",
3189 " 47,\n",
3190 " 69,\n",
3191 " 28,\n",
3192 " 73,\n",
3193 " 92,\n",
3194 " 13,\n",
3195 " 86,\n",
3196 " 52,\n",
3197 " 17,\n",
3198 " 77,\n",
3199 " 4,\n",
3200 " 89,\n",
3201 " 55,\n",
3202 " 40,\n",
3203 " 4,\n",
3204 " 52,\n",
3205 " 8,\n",
3206 " 83,\n",
3207 " 97,\n",
3208 " 35,\n",
3209 " 99,\n",
3210 " 16,\n",
3211 " 7,\n",
3212 " 97,\n",
3213 " 57,\n",
3214 " 32,\n",
3215 " 16,\n",
3216 " 26,\n",
3217 " 26,\n",
3218 " 79,\n",
3219 " 33,\n",
3220 " 27,\n",
3221 " 98,\n",
3222 " 66,\n",
3223 " 88,\n",
3224 " 36,\n",
3225 " 68,\n",
3226 " 87,\n",
3227 " 57,\n",
3228 " 62,\n",
3229 " 20,\n",
3230 " 72,\n",
3231 " 3,\n",
3232 " 46,\n",
3233 " 33,\n",
3234 " 67,\n",
3235 " 46,\n",
3236 " 55,\n",
3237 " 12,\n",
3238 " 32,\n",
3239 " 63,\n",
3240 " 93,\n",
3241 " 53,\n",
3242 " 69,\n",
3243 " 4,\n",
3244 " 42,\n",
3245 " 16,\n",
3246 " 73,\n",
3247 " 38,\n",
3248 " 25,\n",
3249 " 39,\n",
3250 " 11,\n",
3251 " 24,\n",
3252 " 94,\n",
3253 " 72,\n",
3254 " 18,\n",
3255 " 8,\n",
3256 " 46,\n",
3257 " 29,\n",
3258 " 32,\n",
3259 " 40,\n",
3260 " 62,\n",
3261 " 76,\n",
3262 " 36,\n",
3263 " 20,\n",
3264 " 69,\n",
3265 " 36,\n",
3266 " 41,\n",
3267 " 72,\n",
3268 " 30,\n",
3269 " 23,\n",
3270 " 88,\n",
3271 " 34,\n",
3272 " 62,\n",
3273 " 99,\n",
3274 " 69,\n",
3275 " 82,\n",
3276 " 67,\n",
3277 " 59,\n",
3278 " 85,\n",
3279 " 74,\n",
3280 " 4,\n",
3281 " 36,\n",
3282 " 16,\n",
3283 " 20,\n",
3284 " 73,\n",
3285 " 35,\n",
3286 " 29,\n",
3287 " 78,\n",
3288 " 31,\n",
3289 " 90,\n",
3290 " 1,\n",
3291 " 74,\n",
3292 " 31,\n",
3293 " 49,\n",
3294 " 71,\n",
3295 " 48,\n",
3296 " 86,\n",
3297 " 81,\n",
3298 " 16,\n",
3299 " 23,\n",
3300 " 57,\n",
3301 " 5,\n",
3302 " 54,\n",
3303 " 1,\n",
3304 " 70,\n",
3305 " 54,\n",
3306 " 71,\n",
3307 " 83,\n",
3308 " 51,\n",
3309 " 54,\n",
3310 " 69,\n",
3311 " 16,\n",
3312 " 92,\n",
3313 " 33,\n",
3314 " 48,\n",
3315 " 61,\n",
3316 " 43,\n",
3317 " 52,\n",
3318 " 1,\n",
3319 " 89,\n",
3320 " 19,\n",
3321 " 67,\n",
3322 " 48]"
3323 ]
3324 }
3325 ],
3326 "prompt_number": 21
3327 },
3328 {
3329 "cell_type": "code",
3330 "collapsed": false,
3331 "input": [
3332 "s1 = 'hello'\n",
3333 "s2 = '__lk_'"
3334 ],
3335 "language": "python",
3336 "metadata": {},
3337 "outputs": [],
3338 "prompt_number": 27
3339 },
3340 {
3341 "cell_type": "code",
3342 "collapsed": false,
3343 "input": [
3344 "list(zip(s1, s2))"
3345 ],
3346 "language": "python",
3347 "metadata": {},
3348 "outputs": [
3349 {
3350 "metadata": {},
3351 "output_type": "pyout",
3352 "prompt_number": 23,
3353 "text": [
3354 "[('h', '_'), ('e', '_'), ('l', 'l'), ('l', 'l'), ('o', '_')]"
3355 ]
3356 }
3357 ],
3358 "prompt_number": 23
3359 },
3360 {
3361 "cell_type": "code",
3362 "collapsed": false,
3363 "input": [
3364 "def match_positive(pattern, target):\n",
3365 " if len(pattern) != len(target):\n",
3366 " return False\n",
3367 " for m, c in zip(pattern, target):\n",
3368 " if m != '_' and m != c:\n",
3369 " return False\n",
3370 " return True"
3371 ],
3372 "language": "python",
3373 "metadata": {},
3374 "outputs": [],
3375 "prompt_number": 31
3376 },
3377 {
3378 "cell_type": "code",
3379 "collapsed": false,
3380 "input": [
3381 "match_positive('he__o', 'hello')"
3382 ],
3383 "language": "python",
3384 "metadata": {},
3385 "outputs": [
3386 {
3387 "metadata": {},
3388 "output_type": "pyout",
3389 "prompt_number": 38,
3390 "text": [
3391 "True"
3392 ]
3393 }
3394 ],
3395 "prompt_number": 38
3396 },
3397 {
3398 "cell_type": "code",
3399 "collapsed": false,
3400 "input": [
3401 "def match(pattern, target, excluded=None):\n",
3402 " if not excluded:\n",
3403 " excluded = ''\n",
3404 " if len(pattern) != len(target):\n",
3405 " return False\n",
3406 " for m, c in zip(pattern, target):\n",
3407 " if m == '_' and c not in excluded:\n",
3408 " # true\n",
3409 " pass\n",
3410 " elif m != '_' and m == c:\n",
3411 " # true\n",
3412 " pass\n",
3413 " else:\n",
3414 " return False\n",
3415 " return True"
3416 ],
3417 "language": "python",
3418 "metadata": {},
3419 "outputs": [],
3420 "prompt_number": 56
3421 },
3422 {
3423 "cell_type": "code",
3424 "collapsed": false,
3425 "input": [
3426 "match('__l_o', 'hello', 'def')"
3427 ],
3428 "language": "python",
3429 "metadata": {},
3430 "outputs": [
3431 {
3432 "metadata": {},
3433 "output_type": "pyout",
3434 "prompt_number": 60,
3435 "text": [
3436 "False"
3437 ]
3438 }
3439 ],
3440 "prompt_number": 60
3441 },
3442 {
3443 "cell_type": "code",
3444 "collapsed": false,
3445 "input": [
3446 "'_' == '_' and 'l' not in 'xyz'"
3447 ],
3448 "language": "python",
3449 "metadata": {},
3450 "outputs": [
3451 {
3452 "metadata": {},
3453 "output_type": "pyout",
3454 "prompt_number": 48,
3455 "text": [
3456 "True"
3457 ]
3458 }
3459 ],
3460 "prompt_number": 48
3461 },
3462 {
3463 "cell_type": "code",
3464 "collapsed": false,
3465 "input": [],
3466 "language": "python",
3467 "metadata": {},
3468 "outputs": []
3469 }
3470 ],
3471 "metadata": {}
3472 }
3473 ]
3474 }