Fixed typo
[advent-of-code-15.git] / advent-of-code.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {},
6 "source": [
7 "http://adventofcode.com/"
8 ]
9 },
10 {
11 "cell_type": "code",
12 "execution_count": 1,
13 "metadata": {
14 "collapsed": true
15 },
16 "outputs": [],
17 "source": [
18 "pi = \"()(((()))(()()()((((()(((())(()(()((((((()(()(((())))((()(((()))((())(()((()()()()(((())(((((((())))()()(()(()(())(((((()()()((())(((((()()))))()(())(((())(())((((((())())))(()())))()))))()())()())((()()((()()()()(()((((((((()()())((()()(((((()(((())((())(()))()((((()((((((((())()((()())(())((()))())((((()())(((((((((((()()(((((()(()))())(((()(()))())((()(()())())())(()(((())(())())()()(()(()((()))((()))))((((()(((()))))((((()(()(()())())()(((()((((())((((()(((()()(())()()()())((()((((((()((()()))()((()))()(()()((())))(((()(((()))((()((()(()))(((()()(()(()()()))))()()(((()(((())())))))((()(((())()(()(())((()())))((((())))(()(()(()())()((()())))(((()((()(())()()((()((())(()()((())(())()))()))((()(())()))())(((((((()(()()(()(())())))))))(()((((((())((((())((())())(()()))))()(())(()())()())((())(()))))(()))(()((()))()(()((((((()()()()((((((((()(()(())((()()(()()))(())()())()((())))()))()())(((()))(())()(())()))()((()((()(()()())(())()()()((())())))((()()(()()((()(())()()())(((()(()()))))(())))(()(()())()))()()))))))()))))((((((())))())))(()(())())(()())))))(()))()))))))()((()))))()))))(()(()((()())())(()()))))(((())()))())())())(((()(()()))(())()(())(())((((((()()))))((()(()))))))(()))())(((()()(()))()())()()()())))))))))))))(())(()))(()))((()(())(()())(())())(()())(())()()(()())))()()()))(())())()))())())(())((())))))))(())))(())))))()))))((())(()(((()))))(()))()((()(())))(()())(((((()))()())()()))))()))))()))())(()(()()()))()))))))((()))))))))))()((()))((()(())((())()()(()()))()(()))))()()(()))()))(((())))(())()((())(())(()())()())())))))))())))()((())))()))(()))()()))(((((((()))())(()()))(()()(()))()(()((()())()))))))(((()()()())))(())()))()())(()()))()()))))))))(())))()))()()))))))()))()())))()(())(())))))()(())()()(()()))))())((()))))()))))(()(((((()))))))))())))())()(())()()))))(())))())()()())()()())()(()))))()))()))))))))())))((()))()))()))())))()())()()())))())))(()((())()((()))())))))())()(())((())))))))))))())()())(())())())(()))(()))()))())(()(())())()())()()(()))))(()(())))))))(())))())(())))))))())()()(())())())))(())))))()))()(()())()(()))())())))))()()(()))()))))())))))))))()))))()))))))())()())()()))))()())))())))))))))))()()))))()()(((()))()()(())()))))((()))))(()))(())())))(())()))))))(()))()))))(())())))))()))(()())))))))))))))())))))))))()((()())(()())))))))((()))))(())(())))()(()())())))())())(()()()())))()))))))())))))())()()())))))))))))()()(()))))()())()))((()())(()))))()(()))))))))))()())())(((())(()))))())()))()))()))))))()))))))(()))))()))))()(())))(())))(()))())()()(()()))()))(()()))))))))()))(()))())(()()(()(()())()()))()))))))))(())))))((()()(()))())())))))()))())(()())()()))())))()(()()()()))((())())))())()(()()))()))))))))(()))(())))()))))(()(()())(()))))()())())()))()()))())))))))))))())()))))))()))))))))())))))()))))())(()())))(())()))())())))))()()(()()())(()())))()()))(((()))(()()()))))()))))()))))((())))()((((((()()))))))())))))))))))(((()))))))))))))(())())))))())(()))))))(()))((()))())))()(()((()))()))()))))))))))())()))()(()()))))())))())(())()(()))()))())(()))()))))(()()))()()(())))))()))(())(()(()()))(()()())))))(((()))))))()))))))))))))(())(()))))()())())()()((()()))())))))(()))))())))))))()()()))))))))())))()(((()()))(())))))(((())())))))((()))()(()))(()))))(()())))(()))())))))()))))(())(())))()((()))(())())))()()))()))))))))()))(()()()(()()()(()))())(())()())(((()))(())))))))))(((()())))()()))))))))()(())(()))()((((())(())(()())))()))(((())()()()))((()))(()))())())))())))(()))())()())())(()(())())()()()(())))())(())))(())))(())()))()))(()((()))))))))())(()))))))())(()()))()()))()(()(()())))()()(()((()((((((()))(())))()()()))())()))((()()(()))())((()(()(()))(()()))))()())))()))()())))))))()()((()())(())))()))(()))(())(()))())(()(())))()()))))))(((()(((()()))()(()(())())((()()))()))()))()))()(()()()(()))((()())()(())))()()))(((())()()())(())()((()()()()(()(())(()()))()(((((()())))((())))))(()()()))))(((()(())))()))((()((()(())()(()((())))((()())()(()))(((()())()()(()))(())(((()((()())()((())()())(((()()))((()((())(()))(()())(()()()))((()))(())(()((()()())((()))(())))(())(())(())))(()())))(((((()(()(((((()())((((()(()())(())(()()(((())((()(((()()(((()()((((((())))())(()((((((()(()))()))()()((()((()))))()(()()(()((()()))))))(((((()(((((())()()()(())())))))))()))((()()(())))(())(()()()())))))(()((((())))))))()()(((()(()(()(()(()())()()()(((((((((()()())()(()))((()()()()()(((((((()())()((())()))((((((()(()(()(()())(((()(((((((()(((())(((((((((())(())())()))((()(()))(((()()())(())(()(()()(((()(())()))())))(())((((((())(()()())()()(((()(((())(()(((())(((((((()(((((((((()))(())(()(()(()))))((()))()(())())())((()(()((()()))((()()((()(())(())(()((())(((())(((()()()((((((()()(())((((())()))))(())((()(()((())))(((((()(()()())())((())())))((())((()((()()((((((())(((()()(()())())(()(()))(()(()))())())()(((((((()(((()(())()()((())((()(()()((()(()()(((((((((((())((())((((((())((()((((()(()((((()(((((((())()((()))))())()((()((((()(()(((()((()())))(())())(((()(((())((((((()(((((((((()()(())))(()(((((()((((()())))((()((()((()(()()(((())((((((((((((()(((())(()(((((()))(()()(()()()()()()((())(((((((())(((((())))))())()(()()(()(()(((()()(((((())(()((()((()(((()()((()((((())()))()((((())(())))()())(((())(())(()()((()(((()()((((((((((()()(()())())(((((((((())((((()))()()((((())(()((((()(((())())(((((((((((()((((())))(())(()(((()(((()((())(((((()((()()(()(()()((((((()((((()((()(()((()(()((((((()))))()()(((((()((()(()(())()))(())(((((((()((((()())(()((()((()(()))())))(())((()))))(((((((()()()())(()))(()()((()())()((()((()()()(()(()()))(()())(())(((((()(((((((((((()((()(((()(((((((()()((((((()(((((()(()((()(((((())((((((()))((((())((()()((())(((())()(((((()()(((((()((()(()(((((((()(((((()((()((()((())(())((())(()))()()))(()()(()(()()(((((((()(((()(((())()(((((()((((((()())((((())()((()((()(()()())(()))((((()()((((((()((()(()(()((((()((()((())((((((()(()(())((((((()((((((((((()((())()))()(()(()(((((()()()))((())))()(()((((((((((((((()(((()((((()((())((()((()(((()()(()(((()((())(()()())))()(()(()(((((()()(()(()((((()(((((())()(()(()))(((((()()(((()()(())((((((((((((((())((())(((((((((((())()()()(())()(()(()(((((((((())(((()))(()()())(()((((()(())(((((()())(())((((((((())()((((()((((((())(()((()(())(((()((((()))(((((((((()()))((((()(())()()()(())(()((())((()()))()(((())(((((())((((((()()))(((((((((()((((((())))(((((((()((()(()(())))())(()(()))()(((((()())(()))()(()(())(((()))))())()())))(((((()))())()((()(()))))((()()()((((((()))()()((((((((())((()(()(((()(()((())((()())(()((((())(()(((()()()(()(()()))())())((((((((((())())((()))()((())(())(())))())()(()()(())))())(()))(((()(()()(((()(((())))()(((()(())()((((((())()))()))()((((((()(()(((((()())))()))))())()()(((()(((((())((()()(()((()((()(()(()(())))(()()()()((()(())(((()((()))((((()))())(())))())(()))()()()())()))(((()()())()((())))(())(()()()()(()())((()(()()((((())))((()((()(())((()(()((())()(()()(((()())()()())((()))((())(((()()(())))()()))(((()((())()(((((()())(())((())()())())((((((()(()(((((()))(()(\""
19 ]
20 },
21 {
22 "cell_type": "code",
23 "execution_count": 4,
24 "metadata": {
25 "collapsed": false
26 },
27 "outputs": [
28 {
29 "data": {
30 "text/plain": [
31 "138"
32 ]
33 },
34 "execution_count": 4,
35 "metadata": {},
36 "output_type": "execute_result"
37 }
38 ],
39 "source": [
40 "len([c for c in pi if c == '(']) - len([c for c in pi if c == ')'])"
41 ]
42 },
43 {
44 "cell_type": "code",
45 "execution_count": 5,
46 "metadata": {
47 "collapsed": false
48 },
49 "outputs": [
50 {
51 "data": {
52 "text/plain": [
53 "[1,\n",
54 " -1,\n",
55 " 1,\n",
56 " 1,\n",
57 " 1,\n",
58 " 1,\n",
59 " -1,\n",
60 " -1,\n",
61 " -1,\n",
62 " 1,\n",
63 " 1,\n",
64 " -1,\n",
65 " 1,\n",
66 " -1,\n",
67 " 1,\n",
68 " -1,\n",
69 " 1,\n",
70 " 1,\n",
71 " 1,\n",
72 " 1,\n",
73 " 1,\n",
74 " -1,\n",
75 " 1,\n",
76 " 1,\n",
77 " 1,\n",
78 " 1,\n",
79 " -1,\n",
80 " -1,\n",
81 " 1,\n",
82 " 1,\n",
83 " -1,\n",
84 " 1,\n",
85 " 1,\n",
86 " -1,\n",
87 " 1,\n",
88 " 1,\n",
89 " 1,\n",
90 " 1,\n",
91 " 1,\n",
92 " 1,\n",
93 " 1,\n",
94 " -1,\n",
95 " 1,\n",
96 " 1,\n",
97 " -1,\n",
98 " 1,\n",
99 " 1,\n",
100 " 1,\n",
101 " 1,\n",
102 " -1,\n",
103 " -1,\n",
104 " -1,\n",
105 " -1,\n",
106 " 1,\n",
107 " 1,\n",
108 " 1,\n",
109 " -1,\n",
110 " 1,\n",
111 " 1,\n",
112 " 1,\n",
113 " 1,\n",
114 " -1,\n",
115 " -1,\n",
116 " -1,\n",
117 " 1,\n",
118 " 1,\n",
119 " 1,\n",
120 " -1,\n",
121 " -1,\n",
122 " 1,\n",
123 " 1,\n",
124 " -1,\n",
125 " 1,\n",
126 " 1,\n",
127 " 1,\n",
128 " -1,\n",
129 " 1,\n",
130 " -1,\n",
131 " 1,\n",
132 " -1,\n",
133 " 1,\n",
134 " -1,\n",
135 " 1,\n",
136 " 1,\n",
137 " 1,\n",
138 " 1,\n",
139 " -1,\n",
140 " -1,\n",
141 " 1,\n",
142 " 1,\n",
143 " 1,\n",
144 " 1,\n",
145 " 1,\n",
146 " 1,\n",
147 " 1,\n",
148 " 1,\n",
149 " -1,\n",
150 " -1,\n",
151 " -1,\n",
152 " -1,\n",
153 " 1,\n",
154 " -1,\n",
155 " 1,\n",
156 " -1,\n",
157 " 1,\n",
158 " 1,\n",
159 " -1,\n",
160 " 1,\n",
161 " 1,\n",
162 " -1,\n",
163 " 1,\n",
164 " 1,\n",
165 " -1,\n",
166 " -1,\n",
167 " 1,\n",
168 " 1,\n",
169 " 1,\n",
170 " 1,\n",
171 " 1,\n",
172 " 1,\n",
173 " -1,\n",
174 " 1,\n",
175 " -1,\n",
176 " 1,\n",
177 " -1,\n",
178 " 1,\n",
179 " 1,\n",
180 " 1,\n",
181 " -1,\n",
182 " -1,\n",
183 " 1,\n",
184 " 1,\n",
185 " 1,\n",
186 " 1,\n",
187 " 1,\n",
188 " 1,\n",
189 " -1,\n",
190 " 1,\n",
191 " -1,\n",
192 " -1,\n",
193 " -1,\n",
194 " -1,\n",
195 " -1,\n",
196 " 1,\n",
197 " -1,\n",
198 " 1,\n",
199 " 1,\n",
200 " -1,\n",
201 " -1,\n",
202 " 1,\n",
203 " 1,\n",
204 " 1,\n",
205 " 1,\n",
206 " -1,\n",
207 " -1,\n",
208 " 1,\n",
209 " 1,\n",
210 " -1,\n",
211 " -1,\n",
212 " 1,\n",
213 " 1,\n",
214 " 1,\n",
215 " 1,\n",
216 " 1,\n",
217 " 1,\n",
218 " 1,\n",
219 " -1,\n",
220 " -1,\n",
221 " 1,\n",
222 " -1,\n",
223 " -1,\n",
224 " -1,\n",
225 " -1,\n",
226 " 1,\n",
227 " 1,\n",
228 " -1,\n",
229 " 1,\n",
230 " -1,\n",
231 " -1,\n",
232 " -1,\n",
233 " -1,\n",
234 " 1,\n",
235 " -1,\n",
236 " -1,\n",
237 " -1,\n",
238 " -1,\n",
239 " -1,\n",
240 " 1,\n",
241 " -1,\n",
242 " 1,\n",
243 " -1,\n",
244 " -1,\n",
245 " 1,\n",
246 " -1,\n",
247 " 1,\n",
248 " -1,\n",
249 " -1,\n",
250 " 1,\n",
251 " 1,\n",
252 " 1,\n",
253 " -1,\n",
254 " 1,\n",
255 " -1,\n",
256 " 1,\n",
257 " 1,\n",
258 " 1,\n",
259 " -1,\n",
260 " 1,\n",
261 " -1,\n",
262 " 1,\n",
263 " -1,\n",
264 " 1,\n",
265 " -1,\n",
266 " 1,\n",
267 " 1,\n",
268 " -1,\n",
269 " 1,\n",
270 " 1,\n",
271 " 1,\n",
272 " 1,\n",
273 " 1,\n",
274 " 1,\n",
275 " 1,\n",
276 " 1,\n",
277 " 1,\n",
278 " -1,\n",
279 " 1,\n",
280 " -1,\n",
281 " 1,\n",
282 " -1,\n",
283 " -1,\n",
284 " 1,\n",
285 " 1,\n",
286 " 1,\n",
287 " -1,\n",
288 " 1,\n",
289 " -1,\n",
290 " 1,\n",
291 " 1,\n",
292 " 1,\n",
293 " 1,\n",
294 " 1,\n",
295 " 1,\n",
296 " -1,\n",
297 " 1,\n",
298 " 1,\n",
299 " 1,\n",
300 " 1,\n",
301 " -1,\n",
302 " -1,\n",
303 " 1,\n",
304 " 1,\n",
305 " 1,\n",
306 " -1,\n",
307 " -1,\n",
308 " 1,\n",
309 " 1,\n",
310 " -1,\n",
311 " -1,\n",
312 " -1,\n",
313 " 1,\n",
314 " -1,\n",
315 " 1,\n",
316 " 1,\n",
317 " 1,\n",
318 " 1,\n",
319 " 1,\n",
320 " -1,\n",
321 " 1,\n",
322 " 1,\n",
323 " 1,\n",
324 " 1,\n",
325 " 1,\n",
326 " 1,\n",
327 " 1,\n",
328 " 1,\n",
329 " 1,\n",
330 " -1,\n",
331 " -1,\n",
332 " 1,\n",
333 " -1,\n",
334 " 1,\n",
335 " 1,\n",
336 " 1,\n",
337 " -1,\n",
338 " 1,\n",
339 " -1,\n",
340 " -1,\n",
341 " 1,\n",
342 " 1,\n",
343 " -1,\n",
344 " -1,\n",
345 " 1,\n",
346 " 1,\n",
347 " 1,\n",
348 " -1,\n",
349 " -1,\n",
350 " -1,\n",
351 " 1,\n",
352 " -1,\n",
353 " -1,\n",
354 " 1,\n",
355 " 1,\n",
356 " 1,\n",
357 " 1,\n",
358 " 1,\n",
359 " -1,\n",
360 " 1,\n",
361 " -1,\n",
362 " -1,\n",
363 " 1,\n",
364 " 1,\n",
365 " 1,\n",
366 " 1,\n",
367 " 1,\n",
368 " 1,\n",
369 " 1,\n",
370 " 1,\n",
371 " 1,\n",
372 " 1,\n",
373 " 1,\n",
374 " 1,\n",
375 " -1,\n",
376 " 1,\n",
377 " -1,\n",
378 " 1,\n",
379 " 1,\n",
380 " 1,\n",
381 " 1,\n",
382 " 1,\n",
383 " 1,\n",
384 " -1,\n",
385 " 1,\n",
386 " 1,\n",
387 " -1,\n",
388 " -1,\n",
389 " -1,\n",
390 " 1,\n",
391 " -1,\n",
392 " -1,\n",
393 " 1,\n",
394 " 1,\n",
395 " 1,\n",
396 " 1,\n",
397 " -1,\n",
398 " 1,\n",
399 " 1,\n",
400 " -1,\n",
401 " -1,\n",
402 " -1,\n",
403 " 1,\n",
404 " -1,\n",
405 " -1,\n",
406 " 1,\n",
407 " 1,\n",
408 " 1,\n",
409 " -1,\n",
410 " 1,\n",
411 " 1,\n",
412 " -1,\n",
413 " 1,\n",
414 " -1,\n",
415 " -1,\n",
416 " 1,\n",
417 " -1,\n",
418 " -1,\n",
419 " 1,\n",
420 " -1,\n",
421 " -1,\n",
422 " 1,\n",
423 " 1,\n",
424 " -1,\n",
425 " 1,\n",
426 " 1,\n",
427 " 1,\n",
428 " 1,\n",
429 " -1,\n",
430 " -1,\n",
431 " 1,\n",
432 " 1,\n",
433 " -1,\n",
434 " -1,\n",
435 " 1,\n",
436 " -1,\n",
437 " -1,\n",
438 " 1,\n",
439 " -1,\n",
440 " 1,\n",
441 " -1,\n",
442 " 1,\n",
443 " 1,\n",
444 " -1,\n",
445 " 1,\n",
446 " 1,\n",
447 " -1,\n",
448 " 1,\n",
449 " 1,\n",
450 " 1,\n",
451 " -1,\n",
452 " -1,\n",
453 " -1,\n",
454 " 1,\n",
455 " 1,\n",
456 " 1,\n",
457 " -1,\n",
458 " -1,\n",
459 " -1,\n",
460 " -1,\n",
461 " -1,\n",
462 " 1,\n",
463 " 1,\n",
464 " 1,\n",
465 " 1,\n",
466 " 1,\n",
467 " -1,\n",
468 " 1,\n",
469 " 1,\n",
470 " 1,\n",
471 " 1,\n",
472 " -1,\n",
473 " -1,\n",
474 " -1,\n",
475 " -1,\n",
476 " -1,\n",
477 " 1,\n",
478 " 1,\n",
479 " 1,\n",
480 " 1,\n",
481 " 1,\n",
482 " -1,\n",
483 " 1,\n",
484 " 1,\n",
485 " -1,\n",
486 " 1,\n",
487 " 1,\n",
488 " -1,\n",
489 " 1,\n",
490 " -1,\n",
491 " -1,\n",
492 " 1,\n",
493 " -1,\n",
494 " -1,\n",
495 " 1,\n",
496 " -1,\n",
497 " 1,\n",
498 " 1,\n",
499 " 1,\n",
500 " 1,\n",
501 " -1,\n",
502 " 1,\n",
503 " 1,\n",
504 " 1,\n",
505 " 1,\n",
506 " 1,\n",
507 " -1,\n",
508 " -1,\n",
509 " 1,\n",
510 " 1,\n",
511 " 1,\n",
512 " 1,\n",
513 " 1,\n",
514 " -1,\n",
515 " 1,\n",
516 " 1,\n",
517 " 1,\n",
518 " 1,\n",
519 " -1,\n",
520 " 1,\n",
521 " -1,\n",
522 " 1,\n",
523 " 1,\n",
524 " -1,\n",
525 " -1,\n",
526 " 1,\n",
527 " -1,\n",
528 " 1,\n",
529 " -1,\n",
530 " 1,\n",
531 " -1,\n",
532 " 1,\n",
533 " -1,\n",
534 " -1,\n",
535 " 1,\n",
536 " 1,\n",
537 " 1,\n",
538 " -1,\n",
539 " 1,\n",
540 " 1,\n",
541 " 1,\n",
542 " 1,\n",
543 " 1,\n",
544 " 1,\n",
545 " 1,\n",
546 " -1,\n",
547 " 1,\n",
548 " 1,\n",
549 " 1,\n",
550 " -1,\n",
551 " 1,\n",
552 " -1,\n",
553 " -1,\n",
554 " -1,\n",
555 " 1,\n",
556 " -1,\n",
557 " 1,\n",
558 " 1,\n",
559 " 1,\n",
560 " -1,\n",
561 " -1,\n",
562 " -1,\n",
563 " 1,\n",
564 " -1,\n",
565 " 1,\n",
566 " 1,\n",
567 " -1,\n",
568 " 1,\n",
569 " -1,\n",
570 " 1,\n",
571 " 1,\n",
572 " 1,\n",
573 " -1,\n",
574 " -1,\n",
575 " -1,\n",
576 " -1,\n",
577 " 1,\n",
578 " 1,\n",
579 " 1,\n",
580 " 1,\n",
581 " -1,\n",
582 " 1,\n",
583 " 1,\n",
584 " 1,\n",
585 " 1,\n",
586 " -1,\n",
587 " -1,\n",
588 " -1,\n",
589 " 1,\n",
590 " 1,\n",
591 " 1,\n",
592 " -1,\n",
593 " 1,\n",
594 " 1,\n",
595 " 1,\n",
596 " -1,\n",
597 " 1,\n",
598 " 1,\n",
599 " -1,\n",
600 " -1,\n",
601 " -1,\n",
602 " 1,\n",
603 " 1,\n",
604 " 1,\n",
605 " 1,\n",
606 " -1,\n",
607 " 1,\n",
608 " -1,\n",
609 " 1,\n",
610 " 1,\n",
611 " -1,\n",
612 " 1,\n",
613 " 1,\n",
614 " -1,\n",
615 " 1,\n",
616 " -1,\n",
617 " 1,\n",
618 " -1,\n",
619 " -1,\n",
620 " -1,\n",
621 " -1,\n",
622 " -1,\n",
623 " 1,\n",
624 " -1,\n",
625 " 1,\n",
626 " -1,\n",
627 " 1,\n",
628 " 1,\n",
629 " 1,\n",
630 " 1,\n",
631 " -1,\n",
632 " 1,\n",
633 " 1,\n",
634 " 1,\n",
635 " 1,\n",
636 " -1,\n",
637 " -1,\n",
638 " 1,\n",
639 " -1,\n",
640 " -1,\n",
641 " -1,\n",
642 " -1,\n",
643 " -1,\n",
644 " -1,\n",
645 " 1,\n",
646 " 1,\n",
647 " 1,\n",
648 " -1,\n",
649 " 1,\n",
650 " 1,\n",
651 " 1,\n",
652 " 1,\n",
653 " -1,\n",
654 " -1,\n",
655 " 1,\n",
656 " -1,\n",
657 " 1,\n",
658 " 1,\n",
659 " -1,\n",
660 " 1,\n",
661 " 1,\n",
662 " -1,\n",
663 " -1,\n",
664 " 1,\n",
665 " 1,\n",
666 " 1,\n",
667 " -1,\n",
668 " 1,\n",
669 " -1,\n",
670 " -1,\n",
671 " -1,\n",
672 " -1,\n",
673 " 1,\n",
674 " 1,\n",
675 " 1,\n",
676 " 1,\n",
677 " 1,\n",
678 " -1,\n",
679 " -1,\n",
680 " -1,\n",
681 " -1,\n",
682 " 1,\n",
683 " 1,\n",
684 " -1,\n",
685 " 1,\n",
686 " 1,\n",
687 " -1,\n",
688 " 1,\n",
689 " 1,\n",
690 " -1,\n",
691 " 1,\n",
692 " -1,\n",
693 " -1,\n",
694 " 1,\n",
695 " -1,\n",
696 " 1,\n",
697 " 1,\n",
698 " 1,\n",
699 " -1,\n",
700 " 1,\n",
701 " -1,\n",
702 " -1,\n",
703 " -1,\n",
704 " -1,\n",
705 " 1,\n",
706 " 1,\n",
707 " 1,\n",
708 " 1,\n",
709 " -1,\n",
710 " 1,\n",
711 " 1,\n",
712 " 1,\n",
713 " -1,\n",
714 " 1,\n",
715 " 1,\n",
716 " -1,\n",
717 " -1,\n",
718 " 1,\n",
719 " -1,\n",
720 " 1,\n",
721 " -1,\n",
722 " 1,\n",
723 " 1,\n",
724 " 1,\n",
725 " -1,\n",
726 " 1,\n",
727 " 1,\n",
728 " 1,\n",
729 " -1,\n",
730 " -1,\n",
731 " 1,\n",
732 " 1,\n",
733 " -1,\n",
734 " 1,\n",
735 " -1,\n",
736 " 1,\n",
737 " 1,\n",
738 " 1,\n",
739 " -1,\n",
740 " -1,\n",
741 " 1,\n",
742 " 1,\n",
743 " -1,\n",
744 " -1,\n",
745 " 1,\n",
746 " -1,\n",
747 " -1,\n",
748 " -1,\n",
749 " 1,\n",
750 " -1,\n",
751 " -1,\n",
752 " -1,\n",
753 " 1,\n",
754 " 1,\n",
755 " 1,\n",
756 " -1,\n",
757 " 1,\n",
758 " 1,\n",
759 " -1,\n",
760 " -1,\n",
761 " 1,\n",
762 " -1,\n",
763 " -1,\n",
764 " -1,\n",
765 " 1,\n",
766 " -1,\n",
767 " -1,\n",
768 " 1,\n",
769 " 1,\n",
770 " 1,\n",
771 " 1,\n",
772 " 1,\n",
773 " 1,\n",
774 " 1,\n",
775 " 1,\n",
776 " -1,\n",
777 " 1,\n",
778 " 1,\n",
779 " -1,\n",
780 " 1,\n",
781 " -1,\n",
782 " 1,\n",
783 " 1,\n",
784 " -1,\n",
785 " 1,\n",
786 " 1,\n",
787 " -1,\n",
788 " -1,\n",
789 " 1,\n",
790 " -1,\n",
791 " -1,\n",
792 " -1,\n",
793 " -1,\n",
794 " -1,\n",
795 " -1,\n",
796 " -1,\n",
797 " -1,\n",
798 " 1,\n",
799 " 1,\n",
800 " -1,\n",
801 " 1,\n",
802 " 1,\n",
803 " 1,\n",
804 " 1,\n",
805 " 1,\n",
806 " 1,\n",
807 " 1,\n",
808 " -1,\n",
809 " -1,\n",
810 " 1,\n",
811 " 1,\n",
812 " 1,\n",
813 " 1,\n",
814 " 1,\n",
815 " -1,\n",
816 " -1,\n",
817 " 1,\n",
818 " 1,\n",
819 " 1,\n",
820 " -1,\n",
821 " -1,\n",
822 " 1,\n",
823 " -1,\n",
824 " -1,\n",
825 " 1,\n",
826 " 1,\n",
827 " -1,\n",
828 " 1,\n",
829 " -1,\n",
830 " -1,\n",
831 " -1,\n",
832 " -1,\n",
833 " -1,\n",
834 " 1,\n",
835 " -1,\n",
836 " 1,\n",
837 " 1,\n",
838 " -1,\n",
839 " -1,\n",
840 " 1,\n",
841 " 1,\n",
842 " -1,\n",
843 " 1,\n",
844 " -1,\n",
845 " -1,\n",
846 " 1,\n",
847 " -1,\n",
848 " 1,\n",
849 " -1,\n",
850 " -1,\n",
851 " 1,\n",
852 " 1,\n",
853 " 1,\n",
854 " -1,\n",
855 " -1,\n",
856 " 1,\n",
857 " 1,\n",
858 " -1,\n",
859 " -1,\n",
860 " -1,\n",
861 " -1,\n",
862 " -1,\n",
863 " 1,\n",
864 " 1,\n",
865 " -1,\n",
866 " -1,\n",
867 " -1,\n",
868 " 1,\n",
869 " 1,\n",
870 " -1,\n",
871 " 1,\n",
872 " 1,\n",
873 " 1,\n",
874 " -1,\n",
875 " -1,\n",
876 " -1,\n",
877 " 1,\n",
878 " -1,\n",
879 " 1,\n",
880 " 1,\n",
881 " -1,\n",
882 " 1,\n",
883 " 1,\n",
884 " 1,\n",
885 " 1,\n",
886 " 1,\n",
887 " 1,\n",
888 " 1,\n",
889 " -1,\n",
890 " 1,\n",
891 " -1,\n",
892 " 1,\n",
893 " -1,\n",
894 " 1,\n",
895 " -1,\n",
896 " 1,\n",
897 " 1,\n",
898 " 1,\n",
899 " 1,\n",
900 " 1,\n",
901 " 1,\n",
902 " 1,\n",
903 " 1,\n",
904 " 1,\n",
905 " -1,\n",
906 " 1,\n",
907 " 1,\n",
908 " -1,\n",
909 " 1,\n",
910 " 1,\n",
911 " -1,\n",
912 " -1,\n",
913 " 1,\n",
914 " 1,\n",
915 " 1,\n",
916 " -1,\n",
917 " 1,\n",
918 " -1,\n",
919 " 1,\n",
920 " 1,\n",
921 " -1,\n",
922 " 1,\n",
923 " -1,\n",
924 " -1,\n",
925 " -1,\n",
926 " 1,\n",
927 " 1,\n",
928 " -1,\n",
929 " -1,\n",
930 " 1,\n",
931 " -1,\n",
932 " 1,\n",
933 " -1,\n",
934 " -1,\n",
935 " 1,\n",
936 " -1,\n",
937 " 1,\n",
938 " 1,\n",
939 " 1,\n",
940 " -1,\n",
941 " -1,\n",
942 " -1,\n",
943 " -1,\n",
944 " 1,\n",
945 " -1,\n",
946 " -1,\n",
947 " -1,\n",
948 " 1,\n",
949 " -1,\n",
950 " 1,\n",
951 " -1,\n",
952 " -1,\n",
953 " 1,\n",
954 " 1,\n",
955 " 1,\n",
956 " 1,\n",
957 " -1,\n",
958 " -1,\n",
959 " -1,\n",
960 " 1,\n",
961 " 1,\n",
962 " -1,\n",
963 " -1,\n",
964 " 1,\n",
965 " -1,\n",
966 " 1,\n",
967 " 1,\n",
968 " -1,\n",
969 " -1,\n",
970 " 1,\n",
971 " -1,\n",
972 " -1,\n",
973 " -1,\n",
974 " 1,\n",
975 " -1,\n",
976 " 1,\n",
977 " 1,\n",
978 " 1,\n",
979 " -1,\n",
980 " 1,\n",
981 " 1,\n",
982 " 1,\n",
983 " -1,\n",
984 " 1,\n",
985 " 1,\n",
986 " -1,\n",
987 " 1,\n",
988 " -1,\n",
989 " 1,\n",
990 " -1,\n",
991 " -1,\n",
992 " 1,\n",
993 " 1,\n",
994 " -1,\n",
995 " -1,\n",
996 " 1,\n",
997 " -1,\n",
998 " 1,\n",
999 " -1,\n",
1000 " 1,\n",
1001 " -1,\n",
1002 " 1,\n",
1003 " 1,\n",
1004 " 1,\n",
1005 " -1,\n",
1006 " -1,\n",
1007 " 1,\n",
1008 " -1,\n",
1009 " -1,\n",
1010 " -1,\n",
1011 " -1,\n",
1012 " 1,\n",
1013 " 1,\n",
1014 " 1,\n",
1015 " -1,\n",
1016 " 1,\n",
1017 " -1,\n",
1018 " 1,\n",
1019 " 1,\n",
1020 " -1,\n",
1021 " 1,\n",
1022 " -1,\n",
1023 " 1,\n",
1024 " 1,\n",
1025 " 1,\n",
1026 " -1,\n",
1027 " 1,\n",
1028 " 1,\n",
1029 " -1,\n",
1030 " -1,\n",
1031 " 1,\n",
1032 " -1,\n",
1033 " 1,\n",
1034 " -1,\n",
1035 " 1,\n",
1036 " -1,\n",
1037 " -1,\n",
1038 " 1,\n",
1039 " 1,\n",
1040 " 1,\n",
1041 " 1,\n",
1042 " -1,\n",
1043 " 1,\n",
1044 " 1,\n",
1045 " -1,\n",
1046 " 1,\n",
1047 " -1,\n",
1048 " -1,\n",
1049 " -1,\n",
1050 " -1,\n",
1051 " -1,\n",
1052 " 1,\n",
1053 " ...]"
1054 ]
1055 },
1056 "execution_count": 5,
1057 "metadata": {},
1058 "output_type": "execute_result"
1059 }
1060 ],
1061 "source": [
1062 "deltas = [1 if c == '(' else -1 for c in pi]\n",
1063 "deltas"
1064 ]
1065 },
1066 {
1067 "cell_type": "code",
1068 "execution_count": 6,
1069 "metadata": {
1070 "collapsed": true
1071 },
1072 "outputs": [],
1073 "source": [
1074 "import itertools"
1075 ]
1076 },
1077 {
1078 "cell_type": "code",
1079 "execution_count": 15,
1080 "metadata": {
1081 "collapsed": false
1082 },
1083 "outputs": [
1084 {
1085 "data": {
1086 "text/plain": [
1087 "1771"
1088 ]
1089 },
1090 "execution_count": 15,
1091 "metadata": {},
1092 "output_type": "execute_result"
1093 }
1094 ],
1095 "source": [
1096 "len(list(itertools.takewhile(lambda f: f >= -1, itertools.accumulate(deltas))))"
1097 ]
1098 },
1099 {
1100 "cell_type": "code",
1101 "execution_count": 24,
1102 "metadata": {
1103 "collapsed": true
1104 },
1105 "outputs": [],
1106 "source": [
1107 "pi2 = \"\"\"3x11x24\n",
1108 "13x5x19\n",
1109 "1x9x27\n",
1110 "24x8x21\n",
1111 "6x8x17\n",
1112 "19x18x22\n",
1113 "10x9x12\n",
1114 "12x2x5\n",
1115 "26x6x11\n",
1116 "9x23x15\n",
1117 "12x8x17\n",
1118 "13x29x10\n",
1119 "28x18x6\n",
1120 "22x28x26\n",
1121 "1x5x11\n",
1122 "29x26x12\n",
1123 "8x28x29\n",
1124 "27x4x21\n",
1125 "12x7x16\n",
1126 "7x4x23\n",
1127 "15x24x8\n",
1128 "15x14x2\n",
1129 "11x6x29\n",
1130 "28x19x9\n",
1131 "10x3x1\n",
1132 "5x20x13\n",
1133 "10x25x1\n",
1134 "22x17x7\n",
1135 "16x29x3\n",
1136 "18x22x8\n",
1137 "18x11x19\n",
1138 "21x24x20\n",
1139 "4x7x17\n",
1140 "22x27x12\n",
1141 "1x26x6\n",
1142 "5x27x24\n",
1143 "29x21x3\n",
1144 "25x30x2\n",
1145 "21x26x2\n",
1146 "10x24x27\n",
1147 "10x16x28\n",
1148 "18x16x23\n",
1149 "6x5x26\n",
1150 "19x12x20\n",
1151 "6x24x25\n",
1152 "11x20x7\n",
1153 "4x8x5\n",
1154 "2x13x11\n",
1155 "11x17x1\n",
1156 "13x24x6\n",
1157 "22x29x16\n",
1158 "4x24x20\n",
1159 "10x25x10\n",
1160 "12x29x23\n",
1161 "23x27x12\n",
1162 "11x21x9\n",
1163 "13x2x6\n",
1164 "15x30x2\n",
1165 "8x26x24\n",
1166 "24x7x30\n",
1167 "22x22x8\n",
1168 "29x27x8\n",
1169 "28x23x27\n",
1170 "13x16x14\n",
1171 "9x28x20\n",
1172 "21x4x30\n",
1173 "21x20x20\n",
1174 "11x17x30\n",
1175 "9x14x22\n",
1176 "20x2x6\n",
1177 "10x11x14\n",
1178 "1x8x23\n",
1179 "23x19x19\n",
1180 "26x10x13\n",
1181 "21x12x12\n",
1182 "25x7x24\n",
1183 "1x28x17\n",
1184 "20x23x9\n",
1185 "2x24x27\n",
1186 "20x24x29\n",
1187 "1x3x10\n",
1188 "5x20x14\n",
1189 "25x21x3\n",
1190 "15x5x22\n",
1191 "14x17x19\n",
1192 "27x3x18\n",
1193 "29x23x19\n",
1194 "14x21x19\n",
1195 "20x8x3\n",
1196 "22x27x12\n",
1197 "24x15x18\n",
1198 "9x10x19\n",
1199 "29x25x28\n",
1200 "14x22x6\n",
1201 "4x19x28\n",
1202 "4x24x14\n",
1203 "17x19x17\n",
1204 "7x19x29\n",
1205 "28x8x26\n",
1206 "7x20x16\n",
1207 "11x26x29\n",
1208 "2x18x3\n",
1209 "12x7x18\n",
1210 "11x15x21\n",
1211 "24x7x26\n",
1212 "2x22x23\n",
1213 "2x30x5\n",
1214 "1x19x8\n",
1215 "15x29x10\n",
1216 "15x26x22\n",
1217 "20x16x14\n",
1218 "25x29x22\n",
1219 "3x13x19\n",
1220 "1x12x30\n",
1221 "3x15x27\n",
1222 "19x9x11\n",
1223 "30x8x21\n",
1224 "26x12x20\n",
1225 "11x17x19\n",
1226 "17x25x1\n",
1227 "19x24x12\n",
1228 "30x6x20\n",
1229 "11x19x18\n",
1230 "18x15x29\n",
1231 "18x8x9\n",
1232 "25x15x5\n",
1233 "15x6x26\n",
1234 "13x27x19\n",
1235 "23x24x12\n",
1236 "3x15x28\n",
1237 "17x10x10\n",
1238 "15x4x7\n",
1239 "15x27x7\n",
1240 "21x8x11\n",
1241 "9x18x2\n",
1242 "7x20x20\n",
1243 "17x23x12\n",
1244 "2x19x1\n",
1245 "7x26x26\n",
1246 "13x23x8\n",
1247 "10x3x12\n",
1248 "11x1x9\n",
1249 "1x11x19\n",
1250 "25x14x26\n",
1251 "16x10x15\n",
1252 "7x6x11\n",
1253 "8x1x27\n",
1254 "20x28x17\n",
1255 "3x25x9\n",
1256 "30x7x5\n",
1257 "17x17x4\n",
1258 "23x25x27\n",
1259 "23x8x5\n",
1260 "13x11x1\n",
1261 "15x10x21\n",
1262 "22x16x1\n",
1263 "12x15x28\n",
1264 "27x18x26\n",
1265 "25x18x5\n",
1266 "21x3x27\n",
1267 "15x25x5\n",
1268 "29x27x19\n",
1269 "11x10x12\n",
1270 "22x16x21\n",
1271 "11x8x18\n",
1272 "6x10x23\n",
1273 "21x21x2\n",
1274 "13x27x28\n",
1275 "2x5x20\n",
1276 "23x16x20\n",
1277 "1x21x7\n",
1278 "22x2x13\n",
1279 "11x10x4\n",
1280 "7x3x4\n",
1281 "19x2x5\n",
1282 "21x11x1\n",
1283 "7x27x26\n",
1284 "12x4x23\n",
1285 "12x3x15\n",
1286 "25x7x4\n",
1287 "20x7x15\n",
1288 "16x5x11\n",
1289 "1x18x26\n",
1290 "11x27x10\n",
1291 "17x6x24\n",
1292 "19x13x16\n",
1293 "6x3x11\n",
1294 "4x19x18\n",
1295 "16x15x15\n",
1296 "1x11x17\n",
1297 "19x11x29\n",
1298 "18x19x1\n",
1299 "1x25x7\n",
1300 "8x22x14\n",
1301 "15x6x19\n",
1302 "5x30x18\n",
1303 "30x24x22\n",
1304 "11x16x2\n",
1305 "21x29x19\n",
1306 "20x29x11\n",
1307 "27x1x18\n",
1308 "20x5x30\n",
1309 "12x4x28\n",
1310 "3x9x30\n",
1311 "26x20x15\n",
1312 "18x25x18\n",
1313 "20x28x28\n",
1314 "21x5x3\n",
1315 "20x21x25\n",
1316 "19x27x22\n",
1317 "8x27x9\n",
1318 "1x5x15\n",
1319 "30x6x19\n",
1320 "16x5x15\n",
1321 "18x30x21\n",
1322 "4x15x8\n",
1323 "9x3x28\n",
1324 "18x15x27\n",
1325 "25x11x6\n",
1326 "17x22x15\n",
1327 "18x12x18\n",
1328 "14x30x30\n",
1329 "1x7x23\n",
1330 "27x21x12\n",
1331 "15x7x18\n",
1332 "16x17x24\n",
1333 "11x12x19\n",
1334 "18x15x21\n",
1335 "6x18x15\n",
1336 "2x21x4\n",
1337 "12x9x14\n",
1338 "19x7x25\n",
1339 "22x3x1\n",
1340 "29x19x7\n",
1341 "30x25x7\n",
1342 "6x27x27\n",
1343 "5x13x9\n",
1344 "21x4x18\n",
1345 "13x1x16\n",
1346 "11x21x25\n",
1347 "27x20x27\n",
1348 "14x25x9\n",
1349 "23x11x15\n",
1350 "22x10x26\n",
1351 "15x16x4\n",
1352 "14x16x21\n",
1353 "1x1x24\n",
1354 "17x27x3\n",
1355 "25x28x16\n",
1356 "12x2x29\n",
1357 "9x19x28\n",
1358 "12x7x17\n",
1359 "6x9x19\n",
1360 "15x14x24\n",
1361 "25x21x23\n",
1362 "26x27x25\n",
1363 "7x18x13\n",
1364 "15x10x6\n",
1365 "22x28x2\n",
1366 "15x2x14\n",
1367 "3x24x18\n",
1368 "30x22x7\n",
1369 "18x27x17\n",
1370 "29x18x7\n",
1371 "20x2x4\n",
1372 "4x20x26\n",
1373 "23x30x15\n",
1374 "5x7x3\n",
1375 "4x24x12\n",
1376 "24x30x20\n",
1377 "26x18x17\n",
1378 "6x28x3\n",
1379 "29x19x29\n",
1380 "14x10x4\n",
1381 "15x5x23\n",
1382 "12x25x4\n",
1383 "7x15x19\n",
1384 "26x21x19\n",
1385 "18x2x23\n",
1386 "19x20x3\n",
1387 "3x13x9\n",
1388 "29x21x24\n",
1389 "26x13x29\n",
1390 "30x27x4\n",
1391 "20x10x29\n",
1392 "21x18x8\n",
1393 "7x26x10\n",
1394 "29x16x21\n",
1395 "22x5x11\n",
1396 "17x15x2\n",
1397 "7x29x5\n",
1398 "6x18x15\n",
1399 "23x6x14\n",
1400 "10x30x14\n",
1401 "26x6x16\n",
1402 "24x13x25\n",
1403 "17x29x20\n",
1404 "4x27x19\n",
1405 "28x12x11\n",
1406 "23x20x3\n",
1407 "22x6x20\n",
1408 "29x9x19\n",
1409 "10x16x22\n",
1410 "30x26x4\n",
1411 "29x26x11\n",
1412 "2x11x15\n",
1413 "1x3x30\n",
1414 "30x30x29\n",
1415 "9x1x3\n",
1416 "30x13x16\n",
1417 "20x4x5\n",
1418 "23x28x11\n",
1419 "24x27x1\n",
1420 "4x25x10\n",
1421 "9x3x6\n",
1422 "14x4x15\n",
1423 "4x5x25\n",
1424 "27x14x13\n",
1425 "20x30x3\n",
1426 "28x15x25\n",
1427 "5x19x2\n",
1428 "10x24x29\n",
1429 "29x30x18\n",
1430 "30x1x25\n",
1431 "7x7x15\n",
1432 "1x13x16\n",
1433 "23x18x4\n",
1434 "1x28x8\n",
1435 "24x11x8\n",
1436 "22x26x19\n",
1437 "30x30x14\n",
1438 "2x4x13\n",
1439 "27x20x26\n",
1440 "16x20x17\n",
1441 "11x12x13\n",
1442 "28x2x17\n",
1443 "15x26x13\n",
1444 "29x15x25\n",
1445 "30x27x9\n",
1446 "2x6x25\n",
1447 "10x26x19\n",
1448 "16x8x23\n",
1449 "12x17x18\n",
1450 "26x14x22\n",
1451 "13x17x4\n",
1452 "27x27x29\n",
1453 "17x13x22\n",
1454 "9x8x3\n",
1455 "25x15x20\n",
1456 "14x13x16\n",
1457 "8x7x13\n",
1458 "12x4x21\n",
1459 "27x16x15\n",
1460 "6x14x5\n",
1461 "28x29x17\n",
1462 "23x17x25\n",
1463 "10x27x28\n",
1464 "1x28x21\n",
1465 "18x2x30\n",
1466 "25x30x16\n",
1467 "25x21x7\n",
1468 "2x3x4\n",
1469 "9x6x13\n",
1470 "19x6x10\n",
1471 "28x17x8\n",
1472 "13x24x28\n",
1473 "24x12x7\n",
1474 "5x19x5\n",
1475 "18x10x27\n",
1476 "16x1x6\n",
1477 "12x14x30\n",
1478 "1x2x28\n",
1479 "23x21x2\n",
1480 "13x3x23\n",
1481 "9x22x10\n",
1482 "10x17x2\n",
1483 "24x20x11\n",
1484 "30x6x14\n",
1485 "28x1x16\n",
1486 "24x20x1\n",
1487 "28x7x7\n",
1488 "1x24x21\n",
1489 "14x9x7\n",
1490 "22x8x15\n",
1491 "20x1x21\n",
1492 "6x3x7\n",
1493 "7x26x14\n",
1494 "5x7x28\n",
1495 "5x4x4\n",
1496 "15x7x28\n",
1497 "30x16x23\n",
1498 "7x26x2\n",
1499 "1x2x30\n",
1500 "24x28x20\n",
1501 "5x17x28\n",
1502 "4x15x20\n",
1503 "15x26x2\n",
1504 "1x3x23\n",
1505 "22x30x24\n",
1506 "9x20x16\n",
1507 "7x15x2\n",
1508 "6x21x18\n",
1509 "21x21x29\n",
1510 "29x10x10\n",
1511 "4x3x23\n",
1512 "23x2x18\n",
1513 "29x24x14\n",
1514 "29x29x16\n",
1515 "22x28x24\n",
1516 "21x18x24\n",
1517 "16x21x6\n",
1518 "3x9x22\n",
1519 "9x18x4\n",
1520 "22x9x9\n",
1521 "12x9x13\n",
1522 "18x21x14\n",
1523 "7x8x29\n",
1524 "28x28x14\n",
1525 "1x6x24\n",
1526 "11x11x3\n",
1527 "8x28x6\n",
1528 "11x16x10\n",
1529 "9x16x16\n",
1530 "6x6x19\n",
1531 "21x5x12\n",
1532 "15x17x12\n",
1533 "3x6x29\n",
1534 "19x1x26\n",
1535 "10x30x25\n",
1536 "24x26x21\n",
1537 "1x10x18\n",
1538 "6x1x16\n",
1539 "4x17x27\n",
1540 "17x11x27\n",
1541 "15x15x21\n",
1542 "14x23x1\n",
1543 "8x9x30\n",
1544 "22x22x25\n",
1545 "20x27x22\n",
1546 "12x7x9\n",
1547 "9x26x19\n",
1548 "26x25x12\n",
1549 "8x8x16\n",
1550 "28x15x10\n",
1551 "29x18x2\n",
1552 "25x22x6\n",
1553 "4x6x15\n",
1554 "12x18x4\n",
1555 "10x3x20\n",
1556 "17x28x17\n",
1557 "14x25x13\n",
1558 "14x10x3\n",
1559 "14x5x10\n",
1560 "7x7x22\n",
1561 "21x2x14\n",
1562 "1x21x5\n",
1563 "27x29x1\n",
1564 "6x20x4\n",
1565 "7x19x23\n",
1566 "28x19x27\n",
1567 "3x9x18\n",
1568 "13x17x17\n",
1569 "18x8x15\n",
1570 "26x23x17\n",
1571 "10x10x13\n",
1572 "11x5x21\n",
1573 "25x15x29\n",
1574 "6x23x24\n",
1575 "10x7x2\n",
1576 "19x10x30\n",
1577 "4x3x23\n",
1578 "22x12x6\n",
1579 "11x17x16\n",
1580 "6x8x12\n",
1581 "18x20x11\n",
1582 "6x2x2\n",
1583 "17x4x11\n",
1584 "20x23x22\n",
1585 "29x23x24\n",
1586 "25x11x21\n",
1587 "22x11x15\n",
1588 "29x3x9\n",
1589 "13x30x5\n",
1590 "17x10x12\n",
1591 "10x30x8\n",
1592 "21x16x17\n",
1593 "1x5x26\n",
1594 "22x15x16\n",
1595 "27x7x11\n",
1596 "16x8x18\n",
1597 "29x9x7\n",
1598 "25x4x17\n",
1599 "10x21x25\n",
1600 "2x19x21\n",
1601 "29x11x16\n",
1602 "18x26x21\n",
1603 "2x8x20\n",
1604 "17x29x27\n",
1605 "25x27x4\n",
1606 "14x3x14\n",
1607 "25x29x29\n",
1608 "26x18x11\n",
1609 "8x24x28\n",
1610 "7x30x24\n",
1611 "12x30x22\n",
1612 "29x20x6\n",
1613 "3x17x1\n",
1614 "6x15x14\n",
1615 "6x22x20\n",
1616 "13x26x26\n",
1617 "12x2x1\n",
1618 "7x14x12\n",
1619 "15x16x11\n",
1620 "3x21x4\n",
1621 "30x17x29\n",
1622 "9x18x27\n",
1623 "11x28x16\n",
1624 "22x3x25\n",
1625 "18x15x15\n",
1626 "2x30x12\n",
1627 "3x27x22\n",
1628 "10x8x8\n",
1629 "26x16x14\n",
1630 "15x2x29\n",
1631 "12x10x7\n",
1632 "21x20x15\n",
1633 "2x15x25\n",
1634 "4x14x13\n",
1635 "3x15x13\n",
1636 "29x8x3\n",
1637 "7x7x28\n",
1638 "15x10x24\n",
1639 "23x15x5\n",
1640 "5x7x14\n",
1641 "24x1x22\n",
1642 "1x11x13\n",
1643 "26x4x19\n",
1644 "19x16x26\n",
1645 "5x25x5\n",
1646 "17x25x14\n",
1647 "23x7x14\n",
1648 "24x6x17\n",
1649 "5x13x12\n",
1650 "20x20x5\n",
1651 "22x29x17\n",
1652 "11x17x29\n",
1653 "25x6x4\n",
1654 "29x8x16\n",
1655 "28x22x24\n",
1656 "24x23x17\n",
1657 "16x17x4\n",
1658 "17x8x25\n",
1659 "22x9x13\n",
1660 "24x4x8\n",
1661 "18x10x20\n",
1662 "21x23x21\n",
1663 "13x14x12\n",
1664 "23x26x4\n",
1665 "4x10x29\n",
1666 "2x18x18\n",
1667 "19x5x21\n",
1668 "2x27x23\n",
1669 "6x29x30\n",
1670 "21x9x20\n",
1671 "6x5x16\n",
1672 "25x10x27\n",
1673 "5x29x21\n",
1674 "24x14x19\n",
1675 "19x11x8\n",
1676 "2x28x6\n",
1677 "19x25x6\n",
1678 "27x1x11\n",
1679 "6x8x29\n",
1680 "18x25x30\n",
1681 "4x27x26\n",
1682 "8x12x1\n",
1683 "7x17x25\n",
1684 "7x14x27\n",
1685 "12x9x5\n",
1686 "14x29x13\n",
1687 "18x17x5\n",
1688 "23x1x3\n",
1689 "28x5x13\n",
1690 "3x2x26\n",
1691 "3x7x11\n",
1692 "1x8x7\n",
1693 "12x5x4\n",
1694 "2x30x21\n",
1695 "16x30x11\n",
1696 "3x26x4\n",
1697 "16x9x4\n",
1698 "11x9x22\n",
1699 "23x5x6\n",
1700 "13x20x3\n",
1701 "4x3x2\n",
1702 "14x10x29\n",
1703 "11x8x12\n",
1704 "26x15x16\n",
1705 "7x17x29\n",
1706 "18x19x18\n",
1707 "8x28x4\n",
1708 "22x6x13\n",
1709 "9x23x7\n",
1710 "11x23x20\n",
1711 "13x11x26\n",
1712 "15x30x13\n",
1713 "1x5x8\n",
1714 "5x10x24\n",
1715 "22x25x17\n",
1716 "27x20x25\n",
1717 "30x10x21\n",
1718 "16x28x24\n",
1719 "20x12x8\n",
1720 "17x25x1\n",
1721 "30x14x9\n",
1722 "14x18x6\n",
1723 "8x28x29\n",
1724 "12x18x29\n",
1725 "9x7x18\n",
1726 "6x12x25\n",
1727 "20x13x24\n",
1728 "22x3x12\n",
1729 "5x23x22\n",
1730 "8x10x17\n",
1731 "7x23x5\n",
1732 "10x26x27\n",
1733 "14x26x19\n",
1734 "10x18x24\n",
1735 "8x4x4\n",
1736 "16x15x11\n",
1737 "3x14x9\n",
1738 "18x5x30\n",
1739 "29x12x26\n",
1740 "16x13x12\n",
1741 "15x10x7\n",
1742 "18x5x26\n",
1743 "14x1x6\n",
1744 "10x8x29\n",
1745 "3x4x9\n",
1746 "19x4x23\n",
1747 "28x17x23\n",
1748 "30x7x17\n",
1749 "19x5x9\n",
1750 "26x29x28\n",
1751 "22x13x17\n",
1752 "28x2x1\n",
1753 "20x30x8\n",
1754 "15x13x21\n",
1755 "25x23x19\n",
1756 "27x23x1\n",
1757 "4x6x23\n",
1758 "29x29x24\n",
1759 "5x18x7\n",
1760 "4x6x30\n",
1761 "17x15x2\n",
1762 "27x4x2\n",
1763 "25x24x14\n",
1764 "28x8x30\n",
1765 "24x29x5\n",
1766 "14x30x14\n",
1767 "10x18x19\n",
1768 "15x26x22\n",
1769 "24x19x21\n",
1770 "29x23x27\n",
1771 "21x10x16\n",
1772 "7x4x29\n",
1773 "14x21x3\n",
1774 "21x4x28\n",
1775 "17x16x15\n",
1776 "24x7x13\n",
1777 "21x24x15\n",
1778 "25x11x16\n",
1779 "10x26x13\n",
1780 "23x20x14\n",
1781 "20x29x27\n",
1782 "14x24x14\n",
1783 "14x23x12\n",
1784 "18x6x5\n",
1785 "3x18x9\n",
1786 "8x18x19\n",
1787 "20x26x15\n",
1788 "16x14x13\n",
1789 "30x16x3\n",
1790 "17x13x4\n",
1791 "15x19x30\n",
1792 "20x3x8\n",
1793 "13x4x5\n",
1794 "12x10x15\n",
1795 "8x23x26\n",
1796 "16x8x15\n",
1797 "22x8x11\n",
1798 "12x11x18\n",
1799 "28x3x30\n",
1800 "15x8x4\n",
1801 "13x22x13\n",
1802 "21x26x21\n",
1803 "29x1x15\n",
1804 "28x9x5\n",
1805 "27x3x26\n",
1806 "22x19x30\n",
1807 "4x11x22\n",
1808 "21x27x20\n",
1809 "22x26x7\n",
1810 "19x28x20\n",
1811 "24x23x16\n",
1812 "26x12x9\n",
1813 "13x22x9\n",
1814 "5x6x23\n",
1815 "20x7x2\n",
1816 "18x26x30\n",
1817 "3x6x28\n",
1818 "24x18x13\n",
1819 "28x19x16\n",
1820 "25x21x25\n",
1821 "25x19x23\n",
1822 "22x29x10\n",
1823 "29x19x30\n",
1824 "4x7x27\n",
1825 "5x12x28\n",
1826 "8x26x6\n",
1827 "14x14x25\n",
1828 "17x17x2\n",
1829 "5x27x11\n",
1830 "8x2x2\n",
1831 "3x20x24\n",
1832 "26x10x9\n",
1833 "22x28x27\n",
1834 "18x15x20\n",
1835 "12x11x1\n",
1836 "5x14x30\n",
1837 "7x3x16\n",
1838 "2x16x16\n",
1839 "18x20x15\n",
1840 "13x14x29\n",
1841 "1x17x12\n",
1842 "13x5x23\n",
1843 "19x4x10\n",
1844 "25x19x11\n",
1845 "15x17x14\n",
1846 "1x28x27\n",
1847 "11x9x28\n",
1848 "9x10x18\n",
1849 "30x11x22\n",
1850 "21x21x20\n",
1851 "2x1x5\n",
1852 "2x25x1\n",
1853 "7x3x4\n",
1854 "22x15x29\n",
1855 "21x28x15\n",
1856 "12x12x4\n",
1857 "21x30x6\n",
1858 "15x10x7\n",
1859 "10x14x6\n",
1860 "21x26x18\n",
1861 "14x25x6\n",
1862 "9x7x11\n",
1863 "22x3x1\n",
1864 "1x16x27\n",
1865 "1x14x23\n",
1866 "2x13x8\n",
1867 "14x19x11\n",
1868 "21x26x1\n",
1869 "4x28x13\n",
1870 "12x16x20\n",
1871 "21x13x9\n",
1872 "3x4x13\n",
1873 "14x9x8\n",
1874 "21x21x12\n",
1875 "27x10x17\n",
1876 "6x20x6\n",
1877 "28x23x23\n",
1878 "2x28x12\n",
1879 "8x10x10\n",
1880 "3x9x2\n",
1881 "20x3x29\n",
1882 "19x4x16\n",
1883 "29x24x9\n",
1884 "26x20x8\n",
1885 "15x28x26\n",
1886 "18x17x10\n",
1887 "7x22x10\n",
1888 "20x15x9\n",
1889 "6x10x8\n",
1890 "7x26x21\n",
1891 "8x8x16\n",
1892 "15x6x29\n",
1893 "22x30x11\n",
1894 "18x25x8\n",
1895 "6x21x20\n",
1896 "7x23x25\n",
1897 "8x25x26\n",
1898 "11x25x27\n",
1899 "22x18x23\n",
1900 "3x2x14\n",
1901 "16x16x1\n",
1902 "15x13x11\n",
1903 "3x9x25\n",
1904 "29x25x24\n",
1905 "9x15x1\n",
1906 "12x4x1\n",
1907 "23x30x20\n",
1908 "3x1x23\n",
1909 "6x10x29\n",
1910 "28x13x24\n",
1911 "4x19x17\n",
1912 "6x6x25\n",
1913 "27x29x17\n",
1914 "12x13x2\n",
1915 "10x7x13\n",
1916 "14x15x8\n",
1917 "22x2x3\n",
1918 "27x17x19\n",
1919 "23x10x16\n",
1920 "5x9x25\n",
1921 "9x25x14\n",
1922 "11x18x6\n",
1923 "18x10x12\n",
1924 "9x4x15\n",
1925 "7x16x14\n",
1926 "17x24x10\n",
1927 "11x4x6\n",
1928 "12x9x17\n",
1929 "22x18x12\n",
1930 "6x24x24\n",
1931 "6x22x23\n",
1932 "5x17x30\n",
1933 "6x9x5\n",
1934 "17x20x10\n",
1935 "6x8x12\n",
1936 "14x17x13\n",
1937 "29x10x17\n",
1938 "22x4x5\n",
1939 "10x19x30\n",
1940 "22x29x11\n",
1941 "10x12x29\n",
1942 "21x22x26\n",
1943 "16x6x25\n",
1944 "1x26x24\n",
1945 "30x17x16\n",
1946 "27x28x5\n",
1947 "30x13x22\n",
1948 "7x26x12\n",
1949 "11x24x30\n",
1950 "1x17x25\n",
1951 "22x1x3\n",
1952 "29x24x6\n",
1953 "4x8x24\n",
1954 "13x9x20\n",
1955 "8x12x9\n",
1956 "21x25x4\n",
1957 "23x23x28\n",
1958 "5x2x19\n",
1959 "29x3x15\n",
1960 "22x1x14\n",
1961 "3x23x30\n",
1962 "8x25x3\n",
1963 "15x8x14\n",
1964 "30x14x6\n",
1965 "23x27x24\n",
1966 "19x1x2\n",
1967 "10x9x13\n",
1968 "13x8x7\n",
1969 "8x13x22\n",
1970 "5x15x20\n",
1971 "17x14x8\n",
1972 "5x11x20\n",
1973 "5x10x27\n",
1974 "24x17x19\n",
1975 "21x2x3\n",
1976 "15x30x26\n",
1977 "21x19x15\n",
1978 "2x7x23\n",
1979 "13x17x25\n",
1980 "30x15x19\n",
1981 "26x4x10\n",
1982 "2x25x8\n",
1983 "9x9x10\n",
1984 "2x25x8\n",
1985 "19x21x30\n",
1986 "17x26x12\n",
1987 "7x5x10\n",
1988 "2x22x14\n",
1989 "10x17x30\n",
1990 "1x8x5\n",
1991 "23x2x25\n",
1992 "22x29x8\n",
1993 "13x26x1\n",
1994 "26x3x30\n",
1995 "25x17x8\n",
1996 "25x18x26\n",
1997 "26x19x15\n",
1998 "8x28x10\n",
1999 "12x16x29\n",
2000 "30x6x29\n",
2001 "28x19x4\n",
2002 "27x26x18\n",
2003 "15x23x17\n",
2004 "5x21x30\n",
2005 "8x11x13\n",
2006 "2x26x7\n",
2007 "19x9x24\n",
2008 "3x22x23\n",
2009 "6x7x18\n",
2010 "4x26x30\n",
2011 "13x25x20\n",
2012 "17x3x15\n",
2013 "8x20x18\n",
2014 "23x18x23\n",
2015 "28x23x9\n",
2016 "16x3x4\n",
2017 "1x29x14\n",
2018 "20x26x22\n",
2019 "3x2x22\n",
2020 "23x8x17\n",
2021 "19x5x17\n",
2022 "21x18x20\n",
2023 "17x21x8\n",
2024 "30x28x1\n",
2025 "29x19x23\n",
2026 "12x12x11\n",
2027 "24x18x7\n",
2028 "21x18x14\n",
2029 "14x26x25\n",
2030 "9x11x3\n",
2031 "10x7x15\n",
2032 "27x6x28\n",
2033 "14x26x4\n",
2034 "28x4x1\n",
2035 "22x25x29\n",
2036 "6x26x6\n",
2037 "1x3x13\n",
2038 "26x22x12\n",
2039 "6x21x26\n",
2040 "23x4x27\n",
2041 "26x13x24\n",
2042 "5x24x28\n",
2043 "22x16x7\n",
2044 "3x27x24\n",
2045 "19x28x2\n",
2046 "11x13x9\n",
2047 "29x16x22\n",
2048 "30x10x24\n",
2049 "14x14x22\n",
2050 "22x23x16\n",
2051 "14x8x3\n",
2052 "20x5x14\n",
2053 "28x6x13\n",
2054 "3x15x25\n",
2055 "4x12x22\n",
2056 "15x12x25\n",
2057 "10x11x24\n",
2058 "7x7x6\n",
2059 "8x11x9\n",
2060 "21x10x29\n",
2061 "23x28x30\n",
2062 "8x29x26\n",
2063 "16x27x11\n",
2064 "1x10x2\n",
2065 "24x20x16\n",
2066 "7x12x28\n",
2067 "28x8x20\n",
2068 "14x10x30\n",
2069 "1x19x6\n",
2070 "4x12x20\n",
2071 "18x2x7\n",
2072 "24x18x17\n",
2073 "16x11x10\n",
2074 "1x12x22\n",
2075 "30x16x28\n",
2076 "18x12x11\n",
2077 "28x9x8\n",
2078 "23x6x17\n",
2079 "10x3x11\n",
2080 "5x12x8\n",
2081 "22x2x23\n",
2082 "9x19x14\n",
2083 "15x28x13\n",
2084 "27x20x23\n",
2085 "19x16x12\n",
2086 "19x30x15\n",
2087 "8x17x4\n",
2088 "10x22x18\n",
2089 "13x22x4\n",
2090 "3x12x19\n",
2091 "22x16x23\n",
2092 "11x8x19\n",
2093 "8x11x6\n",
2094 "7x14x7\n",
2095 "29x17x29\n",
2096 "21x8x12\n",
2097 "21x9x11\n",
2098 "20x1x27\n",
2099 "1x22x11\n",
2100 "5x28x4\n",
2101 "26x7x26\n",
2102 "30x12x18\n",
2103 "29x11x20\n",
2104 "3x12x15\n",
2105 "24x25x17\n",
2106 "14x6x11\"\"\""
2107 ]
2108 },
2109 {
2110 "cell_type": "code",
2111 "execution_count": 19,
2112 "metadata": {
2113 "collapsed": false
2114 },
2115 "outputs": [
2116 {
2117 "data": {
2118 "text/plain": [
2119 "['24x25x17', '14x6x11']"
2120 ]
2121 },
2122 "execution_count": 19,
2123 "metadata": {},
2124 "output_type": "execute_result"
2125 }
2126 ],
2127 "source": [
2128 "pi2.splitlines()[-2:]"
2129 ]
2130 },
2131 {
2132 "cell_type": "code",
2133 "execution_count": 31,
2134 "metadata": {
2135 "collapsed": false
2136 },
2137 "outputs": [
2138 {
2139 "data": {
2140 "text/plain": [
2141 "1588178"
2142 ]
2143 },
2144 "execution_count": 31,
2145 "metadata": {},
2146 "output_type": "execute_result"
2147 }
2148 ],
2149 "source": [
2150 "total = 0\n",
2151 "for package in pi2.splitlines():\n",
2152 " dims = [int(d) for d in package.split('x')]\n",
2153 " areas = [dims[0]*dims[1], dims[0]*dims[2], dims[1]*dims[2]]\n",
2154 " slack = min(areas)\n",
2155 " paper = slack + sum(areas)*2\n",
2156 " total += paper\n",
2157 "total"
2158 ]
2159 },
2160 {
2161 "cell_type": "code",
2162 "execution_count": 33,
2163 "metadata": {
2164 "collapsed": false
2165 },
2166 "outputs": [
2167 {
2168 "data": {
2169 "text/plain": [
2170 "3783758"
2171 ]
2172 },
2173 "execution_count": 33,
2174 "metadata": {},
2175 "output_type": "execute_result"
2176 }
2177 ],
2178 "source": [
2179 "total = 0\n",
2180 "for package in pi2.splitlines():\n",
2181 " dims = [int(d) for d in package.split('x')]\n",
2182 " perims = [p*2 for p in [dims[0]+dims[1], dims[0]+dims[2], dims[1]+dims[2]]]\n",
2183 " length = min(perims)\n",
2184 " vol = dims[0] * dims[1] * dims[2]\n",
2185 " ribbon = length + vol\n",
2186 " total += ribbon\n",
2187 "total"
2188 ]
2189 },
2190 {
2191 "cell_type": "code",
2192 "execution_count": 34,
2193 "metadata": {
2194 "collapsed": true
2195 },
2196 "outputs": [],
2197 "source": [
2198 "pi3 = \"\"\"^><^>>>^<^v<v^^vv^><<^<><<vv^<>^<^v>^vv<>v><vv^^<>>^^^v<<vv><<^>^<^v<^>^v><<<v^<v<<<v<<vv<v<^><^>><>v>v^<<v^^<^v<><^>^<<^^^>v>>v^^<v>>^>vv><v>>^>>v^>^v>^<^^v>^>^^v<v>^^<v<>>v^^v><^><^<<>v^<^<^v<v>v^>>>v^v^>^<>^v<^^vv<v>^>^<>^^<vv^<><<v<^<^^>vv<>^>v<^>^v>v^>^v<>^><>><vv<>v^v<><>v^v>>>>v^^>^><^^<v<^><^<v>>^v^v<>v<<<^<<vvvv<<v^vv^>v^^^<^^^<v>>v<^v>>>>>v<^^^^>v<^<><v>>>>><v>>v^vvvv^^<v^<>^v<^v^>v><^>^v<<>>vv^>v>v^^>vv^<^vvv<>><>><><^^^<v<>^<^^^<v><^v>>v>^v<v^vv^<>^^^>v^^^v>>^v^^<^>>^>^<<v>>>^^<>>^vv>v^<^>>>><v<><><^^v<><<<<^^<>>^<vvv^><>v<v<<<<><v<<v>v<v^><vv<v^>^<^>v^^><^v>^^>v<>^v^<>^vv^><v^^vv>vvv>v>^<vv^>>^>>^>><>>>^^^^v<vv>^<>v^^><v^>^<>v<^^v><v<<><^v><>^^^^^v^v>>^^v><<><<vv>^^^^><^>v>><<<^v>v^^>^v^<^^v>v<^<<>>^v<<<v<<>>v<^v^><vv<v^v>v^<v>><v>^v<<<vv^>v<v>>v>>v><v><v^>v^^v>^v^>>>><>^>v>^v^>>>>v^<<vv<^v><<>v<v^<^^<<v<^v^^v^>vv><vv<v^<^>><^^>^<><^^<v<><^v^v^<^^>^<v><^<v>v^<<<^^v<v>^v>>><>^^>vv<<^v^<<<<^^>>>v>v<<<>^^>>>v>^>v>vv<<>^<^><v^>^^<^<v<<v<^>>^v^<vvv><>v^><<v>^^<v^vv^^^<vvv^<^>^>vv>><^v<^<<v<><<><<^^<><><vv>v>^<v>>^<>>^^v>vv^<^^v>><^vv^<<v^^><<>vv<v<><v<><v^^^v^v>^v<^<>v^^>><>^<^<v^<v^v^>v<<<^<<^>>>^^<^^v>v^<v>vvvv>v<>><^>^<<<<v^<v<>v^^^v<>v>^<v<<^^v^^<>^<<v^^<^<v>v>>v>>v^>^<vv<<<<<^<><>v><>>>v^>^v<^<><<v<^v^^<^<><^>^^^>^><>^><<vv>^<>vv<<v^v<<<<<>>>v<vv>^v>^>^>^<^><>v<><>>>^^<v>^<^v>>^<><v^><v^>>>v<v^^vvv^><v<v>v^>vvvv>>><^>v<>^^^>v>>v^<v<>v^>^<v^>^<<^>^>>v<<><<v^^>>v^<v^<^v^>^>v^><<^<v>v^<v>>^^<<v>v><<<^v^<>^<>^>>^<<v>^^<>^v<>v^>>><<v>><v^>^><v^<><v><>><v^<>vv>v^<^^^>v>^^<vv>>^v<><>>><>><^<>>v>v^^>^^<^^>^>>v>vv^^v<^<^v><vv<v<^>><<vvv<<><^>^v>^^^<<>v^<v<v><<v>^^v<<<>^^vv<^>vv>^>^<><<>vv<^>v^vv>^^^v><<^vv>^v<><v^^^^v^>vv^^<^<>^^v^<^vv<v<vv<>v>v^^<>^^>^^>^<><<^v>^><^^vvvv<><>^<v^^>v<>^><>v>><>vv^<<><<>><>v<^>^v>>^^v><<<>>^<^v^<v<<<v^>^^<^<><><^><<<<^<vv><v<<><vvv^^><vv>^<<vv<<<^v<>>><><>>v><<<v>vvvv^^vv<v>><<^v^vvv><><vv>v><>v<<<^<v^>><^^>v^<v>><v>^^^v^v>><<<v<^^>>^v<>v^<vv^^<<v<v>v<<<<^^^v^v<<>>>v>>vv>^^<><^v<v><>>v^>>>>>^>v^v^<^v^v^vvv>v<v<^>vv^<<v>vv>>v^^vv<^v>>>>vv<>v<>^^vv^<v>v^>>vvv<<<v<<^vv^^^^>v>v>^><<<^>v^><v<^<<<v>^v^^^><<><<<^^<^^<>^<v>^<v<<v<^^vv>v<^v><v><v<>^v<^<v<^<v^v><v>><v<v<<>^<v<>>><>^v^v<<^><v^<<v<v^>^>v><^>^vv^^<v<v<vv<v>^v^v^>^<<>>>>>v^<>^>v^vv^><<>>^^<>v^><v>^vvv^>v^v><>^><<>v>v<^<^><^^vv<<><>>v>>v><vv>>^v<<>^vv<>^vv>v>v>^>^>>><><<>v<v>^<<^v^^<<<><v>>vv<^<vv<vv^<<v<<^v><<>v<^^^<<^v^>^v>^^^v^v>>>v>v^v>^>^vv<^^<<vv^>^<<<vv>v^<><<^vvv^^><>vv^v>v>^><<^^^^vvv^<vvv>><^v<^>^<>>^<v<<vv>>><v>vv^<>><v^<v>^v>^>v>^<^<^^^<<vvvv^>>>>>>>v><vv>^<>^^v^><>><^v^^<v^v<<<<v^>><>v^v<vv<><^<<<<^>^^>vv>><^v<v^v<<>^vvv>v^^><^^<^<>>^^v^vv<>v<^<<<v^^^><v<vv<<>v>v<>^v^><v^vv^v^^v<^^v^^v><>v<^v>><<^<^v^>><<vv<<^>^<<v^<>^><>v><vv^v>>^<v<<<^>vv<^v>^>v<<v>^>>^>>v^<v<v>>^v<^v^v><<><>^><<<><v<vvvv<v^<v^v><>^<>^^^^v>^>^vvvvv>v>>v><<vv<<v<><<^><<^v><<v<<<v><vv<^>^v>>>>^v<^v<<>>^>^<<vv^<^>v>><<^>^>^v><><>^><<v<>v^><<^v^<^^><^^v^<<^v^^>>^v^<^><vv>v^^<<^^^<><>^>v^v>v^>^v^vv>^^>>>>^^<^>>>^^v<vv<><^^<vvv<^^^vv>v<v<v>><<<>^>^^>^>^v<<<<>>^<<>><v>>v>^^<^v<>v<>v^>v^><^<^^><v^^v>^^vv<v<<>><<vv<>>v>^<<<<v<<v>^><^^<^<^<v^<<^^v>^v<^>v^v^<v^vv^>^^><^>v^v>>^^v^><vv<v<v<v>>>>><<><v><v^v^<v^<^^<v<>^>v>v<>>>v>^^^^>><v^v^^v<<<>v^<<^<v>>>><^v^<<><v<>>v><><v<v^v>^v^^<v<^<^^v>><<vv<<vv><>>^>^>vv<^<>^vvv^v<v^^<>v^v>^^<<<<<>^v^>^<>v^^<>v^v<vv>^<>vv^<^vv>><v^^vvvvv>><<>v<vv^<^<vv^v^<>^^<v^<vv^<v^v^v<<^>^>^>^^>>>vvv>^>v>v>>>^>vv^><>^><>v>^^<v^>^><<v>><<<>>v<vvvv^>^v<^<>^<v>^<>^^<<><>^v<><>>>^vv<^<<^<^v>v<<<<<^^v<^v<><v<<><^>v>^v>>^v^><^^^^v<><><>vv^<>vv<^v<^^><v^<^><^^v^v^<^^<<><v>v<v<v^<<^v><>v^v<^>vvv><<^v>>v><><v<<^>>>v<^>>v>^<>><>^<v^v^<vv<<^>v<^^>^<^v<^<<^^v<>>^>^>^v^^v^v<v^^vv^<v>>v><vv^vv>v<>v^>v^^>^^>><v><v^<<><<>><<^^>><^v<v<><<><<><v<v^<^<v>>>><v^^v^^>>>^^^^^<<vv<^><>^<<<vv^^^>^><<<v<^v>^<v<^>^vvv<<>vv><<>v>v^v>>>>>^<>><^^^><<<<v><<vv>>>v<^<vv^v^<<v>>>>^^vvv>v<>><v>>>v>>^v^vvv<<>vvv<<^^^<>vv^^v<<>^^^>>^<^v^<^^>v^><v>>^<<^v<<vv<vv>v^>>^>v^><^><>^>>>vv>><^^^>vv<<^^vv><^<>^>^^<^<>>^vv^>>^v><>v^>>><<<^^<^>^>v<^>^<^^<>>><^^<>^v^<<vvv<v><>vvv><v>v^v<<^<v>^^><<^vv^v>v>v<<^v^<<<>^><><vvv>v>^vv^v<>vv^>^^<^>^>v^^<vv^>v><v<<<><>>^v<^<><><^<v^^<<^<v>vv<><<>v^<v^>^>^^<><<>^<^<<v^^v<v^<><<>v>><^<<>^>^v^v<v^v><^>>^v<^>v<<>^^^<^v>>>^<v>vvvv<<v^<^^>vvvv>v<>v<v><vvvvv>^<><>vvv<>^<<>^>>>>v^<^<><^v>v^>>v><>^><<v^>^<<>^>^v^<v^^>>^v><v>^<v><>v^<^^>v>^>>>v^v>>>^<>^<>>>>>v>>vv^v<><<<><><v><<vv<<v<><>>vv<^<vv>^v<<>v^v<^v<><v>>^v>>vvv^^v>>v>^>^>v><v><^>^^<<>^v<^<<<<^>v<^>>v^<^v>^v<<>^>^vvv<^^vv>^vv>vv<>>v>v<v>>v^<<<<<^^v^>v>^<<<v^v>>v<v><vvv><v>^<vv><<>>^<^>^^<>>>>^<^v<>v^^>^<^^v<^><>><v>>^v^vv<^v<^><<vvv<>><>><^^>^<^v^<^<>v<<<^v>v^^^<>v^<v^>^v^>><>^^<v<^><<^^v^<>^<^vv>>><^v><v^>vv<^v<<<v^>>v>v^v>^<v>v<^<>v^vvv>^vv<<<<v><^><v>>^^>><^v><<^>v^^<<v^^<^<><<<<>^<v<^v^>v<<^^>v<<<<<vvv<v<^>^>^>^>>^>>>v^<<v>>^^v><vv<^v<v<^^^>>>^vvv<^v<>>>vv>^^><^v>vv^>>v>v^<>^<vv>^>^<<^>^^^>>^vv>^^>vvvv<>>^^^^>>>v>v^^>vv>vv^<<>^><^<v^vvvv><v<><v>><<<v<v<<^v><vv^vv^<>>>^>^<v<^v<>><^<vv^^><v>v^>v^<><v^vvv>^>v^^v^>^^>v<<<<^<<^>>v>v^^^<<<v>>>^^v>v<v><<<<^^^v>^vv^>><>^v<v<<^^<<<<><>>>v>vvv^v^^v^>>vv>^>><>^v><^v^><^^>vv>^<^<^>><v>v>><><><v>^>^>v>vv>vv>^^>v>v^><v<<v^<>^>^v>^^v>^<^v<>>vvv^^>^>vv<v<v<<^<^<v^<>v^^v<^<^>vv^^<v><^^^>v>vv<<v>v<<v^<v^^><vv>^>^v^<^>v<^>^<>vv^><v<^><>>^>>^<^><<>^<^>v>v><>>>^<<^><<v><^v<v><>>vv<^><v^>>v>v>>>>^^>v<^v^>><<^<>>v><^><<^>^<vv^^<><<>><vvvv^>^^<><^^v>^^>vv>^v<v>>^^v^<v<^><^<<>>v^^^<^><^<<><<v<>><<>^v>vvv^vvv^^>>^<^<v>><>^<<<<^^<>>>v^<<^^v>><><<v<^>v>^v<v^>v>vv^><>^><<><^^>^>^<><>><^^<v^v<^><><><v>^<v<<v^<<^^^v<v<^v<>>><^v<<<<>>^v>^^vv^v^<<v>><<<v>vv>>v>>^v^<>>vv^<^>^<<>v<<<^vv<^vv^vv<^v^^^<vv^>v>>v<^^<^^vvv<^^v<>>>^>v^><v>^^><>vv>v>v<<<^^v<^vv^v>^^^>>>^^<>^^<^vvv>><><<><^<v>><<>^>^^<v^v^>vv>vv<v>^^<^^<<><><<v><v^^>v><v><<>v>vvv<^^^^<^>>><<<^^^<^>vv^^v>>v<<v^^<vv^<^>vvv^^v^^<^<vv>v<^<>^<<vv^^>^v>>^><><>v<v<v<>><v>>>^^>>v^><v^^<^>><>v<><<v^v<v<<>>>><>>>>><<^vvv<<><><<>^><><<^^v><<^>v>^>^v>v>>^^<><^>vv<^<^v>v<><^<<v<><^><>^^^<v^<><vvv^^^<>^^v><v<<<v>><>^>^vv<v^<vv>v>v^vv<v^v<v>^v^>v><>v^><>v>^^^^><<vv^><v<<v<^<>^v^^^>^^><<<v<^<v^>^^>v><vvvvv^<^<v^^>v<^v^^vv^<<<<v><^>v>v^v><><v^<<^<<v<^^^>^><v^v^<><><>^v<v>^<>^v>^v>v^<><^><v>>v<<^><^vv^<><^<>><>><v<v><<^^^^>v<^<^vv<><^vv><<^<<v>v^>>^v>^>v^^v>vv<v>v<<v>v<>^>>vv^>>><>^v^^<^>v<<^<^^v^^v^<<v<<v<^v<>vv^<v>><^v<^>>>vv^^<v^<>^^v<v<v>>^><^^^<><<^^>v<<vv>><<vvv>><<v^v^>><>vv^><<^>^><^v<^<^<vv<^^vv>v^v<<<<<<><<vv^vv>vv>v<^><<><><<>>v>><v><^>^v>^v^<>v^^^><^^<<<^vv^vv>^v^vvv^^>v^<v>><^<^<^<>^vv<vv^v^^>^^^>vv^v>>><<<^<>>v>v<^^<><v>>><><^v^^<<><<<>^<^^v^>v<vv^^^^>><v><^<<v<<v<>^>^>>^<>^v><>>^<v<vv^<<^<<>vv^>^^<<<^v<>>^v<>vvv<<^^<<><vvvvv<<^<^^<>>>>^^<><>^><>^v<v^^v<<v^^<^<^>v<v>^v<^>^v<>v^vv<><<v>^vvv<><<^>>^^><><>^<>^>v^^v^><v<><>>v><v^<v<<v>><^v>^<v<^>v<<<>vvv^<^^v<vvv^vv<>^<>^>>v<>^^><><v>>^><^^vv>><<>><v><^><>>^vv>v<vv<>v^v^^v<<^^<vv>v^^vv<<^<<><>^<><v^><^<^<>>^vv<v>v>>^<^vv>^vv^>v>^<><^><^<>v^v^^<^<>^^v>>><^v<>v^v<<^>v><>^^<<v^v<>v^>>v>^<><vv^v<v^<vv<>^>^>^<^>v><<><><><<<>^>><v^^><^>><v>>^v<<<^<<>^><<^>>>>>v<^>v>>v^<v^>^>v^^><>v^v^vvvv<v<v<>v>>><<>^<<vvv><v^v^>v<v^^^>>^<v>>^vv^^<vv><^>>v<v^><vvv<^^>>vv^v<^<>^v^<<v>^<<><<<^vvv^>^^<<>>><v<^>vv<<^<><^v<^<><<^^>vv^v>v^^^>>>>^>vv<<v>v>>^^v^^><>v<<^><^<v^>>^>v^v>><^v^>v<<^<v><^<^<^<>>v^^>><<<>v<v>v<^^>^vv<<<^^<v<>v^^>v<<><^<>^^>^v<>v>><^^^vv^>^><>v^^<v^<>>^<v^^^><v<><vvv>v>^<<^v>^>>>>><^^^<>v<v>>v^^<^v^>>v^<<v^>^>v^v>>>>^>>vv<>^<^v><v^^<>v>v^v>^<>^>v<vv><<v<^v<<^v<<^v^vv<><>^<>>^<>>^<>v^><<>^v>>^^^^<<^v><>^<^>^^v><^^<^<v^<^^v>^v><vv>v<<^>^>><<^^^vvv<<^vv<^^>v^^vv^<^^<<^^>>^^<vv<v<<v^^<<v<^vvv<<><<v>v^>>v^^>v<^>^><v<^>v<v^v<v^^<>v>><<v^v^v<^^^><v>v><^<^vv>^^v>^>v<<^vv><^^^^^^><<^>>>^v<>^^v<<<>><<<v^><>^<<<v>v^>^^^<^><v>^^^v<<>v<v>^<v^>><<^^<<^v<<>^v>>vv>><v<^><v<<<vvv><vv><<^v^^<v^vvv<^v>>v^v<v^v^>>^^v<><^^^<^^>v>^<><v<<v^^>vvv^v^^<v<v^v>^>v^^v<^><v^^<<<<>^^>>^v<><^><^<<^vv^<><<>v^vv^<v^<><<<^^>v<<>>>v<>v<><<<v>^v>^^v>^^>v>^>^>v<>><>^>^>^vvvv<^<v^<>^^^^v>v>><<v>>^<vv>>^<v<^v^vv>><>^^>v^^<<><^<v>><<<<>v>^^><v^^v<<v<><vv^v>^<v^^>v<<<<v^v<<>>vv<v<<<v>v>>v<^v>>v>v^<<<>^>^>^<>v<^^vv><^v<<^v<vvv^vv>v<^<<^^vv^^>vv<^>v>^^<<v^<<^^v<>^>v<<^^<^>^^^v^^<v<^<^>>>v^vv^<^v>^<>^<^<v<^v>>>^<^v<><v<^vv<v>v><v^v^^v<vv><^^<><>^>v<^<^vv>><^v><v<>^<>^^>^<><<<v^>>^<>><<><v>vvv^<<^<vv<v><v<^<<<^>^>>v<^>>vv>^v^^^v<>v<>><>^vv^>vv^\"\"\""
2199 ]
2200 },
2201 {
2202 "cell_type": "code",
2203 "execution_count": 39,
2204 "metadata": {
2205 "collapsed": false
2206 },
2207 "outputs": [
2208 {
2209 "data": {
2210 "text/plain": [
2211 "2081"
2212 ]
2213 },
2214 "execution_count": 39,
2215 "metadata": {},
2216 "output_type": "execute_result"
2217 }
2218 ],
2219 "source": [
2220 "import collections\n",
2221 "\n",
2222 "x, y = 0, 0\n",
2223 "houses = collections.defaultdict(int)\n",
2224 "houses[(0,0)] = 1\n",
2225 "\n",
2226 "for direction in pi3:\n",
2227 " if direction == \"^\":\n",
2228 " x += 1\n",
2229 " if direction == 'v':\n",
2230 " x -= 1\n",
2231 " if direction == '>':\n",
2232 " y += 1\n",
2233 " if direction == '<':\n",
2234 " y -= 1\n",
2235 " houses[(x, y)] += 1\n",
2236 "len(houses)"
2237 ]
2238 },
2239 {
2240 "cell_type": "code",
2241 "execution_count": 42,
2242 "metadata": {
2243 "collapsed": false
2244 },
2245 "outputs": [
2246 {
2247 "data": {
2248 "text/plain": [
2249 "2341"
2250 ]
2251 },
2252 "execution_count": 42,
2253 "metadata": {},
2254 "output_type": "execute_result"
2255 }
2256 ],
2257 "source": [
2258 "import collections\n",
2259 "\n",
2260 "x, y, rx, ry = 0, 0, 0, 0\n",
2261 "houses = collections.defaultdict(int)\n",
2262 "houses[(0,0)] = 2\n",
2263 "\n",
2264 "for i in range(0, len(pi3), 2):\n",
2265 " direction = pi3[i]\n",
2266 " rdirection = pi3[i+1]\n",
2267 " if direction == \"^\":\n",
2268 " x += 1\n",
2269 " if direction == 'v':\n",
2270 " x -= 1\n",
2271 " if direction == '>':\n",
2272 " y += 1\n",
2273 " if direction == '<':\n",
2274 " y -= 1\n",
2275 " houses[(x, y)] += 1\n",
2276 " if rdirection == \"^\":\n",
2277 " rx += 1\n",
2278 " if rdirection == 'v':\n",
2279 " rx -= 1\n",
2280 " if rdirection == '>':\n",
2281 " ry += 1\n",
2282 " if rdirection == '<':\n",
2283 " ry -= 1\n",
2284 " houses[(rx, ry)] += 1\n",
2285 "len(houses)"
2286 ]
2287 },
2288 {
2289 "cell_type": "code",
2290 "execution_count": 44,
2291 "metadata": {
2292 "collapsed": false
2293 },
2294 "outputs": [],
2295 "source": [
2296 "import hashlib"
2297 ]
2298 },
2299 {
2300 "cell_type": "code",
2301 "execution_count": 47,
2302 "metadata": {
2303 "collapsed": false
2304 },
2305 "outputs": [
2306 {
2307 "data": {
2308 "text/plain": [
2309 "'000001dbbfa3a5c83a2d506429c7b00e'"
2310 ]
2311 },
2312 "execution_count": 47,
2313 "metadata": {},
2314 "output_type": "execute_result"
2315 }
2316 ],
2317 "source": [
2318 "hashlib.md5(b\"abcdef609043\").hexdigest()"
2319 ]
2320 },
2321 {
2322 "cell_type": "code",
2323 "execution_count": 52,
2324 "metadata": {
2325 "collapsed": false
2326 },
2327 "outputs": [
2328 {
2329 "data": {
2330 "text/plain": [
2331 "53"
2332 ]
2333 },
2334 "execution_count": 52,
2335 "metadata": {},
2336 "output_type": "execute_result"
2337 }
2338 ],
2339 "source": [
2340 "bytes(str(75), 'ascii')[1]"
2341 ]
2342 },
2343 {
2344 "cell_type": "code",
2345 "execution_count": 59,
2346 "metadata": {
2347 "collapsed": false
2348 },
2349 "outputs": [
2350 {
2351 "data": {
2352 "text/plain": [
2353 "346386"
2354 ]
2355 },
2356 "execution_count": 59,
2357 "metadata": {},
2358 "output_type": "execute_result"
2359 }
2360 ],
2361 "source": [
2362 "i = 0\n",
2363 "salt = b\"iwrupvqb\"\n",
2364 "hd = hashlib.md5(salt + bytes(str(i), 'ascii')).hexdigest()\n",
2365 "while not hd.startswith('00000'):\n",
2366 " i+=1\n",
2367 " hd = hashlib.md5(salt + bytes(str(i), 'ascii')).hexdigest()\n",
2368 "i"
2369 ]
2370 },
2371 {
2372 "cell_type": "code",
2373 "execution_count": 60,
2374 "metadata": {
2375 "collapsed": false
2376 },
2377 "outputs": [
2378 {
2379 "data": {
2380 "text/plain": [
2381 "9958218"
2382 ]
2383 },
2384 "execution_count": 60,
2385 "metadata": {},
2386 "output_type": "execute_result"
2387 }
2388 ],
2389 "source": [
2390 "i = 0\n",
2391 "salt = b\"iwrupvqb\"\n",
2392 "hd = hashlib.md5(salt + bytes(str(i), 'ascii')).hexdigest()\n",
2393 "while not hd.startswith('000000'):\n",
2394 " i+=1\n",
2395 " hd = hashlib.md5(salt + bytes(str(i), 'ascii')).hexdigest()\n",
2396 "i"
2397 ]
2398 },
2399 {
2400 "cell_type": "code",
2401 "execution_count": 55,
2402 "metadata": {
2403 "collapsed": false
2404 },
2405 "outputs": [
2406 {
2407 "data": {
2408 "text/plain": [
2409 "True"
2410 ]
2411 },
2412 "execution_count": 55,
2413 "metadata": {},
2414 "output_type": "execute_result"
2415 }
2416 ],
2417 "source": [
2418 "hd.startswith('cb')"
2419 ]
2420 },
2421 {
2422 "cell_type": "code",
2423 "execution_count": 1,
2424 "metadata": {
2425 "collapsed": true
2426 },
2427 "outputs": [],
2428 "source": [
2429 "pi5 = \"\"\"sszojmmrrkwuftyv\n",
2430 "isaljhemltsdzlum\n",
2431 "fujcyucsrxgatisb\n",
2432 "qiqqlmcgnhzparyg\n",
2433 "oijbmduquhfactbc\n",
2434 "jqzuvtggpdqcekgk\n",
2435 "zwqadogmpjmmxijf\n",
2436 "uilzxjythsqhwndh\n",
2437 "gtssqejjknzkkpvw\n",
2438 "wrggegukhhatygfi\n",
2439 "vhtcgqzerxonhsye\n",
2440 "tedlwzdjfppbmtdx\n",
2441 "iuvrelxiapllaxbg\n",
2442 "feybgiimfthtplui\n",
2443 "qxmmcnirvkzfrjwd\n",
2444 "vfarmltinsriqxpu\n",
2445 "oanqfyqirkraesfq\n",
2446 "xilodxfuxphuiiii\n",
2447 "yukhnchvjkfwcbiq\n",
2448 "bdaibcbzeuxqplop\n",
2449 "ivegnnpbiyxqsion\n",
2450 "ybahkbzpditgwdgt\n",
2451 "dmebdomwabxgtctu\n",
2452 "ibtvimgfaeonknoh\n",
2453 "jsqraroxudetmfyw\n",
2454 "dqdbcwtpintfcvuz\n",
2455 "tiyphjunlxddenpj\n",
2456 "fgqwjgntxagidhah\n",
2457 "nwenhxmakxqkeehg\n",
2458 "zdoheaxqpcnlhnen\n",
2459 "tfetfqojqcdzlpbm\n",
2460 "qpnxkuldeiituggg\n",
2461 "xwttlbdwxohahwar\n",
2462 "hjkwzadmtrkegzye\n",
2463 "koksqrqcfwcaxeof\n",
2464 "wulwmrptktliyxeq\n",
2465 "gyufbedqhhyqgqzj\n",
2466 "txpunzodohikzlmj\n",
2467 "jloqfuejfkemcrvu\n",
2468 "amnflshcheuddqtc\n",
2469 "pdvcsduggcogbiia\n",
2470 "yrioavgfmeafjpcz\n",
2471 "uyhbtmbutozzqfvq\n",
2472 "mwhgfwsgyuwcdzik\n",
2473 "auqylgxhmullxpaa\n",
2474 "lgelzivplaeoivzh\n",
2475 "uyvcepielfcmswoa\n",
2476 "qhirixgwkkccuzlp\n",
2477 "zoonniyosmkeejfg\n",
2478 "iayfetpixkedyana\n",
2479 "ictqeyzyqswdskiy\n",
2480 "ejsgqteafvmorwxe\n",
2481 "lhaiqrlqqwfbrqdx\n",
2482 "ydjyboqwhfpqfydc\n",
2483 "dwhttezyanrnbybv\n",
2484 "edgzkqeqkyojowvr\n",
2485 "rmjfdwsqamjqehdq\n",
2486 "ozminkgnkwqctrxz\n",
2487 "bztjhxpjthchhfcd\n",
2488 "vrtioawyxkivrpiq\n",
2489 "dpbcsznkpkaaclyy\n",
2490 "vpoypksymdwttpvz\n",
2491 "hhdlruwclartkyap\n",
2492 "bqkrcbrksbzcggbo\n",
2493 "jerbbbnxlwfvlaiw\n",
2494 "dwkasufidwjrjfbf\n",
2495 "kkfxtjhbnmqbmfwf\n",
2496 "vmnfziwqxmioukmj\n",
2497 "rqxvcultipkecdtu\n",
2498 "fhmfdibhtjzkiqsd\n",
2499 "hdpjbuzzbyafqrpd\n",
2500 "emszboysjuvwwvts\n",
2501 "msyigmwcuybfiooq\n",
2502 "druyksfnbluvnwoh\n",
2503 "fvgstvynnfbvxhsx\n",
2504 "bmzalvducnqtuune\n",
2505 "lzwkzfzttsvpllei\n",
2506 "olmplpvjamynfyfd\n",
2507 "padcwfkhystsvyfb\n",
2508 "wjhbvxkwtbfqdilb\n",
2509 "hruaqjwphonnterf\n",
2510 "bufjobjtvxtzjpmj\n",
2511 "oiedrjvmlbtwyyuy\n",
2512 "sgiemafwfztwsyju\n",
2513 "nsoqqfudrtwszyqf\n",
2514 "vonbxquiiwxnazyl\n",
2515 "yvnmjxtptujwqudn\n",
2516 "rrnybqhvrcgwvrkq\n",
2517 "taktoxzgotzxntfu\n",
2518 "quffzywzpxyaepxa\n",
2519 "rfvjebfiddcfgmwv\n",
2520 "iaeozntougqwnzoh\n",
2521 "scdqyrhoqmljhoil\n",
2522 "bfmqticltmfhxwld\n",
2523 "brbuktbyqlyfpsdl\n",
2524 "oidnyhjkeqenjlhd\n",
2525 "kujsaiqojopvrygg\n",
2526 "vebzobmdbzvjnjtk\n",
2527 "uunoygzqjopwgmbg\n",
2528 "piljqxgicjzgifso\n",
2529 "ikgptwcjzywswqnw\n",
2530 "pujqsixoisvhdvwi\n",
2531 "trtuxbgigogfsbbk\n",
2532 "mplstsqclhhdyaqk\n",
2533 "gzcwflvmstogdpvo\n",
2534 "tfjywbkmimyyqcjd\n",
2535 "gijutvhruqcsiznq\n",
2536 "ibxkhjvzzxgavkha\n",
2537 "btnxeqvznkxjsgmq\n",
2538 "tjgofgauxaelmjoq\n",
2539 "sokshvyhlkxerjrv\n",
2540 "ltogbivktqmtezta\n",
2541 "uduwytzvqvfluyuf\n",
2542 "msuckpthtgzhdxan\n",
2543 "fqmcglidvhvpirzr\n",
2544 "gwztkqpcwnutvfga\n",
2545 "bsjfgsrntdhlpqbx\n",
2546 "xloczbqybxmiopwt\n",
2547 "orvevzyjliomkkgu\n",
2548 "mzjbhmfjjvaziget\n",
2549 "tlsdxuhwdmghdyjb\n",
2550 "atoecyjhwmznaewi\n",
2551 "pyxpyvvipbqibiox\n",
2552 "ajbfmpqqobfsmesj\n",
2553 "siknbzefjblnohgd\n",
2554 "eqfhgewbblwdfkmc\n",
2555 "opylbscrotckkrbk\n",
2556 "lbwxbofgjkzdxkle\n",
2557 "ceixfjstaptdomvm\n",
2558 "hnkrqxifjmmjktie\n",
2559 "aqykzeuzvvetoygd\n",
2560 "fouahjimfcisxima\n",
2561 "prkzhutbqsyrhjzx\n",
2562 "qqwliakathnsbzne\n",
2563 "sayhgqtlcqqidqhj\n",
2564 "ygduolbysehdudra\n",
2565 "zricvxhdzznuxuce\n",
2566 "ucvzakslykpgsixd\n",
2567 "udirhgcttmyspgsb\n",
2568 "yuwzppjzfsjhhdzi\n",
2569 "gtqergjiuwookwre\n",
2570 "xvxexbjyjkxovvwf\n",
2571 "mlpaqhnnkqxrmwmm\n",
2572 "ezuqbrjozwuqafhb\n",
2573 "mcarusdthcbsonoq\n",
2574 "weeguqeheeiigrue\n",
2575 "pngtfugozxofaqxv\n",
2576 "copphvbjcmfspenv\n",
2577 "jiyahihykjjkdaya\n",
2578 "gdqnmesvptuyrfwp\n",
2579 "vbdscfywqmfxbohh\n",
2580 "crtrfuxyjypzubrg\n",
2581 "seihvevtxywxhflp\n",
2582 "fvvpmgttnapklwou\n",
2583 "qmqaqsajmqwhetpk\n",
2584 "zetxvrgjmblxvakr\n",
2585 "kpvwblrizaabmnhz\n",
2586 "mwpvvzaaicntrkcp\n",
2587 "clqyjiegtdsswqfm\n",
2588 "ymrcnqgcpldgfwtm\n",
2589 "nzyqpdenetncgnwq\n",
2590 "cmkzevgacnmdkqro\n",
2591 "kzfdsnamjqbeirhi\n",
2592 "kpxrvgvvxapqlued\n",
2593 "rzskbnfobevzrtqu\n",
2594 "vjoahbfwtydugzap\n",
2595 "ykbbldkoijlvicbl\n",
2596 "mfdmroiztsgjlasb\n",
2597 "quoigfyxwtwprmdr\n",
2598 "ekxjqafwudgwfqjm\n",
2599 "obtvyjkiycxfcdpb\n",
2600 "lhoihfnbuqelthof\n",
2601 "eydwzitgxryktddt\n",
2602 "rxsihfybacnpoyny\n",
2603 "bsncccxlplqgygtw\n",
2604 "rvmlaudsifnzhcqh\n",
2605 "huxwsyjyebckcsnn\n",
2606 "gtuqzyihwhqvjtes\n",
2607 "zreeyomtngvztveq\n",
2608 "nwddzjingsarhkxb\n",
2609 "nuqxqtctpoldrlsh\n",
2610 "wkvnrwqgjooovhpf\n",
2611 "kwgueyiyffudtbyg\n",
2612 "tpkzapnjxefqnmew\n",
2613 "ludwccvkihagvxal\n",
2614 "lfdtzhfadvabghna\n",
2615 "njqmlsnrkcfhtvbb\n",
2616 "cajzbqleghhnlgap\n",
2617 "vmitdcozzvqvzatp\n",
2618 "eelzefwqwjiywbcz\n",
2619 "uyztcuptfqvymjpi\n",
2620 "aorhnrpkjqqtgnfo\n",
2621 "lfrxfdrduoeqmwwp\n",
2622 "vszpjvbctblplinh\n",
2623 "zexhadgpqfifcqrz\n",
2624 "ueirfnshekpemqua\n",
2625 "qfremlntihbwabtb\n",
2626 "nwznunammfexltjc\n",
2627 "zkyieokaaogjehwt\n",
2628 "vlrxgkpclzeslqkq\n",
2629 "xrqrwfsuacywczhs\n",
2630 "olghlnfjdiwgdbqc\n",
2631 "difnlxnedpqcsrdf\n",
2632 "dgpuhiisybjpidsj\n",
2633 "vlwmwrikmitmoxbt\n",
2634 "sazpcmcnviynoktm\n",
2635 "pratafauetiknhln\n",
2636 "ilgteekhzwlsfwcn\n",
2637 "ywvwhrwhkaubvkbl\n",
2638 "qlaxivzwxyhvrxcf\n",
2639 "hbtlwjdriizqvjfb\n",
2640 "nrmsononytuwslsa\n",
2641 "mpxqgdthpoipyhjc\n",
2642 "mcdiwmiqeidwcglk\n",
2643 "vfbaeavmjjemfrmo\n",
2644 "qzcbzmisnynzibrc\n",
2645 "shzmpgxhehhcejhb\n",
2646 "wirtjadsqzydtyxd\n",
2647 "qjlrnjfokkqvnpue\n",
2648 "dxawdvjntlbxtuqc\n",
2649 "wttfmnrievfestog\n",
2650 "eamjfvsjhvzzaobg\n",
2651 "pbvfcwzjgxahlrag\n",
2652 "omvmjkqqnobvnzkn\n",
2653 "lcwmeibxhhlxnkzv\n",
2654 "uiaeroqfbvlazegs\n",
2655 "twniyldyuonfyzqw\n",
2656 "wgjkmsbwgfotdabi\n",
2657 "hnomamxoxvrzvtew\n",
2658 "ycrcfavikkrxxfgw\n",
2659 "isieyodknagzhaxy\n",
2660 "mgzdqwikzullzyco\n",
2661 "mumezgtxjrrejtrs\n",
2662 "nwmwjcgrqiwgfqel\n",
2663 "wjgxmebfmyjnxyyp\n",
2664 "durpspyljdykvzxf\n",
2665 "zuslbrpooyetgafh\n",
2666 "kuzrhcjwbdouhyme\n",
2667 "wyxuvbciodscbvfm\n",
2668 "kbnpvuqwmxwfqtqe\n",
2669 "zddzercqogdpxmft\n",
2670 "sigrdchxtgavzzjh\n",
2671 "lznjolnorbuddgcs\n",
2672 "ycnqabxlcajagwbt\n",
2673 "bnaudeaexahdgxsj\n",
2674 "rlnykxvoctfwanms\n",
2675 "jngyetkoplrstfzt\n",
2676 "tdpxknwacksotdub\n",
2677 "yutqgssfoptvizgr\n",
2678 "lzmqnxeqjfnsxmsa\n",
2679 "iqpgfsfmukovsdgu\n",
2680 "qywreehbidowtjyz\n",
2681 "iozamtgusdctvnkw\n",
2682 "ielmujhtmynlwcfd\n",
2683 "hzxnhtbnmmejlkyf\n",
2684 "ftbslbzmiqkzebtd\n",
2685 "bcwdqgiiizmohack\n",
2686 "dqhfkzeddjzbdlxu\n",
2687 "mxopokqffisxosci\n",
2688 "vciatxhtuechbylk\n",
2689 "khtkhcvelidjdena\n",
2690 "blatarwzfqcapkdt\n",
2691 "elamngegnczctcck\n",
2692 "xeicefdbwrxhuxuf\n",
2693 "sawvdhjoeahlgcdr\n",
2694 "kmdcimzsfkdfpnir\n",
2695 "axjayzqlosrduajb\n",
2696 "mfhzreuzzumvoggr\n",
2697 "iqlbkbhrkptquldb\n",
2698 "xcvztvlshiefuhgb\n",
2699 "pkvwyqmyoazocrio\n",
2700 "ajsxkdnerbmhyxaj\n",
2701 "tudibgsbnpnizvsi\n",
2702 "cxuiydkgdccrqvkh\n",
2703 "cyztpjesdzmbcpot\n",
2704 "nnazphxpanegwitx\n",
2705 "uphymczbmjalmsct\n",
2706 "yyxiwnlrogyzwqmg\n",
2707 "gmqwnahjvvdyhnfa\n",
2708 "utolskxpuoheugyl\n",
2709 "mseszdhyzoyavepd\n",
2710 "ycqknvbuvcjfgmlc\n",
2711 "sknrxhxbfpvpeorn\n",
2712 "zqxqjetooqcodwml\n",
2713 "sesylkpvbndrdhsy\n",
2714 "fryuxvjnsvnjrxlw\n",
2715 "mfxusewqurscujnu\n",
2716 "mbitdjjtgzchvkfv\n",
2717 "ozwlyxtaalxofovd\n",
2718 "wdqcduaykxbunpie\n",
2719 "rlnhykxiraileysk\n",
2720 "wgoqfrygttlamobg\n",
2721 "kflxzgxvcblkpsbz\n",
2722 "tmkisflhativzhde\n",
2723 "owsdrfgkaamogjzd\n",
2724 "gaupjkvkzavhfnes\n",
2725 "wknkurddcknbdleg\n",
2726 "lltviwincmbtduap\n",
2727 "qwzvspgbcksyzzmb\n",
2728 "ydzzkumecryfjgnk\n",
2729 "jzvmwgjutxoysaam\n",
2730 "icrwpyhxllbardkr\n",
2731 "jdopyntshmvltrve\n",
2732 "afgkigxcuvmdbqou\n",
2733 "mfzzudntmvuyhjzt\n",
2734 "duxhgtwafcgrpihc\n",
2735 "tsnhrkvponudumeb\n",
2736 "sqtvnbeiigdzbjgv\n",
2737 "eczmkqwvnsrracuo\n",
2738 "mhehsgqwiczaiaxv\n",
2739 "kaudmfvifovrimpd\n",
2740 "lupikgivechdbwfr\n",
2741 "mwaaysrndiutuiqx\n",
2742 "aacuiiwgaannunmm\n",
2743 "tjqjbftaqitukwzp\n",
2744 "lrcqyskykbjpaekn\n",
2745 "lirrvofbcqpjzxmr\n",
2746 "jurorvzpplyelfml\n",
2747 "qonbllojmloykjqe\n",
2748 "sllkzqujfnbauuqp\n",
2749 "auexjwsvphvikali\n",
2750 "usuelbssqmbrkxyc\n",
2751 "wyuokkfjexikptvv\n",
2752 "wmfedauwjgbrgytl\n",
2753 "sfwvtlzzebxzmuvw\n",
2754 "rdhqxuechjsjcvaf\n",
2755 "kpavhqkukugocsxu\n",
2756 "ovnjtumxowbxduts\n",
2757 "zgerpjufauptxgat\n",
2758 "pevvnzjfwhjxdoxq\n",
2759 "pmmfwxajgfziszcs\n",
2760 "difmeqvaghuitjhs\n",
2761 "icpwjbzcmlcterwm\n",
2762 "ngqpvhajttxuegyh\n",
2763 "mosjlqswdngwqsmi\n",
2764 "frlvgpxrjolgodlu\n",
2765 "eazwgrpcxjgoszeg\n",
2766 "bbtsthgkjrpkiiyk\n",
2767 "tjonoglufuvsvabe\n",
2768 "xhkbcrofytmbzrtk\n",
2769 "kqftfzdmpbxjynps\n",
2770 "kmeqpocbnikdtfyv\n",
2771 "qjjymgqxhnjwxxhp\n",
2772 "dmgicrhgbngdtmjt\n",
2773 "zdxrhdhbdutlawnc\n",
2774 "afvoekuhdboxghvx\n",
2775 "hiipezngkqcnihty\n",
2776 "bbmqgheidenweeov\n",
2777 "suprgwxgxwfsgjnx\n",
2778 "adeagikyamgqphrj\n",
2779 "zzifqinoeqaorjxg\n",
2780 "adhgppljizpaxzld\n",
2781 "lvxyieypvvuqjiyc\n",
2782 "nljoakatwwwoovzn\n",
2783 "fcrkfxclcacshhmx\n",
2784 "ownnxqtdhqbgthch\n",
2785 "lmfylrcdmdkgpwnj\n",
2786 "hlwjfbvlswbzpbjr\n",
2787 "mkofhdtljdetcyvp\n",
2788 "synyxhifbetzarpo\n",
2789 "agnggugngadrcxoc\n",
2790 "uhttadmdmhidpyjw\n",
2791 "ohfwjfhunalbubpr\n",
2792 "pzkkkkwrlvxiuysn\n",
2793 "kmidbxmyzkjrwjhu\n",
2794 "egtitdydwjxmajnw\n",
2795 "civoeoiuwtwgbqqs\n",
2796 "dfptsguzfinqoslk\n",
2797 "tdfvkreormspprer\n",
2798 "zvnvbrmthatzztwi\n",
2799 "ffkyddccrrfikjde\n",
2800 "hrrmraevdnztiwff\n",
2801 "qaeygykcpbtjwjbr\n",
2802 "purwhitkmrtybslh\n",
2803 "qzziznlswjaussel\n",
2804 "dfcxkvdpqccdqqxj\n",
2805 "tuotforulrrytgyn\n",
2806 "gmtgfofgucjywkev\n",
2807 "wkyoxudvdkbgpwhd\n",
2808 "qbvktvfvipftztnn\n",
2809 "otckgmojziezmojb\n",
2810 "inxhvzbtgkjxflay\n",
2811 "qvxapbiatuudseno\n",
2812 "krpvqosbesnjntut\n",
2813 "oqeukkgjsfuqkjbb\n",
2814 "prcjnyymnqwqksiz\n",
2815 "vuortvjxgckresko\n",
2816 "orqlyobvkuwgathr\n",
2817 "qnpyxlnazyfuijox\n",
2818 "zwlblfkoklqmqzkw\n",
2819 "hmwurwtpwnrcsanl\n",
2820 "jzvxohuakopuzgpf\n",
2821 "sfcpnxrviphhvxmx\n",
2822 "qtwdeadudtqhbely\n",
2823 "dbmkmloasqphnlgj\n",
2824 "olylnjtkxgrubmtk\n",
2825 "nxsdbqjuvwrrdbpq\n",
2826 "wbabpirnpcsmpipw\n",
2827 "hjnkyiuxpqrlvims\n",
2828 "enzpntcjnxdpuqch\n",
2829 "vvvqhlstzcizyimn\n",
2830 "triozhqndbttglhv\n",
2831 "fukvgteitwaagpzx\n",
2832 "uhcvukfbmrvskpen\n",
2833 "tizcyupztftzxdmt\n",
2834 "vtkpnbpdzsaluczz\n",
2835 "wodfoyhoekidxttm\n",
2836 "otqocljrmwfqbxzu\n",
2837 "linfbsnfvixlwykn\n",
2838 "vxsluutrwskslnye\n",
2839 "zbshygtwugixjvsi\n",
2840 "zdcqwxvwytmzhvoo\n",
2841 "wrseozkkcyctrmei\n",
2842 "fblgtvogvkpqzxiy\n",
2843 "opueqnuyngegbtnf\n",
2844 "qxbovietpacqqxok\n",
2845 "zacrdrrkohfygddn\n",
2846 "gbnnvjqmkdupwzpq\n",
2847 "qgrgmsxeotozvcak\n",
2848 "hnppukzvzfmlokid\n",
2849 "dzbheurndscrrtcl\n",
2850 "wbgdkadtszebbrcw\n",
2851 "fdmzppzphhpzyuiz\n",
2852 "bukomunhrjrypohj\n",
2853 "ohodhelegxootqbj\n",
2854 "rsplgzarlrknqjyh\n",
2855 "punjjwpsxnhpzgvu\n",
2856 "djdfahypfjvpvibm\n",
2857 "mlgrqsmhaozatsvy\n",
2858 "xwktrgyuhqiquxgn\n",
2859 "wvfaoolwtkbrisvf\n",
2860 "plttjdmguxjwmeqr\n",
2861 "zlvvbwvlhauyjykw\n",
2862 "cigwkbyjhmepikej\n",
2863 "masmylenrusgtyxs\n",
2864 "hviqzufwyetyznze\n",
2865 "nzqfuhrooswxxhus\n",
2866 "pdbdetaqcrqzzwxf\n",
2867 "oehmvziiqwkzhzib\n",
2868 "icgpyrukiokmytoy\n",
2869 "ooixfvwtiafnwkce\n",
2870 "rvnmgqggpjopkihs\n",
2871 "wywualssrmaqigqk\n",
2872 "pdbvflnwfswsrirl\n",
2873 "jeaezptokkccpbuj\n",
2874 "mbdwjntysntsaaby\n",
2875 "ldlgcawkzcwuxzpz\n",
2876 "lwktbgrzswbsweht\n",
2877 "ecspepmzarzmgpjm\n",
2878 "qmfyvulkmkxjncai\n",
2879 "izftypvwngiukrns\n",
2880 "zgmnyjfeqffbooww\n",
2881 "nyrkhggnprhedows\n",
2882 "yykzzrjmlevgffah\n",
2883 "mavaemfxhlfejfki\n",
2884 "cmegmfjbkvpncqwf\n",
2885 "zxidlodrezztcrij\n",
2886 "fseasudpgvgnysjv\n",
2887 "fupcimjupywzpqzp\n",
2888 "iqhgokavirrcvyys\n",
2889 "wjmkcareucnmfhui\n",
2890 "nftflsqnkgjaexhq\n",
2891 "mgklahzlcbapntgw\n",
2892 "kfbmeavfxtppnrxn\n",
2893 "nuhyvhknlufdynvn\n",
2894 "nviogjxbluwrcoec\n",
2895 "tyozixxxaqiuvoys\n",
2896 "kgwlvmvgtsvxojpr\n",
2897 "moeektyhyonfdhrb\n",
2898 "kahvevmmfsmiiqex\n",
2899 "xcywnqzcdqtvhiwd\n",
2900 "fnievhiyltbvtvem\n",
2901 "jlmndqufirwgtdxd\n",
2902 "muypbfttoeelsnbs\n",
2903 "rypxzbnujitfwkou\n",
2904 "ubmmjbznskildeoj\n",
2905 "ofnmizdeicrmkjxp\n",
2906 "rekvectjbmdnfcib\n",
2907 "yohrojuvdexbctdh\n",
2908 "gwfnfdeibynzjmhz\n",
2909 "jfznhfcqdwlpjull\n",
2910 "scrinzycfhwkmmso\n",
2911 "mskutzossrwoqqsi\n",
2912 "rygoebkzgyzushhr\n",
2913 "jpjqiycflqkexemx\n",
2914 "arbufysjqmgaapnl\n",
2915 "dbjerflevtgweeoj\n",
2916 "snybnnjlmwjvhois\n",
2917 "fszuzplntraprmbj\n",
2918 "mkvaatolvuggikvg\n",
2919 "zpuzuqygoxesnuyc\n",
2920 "wnpxvmxvllxalulm\n",
2921 "eivuuafkvudeouwy\n",
2922 "rvzckdyixetfuehr\n",
2923 "qgmnicdoqhveahyx\n",
2924 "miawwngyymshjmpj\n",
2925 "pvckyoncpqeqkbmx\n",
2926 "llninfenrfjqxurv\n",
2927 "kzbjnlgsqjfuzqtp\n",
2928 "rveqcmxomvpjcwte\n",
2929 "bzotkawzbopkosnx\n",
2930 "ktqvpiribpypaymu\n",
2931 "wvlzkivbukhnvram\n",
2932 "uohntlcoguvjqqdo\n",
2933 "ajlsiksjrcnzepkt\n",
2934 "xsqatbldqcykwusd\n",
2935 "ihbivgzrwpmowkop\n",
2936 "vfayesfojmibkjpb\n",
2937 "uaqbnijtrhvqxjtb\n",
2938 "hhovshsfmvkvymba\n",
2939 "jerwmyxrfeyvxcgg\n",
2940 "hncafjwrlvdcupma\n",
2941 "qyvigggxfylbbrzt\n",
2942 "hiiixcyohmvnkpgk\n",
2943 "mmitpwopgxuftdfu\n",
2944 "iaxderqpceboixoa\n",
2945 "zodfmjhuzhnsqfcb\n",
2946 "sthtcbadrclrazsi\n",
2947 "bkkkkcwegvypbrio\n",
2948 "wmpcofuvzemunlhj\n",
2949 "gqwebiifvqoeynro\n",
2950 "juupusqdsvxcpsgv\n",
2951 "rbhdfhthxelolyse\n",
2952 "kjimpwnjfrqlqhhz\n",
2953 "rcuigrjzarzpjgfq\n",
2954 "htxcejfyzhydinks\n",
2955 "sxucpdxhvqjxxjwf\n",
2956 "omsznfcimbcwaxal\n",
2957 "gufmtdlhgrsvcosb\n",
2958 "bssshaqujtmluerz\n",
2959 "uukotwjkstgwijtr\n",
2960 "kbqkneobbrdogrxk\n",
2961 "ljqopjcjmelgrakz\n",
2962 "rwtfnvnzryujwkfb\n",
2963 "dedjjbrndqnilbeh\n",
2964 "nzinsxnpptzagwlb\n",
2965 "lwqanydfirhnhkxy\n",
2966 "hrjuzfumbvfccxno\n",
2967 "okismsadkbseumnp\n",
2968 "sfkmiaiwlktxqvwa\n",
2969 "hauwpjjwowbunbjj\n",
2970 "nowkofejwvutcnui\n",
2971 "bqzzppwoslaeixro\n",
2972 "urpfgufwbtzenkpj\n",
2973 "xgeszvuqwxeykhef\n",
2974 "yxoldvkyuikwqyeq\n",
2975 "onbbhxrnmohzskgg\n",
2976 "qcikuxakrqeugpoa\n",
2977 "lnudcqbtyzhlpers\n",
2978 "nxduvwfrgzaailgl\n",
2979 "xniuwvxufzxjjrwz\n",
2980 "ljwithcqmgvntjdj\n",
2981 "awkftfagrfzywkhs\n",
2982 "uedtpzxyubeveuek\n",
2983 "bhcqdwidbjkqqhzl\n",
2984 "iyneqjdmlhowwzxx\n",
2985 "kvshzltcrrururty\n",
2986 "zgfpiwajegwezupo\n",
2987 "tkrvyanujjwmyyri\n",
2988 "ercsefuihcmoaiep\n",
2989 "ienjrxpmetinvbos\n",
2990 "jnwfutjbgenlipzq\n",
2991 "bgohjmrptfuamzbz\n",
2992 "rtsyamajrhxbcncw\n",
2993 "tfjdssnmztvbnscs\n",
2994 "bgaychdlmchngqlp\n",
2995 "kfjljiobynhwfkjo\n",
2996 "owtdxzcpqleftbvn\n",
2997 "ltjtimxwstvzwzjj\n",
2998 "wbrvjjjajuombokf\n",
2999 "zblpbpuaqbkvsxye\n",
3000 "gwgdtbpnlhyqspdi\n",
3001 "abipqjihjqfofmkx\n",
3002 "nlqymnuvjpvvgova\n",
3003 "avngotmhodpoufzn\n",
3004 "qmdyivtzitnrjuae\n",
3005 "xfwjmqtqdljuerxi\n",
3006 "csuellnlcyqaaamq\n",
3007 "slqyrcurcyuoxquo\n",
3008 "dcjmxyzbzpohzprl\n",
3009 "uqfnmjwniyqgsowb\n",
3010 "rbmxpqoblyxdocqc\n",
3011 "ebjclrdbqjhladem\n",
3012 "ainnfhxnsgwqnmyo\n",
3013 "eyytjjwhvodtzquf\n",
3014 "iabjgmbbhilrcyyp\n",
3015 "pqfnehkivuelyccc\n",
3016 "xgjbyhfgmtseiimt\n",
3017 "jwxyqhdbjiqqqeyy\n",
3018 "gxsbrncqkmvaryln\n",
3019 "vhjisxjkinaejytk\n",
3020 "seexagcdmaedpcvh\n",
3021 "lvudfgrcpjxzdpvd\n",
3022 "fxtegyrqjzhmqean\n",
3023 "dnoiseraqcoossmc\n",
3024 "nwrhmwwbykvwmgep\n",
3025 "udmzskejvizmtlce\n",
3026 "hbzvqhvudfdlegaa\n",
3027 "cghmlfqejbxewskv\n",
3028 "bntcmjqfwomtbwsb\n",
3029 "qezhowyopjdyhzng\n",
3030 "todzsocdkgfxanbz\n",
3031 "zgjkssrjlwxuhwbk\n",
3032 "eibzljqsieriyrzr\n",
3033 "wamxvzqyycrxotjp\n",
3034 "epzvfkispwqynadu\n",
3035 "dwlpfhtrafrxlyie\n",
3036 "qhgzujhgdruowoug\n",
3037 "girstvkahaemmxvh\n",
3038 "baitcrqmxhazyhbl\n",
3039 "xyanqcchbhkajdmc\n",
3040 "gfvjmmcgfhvgnfdq\n",
3041 "tdfdbslwncbnkzyz\n",
3042 "jojuselkpmnnbcbb\n",
3043 "hatdslkgxtqpmavj\n",
3044 "dvelfeddvgjcyxkj\n",
3045 "gnsofhkfepgwltse\n",
3046 "mdngnobasfpewlno\n",
3047 "qssnbcyjgmkyuoga\n",
3048 "glvcmmjytmprqwvn\n",
3049 "gwrixumjbcdffsdl\n",
3050 "lozravlzvfqtsuiq\n",
3051 "sicaflbqdxbmdlch\n",
3052 "inwfjkyyqbwpmqlq\n",
3053 "cuvszfotxywuzhzi\n",
3054 "igfxyoaacoarlvay\n",
3055 "ucjfhgdmnjvgvuni\n",
3056 "rvvkzjsytqgiposh\n",
3057 "jduinhjjntrmqroz\n",
3058 "yparkxbgsfnueyll\n",
3059 "lyeqqeisxzfsqzuj\n",
3060 "woncskbibjnumydm\n",
3061 "lltucklragtjmxtl\n",
3062 "ubiyvmyhlesfxotj\n",
3063 "uecjseeicldqrqww\n",
3064 "xxlxkbcthufnjbnm\n",
3065 "lhqijovvhlffpxga\n",
3066 "fzdgqpzijitlogjz\n",
3067 "efzzjqvwphomxdpd\n",
3068 "jvgzvuyzobeazssc\n",
3069 "hejfycgxywfjgbfw\n",
3070 "yhjjmvkqfbnbliks\n",
3071 "sffvfyywtlntsdsz\n",
3072 "dwmxqudvxqdenrur\n",
3073 "asnukgppdemxrzaz\n",
3074 "nwqfnumblwvdpphx\n",
3075 "kqsmkkspqvxzuket\n",
3076 "cpnraovljzqiquaz\n",
3077 "qrzgrdlyyzbyykhg\n",
3078 "opoahcbiydyhsmqe\n",
3079 "hjknnfdauidjeydr\n",
3080 "hczdjjlygoezadow\n",
3081 "rtflowzqycimllfv\n",
3082 "sfsrgrerzlnychhq\n",
3083 "bpahuvlblcolpjmj\n",
3084 "albgnjkgmcrlaicl\n",
3085 "pijyqdhfxpaxzdex\n",
3086 "eeymiddvcwkpbpux\n",
3087 "rqwkqoabywgggnln\n",
3088 "vckbollyhgbgmgwh\n",
3089 "ylzlgvnuvpynybkm\n",
3090 "hpmbxtpfosbsjixt\n",
3091 "ocebeihnhvkhjfqz\n",
3092 "tvctyxoujdgwayze\n",
3093 "efvhwxtuhapqxjen\n",
3094 "rusksgefyidldmpo\n",
3095 "nkmtjvddfmhirmzz\n",
3096 "whvtsuadwofzmvrt\n",
3097 "iiwjqvsdxudhdzzk\n",
3098 "gucirgxaxgcassyo\n",
3099 "rmhfasfzexeykwmr\n",
3100 "hynlxcvsbgosjbis\n",
3101 "huregszrcaocueen\n",
3102 "pifezpoolrnbdqtv\n",
3103 "unatnixzvdbqeyox\n",
3104 "xtawlpduxgacchfe\n",
3105 "bdvdbflqfphndduf\n",
3106 "xtdsnjnmzccfptyt\n",
3107 "nkhsdkhqtzqbphhg\n",
3108 "aqcubmfkczlaxiyb\n",
3109 "moziflxpsfubucmv\n",
3110 "srdgnnjtfehiimqx\n",
3111 "pwfalehdfyykrohf\n",
3112 "sysxssmvewyfjrve\n",
3113 "brsemdzosgqvvlxe\n",
3114 "bimbjoshuvflkiat\n",
3115 "hkgjasmljkpkwwku\n",
3116 "sbnmwjvodygobpqc\n",
3117 "bbbqycejueruihhd\n",
3118 "corawswvlvneipyc\n",
3119 "gcyhknmwsczcxedh\n",
3120 "kppakbffdhntmcqp\n",
3121 "ynulzwkfaemkcefp\n",
3122 "pyroowjekeurlbii\n",
3123 "iwksighrswdcnmxf\n",
3124 "glokrdmugreygnsg\n",
3125 "xkmvvumnfzckryop\n",
3126 "aesviofpufygschi\n",
3127 "csloawlirnegsssq\n",
3128 "fkqdqqmlzuxbkzbc\n",
3129 "uzlhzcfenxdfjdzp\n",
3130 "poaaidrktteusvyf\n",
3131 "zrlyfzmjzfvivcfr\n",
3132 "qwjulskbniitgqtx\n",
3133 "gjeszjksbfsuejki\n",
3134 "vczdejdbfixbduaq\n",
3135 "knjdrjthitjxluth\n",
3136 "jweydeginrnicirl\n",
3137 "bottrfgccqhyycsl\n",
3138 "eiquffofoadmbuhk\n",
3139 "lbqfutmzoksscswf\n",
3140 "xfmdvnvfcnzjprba\n",
3141 "uvugkjbkhlaoxmyx\n",
3142 "wadlgtpczgvcaqqv\n",
3143 "inzrszbtossflsxk\n",
3144 "dbzbtashaartczrj\n",
3145 "qbjiqpccefcfkvod\n",
3146 "hluujmokjywotvzy\n",
3147 "thwlliksfztcmwzh\n",
3148 "arahybspdaqdexrq\n",
3149 "nuojrmsgyipdvwyx\n",
3150 "hnajdwjwmzattvst\n",
3151 "sulcgaxezkprjbgu\n",
3152 "rjowuugwdpkjtypw\n",
3153 "oeugzwuhnrgiaqga\n",
3154 "wvxnyymwftfoswij\n",
3155 "pqxklzkjpcqscvde\n",
3156 "tuymjzknntekglqj\n",
3157 "odteewktugcwlhln\n",
3158 "exsptotlfecmgehc\n",
3159 "eeswfcijtvzgrqel\n",
3160 "vjhrkiwmunuiwqau\n",
3161 "zhlixepkeijoemne\n",
3162 "pavfsmwesuvebzdd\n",
3163 "jzovbklnngfdmyws\n",
3164 "nbajyohtzfeoiixz\n",
3165 "ciozmhrsjzrwxvhz\n",
3166 "gwucrxieqbaqfjuv\n",
3167 "uayrxrltnohexawc\n",
3168 "flmrbhwsfbcquffm\n",
3169 "gjyabmngkitawlxc\n",
3170 "rwwtggvaygfbovhg\n",
3171 "xquiegaisynictjq\n",
3172 "oudzwuhexrwwdbyy\n",
3173 "lengxmguyrwhrebb\n",
3174 "uklxpglldbgqsjls\n",
3175 "dbmvlfeyguydfsxq\n",
3176 "zspdwdqcrmtmdtsc\n",
3177 "mqfnzwbfqlauvrgc\n",
3178 "amcrkzptgacywvhv\n",
3179 "ndxmskrwrqysrndf\n",
3180 "mwjyhsufeqhwisju\n",
3181 "srlrukoaenyevykt\n",
3182 "tnpjtpwawrxbikct\n",
3183 "geczalxmgxejulcv\n",
3184 "tvkcbqdhmuwcxqci\n",
3185 "tiovluvwezwwgaox\n",
3186 "zrjhtbgajkjqzmfo\n",
3187 "vcrywduwsklepirs\n",
3188 "lofequdigsszuioy\n",
3189 "wxsdzomkjqymlzat\n",
3190 "iabaczqtrfbmypuy\n",
3191 "ibdlmudbajikcncr\n",
3192 "rqcvkzsbwmavdwnv\n",
3193 "ypxoyjelhllhbeog\n",
3194 "fdnszbkezyjbttbg\n",
3195 "uxnhrldastpdjkdz\n",
3196 "xfrjbehtxnlyzcka\n",
3197 "omjyfhbibqwgcpbv\n",
3198 "eguucnoxaoprszmp\n",
3199 "xfpypldgcmcllyzz\n",
3200 "aypnmgqjxjqceelv\n",
3201 "mgzharymejlafvgf\n",
3202 "tzowgwsubbaigdok\n",
3203 "ilsehjqpcjwmylxc\n",
3204 "pfmouwntfhfnmrwk\n",
3205 "csgokybgdqwnduwp\n",
3206 "eaxwvxvvwbrovypz\n",
3207 "nmluqvobbbmdiwwb\n",
3208 "lnkminvfjjzqbmio\n",
3209 "mjiiqzycqdhfietz\n",
3210 "towlrzriicyraevq\n",
3211 "obiloewdvbrsfwjo\n",
3212 "lmeooaajlthsfltw\n",
3213 "ichygipzpykkesrw\n",
3214 "gfysloxmqdsfskvt\n",
3215 "saqzntehjldvwtsx\n",
3216 "pqddoemaufpfcaew\n",
3217 "mjrxvbvwcreaybwe\n",
3218 "ngfbrwfqnxqosoai\n",
3219 "nesyewxreiqvhald\n",
3220 "kqhqdlquywotcyfy\n",
3221 "liliptyoqujensfi\n",
3222 "nsahsaxvaepzneqq\n",
3223 "zaickulfjajhctye\n",
3224 "gxjzahtgbgbabtht\n",
3225 "koxbuopaqhlsyhrp\n",
3226 "jhzejdjidqqtjnwe\n",
3227 "dekrkdvprfqpcqki\n",
3228 "linwlombdqtdeyop\n",
3229 "dvckqqbnigdcmwmx\n",
3230 "yaxygbjpzkvnnebv\n",
3231 "rlzkdkgaagmcpxah\n",
3232 "cfzuyxivtknirqvt\n",
3233 "obivkajhsjnrxxhn\n",
3234 "lmjhayymgpseuynn\n",
3235 "bbjyewkwadaipyju\n",
3236 "lmzyhwomfypoftuu\n",
3237 "gtzhqlgltvatxack\n",
3238 "jfflcfaqqkrrltgq\n",
3239 "txoummmnzfrlrmcg\n",
3240 "ohemsbfuqqpucups\n",
3241 "imsfvowcbieotlok\n",
3242 "tcnsnccdszxfcyde\n",
3243 "qkcdtkwuaquajazz\n",
3244 "arcfnhmdjezdbqku\n",
3245 "srnocgyqrlcvlhkb\n",
3246 "mppbzvfmcdirbyfw\n",
3247 "xiuarktilpldwgwd\n",
3248 "ypufwmhrvzqmexpc\n",
3249 "itpdnsfkwgrdujmj\n",
3250 "cmpxnodtsswkyxkr\n",
3251 "wayyxtjklfrmvbfp\n",
3252 "mfaxphcnjczhbbwy\n",
3253 "sjxhgwdnqcofbdra\n",
3254 "pnxmujuylqccjvjm\n",
3255 "ivamtjbvairwjqwl\n",
3256 "deijtmzgpfxrclss\n",
3257 "bzkqcaqagsynlaer\n",
3258 "tycefobvxcvwaulz\n",
3259 "ctbhnywezxkdsswf\n",
3260 "urrxxebxrthtjvib\n",
3261 "fpfelcigwqwdjucv\n",
3262 "ngfcyyqpqulwcphb\n",
3263 "rltkzsiipkpzlgpw\n",
3264 "qfdsymzwhqqdkykc\n",
3265 "balrhhxipoqzmihj\n",
3266 "rnwalxgigswxomga\n",
3267 "ghqnxeogckshphgr\n",
3268 "lyyaentdizaumnla\n",
3269 "exriodwfzosbeoib\n",
3270 "speswfggibijfejk\n",
3271 "yxmxgfhvmshqszrq\n",
3272 "hcqhngvahzgawjga\n",
3273 "qmhlsrfpesmeksur\n",
3274 "eviafjejygakodla\n",
3275 "kvcfeiqhynqadbzv\n",
3276 "fusvyhowslfzqttg\n",
3277 "girqmvwmcvntrwau\n",
3278 "yuavizroykfkdekz\n",
3279 "jmcwohvmzvowrhxf\n",
3280 "kzimlcpavapynfue\n",
3281 "wjudcdtrewfabppq\n",
3282 "yqpteuxqgbmqfgxh\n",
3283 "xdgiszbuhdognniu\n",
3284 "jsguxfwhpftlcjoh\n",
3285 "whakkvspssgjzxre\n",
3286 "ggvnvjurlyhhijgm\n",
3287 "krvbhjybnpemeptr\n",
3288 "pqedgfojyjybfbzr\n",
3289 "jzhcrsgmnkwwtpdo\n",
3290 "yyscxoxwofslncmp\n",
3291 "gzjhnxytmyntzths\n",
3292 "iteigbnqbtpvqumi\n",
3293 "zjevfzusnjukqpfw\n",
3294 "xippcyhkfuounxqk\n",
3295 "mcnhrcfonfdgpkyh\n",
3296 "pinkcyuhjkexbmzj\n",
3297 "lotxrswlxbxlxufs\n",
3298 "fmqajrtoabpckbnu\n",
3299 "wfkwsgmcffdgaqxg\n",
3300 "qfrsiwnohoyfbidr\n",
3301 "czfqbsbmiuyusaqs\n",
3302 "ieknnjeecucghpoo\n",
3303 "cevdgqnugupvmsge\n",
3304 "gjkajcyjnxdrtuvr\n",
3305 "udzhrargnujxiclq\n",
3306 "zqqrhhmjwermjssg\n",
3307 "ggdivtmgoqajydzz\n",
3308 "wnpfsgtxowkjiivl\n",
3309 "afbhqawjbotxnqpd\n",
3310 "xjpkifkhfjeqifdn\n",
3311 "oyfggzsstfhvticp\n",
3312 "kercaetahymeawxy\n",
3313 "khphblhcgmbupmzt\n",
3314 "iggoqtqpvaebtiol\n",
3315 "ofknifysuasshoya\n",
3316 "qxuewroccsbogrbv\n",
3317 "apsbnbkiopopytgu\n",
3318 "zyahfroovfjlythh\n",
3319 "bxhjwfgeuxlviydq\n",
3320 "uvbhdtvaypasaswa\n",
3321 "qamcjzrmesqgqdiz\n",
3322 "hjnjyzrxntiycyel\n",
3323 "wkcrwqwniczwdxgq\n",
3324 "hibxlvkqakusswkx\n",
3325 "mzjyuenepwdgrkty\n",
3326 "tvywsoqslfsulses\n",
3327 "jqwcwuuisrclircv\n",
3328 "xanwaoebfrzhurct\n",
3329 "ykriratovsvxxasf\n",
3330 "qyebvtqqxbjuuwuo\n",
3331 "telrvlwvriylnder\n",
3332 "acksrrptgnhkeiaa\n",
3333 "yemwfjhiqlzsvdxf\n",
3334 "banrornfkcymmkcc\n",
3335 "ytbhxvaeiigjpcgm\n",
3336 "crepyazgxquposkn\n",
3337 "xlqwdrytzwnxzwzv\n",
3338 "xtrbfbwopxscftps\n",
3339 "kwbytzukgseeyjla\n",
3340 "qtfdvavvjogybxjg\n",
3341 "ytbmvmrcxwfkgvzw\n",
3342 "nbscbdskdeocnfzr\n",
3343 "sqquwjbdxsxhcseg\n",
3344 "ewqxhigqcgszfsuw\n",
3345 "cvkyfcyfmubzwsee\n",
3346 "dcoawetekigxgygd\n",
3347 "ohgqnqhfimyuqhvi\n",
3348 "otisopzzpvnhctte\n",
3349 "bauieohjejamzien\n",
3350 "ewnnopzkujbvhwce\n",
3351 "aeyqlskpaehagdiv\n",
3352 "pncudvivwnnqspxy\n",
3353 "ytugesilgveokxcg\n",
3354 "zoidxeelqdjesxpr\n",
3355 "ducjccsuaygfchzj\n",
3356 "smhgllqqqcjfubfc\n",
3357 "nlbyyywergronmir\n",
3358 "prdawpbjhrzsbsvj\n",
3359 "nmgzhnjhlpcplmui\n",
3360 "eflaogtjghdjmxxz\n",
3361 "qolvpngucbkprrdc\n",
3362 "ixywxcienveltgho\n",
3363 "mwnpqtocagenkxut\n",
3364 "iskrfbwxonkguywx\n",
3365 "ouhtbvcaczqzmpua\n",
3366 "srewprgddfgmdbao\n",
3367 "dyufrltacelchlvu\n",
3368 "czmzcbrkecixuwzz\n",
3369 "dtbeojcztzauofuk\n",
3370 "prrgoehpqhngfgmw\n",
3371 "baolzvfrrevxsyke\n",
3372 "zqadgxshwiarkzwh\n",
3373 "vsackherluvurqqj\n",
3374 "surbpxdulvcvgjbd\n",
3375 "wqxytarcxzgxhvtx\n",
3376 "vbcubqvejcfsgrac\n",
3377 "zqnjfeapshjowzja\n",
3378 "hekvbhtainkvbynx\n",
3379 "knnugxoktxpvoxnh\n",
3380 "knoaalcefpgtvlwm\n",
3381 "qoakaunowmsuvkus\n",
3382 "ypkvlzcduzlezqcb\n",
3383 "ujhcagawtyepyogh\n",
3384 "wsilcrxncnffaxjf\n",
3385 "gbbycjuscquaycrk\n",
3386 "aduojapeaqwivnly\n",
3387 "ceafyxrakviagcjy\n",
3388 "nntajnghicgnrlst\n",
3389 "vdodpeherjmmvbje\n",
3390 "wyyhrnegblwvdobn\n",
3391 "xlfurpghkpbzhhif\n",
3392 "xyppnjiljvirmqjo\n",
3393 "kglzqahipnddanpi\n",
3394 "omjateouxikwxowr\n",
3395 "ocifnoopfglmndcx\n",
3396 "emudcukfbadyijev\n",
3397 "ooktviixetfddfmh\n",
3398 "wtvrhloyjewdeycg\n",
3399 "cgjncqykgutfjhvb\n",
3400 "nkwvpswppeffmwad\n",
3401 "hqbcmfhzkxmnrivg\n",
3402 "mdskbvzguxvieilr\n",
3403 "anjcvqpavhdloaqh\n",
3404 "erksespdevjylenq\n",
3405 "fadxwbmisazyegup\n",
3406 "iyuiffjmcaahowhj\n",
3407 "ygkdezmynmltodbv\n",
3408 "fytneukxqkjattvh\n",
3409 "woerxfadbfrvdcnz\n",
3410 "iwsljvkyfastccoa\n",
3411 "movylhjranlorofe\n",
3412 "drdmicdaiwukemep\n",
3413 "knfgtsmuhfcvvshg\n",
3414 "ibstpbevqmdlhajn\n",
3415 "tstwsswswrxlzrqs\n",
3416 "estyydmzothggudf\n",
3417 "jezogwvymvikszwa\n",
3418 "izmqcwdyggibliet\n",
3419 "nzpxbegurwnwrnca\n",
3420 "kzkojelnvkwfublh\n",
3421 "xqcssgozuxfqtiwi\n",
3422 "tcdoigumjrgvczfv\n",
3423 "ikcjyubjmylkwlwq\n",
3424 "kqfivwystpqzvhan\n",
3425 "bzukgvyoqewniivj\n",
3426 "iduapzclhhyfladn\n",
3427 "fbpyzxdfmkrtfaeg\n",
3428 "yzsmlbnftftgwadz\"\"\""
3429 ]
3430 },
3431 {
3432 "cell_type": "code",
3433 "execution_count": 4,
3434 "metadata": {
3435 "collapsed": true
3436 },
3437 "outputs": [],
3438 "source": [
3439 "def nice(str):\n",
3440 " n1 = len(list(c for c in str if c in \"aeiou\")) >= 3\n",
3441 " n2 = any(str[i-1] == str[i] for i in range(1, len(str)))\n",
3442 " n3 = all(s not in str for s in ['ab', 'cd', 'pq', 'xy'])\n",
3443 " return n1 and n2 and n3 "
3444 ]
3445 },
3446 {
3447 "cell_type": "code",
3448 "execution_count": 9,
3449 "metadata": {
3450 "collapsed": false
3451 },
3452 "outputs": [
3453 {
3454 "data": {
3455 "text/plain": [
3456 "False"
3457 ]
3458 },
3459 "execution_count": 9,
3460 "metadata": {},
3461 "output_type": "execute_result"
3462 }
3463 ],
3464 "source": [
3465 "nice('dvszwmarrgswjxmb')"
3466 ]
3467 },
3468 {
3469 "cell_type": "code",
3470 "execution_count": 10,
3471 "metadata": {
3472 "collapsed": false
3473 },
3474 "outputs": [
3475 {
3476 "data": {
3477 "text/plain": [
3478 "255"
3479 ]
3480 },
3481 "execution_count": 10,
3482 "metadata": {},
3483 "output_type": "execute_result"
3484 }
3485 ],
3486 "source": [
3487 "sum(1 if nice(str.strip()) else 0 for str in pi5.splitlines())"
3488 ]
3489 },
3490 {
3491 "cell_type": "code",
3492 "execution_count": 67,
3493 "metadata": {
3494 "collapsed": true
3495 },
3496 "outputs": [],
3497 "source": [
3498 "def nice2(st):\n",
3499 " def n1(st):\n",
3500 " for i in range(1, len(st)):\n",
3501 " if st.find(st[i-1:i+1], i+1) > -1:\n",
3502 " return True\n",
3503 " return False\n",
3504 " def n2(st):\n",
3505 " return any(st[i-1] == st[i+1] for i in range(1, len(st)-1))\n",
3506 " return n1(st) and n2(st)"
3507 ]
3508 },
3509 {
3510 "cell_type": "code",
3511 "execution_count": 72,
3512 "metadata": {
3513 "collapsed": false
3514 },
3515 "outputs": [
3516 {
3517 "data": {
3518 "text/plain": [
3519 "False"
3520 ]
3521 },
3522 "execution_count": 72,
3523 "metadata": {},
3524 "output_type": "execute_result"
3525 }
3526 ],
3527 "source": [
3528 "nice2('ieodomkazucvgmuy')"
3529 ]
3530 },
3531 {
3532 "cell_type": "code",
3533 "execution_count": 69,
3534 "metadata": {
3535 "collapsed": false
3536 },
3537 "outputs": [
3538 {
3539 "data": {
3540 "text/plain": [
3541 "['ac', 'bd', 'ce', 'df']"
3542 ]
3543 },
3544 "execution_count": 69,
3545 "metadata": {},
3546 "output_type": "execute_result"
3547 }
3548 ],
3549 "source": [
3550 "['abcdef'[i-1] + 'abcdef'[i+1] for i in range(1, len('abcdef')-1)]"
3551 ]
3552 },
3553 {
3554 "cell_type": "code",
3555 "execution_count": 73,
3556 "metadata": {
3557 "collapsed": false
3558 },
3559 "outputs": [
3560 {
3561 "data": {
3562 "text/plain": [
3563 "55"
3564 ]
3565 },
3566 "execution_count": 73,
3567 "metadata": {},
3568 "output_type": "execute_result"
3569 }
3570 ],
3571 "source": [
3572 "sum(1 if nice2(st.strip()) else 0 for st in pi5.splitlines())"
3573 ]
3574 },
3575 {
3576 "cell_type": "code",
3577 "execution_count": 180,
3578 "metadata": {
3579 "collapsed": true
3580 },
3581 "outputs": [],
3582 "source": [
3583 "pi6 = \"\"\"turn on 489,959 through 759,964\n",
3584 "turn off 820,516 through 871,914\n",
3585 "turn off 427,423 through 929,502\n",
3586 "turn on 774,14 through 977,877\n",
3587 "turn on 410,146 through 864,337\n",
3588 "turn on 931,331 through 939,812\n",
3589 "turn off 756,53 through 923,339\n",
3590 "turn off 313,787 through 545,979\n",
3591 "turn off 12,823 through 102,934\n",
3592 "toggle 756,965 through 812,992\n",
3593 "turn off 743,684 through 789,958\n",
3594 "toggle 120,314 through 745,489\n",
3595 "toggle 692,845 through 866,994\n",
3596 "turn off 587,176 through 850,273\n",
3597 "turn off 674,321 through 793,388\n",
3598 "toggle 749,672 through 973,965\n",
3599 "turn on 943,30 through 990,907\n",
3600 "turn on 296,50 through 729,664\n",
3601 "turn on 212,957 through 490,987\n",
3602 "toggle 171,31 through 688,88\n",
3603 "turn off 991,989 through 994,998\n",
3604 "turn off 913,943 through 958,953\n",
3605 "turn off 278,258 through 367,386\n",
3606 "toggle 275,796 through 493,971\n",
3607 "turn off 70,873 through 798,923\n",
3608 "toggle 258,985 through 663,998\n",
3609 "turn on 601,259 through 831,486\n",
3610 "turn off 914,94 through 941,102\n",
3611 "turn off 558,161 through 994,647\n",
3612 "turn on 119,662 through 760,838\n",
3613 "toggle 378,775 through 526,852\n",
3614 "turn off 384,670 through 674,972\n",
3615 "turn off 249,41 through 270,936\n",
3616 "turn on 614,742 through 769,780\n",
3617 "turn on 427,70 through 575,441\n",
3618 "turn on 410,478 through 985,753\n",
3619 "turn off 619,46 through 931,342\n",
3620 "turn on 284,55 through 768,922\n",
3621 "turn off 40,592 through 728,685\n",
3622 "turn on 825,291 through 956,950\n",
3623 "turn on 147,843 through 592,909\n",
3624 "turn off 218,675 through 972,911\n",
3625 "toggle 249,291 through 350,960\n",
3626 "turn off 556,80 through 967,675\n",
3627 "toggle 609,148 through 968,279\n",
3628 "toggle 217,605 through 961,862\n",
3629 "toggle 407,177 through 548,910\n",
3630 "toggle 400,936 through 599,938\n",
3631 "turn off 721,101 through 925,455\n",
3632 "turn on 268,631 through 735,814\n",
3633 "toggle 549,969 through 612,991\n",
3634 "toggle 553,268 through 689,432\n",
3635 "turn off 817,668 through 889,897\n",
3636 "toggle 801,544 through 858,556\n",
3637 "toggle 615,729 through 832,951\n",
3638 "turn off 427,477 through 958,948\n",
3639 "turn on 164,49 through 852,946\n",
3640 "turn on 542,449 through 774,776\n",
3641 "turn off 923,196 through 980,446\n",
3642 "toggle 90,310 through 718,846\n",
3643 "turn off 657,215 through 744,252\n",
3644 "turn off 800,239 through 811,712\n",
3645 "turn on 502,90 through 619,760\n",
3646 "toggle 649,512 through 862,844\n",
3647 "turn off 334,903 through 823,935\n",
3648 "turn off 630,233 through 839,445\n",
3649 "turn on 713,67 through 839,865\n",
3650 "turn on 932,50 through 982,411\n",
3651 "turn off 480,729 through 984,910\n",
3652 "turn on 100,219 through 796,395\n",
3653 "turn on 758,108 through 850,950\n",
3654 "turn off 427,276 through 439,938\n",
3655 "turn on 178,284 through 670,536\n",
3656 "toggle 540,27 through 625,102\n",
3657 "turn off 906,722 through 936,948\n",
3658 "toggle 345,418 through 859,627\n",
3659 "toggle 175,775 through 580,781\n",
3660 "toggle 863,28 through 929,735\n",
3661 "turn off 824,858 through 905,973\n",
3662 "toggle 752,312 through 863,425\n",
3663 "turn on 985,716 through 988,852\n",
3664 "turn off 68,504 through 763,745\n",
3665 "toggle 76,209 through 810,720\n",
3666 "turn off 657,607 through 676,664\n",
3667 "toggle 596,869 through 896,921\n",
3668 "turn off 915,411 through 968,945\n",
3669 "turn off 368,39 through 902,986\n",
3670 "turn on 11,549 through 393,597\n",
3671 "turn off 842,893 through 976,911\n",
3672 "toggle 274,106 through 581,329\n",
3673 "toggle 406,403 through 780,950\n",
3674 "toggle 408,988 through 500,994\n",
3675 "toggle 217,73 through 826,951\n",
3676 "turn on 917,872 through 961,911\n",
3677 "toggle 394,34 through 510,572\n",
3678 "toggle 424,603 through 583,626\n",
3679 "toggle 106,159 through 755,738\n",
3680 "turn off 244,610 through 472,709\n",
3681 "turn on 350,265 through 884,690\n",
3682 "turn on 688,184 through 928,280\n",
3683 "toggle 279,443 through 720,797\n",
3684 "turn off 615,493 through 888,610\n",
3685 "toggle 118,413 through 736,632\n",
3686 "turn on 798,782 through 829,813\n",
3687 "turn off 250,934 through 442,972\n",
3688 "turn on 68,503 through 400,949\n",
3689 "toggle 297,482 through 313,871\n",
3690 "toggle 710,3 through 839,859\n",
3691 "turn on 125,300 through 546,888\n",
3692 "toggle 482,39 through 584,159\n",
3693 "turn off 536,89 through 765,962\n",
3694 "turn on 530,518 through 843,676\n",
3695 "turn on 994,467 through 994,676\n",
3696 "turn on 623,628 through 744,927\n",
3697 "toggle 704,912 through 837,983\n",
3698 "turn on 154,364 through 517,412\n",
3699 "toggle 344,409 through 780,524\n",
3700 "turn off 578,740 through 725,879\n",
3701 "turn on 251,933 through 632,957\n",
3702 "turn on 827,705 through 971,789\n",
3703 "toggle 191,282 through 470,929\n",
3704 "toggle 324,525 through 446,867\n",
3705 "toggle 534,343 through 874,971\n",
3706 "toggle 550,650 through 633,980\n",
3707 "toggle 837,404 through 881,915\n",
3708 "toggle 338,881 through 845,905\n",
3709 "turn on 469,462 through 750,696\n",
3710 "turn on 741,703 through 892,870\n",
3711 "turn off 570,215 through 733,562\n",
3712 "turn on 445,576 through 870,775\n",
3713 "turn on 466,747 through 554,878\n",
3714 "turn off 820,453 through 868,712\n",
3715 "turn off 892,706 through 938,792\n",
3716 "turn off 300,238 through 894,746\n",
3717 "turn off 306,44 through 457,444\n",
3718 "turn off 912,569 through 967,963\n",
3719 "toggle 109,756 through 297,867\n",
3720 "turn on 37,546 through 41,951\n",
3721 "turn on 321,637 through 790,910\n",
3722 "toggle 66,50 through 579,301\n",
3723 "toggle 933,221 through 933,791\n",
3724 "turn on 486,676 through 878,797\n",
3725 "turn on 417,231 through 556,317\n",
3726 "toggle 904,468 through 981,873\n",
3727 "turn on 417,675 through 749,712\n",
3728 "turn on 692,371 through 821,842\n",
3729 "toggle 324,73 through 830,543\n",
3730 "turn on 912,490 through 977,757\n",
3731 "turn off 634,872 through 902,949\n",
3732 "toggle 266,779 through 870,798\n",
3733 "turn on 772,982 through 990,996\n",
3734 "turn off 607,46 through 798,559\n",
3735 "turn on 295,602 through 963,987\n",
3736 "turn on 657,86 through 944,742\n",
3737 "turn off 334,639 through 456,821\n",
3738 "turn off 997,667 through 997,670\n",
3739 "turn off 725,832 through 951,945\n",
3740 "turn off 30,120 through 952,984\n",
3741 "turn on 860,965 through 917,976\n",
3742 "toggle 471,997 through 840,998\n",
3743 "turn off 319,307 through 928,504\n",
3744 "toggle 823,631 through 940,908\n",
3745 "toggle 969,984 through 981,993\n",
3746 "turn off 691,319 through 865,954\n",
3747 "toggle 911,926 through 938,929\n",
3748 "turn on 953,937 through 968,991\n",
3749 "toggle 914,643 through 975,840\n",
3750 "turn on 266,982 through 436,996\n",
3751 "turn off 101,896 through 321,932\n",
3752 "turn off 193,852 through 751,885\n",
3753 "turn off 576,532 through 863,684\n",
3754 "turn on 761,456 through 940,783\n",
3755 "turn on 20,290 through 398,933\n",
3756 "turn off 435,335 through 644,652\n",
3757 "turn on 830,569 through 905,770\n",
3758 "turn off 630,517 through 905,654\n",
3759 "turn on 664,53 through 886,976\n",
3760 "toggle 275,416 through 408,719\n",
3761 "turn on 370,621 through 515,793\n",
3762 "turn on 483,373 through 654,749\n",
3763 "turn on 656,786 through 847,928\n",
3764 "turn off 532,752 through 945,974\n",
3765 "toggle 301,150 through 880,792\n",
3766 "turn off 951,488 through 958,952\n",
3767 "turn on 207,729 through 882,828\n",
3768 "toggle 694,532 through 973,961\n",
3769 "toggle 676,639 through 891,802\n",
3770 "turn off 653,6 through 905,519\n",
3771 "toggle 391,109 through 418,312\n",
3772 "turn on 877,423 through 957,932\n",
3773 "turn on 340,145 through 563,522\n",
3774 "turn off 978,467 through 988,895\n",
3775 "turn off 396,418 through 420,885\n",
3776 "turn off 31,308 through 816,316\n",
3777 "turn on 107,675 through 758,824\n",
3778 "turn on 61,82 through 789,876\n",
3779 "turn on 750,743 through 754,760\n",
3780 "toggle 88,733 through 736,968\n",
3781 "turn off 754,349 through 849,897\n",
3782 "toggle 157,50 through 975,781\n",
3783 "turn off 230,231 through 865,842\n",
3784 "turn off 516,317 through 630,329\n",
3785 "turn off 697,820 through 829,903\n",
3786 "turn on 218,250 through 271,732\n",
3787 "toggle 56,167 through 404,431\n",
3788 "toggle 626,891 through 680,927\n",
3789 "toggle 370,207 through 791,514\n",
3790 "toggle 860,74 through 949,888\n",
3791 "turn on 416,527 through 616,541\n",
3792 "turn off 745,449 through 786,908\n",
3793 "turn on 485,554 through 689,689\n",
3794 "turn on 586,62 through 693,141\n",
3795 "toggle 506,759 through 768,829\n",
3796 "turn on 473,109 through 929,166\n",
3797 "turn on 760,617 through 773,789\n",
3798 "toggle 595,683 through 618,789\n",
3799 "turn off 210,775 through 825,972\n",
3800 "toggle 12,426 through 179,982\n",
3801 "turn on 774,539 through 778,786\n",
3802 "turn on 102,498 through 121,807\n",
3803 "turn off 706,897 through 834,965\n",
3804 "turn off 678,529 through 824,627\n",
3805 "turn on 7,765 through 615,870\n",
3806 "turn off 730,872 through 974,943\n",
3807 "turn off 595,626 through 836,711\n",
3808 "turn off 215,424 through 841,959\n",
3809 "toggle 341,780 through 861,813\n",
3810 "toggle 507,503 through 568,822\n",
3811 "turn on 252,603 through 349,655\n",
3812 "toggle 93,521 through 154,834\n",
3813 "turn on 565,682 through 951,954\n",
3814 "turn on 544,318 through 703,418\n",
3815 "toggle 756,953 through 891,964\n",
3816 "turn on 531,123 through 856,991\n",
3817 "turn on 148,315 through 776,559\n",
3818 "turn off 925,835 through 963,971\n",
3819 "turn on 895,944 through 967,964\n",
3820 "turn off 102,527 through 650,747\n",
3821 "toggle 626,105 through 738,720\n",
3822 "turn off 160,75 through 384,922\n",
3823 "toggle 813,724 through 903,941\n",
3824 "turn on 207,107 through 982,849\n",
3825 "toggle 750,505 through 961,697\n",
3826 "toggle 105,410 through 885,819\n",
3827 "turn on 226,104 through 298,283\n",
3828 "turn off 224,604 through 508,762\n",
3829 "turn on 477,368 through 523,506\n",
3830 "turn off 477,901 through 627,936\n",
3831 "turn off 887,131 through 889,670\n",
3832 "turn on 896,994 through 938,999\n",
3833 "toggle 401,580 through 493,728\n",
3834 "toggle 987,184 through 991,205\n",
3835 "turn on 821,643 through 882,674\n",
3836 "toggle 784,940 through 968,959\n",
3837 "turn off 251,293 through 274,632\n",
3838 "turn off 339,840 through 341,844\n",
3839 "turn off 675,351 through 675,836\n",
3840 "toggle 918,857 through 944,886\n",
3841 "toggle 70,253 through 918,736\n",
3842 "turn off 612,604 through 772,680\n",
3843 "turn off 277,40 through 828,348\n",
3844 "toggle 692,139 through 698,880\n",
3845 "toggle 124,446 through 883,453\n",
3846 "toggle 969,932 through 990,945\n",
3847 "toggle 855,692 through 993,693\n",
3848 "toggle 722,472 through 887,899\n",
3849 "toggle 978,149 through 985,442\n",
3850 "toggle 837,540 through 916,889\n",
3851 "turn off 612,2 through 835,82\n",
3852 "toggle 560,767 through 878,856\n",
3853 "turn on 461,734 through 524,991\n",
3854 "toggle 206,824 through 976,912\n",
3855 "turn on 826,610 through 879,892\n",
3856 "turn on 577,699 through 956,933\n",
3857 "turn off 9,250 through 50,529\n",
3858 "turn off 77,657 through 817,677\n",
3859 "turn on 68,419 through 86,426\n",
3860 "turn on 991,720 through 992,784\n",
3861 "turn on 668,20 through 935,470\n",
3862 "turn off 133,418 through 613,458\n",
3863 "turn off 487,286 through 540,328\n",
3864 "toggle 247,874 through 840,955\n",
3865 "toggle 301,808 through 754,970\n",
3866 "turn off 34,194 through 578,203\n",
3867 "turn off 451,49 through 492,921\n",
3868 "turn on 907,256 through 912,737\n",
3869 "turn off 479,305 through 702,587\n",
3870 "turn on 545,583 through 732,749\n",
3871 "toggle 11,16 through 725,868\n",
3872 "turn on 965,343 through 986,908\n",
3873 "turn on 674,953 through 820,965\n",
3874 "toggle 398,147 through 504,583\n",
3875 "turn off 778,194 through 898,298\n",
3876 "turn on 179,140 through 350,852\n",
3877 "turn off 241,118 through 530,832\n",
3878 "turn off 41,447 through 932,737\n",
3879 "turn off 820,663 through 832,982\n",
3880 "turn on 550,460 through 964,782\n",
3881 "turn on 31,760 through 655,892\n",
3882 "toggle 628,958 through 811,992\"\"\""
3883 ]
3884 },
3885 {
3886 "cell_type": "code",
3887 "execution_count": 181,
3888 "metadata": {
3889 "collapsed": false
3890 },
3891 "outputs": [
3892 {
3893 "data": {
3894 "text/plain": [
3895 "[[False, False, False, False, False, False, False, False, False, False],\n",
3896 " [False, False, False, False, False, False, False, False, False, False],\n",
3897 " [False, False, False, False, False, False, False, False, False, False],\n",
3898 " [False, False, False, False, False, False, False, False, False, False],\n",
3899 " [False, False, False, False, False, False, False, False, False, False],\n",
3900 " [False, False, False, False, False, False, False, False, False, False],\n",
3901 " [False, False, False, False, False, False, False, False, False, False],\n",
3902 " [False, False, False, False, False, False, False, False, False, False],\n",
3903 " [False, False, False, False, False, False, False, False, False, False],\n",
3904 " [False, False, False, False, False, False, False, False, False, False]]"
3905 ]
3906 },
3907 "execution_count": 181,
3908 "metadata": {},
3909 "output_type": "execute_result"
3910 }
3911 ],
3912 "source": [
3913 "grid = [list([False]*10) for _ in range(10)]\n",
3914 "grid"
3915 ]
3916 },
3917 {
3918 "cell_type": "code",
3919 "execution_count": 182,
3920 "metadata": {
3921 "collapsed": false
3922 },
3923 "outputs": [
3924 {
3925 "data": {
3926 "text/plain": [
3927 "[[False, False, False, False, False, False, False, False, False, False],\n",
3928 " [False, True, False, False, False, False, False, False, False, False],\n",
3929 " [False, False, False, False, False, False, False, False, False, False],\n",
3930 " [False, False, False, False, False, False, False, False, False, False],\n",
3931 " [False, False, False, False, False, False, False, False, False, False],\n",
3932 " [False, False, False, False, False, False, False, False, False, False],\n",
3933 " [False, False, False, False, False, False, False, False, False, False],\n",
3934 " [False, False, False, False, False, False, False, False, False, False],\n",
3935 " [False, False, False, False, False, False, False, False, False, False],\n",
3936 " [False, False, False, False, False, False, False, False, False, False]]"
3937 ]
3938 },
3939 "execution_count": 182,
3940 "metadata": {},
3941 "output_type": "execute_result"
3942 }
3943 ],
3944 "source": [
3945 "grid[1][1] = True\n",
3946 "grid"
3947 ]
3948 },
3949 {
3950 "cell_type": "code",
3951 "execution_count": 185,
3952 "metadata": {
3953 "collapsed": true
3954 },
3955 "outputs": [],
3956 "source": [
3957 "def print_grid(grid):\n",
3958 " print('\\n'.join(''.join('*' if l else '.' for l in line) for line in grid))"
3959 ]
3960 },
3961 {
3962 "cell_type": "code",
3963 "execution_count": 186,
3964 "metadata": {
3965 "collapsed": false
3966 },
3967 "outputs": [
3968 {
3969 "name": "stdout",
3970 "output_type": "stream",
3971 "text": [
3972 "..........\n",
3973 ".*........\n",
3974 "..........\n",
3975 "..........\n",
3976 "..........\n",
3977 "..........\n",
3978 "..........\n",
3979 "..........\n",
3980 "..........\n",
3981 "..........\n"
3982 ]
3983 }
3984 ],
3985 "source": [
3986 "print_grid(grid)"
3987 ]
3988 },
3989 {
3990 "cell_type": "code",
3991 "execution_count": 187,
3992 "metadata": {
3993 "collapsed": true
3994 },
3995 "outputs": [],
3996 "source": [
3997 "def turn_on(r1, c1, r2, c2, grid):\n",
3998 " for r in range(r1, r2+1):\n",
3999 " for c in range(c1, c2+1):\n",
4000 " grid[r][c] = True "
4001 ]
4002 },
4003 {
4004 "cell_type": "code",
4005 "execution_count": 188,
4006 "metadata": {
4007 "collapsed": true
4008 },
4009 "outputs": [],
4010 "source": [
4011 "def turn_off(r1, c1, r2, c2, grid):\n",
4012 " for r in range(r1, r2+1):\n",
4013 " for c in range(c1, c2+1):\n",
4014 " grid[r][c] = False "
4015 ]
4016 },
4017 {
4018 "cell_type": "code",
4019 "execution_count": 189,
4020 "metadata": {
4021 "collapsed": true
4022 },
4023 "outputs": [],
4024 "source": [
4025 "def toggle(r1, c1, r2, c2, grid):\n",
4026 " for r in range(r1, r2+1):\n",
4027 " for c in range(c1, c2+1):\n",
4028 " grid[r][c] = not grid[r][c] "
4029 ]
4030 },
4031 {
4032 "cell_type": "code",
4033 "execution_count": 190,
4034 "metadata": {
4035 "collapsed": false
4036 },
4037 "outputs": [
4038 {
4039 "name": "stdout",
4040 "output_type": "stream",
4041 "text": [
4042 "****......\n",
4043 "****......\n",
4044 "****......\n",
4045 "**..***...\n",
4046 "**........\n",
4047 "**.....**.\n",
4048 "****...**.\n",
4049 ".........*\n",
4050 ".......***\n",
4051 ".......***\n"
4052 ]
4053 }
4054 ],
4055 "source": [
4056 "grid = [list([False]*10) for _ in range(10)]\n",
4057 "turn_on(3, 2, 5, 6, grid)\n",
4058 "turn_off(4, 4, 7, 7, grid)\n",
4059 "toggle(0, 0, 6, 3, grid)\n",
4060 "turn_on(7, 7, 9, 9, grid)\n",
4061 "toggle(5, 7, 7, 8, grid)\n",
4062 "print_grid(grid)"
4063 ]
4064 },
4065 {
4066 "cell_type": "code",
4067 "execution_count": 191,
4068 "metadata": {
4069 "collapsed": false
4070 },
4071 "outputs": [
4072 {
4073 "data": {
4074 "text/plain": [
4075 "36"
4076 ]
4077 },
4078 "execution_count": 191,
4079 "metadata": {},
4080 "output_type": "execute_result"
4081 }
4082 ],
4083 "source": [
4084 "sum(sum(line) for line in grid)"
4085 ]
4086 },
4087 {
4088 "cell_type": "code",
4089 "execution_count": 192,
4090 "metadata": {
4091 "collapsed": true
4092 },
4093 "outputs": [],
4094 "source": [
4095 "def parse(line):\n",
4096 " words = line.split(' ')\n",
4097 " if line.startswith('turn'):\n",
4098 " command = words[1]\n",
4099 " s = words[2].split(',')\n",
4100 " f = words[4].split(',')\n",
4101 " else:\n",
4102 " command = words[0]\n",
4103 " s = words[1].split(',')\n",
4104 " f = words[3].split(',')\n",
4105 " # print(command, s, f)\n",
4106 " r1 = min(int(s[0]), int(f[0]))\n",
4107 " r2 = max(int(s[0]), int(f[0]))\n",
4108 " c1 = min(int(s[1]), int(f[1]))\n",
4109 " c2 = max(int(s[1]), int(f[1]))\n",
4110 " return command, r1, c1, r2, c2"
4111 ]
4112 },
4113 {
4114 "cell_type": "code",
4115 "execution_count": 193,
4116 "metadata": {
4117 "collapsed": false
4118 },
4119 "outputs": [
4120 {
4121 "data": {
4122 "text/plain": [
4123 "('toggle', 489, 959, 759, 964)"
4124 ]
4125 },
4126 "execution_count": 193,
4127 "metadata": {},
4128 "output_type": "execute_result"
4129 }
4130 ],
4131 "source": [
4132 "parse('toggle 489,959 through 759,964')"
4133 ]
4134 },
4135 {
4136 "cell_type": "code",
4137 "execution_count": 194,
4138 "metadata": {
4139 "collapsed": true
4140 },
4141 "outputs": [],
4142 "source": [
4143 "def do_line(line, grid):\n",
4144 " command, r1, c1, r2, c2 = parse(line)\n",
4145 " if command == 'on':\n",
4146 " turn_on(r1, c1, r2, c2, grid)\n",
4147 " elif command == 'off':\n",
4148 " turn_off(r1, c1, r2, c2, grid)\n",
4149 " else:\n",
4150 " toggle(r1, c1, r2, c2, grid)"
4151 ]
4152 },
4153 {
4154 "cell_type": "code",
4155 "execution_count": 195,
4156 "metadata": {
4157 "collapsed": true
4158 },
4159 "outputs": [],
4160 "source": [
4161 "grid = [list([False]*1000) for _ in range(1000)]"
4162 ]
4163 },
4164 {
4165 "cell_type": "code",
4166 "execution_count": 196,
4167 "metadata": {
4168 "collapsed": false
4169 },
4170 "outputs": [
4171 {
4172 "data": {
4173 "text/plain": [
4174 "569999"
4175 ]
4176 },
4177 "execution_count": 196,
4178 "metadata": {},
4179 "output_type": "execute_result"
4180 }
4181 ],
4182 "source": [
4183 "grid = [list([False]*1000) for _ in range(1000)]\n",
4184 "for line in pi6.splitlines():\n",
4185 " do_line(line.strip(), grid)\n",
4186 "sum(sum(line) for line in grid)"
4187 ]
4188 },
4189 {
4190 "cell_type": "code",
4191 "execution_count": 175,
4192 "metadata": {
4193 "collapsed": false
4194 },
4195 "outputs": [
4196 {
4197 "name": "stdout",
4198 "output_type": "stream",
4199 "text": [
4200 "turn on 489,959 through 759,964\n"
4201 ]
4202 },
4203 {
4204 "data": {
4205 "text/plain": [
4206 "1626"
4207 ]
4208 },
4209 "execution_count": 175,
4210 "metadata": {},
4211 "output_type": "execute_result"
4212 }
4213 ],
4214 "source": [
4215 "grid = [list([False]*1000) for _ in range(1000)]\n",
4216 "do_line(pi6.splitlines()[0].strip(), grid)\n",
4217 "print(pi6.splitlines()[0].strip())\n",
4218 "sum(sum(line) for line in grid)"
4219 ]
4220 },
4221 {
4222 "cell_type": "code",
4223 "execution_count": 171,
4224 "metadata": {
4225 "collapsed": false
4226 },
4227 "outputs": [
4228 {
4229 "data": {
4230 "text/plain": [
4231 "1626"
4232 ]
4233 },
4234 "execution_count": 171,
4235 "metadata": {},
4236 "output_type": "execute_result"
4237 }
4238 ],
4239 "source": [
4240 "((759-489)+1)*((964-959)+1)"
4241 ]
4242 },
4243 {
4244 "cell_type": "code",
4245 "execution_count": 197,
4246 "metadata": {
4247 "collapsed": true
4248 },
4249 "outputs": [],
4250 "source": [
4251 "def do_line2(line, grid):\n",
4252 " command, r1, c1, r2, c2 = parse(line)\n",
4253 " if command == 'on':\n",
4254 " turn_on2(r1, c1, r2, c2, grid)\n",
4255 " elif command == 'off':\n",
4256 " turn_off2(r1, c1, r2, c2, grid)\n",
4257 " else:\n",
4258 " toggle2(r1, c1, r2, c2, grid)"
4259 ]
4260 },
4261 {
4262 "cell_type": "code",
4263 "execution_count": 198,
4264 "metadata": {
4265 "collapsed": true
4266 },
4267 "outputs": [],
4268 "source": [
4269 "def turn_on2(r1, c1, r2, c2, grid):\n",
4270 " for r in range(r1, r2+1):\n",
4271 " for c in range(c1, c2+1):\n",
4272 " grid[r][c] +=1 \n",
4273 "\n",
4274 "def turn_off2(r1, c1, r2, c2, grid):\n",
4275 " for r in range(r1, r2+1):\n",
4276 " for c in range(c1, c2+1):\n",
4277 " grid[r][c] -= 1\n",
4278 " if grid[r][c] < 0:\n",
4279 " grid[r][c] = 0\n",
4280 "\n",
4281 "def toggle2(r1, c1, r2, c2, grid):\n",
4282 " for r in range(r1, r2+1):\n",
4283 " for c in range(c1, c2+1):\n",
4284 " grid[r][c] += 2"
4285 ]
4286 },
4287 {
4288 "cell_type": "code",
4289 "execution_count": 203,
4290 "metadata": {
4291 "collapsed": false
4292 },
4293 "outputs": [
4294 {
4295 "data": {
4296 "text/plain": [
4297 "17836115"
4298 ]
4299 },
4300 "execution_count": 203,
4301 "metadata": {},
4302 "output_type": "execute_result"
4303 }
4304 ],
4305 "source": [
4306 "grid2 = [list([0]*1000) for _ in range(1000)]\n",
4307 "for line in pi6.splitlines():\n",
4308 " do_line2(line.strip(), grid2)\n",
4309 "sum(sum(line) for line in grid2)"
4310 ]
4311 },
4312 {
4313 "cell_type": "code",
4314 "execution_count": 201,
4315 "metadata": {
4316 "collapsed": false
4317 },
4318 "outputs": [
4319 {
4320 "data": {
4321 "text/plain": [
4322 "[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
4323 " [0, 2, 0, 0, 0, 0, 0, 0, 0, 0],\n",
4324 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
4325 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
4326 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
4327 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
4328 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
4329 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
4330 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n",
4331 " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]"
4332 ]
4333 },
4334 "execution_count": 201,
4335 "metadata": {},
4336 "output_type": "execute_result"
4337 }
4338 ],
4339 "source": [
4340 "grid = [list([0]*10) for _ in range(10)]\n",
4341 "grid[1][1] += 2\n",
4342 "grid"
4343 ]
4344 },
4345 {
4346 "cell_type": "code",
4347 "execution_count": null,
4348 "metadata": {
4349 "collapsed": true
4350 },
4351 "outputs": [],
4352 "source": []
4353 }
4354 ],
4355 "metadata": {
4356 "kernelspec": {
4357 "display_name": "Python 3",
4358 "language": "python",
4359 "name": "python3"
4360 },
4361 "language_info": {
4362 "codemirror_mode": {
4363 "name": "ipython",
4364 "version": 3
4365 },
4366 "file_extension": ".py",
4367 "mimetype": "text/x-python",
4368 "name": "python",
4369 "nbconvert_exporter": "python",
4370 "pygments_lexer": "ipython3",
4371 "version": "3.4.3"
4372 }
4373 },
4374 "nbformat": 4,
4375 "nbformat_minor": 0
4376 }