Compare commits

...

10 Commits

Author SHA1 Message Date
2606c6536a Update 09.02.2025 2025-02-09 15:23:50 +01:00
441dac30b7 day 11 & day 12 2024-12-14 21:41:56 +01:00
fa4e8f7a58 day 09.2024 2024-12-12 06:40:06 +01:00
988a2140a7 Header 2024-12-08 20:41:33 +01:00
033c1b3b46 clean 2024-12-08 20:39:19 +01:00
689cd30393 cleanup 2024-12-08 20:36:25 +01:00
4939af7277 day 2024.08 2024-12-08 20:35:57 +01:00
70694d6e07 day 2024.08 2024-12-08 18:30:56 +01:00
da16807457 2015 / Day 11 2024-12-07 18:22:30 +01:00
b8b74c8fac Update Day 07 2024-12-07 14:31:42 +01:00
29 changed files with 1660 additions and 12 deletions

2
.gitignore vendored
View File

@@ -1 +1,3 @@
**/__pycache__/*
.venv

36
2015/data/day11/day11a.py Normal file
View File

@@ -0,0 +1,36 @@
def check(s):
if( 'i' in s or 'o' in s or 'l' in s):
return 0
count = 0
flag = 0
char = ""
for i in range(len(s)-1):
if(s[i] == s[i+1] and s[i] not in char):
count += 1
char += s[i]
for i in range(len(s)-2):
if(s[i] == chr(ord(s[i+1])-1) and s[i+1] == chr(ord(s[i+2])-1)):
flag = 1
if(count >= 2 and flag == 1):
return 1
else:
return 0
def gen(s):
temp = ""
if( (ord(s[len(s)-1]) - 96) == 26 ):
temp += gen(s[:len(s)-1]) + "a"
else:
return (s[:len(s)-1] + chr(ord(s[len(s)-1])+1))
return temp
test = 0
string = "hepxcrrq"
string = "hepxxyzz"
while(test == 0):
string = gen(string)
if(check(string)):
print ("yes")
test = 1
print (string)

File diff suppressed because one or more lines are too long

View File

@@ -3,8 +3,9 @@
# Python Code
# Developer : David Bandeira
import sys,time
import sys,time,re
from helpingFunctions import *
import json
setSampleMode(False)
@@ -13,13 +14,30 @@ aocYear = identifyYear(sys.argv[0])
path = getPath2Data(aocDay,aocYear)
filename = getFilename2Data(aocDay)
def n(json):
if type(json) == int:
return json
if type(json) == list:
return sum([n(json) for json in json])
if type(json) != dict:
return 0
if 'red' in json.values():
return 0
return n(list(json.values()))
def taskA (data) -> int:
gameScoreA = 0
for dataLine in data:
dataValues = re.findall('(-?\d+)',dataLine)
for dataValue in dataValues:
gameScoreA = gameScoreA+ int(dataValue)
return gameScoreA
def taskB (data) -> int:
gameScoreB = 0
for dataLine in data:
gameScoreB = gameScoreB+ n(json.loads(dataLine))
return gameScoreB
def task(task: int,data) -> int:

View File

@@ -13,13 +13,48 @@ aocYear = identifyYear(sys.argv[0])
path = getPath2Data(aocDay,aocYear)
filename = getFilename2Data(aocDay)
def getData(data):
calcs=[]
for dataLine in data:
calc=[]
result, values = dataLine.split(':')
calc.append(int(result))
calc.append([int(value) for value in values.strip().split()])
calcs.append(calc)
return calcs
def is_valid(result, values, part2):
if len(values) == 1:
return values[0]==result
if is_valid(result, [values[0]+values[1]] + values[2:], part2):
return True
if is_valid(result, [values[0]*values[1]] + values[2:], part2):
return True
if part2 and is_valid(result, [int(str(values[0])+str(values[1]))] + values[2:], part2):
return True
return False
def bruteforce_calc(calc,part2):
ret = 0
expectedResult = calc[0]
values = calc[1]
if is_valid(expectedResult, values, part2):
ret = expectedResult
return ret
def taskA (data) -> int:
gameScoreA = 0
calcs = getData(data)
for calc in calcs:
gameScoreA += bruteforce_calc(calc,False)
return gameScoreA
def taskB (data) -> int:
gameScoreB = 0
calcs = getData(data)
for calc in calcs:
gameScoreB += bruteforce_calc(calc,True)
return gameScoreB
def task(task: int,data) -> int:

36
2024/day07/day07a.py Normal file
View File

@@ -0,0 +1,36 @@
import sys
import re
from collections import defaultdict, Counter, deque
#import pyperclip as pc
def pr(s):
print(s)
# pc.copy(s)
sys.setrecursionlimit(10**6)
infile = sys.argv[1] if len(sys.argv)>=2 else '7.in'
infile = '/home/bandeira/git.bandeira/aoc/2024/day07/input.day07'
p1 = 0
p2 = 0
D = open(infile).read().strip()
def is_valid(target, ns, p2):
if len(ns) == 1:
return ns[0]==target
if is_valid(target, [ns[0]+ns[1]] + ns[2:], p2):
return True
if is_valid(target, [ns[0]*ns[1]] + ns[2:], p2):
return True
if p2 and is_valid(target, [int(str(ns[0])+str(ns[1]))] + ns[2:], p2):
return True
return False
for line in D.strip().split('\n'):
target, ns = line.strip().split(':')
target = int(target)
ns = [int(x) for x in ns.strip().split()]
if is_valid(target, ns, p2=False):
p1 += target
if is_valid(target, ns, p2=True):
p2 += target
pr(p1)
pr(p2)

View File

@@ -0,0 +1,850 @@
3227574: 327 47 15 6 7 2
9687: 6 72 7 3 615
2594771266: 7 6 5 5 8 8 8 4 5 55 326 6
9900354400: 8 75 9 9 2 5 451 6 8 50
218532: 65 335 7 71 2
5776: 4 3 4 4 2 9 25 3 6 1 5 34
7309059: 429 5 3 3 22 9 54 7 8 43
77080410: 870 8 3 615 18
2049996956464: 6 1 8 7 6 609 6 9 4 10 6 4
386477825679: 483 8 77 825 682
7329: 255 2 545 3 9 1 3 82 2
478524813922: 9 202 4 13 8 5 1 1 2 9 22
3007459428: 37 5 963 7 7 4 2 4 4
422124078: 7 603 23 7 3 76
5590: 6 5 86
2117616971: 293 840 239 4 7 47 9 5
487830: 6 6 673 2 43 5 8
61079143573: 403 421 985 302 7 36
977246: 9 4 61 72 46
49897223040: 82 1 49 20 69 2 7 127
103551: 8 81 7 7 483 68
804651: 2 9 1 8 92 2 5 45 2 9 78 3
57232: 8 14 7 73 1
3223472338: 1 8 592 3 7 4 3 85 2 85 4
7246: 8 7 7 35 738 72 1 7 2 91
8205611676: 6 475 7 4 25 3 77 5 9 89
17496: 1 4 2 58 2 97 25 9 5 2
6066983: 15 8 8 2 4 9 5 7 1 8 787
110265: 59 72 14 589 8 638
397765000: 5 233 7 50 76
3574: 9 20 9 854 3 445
8788843: 5 3 6 42 46 6 448
941274: 43 38 64 10 9
46254840: 50 1 85 2 90 920
9928719793: 99 28 71 97 93
8039: 49 881 7 3 942 584
4424: 9 10 8 52 56
16594: 68 8 8 29 553 3 30
32779706264: 9 955 109 34 179 80 5
155416: 146 8 58 9 73
71402282: 643 1 571 8 892 97 2
596625317: 8 6 4 3 8 922 664 443 4
1655597: 19 76 93 5 80
180478522: 982 31 8 4 15 795 7 7
69316854415: 8 8 44 7 90 444 7 88 39
23249578: 4 58 4 9 578
685309395: 707 54 45 38 1 9 965
365768589312: 639 224 868 64 46
48064134240: 1 7 9 6 2 1 46 5 24 327 6
2165926308: 1 30 94 18 7 306
786903: 82 133 61 60 6
641179: 1 1 724 1 8 3 18 3 1 847
20800560: 4 1 60 5 560
6018507918: 4 2 8 99 7 797 6 9 7 8 6 9
3328603616953: 207 3 67 54 5 1 2 8 9 53
15081270118: 21 436 33 270 117
11531217929088: 858 208 962 71 946
532575: 4 50 532 8 8 85 5 62 8
528903: 244 327 92 9 342 7 1 2
60231276: 60 17 2 56 3 27 1 5
272934937796: 27 293 4 93 77 96
1476196: 10 655 29 520 67 206
753127: 1 2 3 3 3 4 710 81 6 2 4
1841604240: 7 98 3 83 80 4 8 5 1 7 6 8
188949705610: 258 712 740 139 1 8
5585592600: 2 4 5 7 88 7 856 7 75 1 3
11694266932: 1 3 898 3 2 5 8 8 85 1 7 2
31334: 8 2 92 15 59 9 3 7 9 6 9 5
134027418420: 21 967 666 10 991
360462: 761 59 84 8 598
195480415: 488 70 4 3 63 53
1711173: 7 22 59 1 73
38688: 8 1 39 4 31
7066563480: 173 708 3 60 678
40914726: 3 5 263 9 4 1 1 5 5 8 54 6
73484562626: 4 7 4 628 494 8 3 4 9 24
30705937: 3 8 4 2 73 188 44 1 8 3 5
107934538: 7 4 385 5 948
1364548120: 3 1 44 548 118
9327031128: 96 7 487 25 95 3
97634211840: 2 4 23 8 55 8 9 6 6 82 4 9
126408: 6 92 229
58870: 5 53 870
24754665: 27 496 8 9 7 9 3 8 3 3 8 2
15038158: 404 25 62 6 58
267920541: 2 8 8 7 6 293 4 3 8 6 7 3
319021767756: 4 4 3 8 686 2 343 741 9
6454: 86 3 386 6 1 6
38601032: 2 8 4 5 771 9 73 8 5 9 4 8
166848: 920 5 688 872 43 66
56982752: 8 661 8 39 7 39 8
209693: 370 9 7 79 106
43128053: 299 5 2 72 52
1071: 5 7 989 7 40
852390: 405 42 4 630 3
7054549: 371 6 692 9 4 7 1 5 4 8 1
55776906: 36 5 5 730 1 3 413 1 17
873: 55 1 712 5 99
303164: 2 5 1 2 1 2 59 7 8 424 3 1
2175: 17 808 79 741 533
11157263487: 111 514 1 57 634 8 7
1471606: 1 884 773 96 839
17558973: 5 2 5 2 55 3 4 7 7 811 9 3
573: 37 6 81 4 266
284703: 97 57 165 5 6
689440323: 9 4 783 4 8 1 8 2 1 8 65 5
121: 18 2 2 3 7
478: 9 1 82 4 1 98 41 1 2 8
18735650: 8 7 8 2 3 6 10 197 947
102836046: 12 86 24 375 84 60 4 7
465281475: 973 695 45 688 837
656: 4 1 615
136761048: 3 3 84 8 13 3 3 5 11 1 89
1783: 68 933 253 1 4 525
158: 9 6 83 21
115959: 832 265 61 77 5 71 4
2487131: 510 62 2 7 9 4 79 1 53
5170: 6 6 1 8 4 9 1 6 1 803 36 5
1928601600: 8 86 6 5 2 584 80
59821: 462 8 3 123 1 987 655
398537804644: 853 40 467 4 644
339459939: 7 7 4 88 253 7 9
481903856: 29 1 60 26 276 675 8
680603: 9 20 13 2 9 892 5 2
236736973260: 7 6 5 77 52 4 1 6 34 1 6 6
398228: 115 4 5 69 98
120581: 28 81 65 8 17
267735216: 8 19 6 4 81 57 378 216
74602849: 5 406 23 1 6 49
2719990: 597 521 243 325 10
34500: 5 67 7 1 60
5140800: 510 7 5 2 36 4
190594626: 91 817 84 68 6 4 8 8
20232583: 8 7 357 80 28 36 5 2
5811831187: 577 8 2 31 8 294 9 8 8 9
7866: 2 23 893 372 6
10169305: 248 62 409 3 7 5 732
249434091: 117 7 5 989 7 962 3 93
388494: 7 92 3 49 6
912769496103: 45 935 98 733 302
2264409594: 51 8 555 958 5 7
724415: 2 4 7 8 1 9 942 3 1 9 3 4
15942816: 7 8 338 72 562
40785800: 6 2 8 24 7 432 25
3483666656: 34 83 388 278 656
3018057: 5 4 3 138 810
170416569009: 3 6 4 2 92 731 7 951 55
324724224995: 6 445 72 422 499 6
12229264: 1 1 4 21 6 34 562 7 5 1 4
3392: 4 7 67 288 58 8
305431434300: 6 91 7 76 12 701 8 5 3
151905613125: 8 5 5 2 1 28 12 1 31 2 3
207879696: 6 4 7 7 9 5 540 7 54 72
6913: 37 37 1 1 69 994 1 6 85
432614183289012: 5 40 767 729 1 8 901 1
82500961: 97 47 679 2 100 1 961
3966848: 71 31 206 3 6 9 92 128
12453120522: 60 1 850 33 5 6 40 522
2982342779: 18 79 2 39 2 1 1 4 3 77 9
5445: 6 7 27 1 3 1 56 4 31 1 33
81877448: 419 3 7 2 4 173 8 8 17 8
1071576868615: 7 81 8 3 2 7 668 8 9 979
39301: 4 9 62 46 8 289 94 2 6 1
377089313: 68 1 72 8 3 9 4 6 3 7 4 3
664442: 113 40 3 7 7 2
132694431: 33 1 39 94 428
4716520604: 4 7 3 4 7 1 4 3 9 696 4 2
835717: 500 97 238 7 17
5575854: 13 266 26 9 6 9 5 6 177
647629: 612 35 5 82 47
62599894469: 5 148 4 8 3 7 19 3 1 4 38
93928: 4 13 5 81 5 5 27 771 3 4
17496650: 9 3 268 403 6
553454090700: 1 7 357 8 20 911 35
1661589: 2 373 70 2 480 7
3028862: 60 50 23 5 862
1122: 35 6 169 1 743
97923737484: 2 8 68 9 3 73 74 84
1882185081: 146 9 81 604 5 9 2 4
193: 180 6 7
22771440: 9 6 8 4 2 8 96 4 109 5 3 4
100144066185: 7 286 794 352 1 9 1 7
117453: 6 6 1 15 2 4 9 3 819 3 47
1182792: 8 8 6 33 301 453 9
61425: 2 9 2 183 7 585 2 6 75
1783100180: 29 589 64 19 4 52 2 4
83116480: 3 701 3 5 754 9 4 5 368
2554371618: 8 78 7 3 3 9 401 8 7 9 6 6
7978985: 7 97 88 1 85
81207109035: 810 6 7 7 710 3 5 2 8 3 5
3081162: 3 368 3 93 3 3 153
484464334: 1 19 9 78 9 426 9 4 1 89
255347157090: 7 7 2 5 68 497 413 12 4
633738987: 5 9 43 1 7 8 9 8 3 2 137 3
384258: 44 2 9 284 3 9
23707011: 505 48 7 67
1151869: 7 6 5 2 7 282 719 3 25 6
9298808: 287 9 60 6 6
31106: 969 8 4 94 4
325378: 18 3 6 1 379
774250866: 49 1 448 457 9 7 61 6 9
206132: 36 8 7 80 52
530: 35 9 4 78 8
3031: 2 28 40 7 91 692
81159303: 16 23 5 9 303
932115: 56 38 146 3 51
3298555318: 5 3 7 3 547 3 1 114 318
5418296580: 152 11 259 68 8 23 4
54817: 99 1 9 507 61
539917: 503 1 3 5 5 2 5 3 3 262 7
124292: 85 56 880 212
136186: 5 8 2 273 8 6 9 80 26
3470: 6 3 7 4 96 293 238 5
14215140: 4 16 9 151 523
63453: 9 3 77 7 68 46 99
6679: 823 8 25 67 3
8223408518: 7 59 72 3 524 5 844 8 1
76953054: 3 39 8 975 1 67 128 6
644630: 889 80 19 7 35
1299: 7 6 7 988 17
395708417484: 1 8 812 99 1 402 914 6
667118: 1 7 886 9 94
295533124: 4 418 17 2 7 124
210933216: 35 5 794 7 830 42 8
15299816: 796 719 9 5 98 14
1368564: 6 6 5 82 36 70 9 23 8 8 4
93541755: 8 12 49 9 8 235 5
65835: 4 2 75 93 95
1387924874: 939 40 4 1 9 26 7 542
5011: 49 90 8 555 38
1109391: 9 14 482 7 91
1080359: 1 2 1 97 7 3 9 47 23 6 9
921422389333: 4 7 176 7 6 9 4 7 786 7 5
24024219: 3 16 5 24 216
148: 4 6 6 4
14399719: 624 641 12 96 3 7
8462256992: 4 66 47 682 991
46807: 3 3 1 9 13 36 475
1759128: 5 3 49 4 518
7123596: 9 14 9 5 3 3 77 27 936 6
5643205210: 8 9 2 89 3 40 9 5 618 2 8
226923671: 2 7 85 4 5 2 528 9 4 6 7 6
96748274741: 5 5 143 551 82 7 7 39 2
38772531613: 3 7 20 923 57 8 3 1 613
6724653: 960 591 8 40 7 173 6
269994403: 26 931 22 507 679
166069764: 5 2 6 69 9 582 74 378
8340: 6 7 4 4 69 20 60
2720: 1 544 5
28299754: 2 48 27 5 516 7 3 8 7 7
172013600: 5 14 6 9 8 526 9 7 5 32
21345727568: 6 3 8 3 456 8 4 7 5 42 26
815985723: 969 51 3 782 341
1037725392133: 415 5 45 5 39 213 3
4941379880: 2 470 6 8 9 6 2 7 59 9 1 8
51044: 486 9 1 3 7 328 28
6461326925: 2 584 5 25 6 7 2 7 924
547138924: 801 5 11 812 4 76 7 21
8928: 91 4 3 91 1 3 7
3686: 83 3 6 1 4
2099160: 42 7 20 357
60636749: 732 5 1 253 594 8
296684: 6 1 836 3 43 334 92
2808: 6 67 386 9 6
273506833: 5 7 356 1 64 98 833
17: 2 9 7
76731026953: 3 9 27 7 475 7 1 5 5 995
30914: 2 13 6 161 6 1
1624102: 668 7 1 3 6 399 970
126619: 26 93 47 46 2
362391: 36 2 39 1
7123460: 368 872 9 1 4 319 95 2
30918666: 281 11 8 6 66
22085: 75 5 8 155 7
462860: 46 264 9 13 3
699209426: 1 3 7 1 11 9 3 3 980 9 3 1
140400: 70 20 20
352904605: 9 3 603 4 2 7 2 3 8 6 74 3
435840: 676 5 640
17865408000: 3 5 40 5 5 769 352 48
108274521: 5 2 9 318 2 66 3 7 9 8 4 3
9621: 9 12 9 25 469
1345843: 832 58 1 53 803 8 2
683682: 362 5 3 41 4 9 5 852
118548: 5 9 6 259 442
249315946: 510 7 253 241 2
5740521: 7 90 283 14 59
303269403: 678 71 700 9 3
214801337: 2 558 800 39 383
2981629: 21 5 1 6 7 4 8 3 161 1 7 1
38879: 1 55 3 656 828
883: 452 18 354 1 58
1843: 43 56 3 3 6 7
49728956988: 4 8 37 7 6 5 4 563 6 5 3 7
1970039832: 19 767 68 899 41
24756505: 1 9 7 891 1 4 7 9 7 1 1 86
2904811: 322 62 90 532 701
60197: 45 3 3 3 8 9 18 1 2 9 75 2
44194581822: 6 52 657 55 8 49 5 2 8 7
4613575465995: 6 2 1 2 4 561 44 74 3 95
28976: 86 48 7 56 4 20
20970116: 8 1 7 55 768 272 46 2 2
6439513: 234 402 23 772 1 4
148417892: 148 417 823 70
1211760: 6 17 3 55 72
3053: 642 3 252 8 867
155127: 605 390 390 56 2 7
156240683: 7 8 2 2 406 83
7319689: 308 1 9 9 25 26 1 67 9
1386567: 286 6 21 1 6 94 1 8 7
3570: 14 36 4 2 7
140313599: 8 6 2 2 2 6 6 7 5 142 559
475714543: 61 24 51 314 4 542
493472: 9 8 42 31 364 7 9 8 2 8
1990446: 4 62 463 9 6 2 3 4 38 9 6
19619731: 713 6 622 2 9 817 2 97
7245420: 93 7 4 3 762 2 7 96 84 5
486048: 5 30 83 90 5 4 16 366
189: 7 2 21
10588484: 2 2 6 621 2 7 2 6 178 8 2
41467203: 8 639 30 16 1
7578933659: 9 3 270 87 934 1
3253778: 8 33 7 6 39 7
1002051099072: 3 477 50 15 7 70 72
661076520: 565 5 600 68 390
154: 1 6 6 6 82
278413050: 55 6 73 9 610 5
625523: 8 3 614 523
22185893529: 322 689 9 3 52 9
1170030: 605 2 623 951 40 260
260802428: 820 318 42 428
7710585: 7 689 3 5 4 9 212 372
4753338: 59 7 72 59 1 6 5 680
19263220581: 58 575 1 58 376 7 81
143662750: 124 2 2 4 38 3 8 3 9 2 7 5
38383696: 805 228 997 4 52
23008: 8 4 191 8 7
396000: 744 6 66 8
20581: 56 36 41 8 3
3038974: 7 2 7 31 974
2192168: 47 4 9 9 415 3 619 548
15190340: 250 124 2 5 49 1
1748190: 1 3 5 7 69 4 3 3 56 3 19 5
2752122321: 2 3 880 1 6 858 4 4 1 9 9
21371: 5 9 471 81 95
7077051: 729 24 4 7 351 21 5 1
1879651: 70 9 203 68 98 376 30
46368: 3 7 2 56 6 6
2227217: 6 452 1 78 798
10692793: 181 17 6 9 793
257695277844: 1 875 3 9 6 74 73 7 2 7 4
76560: 1 595 498 5 61 66
422674260: 662 2 5 27 234 60
29645694: 5 50 7 77 694
4077: 7 31 1 3 97
20124: 5 38 468
52246009: 398 702 4 1 7 676
183920019: 8 95 4 605 20
1509: 5 4 24 6 3 6 12 6 1 500 1
8613945: 20 8 92 3 39 66 15
6172100: 52 9 72 10 10
2661931: 5 1 8 2 4 8 8 45 6 5 8 963
271485: 57 48 99 442 179
877576528: 3 4 4 1 25 2 5 3 56 91 5 8
1270688: 18 126 7 7 6 8
1491826047: 35 6 565 7 92 50
44169308: 84 2 36 7 4 5 369 4 5 9 8
4088700: 5 6 3 15 35 236
42397: 4 231 1 3 75
33946371827550: 8 18 94 7 539 4 5 91 90
12150505765: 666 48 7 38 561 11 4 5
714573758: 916 3 360 6 26
31145619648: 372 286 989 8 37
139956508803: 59 79 4 3 650 8 800
118473952: 7 14 7 783 544
7902897756: 617 8 6 10 820 6 26
30208315368: 94 4 32 30 548 989 1
20053757176: 53 41 71 595 66 47 8
2106458913061: 51 894 2 110 7 4 615 6
219648: 1 91 98 76 8
2660330: 140 79 6 51 8 2 776 5 1
8554141: 28 38 9 120 4 5 3 25 3 7
181258582: 8 16 5 1 74 9 81 4 2 7 8
1251: 96 830 1 4 244 76
139494973: 8 64 270 676 8 8 23 77
1325910: 6 94 399 1 6 1 1 6 5 229
481344: 4 11 3 3 814 7 9 3 8
14656187131: 8 9 2 482 5 331 9 3 9 65
523740: 2 7 870 43
1698: 22 6 935 604 27
132: 8 1 90 34 1
22006: 537 4 3 525
1771262: 3 3 2 7 3 6 90 2 5 2 530 2
124740: 31 6 624 77 2
158324958514: 98 124 4 4 814 3 8 57 2
53688: 8 1 6 8 254 59 4 3 8 6
243177827: 132 9 33 959 203 5 62
5228981901: 8 849 21 61 899
1540177: 7 4 208 6 86 292
17690: 138 3 2 4 3 8 5 4 3 84 2 8
64581: 524 508 34 60 577 44
2074: 5 2 91 898 266
42128: 61 226 60 3 494 1 95
112104694: 3 481 51 322 72
2730604169956: 8 46 22 5 911 27 37 5 6
1585980: 91 35 1 6 401 6 9 55
4267032808: 40 839 88 8 43 7 985 1
858808: 4 501 17 2 31 74 3
4662: 250 4 39 373 7
3851847147: 61 3 6 3 5 1 79 4 471 4 9
6976: 6 5 3 761 2 43 88 7 88
85211: 5 843 8 33 4
3244: 649 5 2
65355595368: 803 628 3 9 9 4 4 2 2 4 4
3523359: 3 8 32 3 359
11562: 48 4 78 19 40
105322: 6 4 9 1 7 1 4 16 51 8 7 51
20605500: 1 1 6 6 2 750 723
916509775588: 5 419 55 8 781 39 4 7 7
103997754: 760 2 4 7 342
502644: 481 19 2 112 532
160306: 3 396 5 80 706
543213320: 1 552 5 7 9 75 290 66 9
56777760: 7 1 53 39 2 5 85 26 27 8
964: 6 7 1 27 3 890
7164611387: 98 4 2 8 14 6 6 6 1 1 3 87
39122842249: 4 998 5 633 5 4 1 4 98 2
1589106870: 16 7 6 7 56 4 9 65 6 501
905335803034: 7 6 76 405 89 90 43 34
203076: 13 1 529 5 8 6 5 9 4 6 6 3
1149620: 765 4 7 6 7 5 5 59 5 231
274240768: 3 6 6 848 153 5
28931937070: 400 718 4 9 5 722
1709184: 28 42 68 7 589 6
4337709: 4 311 8 251 2 4 4 6 2 5 8
14701512: 98 991 381 1 512
701381793: 6 859 963 842 3
71971: 6 7 339 5 1 624 146 10
32099: 3 1 765 79 252
171771: 1 623 87 36 98 64 1 6 9
1042861683: 5 81 4 6 524 811 7 5 8 7
41131530060: 712 57 18 7 900 33 60
79601176: 1 8 64 6 6 6 2 38 11 7 6
2298689026: 999 43 230 2 6 1
4023037200: 2 290 1 883 51 780 4 5
50040: 624 71 72
1860631968498: 665 1 32 52 537 49 5
204666336: 5 7 1 726 157 1 4 9 49
38462212: 6 6 2 85 9 6 2 92 7 34 86
376458353: 140 4 79 52 8 7 5 3
5779904174658: 903 1 1 8 8 12 5 2 2 65 8
2221128150: 26 21 904 9 3 50
85561: 5 9 7 2 7 122 7 146 4 2 2
194508948480: 616 4 8 58 642 265
13084: 149 315 55 70 719 1
1551214: 69 8 7 4 53 2 5 5 59
6385500: 5 5 258 99 10
735066: 21 350 66
32052: 616 909 7 9 3
74064: 4 6 681 3 23
19992867: 44 5 136 3 716 95 56
2573808: 814 4 79 4 304
52476: 55 462 7 7 8
18836346: 7 6 1 6 3 9 60 1 5 4 4 90
143956: 95 54 963 380 89
3913319: 2 1 26 3 1 2 4 2 6 813 3
2253072: 38 971 5 99 438
19921201: 4 980 8 5 2 6 7 91 843
199146: 5 68 4 35 32 81 9 84
3357288: 6 942 6 33 3
578235348: 9 8 19 43 4 46 7 39 1 5 9
1120784: 3 3 96 8 4 5 6 56 43 7 7 4
3094520: 8 346 95 2 3 3 5 7 5 3 4 8
3930: 5 6 7 286 9 619 41 1 2
1180: 4 1 9 70 88 7 95 10
349358: 4 363 951 83 255
716: 5 2 3 93 6 32
442532935: 8 195 9 42 6 47 6 4 6 37
5558322248: 4 1 34 4 4 3 9 5 5 7 32 8
5293550: 529 3 550
6571: 2 5 4 447 77 59 3
1408672499: 4 320 60 898 238 11
561588221: 7 8 158 8 221
1617: 161 6 4
2746681: 914 82 68 8 3 1 156
1068: 490 3 5 2 568
416425074: 675 19 6 250 7 4
26526852: 6 9 2 2 9 68 3 9 6 6 827
6968637: 6 5 1 57 420 244
192926880: 7 127 4 9 2 7 1 5 6 666
244129082: 49 83 3 5 41 3 9 7 41 2 7
24487936: 973 6 52 481 543 645
5366629969: 9 2 8 7 948 6 3 7 7 75 17
388034111: 2 80 6 479 4 101 586 9
5155585: 2 853 5 19 3 87 24 49 1
136274810: 483 7 3 62 9 254 35
85955764328: 695 6 989 368 411 56
5256179832: 1 82 7 2 884 799 428 6
62734399669: 79 21 54 1 9 6 9 8 2 96 7
256634764: 2 3 5 3 9 63 1 2 33 9 4 7
2196189325: 21 961 88 95 7 368
70511994822: 2 3 490 5 2 697 91 37 6
22088: 5 1 7 1 5 6 4 7 97 82 1 2
145941992: 8 6 152 4 6 9 1 5 36 2 5 4
173029: 8 4 8 3 984 945 4
1022333: 1 34 22 5 365 33 3
14867740855: 1 44 2 661 781 54
1137433680: 406 8 1 9 8 7 684 3 49 5
20443486: 7 94 6 379 8 9 8 4 93 9 7
492099487: 2 8 7 3 20 9 7 2 9 658 6 6
90834615: 387 6 869 718 11 45
1036638056: 945 3 45 243 56
1724286: 9 8 31 191 534
382158728: 76 42 1 5 5 3 72 8
58670320: 42 9 1 9 5 7 401 344 88
6194319: 1 330 99 95 6 62 173 3
13725249049: 98 14 524 904 6 3
475791360: 775 11 43 2 605
176078330078: 3 78 77 5 3 1 6 9 203 5 5
471606355: 1 65 7 6 335 6 54 1 55
13599902: 8 8 3 8 269 20 207 36
1311720: 9 57 7 9 474 40 1
2782799: 8 82 53 5 5 2 8 671 288
151025418604: 4 992 7 412 941 98 4
6889365: 334 95 921 211 4
1395052: 4 347 9 61 52
685202675: 7 85 51 52 8 7 1 2 341
106283: 7 30 26 225 25 6 6 2 9
423138: 26 1 9 452 4 66
443236: 6 70 75 3 957 69 3 895
1415392: 9 15 35 5 7 6 9 18 5 6 9 8
351077611: 45 7 5 3 3 93 7 7 78 6 5 8
1263251133: 43 306 6 15 11 240 96
83528: 3 6 97 86 87 95
9740501: 80 426 385 50
94537: 180 9 5 3 7
100647633: 629 16 7 1 633
47197641: 47 1 9 764 1
80: 1 13 1 62 5
30278117: 56 7 5 441 57 5 2 7 6 9 9
5978082: 554 8 6 4 394 24 97 66
417734832: 6 2 968 720 70 92 6 61
670781: 416 6 9 245 2 3 2 9 5 8 5
3010: 24 6 10
7313227502: 265 8 7 4 1 5 7 1 8 2 88
3040362: 63 1 1 1 91 514 52
523261333625: 9 1 915 809 1 9 7 616 9
276486972: 9 51 8 9 97 7 6 1 455 5 4
52758: 18 290 69 7 593 54
16390942: 2 3 732 9 4 253 935 27
485240: 4 8 552 830 520
189880: 18 967 5 120 87
57611: 568 93 719
39090876: 3 30 82 31 466
108551: 53 7 4 3 73
29753124395: 828 99 9 265 9 121 7
24181: 1 78 8 38 4 6 5 3 6 139 2
180774: 83 33 11 6
4508292: 3 1 4 60 7 4 35 667 39
8739: 30 79 2 2 4
1132586025: 1 8 4 8 32 525 141
68400: 7 9 9 3 912
583127513765: 69 24 3 3 46 423 211 7
275528030: 5 4 908 197 44 7 9 87 5
100131239602: 90 66 39 43 7 46 7 8 2
20364: 916 977 64 9 785
3172070: 295 22 7 3 539 69
67531026909575: 51 817 214 573 609 2
415718109: 376 39 1 718 108
143296133: 252 3 351 6 6 90 651 2
37274164: 8 696 79 6 1 660 4
343291371500: 75 836 634 51 1 70 2
201717693276: 5 21 2 7 83 4 66 677 37
8035042: 100 39 1 2 5 8 7 6 7 905
251: 1 187 64
7190499: 882 1 829 2 7 3 3 3
13109: 9 7 74 2 72 68 2 1 66 8 5
90541248356: 50 164 4 8 368 1 3 4 7 9
37488529328: 5 138 24 7 66 27 49 8
32596072: 267 8 27 954 556 1 7 9
30691934237: 349 34 64 917 3 5 80
713691: 78 227 259 206 97 9 9
206: 10 1 196
19451: 4 1 9 58 6 220 9 7 19 9 2
15599: 3 12 599
55917665: 2 4 2 2 5 771 2 9 518 83
8693847: 66 467 7 3 94 69
496064: 655 2 17 8 92
119414568967: 58 7 5 9 7 8 906 4 4 2 9 1
269963409: 63 494 2 323 5 3 3
860479176: 9 2 7 7 3 3 9 8 4 61 2 771
4670133944: 4 55 77 876 100 7 392
10078381: 875 4 40 39 73
3223068: 8 11 2 3 38 62 12 1 54 5
179730136: 3 3 73 9 74 208 6 8 8
302890364470: 6 5 966 3 5 196 26 95
37: 23 1 1 8 4
1197312: 8 72 9 63 82 2 6 7 3 48
773436: 2 37 198 3 76 860
167832000: 2 3 1 1 4 3 98 9 8 333 7 8
183161250047: 373 32 268 5 75 45 47
675951372: 57 87 921 37 4
318979526521: 92 1 866 500 7 520 51
34139791032: 828 25 4 947 758 2 2
222717817: 380 44 45 25 296 7 10
1136290832: 3 5 3 2 7 327 2 6 7 9 4
65054925214: 111 990 8 611 74
3093328: 14 320 5 6 702 1 7 7 16
383323505169: 7 9 8 8 725 2 3 4 6 6 50 8
3452869836: 5 2 6 9 5 2 71 3 476 6 6 3
6878148: 543 8 33 7 1 5 63 5 5 6
90298: 92 810 98
14518235: 6 836 466 37 471
781556: 7 9 8 30 2 193 1 4 3 6 3 5
68649438: 4 714 81 26 899
150072145: 19 5 5 2 74 26 1 6 4 84
7926: 5 2 49 1 72 11 7 3
94176: 269 603 108
14903688: 5 298 3 6 88
9718059: 7 964 799 7 56 6
139950: 2 4 2 5 4 97 7 4 6 5 37 60
567382186: 567 2 931 890 85
248507: 5 10 68 73 307
122844: 71 1 6 5 628 116
1682235070: 58 569 4 8 63 532
4641: 5 754 865 4 2
1494663518: 17 4 859 3 3 6 5 69 86
21982951: 44 991 1 8 8 87 9 7 46
186041: 1 7 7 1 36 2 744 8 5 7 5 6
1938320: 6 478 580 4
8719949700: 794 10 8 4 9 5 4 246 62
65959576: 5 9 5 69 7 8 9 265 1 10 5
39739764: 73 9 4 8 7 192 37 3 332
98531785: 9 822 31 17 83
1610235387: 44 60 6 427 645 6 4 3 9
3635: 6 17 603 22 5
65193: 97 7 48 2 9
7674: 8 954 7 1 34
655960: 51 643 20 7 93
403726458: 6 5 54 616 60
42426724: 45 2 8 992 91 2 436
9119647: 908 3 9 639 8
75426: 9 848 88 7 6
29444948: 7 374 3 28 4 3 1 3 7 926
262760: 5 7 3 3 850 5 4 9 1 5 85 5
342333: 84 97 59 1 4 89
470790145: 5 755 9 4 2 96 6 3 9 1
37850302: 64 5 88 42 102 32
3129944268: 26 21 8 819 7 4 4 363
2053663: 399 815 17 27 79 99 7
12985519: 66 47 51 214 5 74
344025: 3 9 7 9 868 9 1 320 25
201204: 9 410 2 72 27
223396628: 2 7 3 5 212 2 777 5 97 6
3567168242: 1 1 2 9 3 12 4 563 242
762224: 31 2 4 10 15 7 21
81042320613: 30 9 3 4 231 9 67 3 940
4476087598: 5 3 54 36 9 3 9 8 1 1 717
71990: 95 2 377 7 353
1042320: 5 64 581 26 6
122005024: 254 3 3 953 1 8 94 7 1 8
830286167: 4 18 1 76 627 17 616 7
6630: 4 9 49 3 37 95
3715488: 12 76 3 679 2
1040785: 8 4 10 81 4 1 93 8 13 5
73614182544: 92 8 141 82 5 45
44451: 444 46 5
4160658624: 8 5 3 8 7 952 879 7 6 24
545290: 543 9 6 36 754
31590: 9 56 9 2 338 65
77123745: 82 3 6 92 1 9 2 8 4 3 1 9
102178529: 1 5 96 709 6 463 530
3115584: 8 593 6 9 96
5141881: 20 7 552 9 5
7389: 5 48 4 7 669
3481344570: 2 82 359 73 8 54 7 7 5 3
13601387: 8 1 8 3 89 5 5 5 168 4 8 9
692071: 4 79 1 7 891 6 1 95 91
85493: 758 11 211 3
11201268749: 8 3 5 9 458 54 9 5 2 5 2 9
9296: 9 3 3 9 4 6 6 7 507 30 6 8
198657: 7 4 705 946 542 845 9
36524791: 2 87 82 3 3 6 2 278 39
27674: 5 72 39 66 9 51 2
685688: 622 235 2 22 4
1948912998: 35 2 5 4 5 448 9 129 9 8
456756: 698 63 21 5 6
465: 3 462 1
733622023: 7 3 361 2 24 95 883 1 3
969: 429 4 14 2 70 5
17420824: 764 26 877 1 3 92
9412554613: 266 2 93 35 45 28 85
523886552: 178 2 2 3 72 81 74 973
3446042: 6 796 263 9 5 9 359
456: 8 8 1 23 369
7502341408: 30 2 9 7 8 409 748 296
3756824: 16 334 23 10 2
71585312: 19 90 710 35 24 838
9780184: 5 459 2 2 6 709 205 33
304945: 2 75 29 1 945
7109: 71 4 5 5 7
49602855: 8 62 4 1 1 5 2 1 5
15879: 61 6 79 3
93464118405: 29 4 9 12 6 5 5 7 4 35 7 9
303: 9 30 136 73 55
4343982708: 2 9 37 26 1 5 47 4 2 3 9
853: 79 9 54
1405673: 721 683 75 9 2 3 901 8
9865074002: 31 3 8 25 73 446 12 2
315980: 9 9 5 7 244
39166171: 326 30 11 543 4 2
480960128540: 1 329 7 900 32 4 542
6060315993: 7 94 60 31 59 94
9947826: 1 99 478 2 8
1303361821: 4 306 29 4 9 3 52 50 23
12936284251: 1 46 912 270 6 436 51
6912796811: 7 37 899 82 650 28 4 9
137282561: 8 132 13 24 4 2 7 4 27
2774467: 49 3 666 8 2 774 5 37
2799169: 4 3 5 8 3 3 1 6 6 8 7 391
25355753280: 5 3 37 437 9 8 4 1 9 605
6859: 37 43 57 4 209 58
1989634596: 944 7 2 430 25 6 4 7 93
94301445: 303 4 464 331 433 2 3
4997376: 24 301 488 648
6730244: 668 78 424 4 5
23888189390: 7 9 189 457 2 878 5
8054503859: 6 5 87 5 932 739 42 59
4508: 68 7 6 1 8
12960: 7 1 3 134 2 9 2 1 84 3 9
47545: 94 94 5 5 11 1 39
468509: 117 90 516 3 54 1 4 1
33132974: 136 3 1 2 4 2 81 4 9 67 8
335211: 36 2 53 87
1393152: 8 971 29 629 4 6 8
551372987: 4 3 165 9 6 4 8 231 2 9 2
289352: 20 95 30 807 5 315 2
48241: 1 3 60 89 8 18 3 3 91
26457: 264 26 31
21312: 31 95 455 3 3 5 9 4
104014: 65 228 7 271
73649: 340 5 444 31 21 69 3 2
581256609638: 38 98 2 39 4 609 6 3 4 3
3313: 880 465 982 822 163
3524987991: 348 3 775 723 1 79 90
2003161924: 55 8 38 7 329 9 91 9 4
227766085398: 243 9 983 74 95 4 94
1573738: 864 1 1 8 3 9 4 5
1225301724: 1 7 4 77 56 3 74 95 4 3
10569342: 1 9 5 7 9 8 99 912 6 9 34
372249600: 3 144 592 50 4
7576416001: 64 986 96 296 81 5
1241: 2 6 5 5 4 1 7 1 75 880 19
38453844: 38 45 384 4
3919923: 4 727 8 1 6 4 3 7 4 7 8 35
12346626: 27 127 2 70 18 880 83
1380741466611: 769 6 3 5 7 69 95 3 1 1 2
47924803: 7 40 92 480 3
7075706: 827 46 53 9 9 14 8 4 87
243615: 686 71 4 8 5 17 8
6624: 4 555 97 6 58
298170180: 3 345 5 6 6 3 22 99 6
457484301: 97 824 59 94 487 97
75577385051: 98 797 410 855 7 236
489803: 7 75 70 5 25 316 1
437274394: 4 30 7 274 394
164238341121: 37 854 1 524 92 39 2 9
12720: 386 3 3 5 560 3 80 2 7 1
1454630436: 7 1 2 183 5 96 6 69 9 4
219969689: 1 61 6 61 40 3 8 9 6 8 3 6
160720: 41 980 4
3948228: 6 50 105 501 994 8 2 6
36667292: 531 3 4 4 63 69 206
3342: 26 78 3 6 9 30 2 5 8 430
30578506: 277 742 3 850 6
512028: 512 50 9 2 7
1116820: 5 470 5 4 2 95
53685674: 6 143 2 5 755 71 1 9 9 8
1035146743981: 6 6 3 939 5 324 9 1 961
24320006345: 200 380 32 63 45
8974: 9 2 28 29 42
2027: 51 609 710 629 28
47212610: 7 68 6 205 4 61 98 32
4887038772: 2 1 568 102 9 142 66 3
81593: 7 8 268 8 3 1 2 5 6 7 52
976963688: 2 1 3 5 2 8 3 534 8 77 9 6
1087998: 6 45 6 7 3 6 10 417 3 3 8
3685461: 82 8 61 5 90 7 1 1 33 61
6544: 35 6 198 1 16
305117254: 610 233 5 46 710
4312154929: 960 199 9 38 66 49
10980: 4 9 3 8 59 5 8 64 30 2
15196220: 26 494 680 256 554
1812500: 876 98 996 92 2 8 72
8654: 791 64 9 6 8
54194529: 774 2 7 510 22
3252600236: 3 18 3 6 3 5 1 1 40 236
8778363545604: 2 844 49 8 992 635 1 4
541583: 7 74 2 21 583
973: 5 4 5 63 809
367055688: 63 590 1 24 562
8989660: 4 4 65 8 5 1 4 4 85 6 5 2
273481832: 72 3 1 491 921 4 377
144416: 6 54 63 814 21
8398731276: 310 3 8 6 544 20 559
10285: 8 797 837 650 1
9720912: 4 86 20 910 2
1951884: 7 34 49 79 6 81 5 8 33
78474490: 72 6 474 483 7
191780: 4 4 83 83 6 1 7
14083858: 6 535 86 7 87 51 3
169532467: 7 636 7 20 1 1 68 7 2 2 7
511152683: 28 78 4 901 8 3 6 2 1 3
8258: 16 9 6 55 8
30671310385: 72 94 871 121 43
369823052445: 59 9 737 13 1 5 9 4 7 15
4610434480: 50 76 82 548 3 5 9 835
17336328591458: 27 96 1 82 31 957 2 57
480962: 37 19 424 474 486
174557: 6 45 5 1 4 633 5 25 1 5 8
1560947212: 504 474 33 9 34 11 2 1
616150: 8 804 32 365 15 2
21103008: 8 9 246 5 8 7 9 2 3 3 428
297921036: 4 9 608 103 6
5229345: 64 817 5 48
545929524: 1 4 9 523 8 8 333 87
888: 10 2 74
804375: 7 8 208 884 363 2 693
17571080: 496 492 9 97 8
1513531230: 5 753 402 452 778
23059: 2 5 600 14 8 7 5 99 7 1
9893779: 3 29 79 3 79
13816998: 4 3 35 96 14 88 995 3
119452126: 33 9 711 6 3 8 5 2 2 7
304380008: 9 391 801 950 8
79761428159: 280 4 8 62 1 7 9 7 3 4 4 2
13848187: 138 466 1 15 142 4
1330031: 3 664 363
1329489: 8 571 1 404 364 987
1002164664: 2 331 1 614 1 49 4
16187: 1 22 701 28 33 3
13343236: 545 785 88 300 44 3 3
17838: 43 4 2 117 4
423814950: 29 983 1 6 5 9 2 465
20895899: 78 556 266
370759: 62 1 7 582 24
6657: 2 14 372 1 85 7 611 1 2
44100596: 1 594 84 7 6 25 74 962
766963: 6 1 1 669 62
19756163682741: 91 54 22 981 8 82 741

View File

@@ -0,0 +1,9 @@
190: 10 19
3267: 81 40 27
83: 17 5
156: 15 6
7290: 6 8 6 15
161011: 16 10 13
192: 17 8 14
21037: 9 7 18 13
292: 11 6 16 20

View File

@@ -1,10 +1,11 @@
# AOC Day Script Day XX
# Date : 20XX.12.XX
# AOC Day Script Day 08
# Date : 2024.12.08
# Python Code
# Developer : David Bandeira
import sys,time
from helpingFunctions import *
from collections import defaultdict
setSampleMode(False)
@@ -13,13 +14,72 @@ aocYear = identifyYear(sys.argv[0])
path = getPath2Data(aocDay,aocYear)
filename = getFilename2Data(aocDay)
def identifyAntennes(data):
posAntennes=defaultdict(list)
maxY = len(data)
maxX = len(data[0])
for posY in range(maxY):
for posX in range(maxX):
dataValue = data[posY][posX]
if dataValue != '.':
posAntennes[dataValue].append((posX,posY))
return (maxX,maxY),posAntennes
def isinGrid(pos,maxPos):
return 0 <= pos[0] < maxPos[0] and 0 <= pos[1] < maxPos[1]
def calcAntiNodes(posAntA, posAntB,maxPos):
X1 = posAntA[0]
X2 = posAntB[0]
Y1 = posAntA[1]
Y2 = posAntB[1]
X3 = X1 + (X1-X2)
Y3 = Y1 + (Y1-Y2)
if isinGrid ((X3,Y3),maxPos):
return (X3,Y3)
return (-1,-1)
def findAntiNodes(maxPos,posAntennes):
posAntiNodes=set()
for keys, antenne in posAntennes.items():
for (X1,Y1) in antenne:
for (X2,Y2) in antenne:
if (X1,Y1) != (X2,Y2):
antiNode = calcAntiNodes((X1,Y1),(X2,Y2),maxPos)
if antiNode != (-1,-1):
posAntiNodes.add(antiNode)
return posAntiNodes
def bruteForceAntiNodes(maxPos,posAntennes):
posAntiNodes=set()
for Y in range(maxPos[1]):
for X in range(maxPos[0]):
for keys, antenne in posAntennes.items():
for (X1,Y1) in antenne:
for (X2,Y2) in antenne:
if (X1,Y1) != (X2,Y2):
dX1 = X - X1
dX2 = X - X2
dY1 = Y - Y1
dY2 = Y - Y2
if (dX1*dY2 == dX2*dY1):
posAntiNodes.add((X,Y))
return posAntiNodes
def taskA (data) -> int:
gameScoreA = 0
maxPos,posAntennes = identifyAntennes(data)
antiNodes = findAntiNodes(maxPos,posAntennes)
gameScoreA = len(antiNodes)
return gameScoreA
def taskB (data) -> int:
gameScoreB = 0
maxPos,posAntennes = identifyAntennes(data)
antiNodes = bruteForceAntiNodes(maxPos,posAntennes)
gameScoreB = len(antiNodes)
return gameScoreB
def task(task: int,data) -> int:

View File

@@ -0,0 +1,50 @@
..........M..........j.............y.....O........
...B...............q......m........lGO............
....................q......2.l.GQ...O.............
.....X.......................................4....
.....................q............................
....M......P...............xl.K.............2.....
....F.........L.......C.K..............m..........
..........FM......P....jy......m..........o...r...
..X.......P.....RL..............G..x..........4...
............L..........NC.....q...................
.....C.X...............K....y..........4..........
........S...R.............j.x.....V...4...........
.....................R..x.....V..i......m.........
...........................R.V......N.......X.....
.....F.........M......N......E....................
................v................T.......F......O.
.............................N...V.......Q........
...v.....................C.....i..................
......c.....W..n.w........................E.......
3...................c.....................Q..6....
...........h......................j...............
.......n.0......h.................E..............2
.v.............7.......120.....c..................
......n.0............w...........D.t.........E...r
....8..3......0.w.hP....z...D..T...............r..
.................f........T........G......eQ......
......f.n.....7..p................................
.....Y..7.......f......I......D......K............
............Uf....T..W.....D..r...i...............
......I...............................Z...........
....5....B.......b..............s..............Z..
..........d...W..Uwh.............c..........i.....
..I.3..Y......................e...................
.....p.b..........k......7........................
p...........k....I..b..........s..................
.....k.......o...........W........................
.A..Y..........U.................a........6.......
..A...Y.p...................................6.....
B......k..........................Z............u..
...3.....................s..............a.........
......A.........................g.....a...........
.......A....8...b.U......H....sS..................
.........................S1.............t.........
.....................9z..e.....5..1.g.u...........
.......................z....d....g....H.J....o.6..
........B................d.....u....9.J.H.........
.8........S.................u9.............J.....H
.....................Z5.............t1...........a
.....................e..v...................o..t..
.....8...............L.....z.............J........

View File

@@ -0,0 +1,12 @@
............
........0...
.....0......
.......0....
....0.......
......A.....
............
............
........A...
.........A..
............
............

View File

@@ -5,6 +5,7 @@
import sys,time
from helpingFunctions import *
from collections import defaultdict,deque
setSampleMode(False)
@@ -13,9 +14,61 @@ aocYear = identifyYear(sys.argv[0])
path = getPath2Data(aocDay,aocYear)
filename = getFilename2Data(aocDay)
def buildBlocks(data):
dataBlocks=[]
for inputData in range(0,len(data[0])-2,2):
dataBlocks.append((int(data[0][inputData]),int(data[0][inputData+1])))
dataBlocks.append((int(data[0][inputData+2]),0))
return dataBlocks
def expandDataBlock(inputData, dataBlock):
expDataBlock=[]
for i in range(0,dataBlock[0]):
expDataBlock.append(str(inputData))
for i in range(0,dataBlock[1]):
expDataBlock.append(None)
return expDataBlock
def cleanUpString(data):
data = deque(data)
res = []
while data:
value = data.popleft()
if value == None:
while data and value == None:
value = data.pop()
if value != None:
res.append(value)
return res
#def cleanUpString(data):
# for i in range(0,len(data)):
# if i >= len(data):
# break
# if data[i] == '.':
# for j in range(len(data)-1,0,-1):
# if i==j:
# return data
# if data[j] != '.':
# #data = data[:i]+data[j]+data[i+1:j]+"."+data[j+1:len(data)]
# data = data[:i]+data[j]+data[i+1:j]
# break
# return data
def checksumme(data):
ret = 0
for i in range(0,len(data)):
ret = ret+(i*int(data[i]))
return ret
def taskA (data) -> int:
expandedData=[]
gameScoreA = 0
dataBlocks=buildBlocks(data)
for i in range(len(dataBlocks)):
expandedData = expandedData + expandDataBlock(i,dataBlocks[i])
gameScoreA = checksumme(cleanUpString(expandedData))
return gameScoreA
def taskB (data) -> int:

67
2024/day09/day09a.py Normal file
View File

@@ -0,0 +1,67 @@
import sys
from collections import deque
def Checksum(arr):
total = 0
for n, num in enumerate(arr):
if num != None:
total += n * num
return total
L = open('/home/bandeira/git.bandeira/aoc/2024/day09/input.day09').read().strip().split('\n')
SPACES = []
FILES = []
l = L[0]
pos = 0
line = []
file = True
fid = 0
for ch in list(l):
if file == True:
line.extend([fid for _ in range(int(ch))])
FILES.append((fid, int(ch), pos))
fid += 1
else:
line.extend([None for _ in range(int(ch))])
SPACES.append((pos, int(ch)))
pos += int(ch)
file ^= True
LEN = pos
dq = deque(line)
nl = []
while dq:
h = dq.popleft()
if h == None:
while dq and h == None:
h = dq.pop()
if h != None:
nl.append(h)
print(Checksum(nl))
p2 = [None] * LEN
for item in reversed(FILES):
num, req, atpos = item
moved = False
for s in range(len(SPACES)):
spos, slen = SPACES[s]
if spos > atpos:
break
if slen >= req:
pos = spos
SPACES[s] = (spos + req, slen - req)
for _ in range(req):
p2[pos] = num
pos += 1
moved = True
if SPACES[s][1] == 0:
del SPACES[s]
break
if not moved:
pos = item[2]
for _ in range(req):
p2[pos] = item[0]
pos += 1
print(Checksum(p2))

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
2333133121414131402

View File

@@ -5,6 +5,7 @@
import sys,time
from helpingFunctions import *
from collections import defaultdict
setSampleMode(False)
@@ -13,13 +14,49 @@ aocYear = identifyYear(sys.argv[0])
path = getPath2Data(aocDay,aocYear)
filename = getFilename2Data(aocDay)
def createGrid(data):
grid = {}
for gridY in range(len(data)):
for gridX in range(len(data[0])):
grid[gridX,gridY]=int(data[gridY][gridX])
return grid
def findTrails(grid):
trails = {}
trailStartList = [k for k,v in grid.items() if v == 0]
return trailStartList
def findNextinTrail(pos,trail,grid,p2=False):
ret = []
trailX,trailY = trail
for moveX,moveY in [(-1,0),(0,-1),(1,0),(0,1)]:
try:
value = grid[(trailX+moveX,trailY+moveY)]
except:
value = -1
if value == 9 and pos == 8:
ret.append((trailX+moveX,trailY+moveY))
elif value == pos + 1:
ret = ret + findNextinTrail(pos+1,(trailX+moveX,trailY+moveY),grid,p2)
if p2 == False:
ret = list(set(ret))
return list(ret)
def taskA (data) -> int:
gameScoreA = 0
grid = createGrid(data)
trailList = findTrails(grid)
for trail in trailList:
gameScoreA += len(findNextinTrail(0,trail,grid))
return gameScoreA
def taskB (data) -> int:
gameScoreB = 0
grid = createGrid(data)
trailList = findTrails(grid)
for trail in trailList:
gameScoreB += len(findNextinTrail(0,trail,grid,True))
return gameScoreB
def task(task: int,data) -> int:

60
2024/day10/day10a.py Normal file
View File

@@ -0,0 +1,60 @@
import sys
import re
import heapq
from collections import defaultdict, Counter, deque
#import pyperclip as pc
def pr(s):
print(s)
# pc.copy(s)
sys.setrecursionlimit(10**6)
infile = sys.argv[1] if len(sys.argv)>=2 else '/home/bandeira/git.bandeira/aoc/2024/day10/input.day10'
p1 = 0
p2 = 0
D = open(infile).read().strip()
G = D.split('\n')
G = [[int(x) for x in row] for row in G]
R = len(G)
C = len(G[0])
def ways1(sr,sc):
"""How many different 0s can I reach going down from here?"""
Q = deque([(sr,sc)])
ans = 0
SEEN = set()
while Q:
r,c = Q.popleft()
if (r,c) in SEEN:
continue
SEEN.add((r,c))
if G[r][c]==0:
ans += 1
for dr,dc in [(-1,0),(0,1),(1,0),(0,-1)]:
rr = r+dr
cc = c+dc
if 0<=rr<R and 0<=cc<C and G[rr][cc] == G[r][c]-1:
Q.append((rr,cc))
return ans
DP = {}
def ways(r,c):
if G[r][c]==0:
return 1
if (r,c) in DP:
return DP[(r,c)]
ans = 0
for dr,dc in [(-1,0),(0,1),(1,0),(0,-1)]:
rr = r+dr
cc = c+dc
if 0<=rr<R and 0<=cc<C and G[rr][cc] == G[r][c]-1:
ans += ways(rr,cc)
DP[(r,c)] = ans
return ans
for r in range(R):
for c in range(C):
if G[r][c]==9:
p1 += ways1(r,c)
p2 += ways(r,c)
pr(p1)
pr(p2)

View File

@@ -0,0 +1,45 @@
123454078104569871014321021321012349878967874
002965169245678562105489110456701256767456983
411873254324329453456976522343812323454305432
320984589010012306567887431098943210563216761
458976673407873210698790346787654329874109850
367887654356912348787891245497645698556780943
656792343105401059678712312338562107649891234
343001643234332769589600404329431236032321104
102198756121049878465521565010120345121430213
234567987012156912374437674320345034560345412
126898776103457809983398983011276127672126703
045678945434967618812287034567689018984035894
034989876325898507600176127698548109123445665
121070165016785216010165018345630678006510778
015676234245234345323234509216721565217329889
104389892104101059654965432101892674398456788
010210743233298128760870123438984583212105998
327805654654567637201256754347673294303614854
476912348723498542112349861243100185454783763
585210239010101443009659870652231256765692152
694332108212012356788778778701645899801087001
783445098302345653299894389614556732112396503
612956789401298764108763210543678945013765412
107810987567889655895654101012109876894894321
016721076101910346781565092325012345765765010
145432345234581232690478783234540332345654321
298703876501698701541089654129651231056310145
387212965012787650132108543098774340987234236
456903454323456043236719612012589656891105687
125876561210798101045898703343478797650112793
034329870325887232784387643296556788943289832
105610711456976545693211234187645019850176541
612789804567803456789800105098732134567654320
523898714326512101234764306789678325478956010
630145625613456780345605219812569210329547854
549234034702102395653216984503431678017632903
678432129899801234764567893689120589098701012
569562101234710109803891012778021432176512343
450691032105676541012764569865434501089400154
541782145694589132123453678345123671078321965
432679238785410016787652101254010982361267873
121018019856321125696545610763010973450398654
038967025657689434545236789892129887650367743
127652134768976521430129865430034796341459812
234543089867987010321010178921015601232378103

View File

@@ -0,0 +1,8 @@
89010123
78121874
87430965
96549874
45678903
32019012
01329801
10456732

View File

@@ -5,6 +5,7 @@
import sys,time
from helpingFunctions import *
from functools import lru_cache
setSampleMode(False)
@@ -13,13 +14,50 @@ aocYear = identifyYear(sys.argv[0])
path = getPath2Data(aocDay,aocYear)
filename = getFilename2Data(aocDay)
lookup={}
@lru_cache(maxsize=None)
def laserStone(stone):
if stone == 0:
return [1]
elif len(str(stone))%2 == 0:
l = len(str(stone))
stone=str(stone)
j = int(l/2)
return [int(stone[:j]),int(stone[j:])]
else:
return [int(stone)*2024]
def taskA (data) -> int:
gameScoreA = 0
stoneRow = [int(stone) for stone in data[0].split(' ')]
for i in range(25):
print ("Loop:" + str(i) + " = " + str(len(stoneRow)))
listStone=[]
for stone in stoneRow:
newStone= laserStone(stone)
listStone = listStone + newStone
stoneRow = listStone
gameScoreA = len(stoneRow)
return gameScoreA
def taskB (data) -> int:
gameScoreB = 0
stoneRow = [int(stone) for stone in data[0].split(' ')]
for i in range(75):
print ("Loop:" + str(i) + " = " + str(len(stoneRow)))
listStone=[]
for stone in stoneRow:
try:
newStone = lookup[stone]
except:
newStone= laserStone(stone)
lookup[stone] = newStone
listStone = listStone + newStone
stoneRow = listStone
gameScoreB = len(stoneRow)
return gameScoreB
def task(task: int,data) -> int:

52
2024/day11/day11a.py Normal file
View File

@@ -0,0 +1,52 @@
from functools import cache
from sys import argv
MAX_DEPTH = 75
def parse(src):
'''Convert the input to a list of integers.'''
return [int(x) for x in src.split()]
def count_digits(num):
'''Count the digits of num in base 10'''
total = 0
while num > 0:
total += 1
num = num // 10
return total
@cache
def expand(stone, depth=0):
'''Traverse the 'timeline' depth-first and return the number of stones
created by blinking at stone from depth to MAX_DEPTH blinks.'''
while depth < MAX_DEPTH:
if stone == 0:
stone = 1
depth += 1
continue
digits = count_digits(stone)
if digits % 2 == 0:
mask = 10 ** (digits // 2)
left = stone // mask
right = stone % mask
return expand(left, depth + 1) + expand(right, depth + 1)
stone *= 2024
depth += 1
return 1
def main(stones):
'''The total number of stones produced after 75 blinks'''
return sum(expand(stone) for stone in stones)
if __name__ == '__main__':
# pass the path to the puzzle input as the first argument
print(main(parse(open('/home/bandeira/git.bandeira/aoc/2024/day11/input.day11').read())))

View File

@@ -0,0 +1 @@
0 89741 316108 7641 756 9 7832357 91

View File

@@ -0,0 +1 @@
125 17

34
2024/day12/day12a.py Normal file
View File

@@ -0,0 +1,34 @@
with open("/home/bandeira/git.bandeira/aoc/2024/day12/input.day12", "r") as file:
lines = file.read().strip().split("\n")
n, m = len(lines), len(lines[0])
graph = {i + j * 1j: c for i, r in enumerate(lines) for j, c in enumerate(r)}
for i in range(-1, n + 1):
graph[i - 1 * 1j] = graph[i + m * 1j] = "#"
for j in range(-1, m + 1):
graph[-1 + j * 1j] = graph[n + j * 1j] = "#"
visited = set()
def dfs(visited, node, color, dir):
if graph[node] != color:
if graph[node + dir * 1j] == color or graph[node - dir + dir * 1j] != color:
return 0, 1, 1
else:
return 0, 1, 0
if node in visited:
return 0, 0, 0
visited.add(node)
area, perimeter, sides = 1, 0, 0
for d in (1, -1, 1j, -1j):
a, p, s = dfs(visited, node + d, color, d)
area, perimeter, sides = area + a, perimeter + p, sides + s
return area, perimeter, sides
ans1, ans2 = 0, 0
for node in graph:
if node not in visited and graph[node] != "#":
area, perimeter, sides = dfs(visited, node, graph[node], 1)
ans1 += area * perimeter
ans2 += area * sides
print(ans1, ans2)

View File

@@ -0,0 +1,140 @@
GGGGOOOOOOOOXXXXXXXXXXXXXXXXXSSSSSSSSSSSWWWWWWWWWWYYYYYYYYYYYYYYVVVVVVVVVVVVVVAGEEEEEEEEGGGGGGGGGGGGGEEBEQEYYYYYYYYBSSSBBBBBBBBBBBBBBBBBBBBB
GOOOOOOOOOOOOXXXXXXXXXXXXXXXXSSSSSSSSSSWWSWWWWWWYWYYYYYYYYYYYYYYYPVVVVVVVVVVVVVVEEEEEEEEGGGGGGGGGGEGGEEEEEEYYYYYYYYBBBBBBBBBBBBBBBBBBBBBBBBB
GGGGOOOOOOOOOXXXXXXXXXXXXXXXSSSSSSSSSSSWSSWWWWWWYYYYYYYYYYYYYYYYYYVVVVVVVVVVVVVVEEEEEEEEGGGGGGGGGEEEEEEEEEEEYYUYYYYBBBBBBBBBBBBBDBBBOOBBBBBI
GGGGGOOOOOOOXXXXXXXXXXXXXXXSSSSSSSSSSSSSSSQQWWRWYYYYYYYYYYYYYYYYYYVVVVVVVVVVVVVVEEEEEEEEGGGGGGGGGNEEEEEEEEEEYUUUUUUBBBBBBBBBDDDDDBBBOOBBBBII
GGGOOOOOOOOOXXXXXXXXXXXXXSSSSSSSSSSSSSSSSSQQQRRRYYYYYYYYYYYYYYYYYYYVVVVVVVVVVVVVEEEEEEEEGGGNGGGGGNTTEEEEEEEEUUUUSSSBBBBBBDDDDDDDDDDOOOBBBBBI
GGGGOOOOOOOXXXXXXXXXXXXXXSSSSSSSSSSSSSSSSRMMQRRRYYYYYYYYYYYYYYYYYYYVVVVVVVVVVVVVEEEEEEEEGGNNGGGGGNTTEEEEEEEEEUUSSQQQOBDDDDDDDDDDDDDDOBBBBBBB
GGGGGOOOOOOXXXXXXXXXXXXXXSSSSSSSSSSSSSSSRRRRRRRRRJQQYQYYYYYYYYYYYVVVVVVVVVVVVVVVEEEEEEEEGGNNNNNGNNNEEJUUUUUUUUUUQQQQQDDDDDDDDDDDDDDBBBBBBBBB
GGGYGYOOOOOOXXXXXXXXXXXXXXXSYYSSSSSSSSSRRRRRRRRRJJJQQQCYYYYYIVYBBVVVNNNNNVVVVVVVEEEEEEEEGGNNNNNNNNNEJJUUUUUUUUUUQQQQQQQDDDDDDDDDDDDBBBBBBSSK
GGGYYYOOOOOYYYXXXGGXXXGGGGGYYYYYSSSSOSSRRRRRRRRRRQQQQQQYYYEEIIIBBVVVNNNNNVVVVVEEEEEEEEEEGGGNNNNNNNNNNJGGUUUUUUUUNQQQQQYDDDDDDDDDDDDSSKSSSSSS
GGGGGYYOYOOYYXXXGGGGGGZGGGYYYYSSSSSSSSSSRRRRRRRRAVVQQQYYYYEIIIBBBVVVNNNNNNVVEEEEEEEGGGGGGGGNNNNNNNNNJJGGUUUUUUUUUQQQQQQDDDDDDDDDDDDDSSSSSSSS
GGGGGYYYYYYYYYXXXXGGGGGGGGGGYYYSSSYYYSSRRRRRRRRRVVVQQQQIYYIIIIIIBBVNNNNNNNVVEEEEEEEUUUGGGGGNNLGNNNNGGGGGGUUUUUHHQQQQTQQDDDDADDDDNDBBBSSSSSSS
GGYGYYYYYYYYYYXXXXGGGGGGGGGGYYYYYYYRRSRRRRRRRRRRRRVVVQQIIVIIIIIIIGNNNNNNNNMMEEEEEEEEEGGEEERRRGGGGGGGGGGUUUUUUUHGQSQTTTCDDDXXDDDDNDBSSSSSSSSS
YYYYYYYYYYYYYYXXXGGGGGGGGGGGYYYYYYYRRRRRRRRRRRRRRRVVVVQQQVXIIIIIQGNNNNNNNNUMEEEEEEEEEEEEEEEERGGGGGGGGGGUUUIUUHHHHTTTTTCDDDXXDDDDNNSSSSSSSSSS
YYYYYYYYYYYYYYYXXGGGGGGGGGGGGYYYYTRRRTRRRRRRRRRRRRRVVVVVVVIIIGIGGGGNNNNNNNNAEEEEEEEEEEEEEEEERGGGGGGGGGGIIUIIGGHHHTTTTTCDDDXXXXNDDNSSSSSSSSSS
YYYYYYYYYYYYYYYXGGGGGGGGGGGGGGGGYTKTTTTRRRRRRRRRRRVVVVVVVVVVIGGGGGGGNNNNNNZMMEEEEEEEEEEEEEEERRRGGGGGRRIIIIIIIIOHHTTTTTTTXXXXXXNNNNSSSSSSSSSS
YYYYYYYYYYYYYYYGGGGGGGGGGGGGGGTTTTTTTTGTRRRCRRRUUUUUUUUUVVGVGGGGGGGGGNNNNMMMMMMEEEMEEEEEEERRRRGGGGRRRRRIIIIIXITHHTTTTTSSSXXXXXNUUNSSSSSSSSSS
OOYYYYYYYYYYYSYGGGGGGGGGGGGGGGGGGTTTTTTTTCCCRRRUUUUUUUUUVVGGGGGGGGGGGGGGTTMMMMMEEEMMEEEEEEERRRGRRRRRRRRIIIIIXTTTTTTTTSSSXXXXXXUUUNNNSSSSSSSS
OYYYYYYYYYYYSSGGGSSSGGSGGGGGGGGTZTTTTTTTTCCCCCRUUUUUUUUUVVVTGGGGGGGGGGGGMMMMMMMMMMMEEEEEEDDTTRRRRRRRRRBIIIIITTTTTTTSSSSSXXXXXXUUNNNNSSSSSSSS
OYYYYYYYYYYYSSSSSSSSSSSSGGGGGHGTTTTTTTTTTTTCCCYUUUUUUUUUZVNOOGGGGGGGGGGGGMMMMMMMMMMEEEEEUTTTTRRRRRRRRRBIIIIIPTTTTTSSSSSSXXXXXUUUNNNNNNSSSSSS
OOYOYYYYYSSSSSSSSSSSSSSSGGGGGHHHTTTDTTTTTCTUUUUUUUUUUUUUODOOOGGGGGGGGGGMMMMMMMMMMMMZUUUUUTTTTTTRRRRRRRBBIIIBBBBTTSSSSSSSSXXNNUNNNNNNNNNSSSSN
OOYOOYYYGSSSSSSSSSSSSSSSGGGGGHHHHTTTTTZCCCTUUUUUUUUUUUUUOOOOOOOGGGGGGGGYMTMMMMMMMMMMUUUUATTTTTTRRRRRRRBBBBBBSBBSTTSSSSSSSSXXNNNNNNNNNNNSNNNN
OBOOOOYBGGSSSSSSSSSSSSSSTGUGHHHHHHHTTTCCCCCUUUUUUUUUBBBOOOOOOOOPOOGGGGGYYYMMMLMMMMMMUUUUAATTTTTTRRRRRRBBBBBSSDSSTSSSSSSSSSXNNNNNNNNNNNNNNNNN
BBBOOYYBGSSSSSSSSSSSSSSSTTIKIHRHHHIIECCCCCCUUUUUUUUUBBBOOOOOOOOOOOIOGGYYYYYLLLMMMMMMUUUUATTTTTTTRRRRRRRBBBBSSSSSSSSSSSSJJJJNNNNNJNNNNNNNNNNN
BBBBBBBBBBSZSSSSSSSSSSSSIIIIIRRRRHISCCCCCCCUUUUUUUUUBOBBBOOOOOOOOOOOOOYYYYYYLLMMMMMMMUUUGGTTTTTTGRRRRRRBBBBSSSSSSSSSSSSJJJJJJJJJJNNNNNNNBBNN
BBBBBBBBBBSZSSSSLSLSSSSSIIIIIRRRIIIICCYCCCCUUUUUUUUUBOBBSOOOOOOOOOOYYYYYYYYYLLUUUMZMMUUUUGKTTGTTGGRRRRRRBBSSSSSSSSSSSSSJJJJJJJJJJJNBBBBBBBNN
BBBBBBBBBVSSSSSSLLLLSSIIIIIIRRIRIIIAACCCCCTUUUUUUUUUVOOBSOOOOOOOOOTTYYYYYYLLLUUUUUUUUUUUGGGTGGGGGGGGRRRRBBSSSSSSSSSSSSSJJJJJJJJJJJJJBBBBBBNN
BBBBBBBBBSSSSSSSLLLLLIIIIIIIRIIRIIIJAAJJCCCUUUUUUUUUOOOOOOOOOOOOOOYYYYYYYYYLLUUUUUUUUUQUGGGGGGGGGGGCCRRRBBSSSSSSSSSSSSSJJJJJJJJJJJJJBBBBBBBN
BBBBBBBBBSBBSSSLLLLLAAAILIIIIIIIIJJJAJJJCJJUUUUUUUUUVVVOOOOOOOOOOYYYYYYYYYYYYYUUUUUUUUQQGGGGGGGGGGGGCRCCSSSSSSSSSSSSSJJJJJJJJJJJJJJBBBBBBBBN
BBBBBBBBBBBSSSLLLLLLLLLLLLIIIIIIJJJJJJJJCJJUUUUUUUUUVVVOOOOOOOOOOYJJYYYYYPYYYNNUUUUUQQQGGGGGGGGGGGGCCCCCSSSSSSSSSSSHSSJJJJJJJJJJJJJBBBBBBBNN
BBBBBBBBBBBSSSSLLLLLLLLLLLIIIIIIXXJJJJJJJJJUUUUUUUJJVVVLQQQOOOOOOOOJYYYYYPPPPPNNUUUUUQQQUGGGGGGGGGGGCCCCSSSSSSSSSSSHHSJJJJJJJJJJJJJBBBBBBBBB
BBBBBBBBBBBGSSLLLLLLLLLLLIIIIIIIXXJEEJJJJJJUUUUUUUJJJVVLQQXQOOOOOOUYYYYYYPNPPPNPPPUUUQQQQGGGGGGGGGGGCCSSSSSSSSSSHHHHHSOJJJJJJJJJJJJBBBBBBBBN
BBBBBBBBBBPWLLLLLLLLLLLLLIIIIIIIXXXXEDDJJJJUUUUUUUJJJJQQQQQQQQQQQOUUYYYYYQPPPLPPPPOOQQQQGGGGGGCCCGGCCCSSSSSSSSSSHHHHHOOOJJJJJJJJJJJBBBBBBNBN
BBBBBBBBWWWWWWALLLLLLLLLIIIIIIIXXXXXXDDJJJVUUUUUUUJJJQQQQQQQQAAUUUUUUUUYYQPPPPPPPPOSSSSSSSGGGGCCCCCCCCCCSSSSSHHHHHHHHHOOOJJJJJJJJJJJBBNNNNBN
BBBBBBBBBBBWWWALLLLLLLLLLIIIIIIIXDXXXDDDVVVVVVVJJJJJJQQQQQQQAAAUUUUUUUYYYYPPPPPPPPPSSSSSSSGGICCCCCCCCCSSSSSSSSSSHHHHHOOOOJJJJJKKJJJJLSNSNNNN
BBBBBBBBBBWWWWJJJLLLLLLLLLLIIIIIDDDXDDVIIVVVVVVVJJJJJTQQQQQQAUUUUUUUUUUUYUUPPPPPSSPSSSSSSSGGGCCCCCCCCCCSSSSSSSSHHHHGHOOJJJJJJKKJJLJLLSNSNNNN
BBBBBBBBBWWWWJJJJJLLWLRJSIIIIIDDDDDDDDVVVVVVVVVPJJJJQQQQQQQQQGUUUUUUUUUUUUPPPPPPPSSSSSSSSSGCCCCCCCCCCCSSSSSSSSSSSSSSMJJJJJJJJJJLLLLLLSSSNNNN
BBDDBBBDBWJJJJJJJJJJJJJJJIIIIIDDDDDDDDVVVVVVVVVVVJJQQQQQQQQQQQUUUUUUUUUUUUPPPPPPPSCSSSSSSSGCCCCCCCCCCCCSSCSSSSSSSSSSJJJJJJJJJJJLLLSSSSSSSSNS
BPDDDDDDWWWJJJJJJJJJJJJIIIIIIIWDDDDDDDVVVVVVVVVVJJJQQQQQQQQQQQJUUUUUUUUUUUUUPPPPPPCSSSSSSSCCCCCCCCCCCCCCCCCSSSSSSSSSPJJJJJJJJJJJLLLSSSSSSSSS
PPPNNDWWWWWJJJJJJJJJJJJIIIIIIWWWDDDDDDDDVVVVVVVVJJQQQQQQQQQJJJJUUUUUUUUUUUUPGPPPDDSSSSSSSSSSJJCCCCCCCCCCCSSSSSSSSSSSSJJJJJJJJJJJJSSSSSSSSSSS
PNNNNNNWWRWJJJJJJJJJJJJJIIIIIWWWWDDDDDDDCVVVVVJJJJJJQJQJQJJJJJJUUUUUUUUUUUPPPPPPDSSSSSSSSSSACCCCCCCCCCCCCSSSSSSSLSSSJJAJJJJJJJOOOOSSSSSSSSSS
PPNNNNNWRRWWJJJJJJJJJJJIIIIIIWWWWDDDDDDDCVVVVVVJJJJJQJQJJJJSJJJUUUUUUUUUUUPUFFPPDDSVSSSSSASAAACCCCCCCWWOSSSSSSSSSSSSSAAJJJAJJTSSSSSSSSSSSSSS
PPNNNNNNNRWRRJJJJJJJJXJIIIIIIWWWWWDDDDDDDVWVVVVVJJJJJJJJJJJSJJJLLUUUUHUUUUUUFFPPFSSFSSSAAAAAAACCIIIJCWWWWSSSSSSSSSSSAAAAAAAAATTSSSSSSSSSSSSS
PPNNNNNNRRRRJJJJJJJJXXXIIAIWWWWWWHDDADDIIVWWWWVJJJJJJJJJJJJSSSSSSUUUUUUUUUUUUFFJFFFFFFAAAAAAAAAIIIIIWWWWWSUUUUUUUUUAAAAAAAAAATTSSSSSSSSSSSSS
NNNNNNNNNRRRRJJGGJXXXXXIAAAAWWWWGDDDAADLLWWWLLMLLLJJJJJJJJSSSSSSSSUUUUUUUUUUUJJJJFFFFFFFFAAKAAAIIIIIWWWWLSUUUUUUUUUAAAAAAAAAATTSSSSSSSSSSSSS
NNNNNNNNNRRRRRGGGJXXXAAAAAAAWAWADDDDAADLLLWWLLLLLLLLJJJJJJSSSSSSSSSOPUUUUUKKCCJJJFFFFFFFFFAKKAIIIIIIWWWWWSUUUUUUUUUAAAAAAAAAATTTSSSSSSSSSSSS
NNNNNNNNNRRRRGGGGGXXAAAAAAAAWAWAADDAAAAALLLLLLLLLLLLJJJJJJJBSSSSSSSPPPPUUKBKCKFFFFFFFFFFKKKKKAAAAIIIIWWAAAUUUUUUUUUAAAAAAAAAATTTTSSSJJSSSSSS
NNNNNNNNNRRRRRRGGGGGAAAAAAAAAAAAAAAAYYYALLLLLLLLLLLJJJJJJJBBBSSSSSSSPPPKKKKKKKFFFFFFFFFFKKKKKKAAIIIIUUWAAAUUUUUUUUUAAAAAAAATATTTTTTSJJSSSSSS
NNNNNNRNRRRRRRRGGGGWAAAAAAAAAAAAAAAAYYYZLLLLLLLLLHHHJJJJJJBBBSSSSSPPPPPPPTKKKKKKKKKKKFKKKKKKKKKLLIIIIIWWWYUUUUUUUUUAAAAAAATTTTTTTTJJJJJSJSJS
NNNNNRRNRRRRRRRGGGGGGGGAAAAAAAAAAAAYYYYYLLLLLLLLLLHHHHJJJBBBFSXSSSSPPPPPPPCKKKKKKKKKKKKKKKKKKAALLIIIIILZYYUUUUUUUUUAAAAAAATTTTTTJJJJJJJSJJJS
SQQNUURRRRRRRRRGGGGGGGGGAAAAAAAAAAYYYYYLLLLLLLLLLLLHHHJJJJBBBBBBSSPPPPPPPPKKKKKKKKKKKKKKKKKKKAALLIIIWWLZYYYYYYYAAAAAAAAAAATTTTTTJEJJJJJJJJJS
QQQQQUUUURRRRRGGGGGGGGGGAAAAAAYYYYYYYYYLLLLLLLLLLLLHHHYJJJBBBBBBDPPPPSPPPAKKKKKKKKKKKKKKKKLKAALLLLLLLLLLYYYYYYYAAAAAAAAAATTTTTTJLJJJJJJJJJJE
VQQQQQUUURRRRGGGGGGGGGGGGAAAAAYYYYYYYYYLLLLLLLLLLLLHHYYYYNBBBBBBDPPPPSPPPAKKKKKKKKKKKKKKKKLAALLLLLLLLLLLLLYYYYYAAAAAAATTATTTTTTJJJJJJJJJJJJJ
VVVQQUUUUURRRRGGGGGGGGGGGAAAAAYYYYYYYYLLLLLLLLLLLLLHYYYYBBBBBBBBDPSSSSSPPAAKTKKKKKKKKKKLLLLLLLLLLLLLLLLLLYYYYYYYAAAAATTTTTTTTTTTJJJJJJJJJJCJ
VVVVUUUUTRRRRRRGGGGGGGGGAAAEAYYYYYYYYYLLLLLLLLLLLLLYYYYYBBBBBBEBDSSSSSSSAAATTKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLYYYYYYAAAAAAATAZZZZTTTJJJJJJJJJJM
VVVUUUUUTTRRRRRRGJGGGUGXRRRERRRRYYYYYYYLLLLLLLLLLKYYYYYYYBBTWWEEWSSSSSSSSTTTTTTKKTKKKKLLLLLLLLLLLLLLLLLLLLFYYYYYYYYAAAAAAAZZZZZZZJJJJJJJJMMM
VVVUUUUUUTRRRRUUJJUUUUXXXRRRRRRRYYYYZZYYYLLLLKKKKKKYYYYYYYWWWWWWWSSSSSSSSWWTTTTTKTKKKKLLLLLLLLLLLLLLLLLLLLYYYYYYYYGGGGGGGGGGZZZZZZJJJJJJJMMM
VVVVUUUTTTRRRRUUUUUUUUXXXRRRRRRRVYZZZZZYYLLLLLKKKKYYYYYYYYWWWWWWWWSSSSSSSTTTTTTTTTTTKPPLLLLPZIZLLLLLLLLLLLYYYYYYYYGGGGGGGGGGZZZZZZZZZJJJJJMM
VVVVQUTTTTRTRRUUUUUUUUXXRRRRRRRVVZZZZZZZYYLLKKKKKKKYYYYWYYWWWWWWWWWSSSSSTTTTTTTTTTTTKPPLPPPPZZZZZLLLLLLLTTYYYYYYYPGGGGGGGGGGZZZZZZZZMMJMMMMM
VVVVVUTTTTTTRRUUUUUUUUUUURRRRRRRRRZZZZZZYGGLGKKKKKKWWWWWWWWWWWWWWWWWSSTTTTTTTTTTTTTTTPPPPPPPZZZZZZLLLLLLYYYYYYYYYPGGGGGGGGGGGGGGZZZZZMMMMMMM
VVVVVTTTTTTTRUUUUUUUUUUUURRRRRRRRBZZZZZZZGGGGKGKKKKWWWWWWWWWWWWWWWSSSVRTTTTTTTTTTTTPPPPPPPPZZZZZZNLLLLZZYYYYYYYPPPGGGGGGGGGGGGGGZZMMMMMMMMMM
YYYVTTTTTTTTRRUUUUUUUUUUURRRRRRRZBZZZZZZGGGGGGGGGKKKWWWWWWWWWWWWWVVVVVVTTTTTTTTTTTTTTPPPPZZZZZZZZNNNNLLPPYYYYYYPPPGGGGGGGGGGGGGGZZMMMMMMMMMM
YYYYYTTTTTTTTUUUUUUUUURURRRRRRRZZZZZZZZGGZGGGGGGKKKKWWWWWWWWWWWVVVVVVVVTXTTTTTTTTTTQPPPPPZZZZZZZZNNNNLNPPYYYYPYPPPGGGGGGGGGGGGGGZZZMMMMMMMMM
YYYYTTTTTTTTMMMUUUUHRRRRRRRRRRRRVZZZZZZZZZZGGGGBBBBKWWWWWWWWWWVVVVVVVVVVVVTTTTTTTTQQQPPPZZZZZZZZZZNNNNNPPYZYYPYPPPGGGGGGGGGGGGGGOOZZZZMMMMMM
YYVVIIETTTTTMMMUUUURRRRRRRRRRQCQQAAZZZZZZZGGGGGBBKKKKKMWWWWWWWWVVVVVVVVVTTTTTTTTTHQQZZZZZZZZZZZZZZNJNPPPPPYYYPPPPLLLLLLGGGGGGGGGOOZZZZMMMMMM
YYVIIIETTTTTTMMUUURRRRRRRRRRQQQQQQQQZZZZZZXGGGKKKKKKKMMMWWWWWWWWVVVVVVVVTTTTTTTTTTQQQZZZZZZZZZZJZZJJNJPPPPPYPPPPPLLLLLLGGGGGGGGGOOZZZMMMMMMM
VVVVVEETTTTTTTMMMMRRRRRRRRQQQQQQQMQXZZXXXXXGGKKKKKKKMMMMMMWWWWWWWVVVVVVVTVTTTTTTTTQQQQQZZZZZZZZJJZZJJJPPPPPYIIPPPPLLDLLGGGGGGGGGZZZZZMZMMMMM
VVVJVEEGTTTTTMMMMMRRRRRRRRRQQQQQQQXXXZXXXKKKGKKKKKKKMMMMMMWWWWWWUUVVVVVVTVTTTTTTTTQQQWQQQZZQZZZJJJJJPPPPPPIIIIIIIPPLLLLGGGGGGGGGVZZZZZZZMMMM
VVVVOEEEEETTTMMMMMMRRRRRRRRQPQQQQQXXXZZXXKKKKKKKKKKKMMMMMMMMWWWWWUBBVVVVTVTTTTJTWWWWQWWQQQZQZZZJJJJPPPPPPPPIIIIIPPPPPLLLLHHOOOOOZZZZZZZZMMMM
VVVVVVEEETTTTMMMMMMMRRRRRRPPPQQQQXXXXXXXXKKKKKKKKKKKMMMMMMBMBWBBBBBBVVVVVKKUUTJJWWWWWWWQQQQQQZJJJJJPPPPPPPPPPIPPPPPPPHHHHHOOOOOOOZZZZZZZZZMM
VVVVVVEEEETTTMMMMMMMRRRRRPPPPAQQXXAXXXXXXAAAKKKKKKKMMMMMMMBBBBBBBBBBBKKKKKKUUUWWWWWWWWWQQQQQQZZJJJJJJPPPPPPPPPPPPPPPPHHHHHOOOOOOZZZZZZZZZMMM
PVVVVVSEEEEEMMMMMMMMMRRRRPPPPAAAAAAAXXXXXAAAAAAAKARMMMMRRMHBBBBBBBBBKKKKKKUUUWWWWWWWWWWWQQQQQZZJJNJPPPPPPPPPPPEEPPLPHHHHHOOOOOOOZZZZZZZZZMMM
VVVVVVSEEEEEUUUUUMMMMMRRRPPPPAAAAAAAXXXXAAAAAAAAAARMRRRRRRRRBCBBBBBBKKKKKKKWWWWWWWWWWWWWQQQQQNNNNNJPPPPPPPPPPPEEZPPHHHSSHOOOOOOOZZZZZZAZAAMM
VVVVVVVUUHHHGGUUUUMMMMRPRPPPPAAAGKKAAXXAAAAAAAAAAARRRRRRRRRRVBBBBBBBKKKKKKKWWWWWWWWWWWWQQQQQQNNNNNJPPPPPPPPPPPEEEPPEEHSSOOOOOOOOOZZZZZAAAAMM
VVVVVVVUUHHHGHUUUUUUUUPPPPPPPGGGGKKAXXAAAAAAAAAAAARRRRRRRRRRRBBBBBBBBKKKKKKUTWWWWWWWWWQQQQQQQQNNNJJPPPPPPPPPPPREEEEESSSSSSOOOOOOOZZZZZAAAAAA
VVVVVJVUUHHHHHUUUUUPPPPPPPPPPGGGKKGXXXAAAAAAAAAAAARRRRRRRRRRREEBBEEEBBKKKLKTTTTWWWWWWWWWQQQQQQQQNJJJJJPPPPPPPPEEEEEEESSSSOOOOOOOOOOZZAAAAAAA
VVVVVJVUUHHHHHHUUUUPWWPPPPPPPPGGGGGGXXAAAAAAAAAAAAARRRRRRRRRREEWWWWWWWWKKKTTTTTWWWWWWQQQQQQQQQQNNNNJJJPPPPPPPEEEEEEEESSSSOOOOOOOOOOWAAAAAAAA
UUUUUUUUUUHHHUUUUUPPPWPPPPPPPPGGGGGGXXAAAAAAAAAAAYRRRRRRRREEEEFWWWWWWWWKKTTTTTTWWWWWWQQQQQQQQQQUUNNJJJJJJPPPEEEEEEEOSSSSSNNNNNNONOOOAAAAAAAA
UUUUUUUUUHHHHUUUUUPPPWWPPPPPPPGGGGZZAAAAAAAAAAAAAYYRRRRREEEEWWWWWWWWWWWKKKKKKKKKKWWWWQQQQQQQQQQUYNNYYYJJJPPPXEEEEEOOOSSONNNNNNNNNNNAAAAAAAAA
UUUUUUUUHHHHHHUUUUUUUWWPPPPPPPPGGGPPAAAAAAGZAAZZYYYRRRRRREEEWWWWWWWWWWWKOKKKKKKKKIIIIQQQQQQQWWUUYYYYYYYJJYXXXEEFOYOOOOOOONNNNNNNNNNAAAAAAAAA
UUUFEFBBBHWWUUUUUUWWWWWWWPPQPPPPPPPPEAAFAAZZVZZZYYYRRRRREEEFWWWWWWWWWWWWWWWWWWWWKIIIHQQQQQQQWWUUYYYYYYYYYYXXXEXOOOOOOOONNNNNNNNNANAAAAAAAAAA
FFUFFFBBBBWWWWUUUWWWWWWWWPPQQQPPPPPPPPYZZZZZZZZZYYYFREEEEEFFWWWWWWWWWWWWWWWWWWWWKIHIHQQQQQWWWWYYYYYYYYYYYYXXXXXOOOOOOONNNNNNNNNNAAAAAAAAAAAA
FFFOFFFBBWWWWUUUWWWWWWWKKQPQQQPPPPPPPPYYZZZZZZZZZYFFEEEEEFFFFWWWWWWWWWWWWWWWWWWWKIHHHQQQQQWWWWWWWYYYYYYYYYYYYYOOOOOOOONNNNNNNNNNNAAAAAAAAAAA
FFOOFFBBBWWWWWWWWWWWWKKKKQQQQQPPPPPPPPPYYZZZZZZZZZFFEEEEEFFFFWWWWWWWWWWWWWWWWWWWKHHHHQHHHWWWWWWWWWWWYYYYYYYYYIOOOOOOOOOONNNNNNNNNEAIIAAAAAAA
FFFFFFFBFFFWWWWWWWWWWKKKKQKQPQPPPPPPPPPPPZZZZZZWWWFFFFFFFOFFFWWWWWWWWWWMKKKKKKKKKHHHHHHHWWWWWWWWWWWWYYYYYYYIIIIOOOOOOONNNNNNNNNNEEEEEIAAAAAA
XFFFFFFFFFFWWWWWWWWWWWKKKKKQPPPPSSPPFPPZZZZZZZZWWWFFFFFFFFFFFWWWWWWWWWWKKKKKKKKKJJJHHHHHHWWWWWWWWRYYYYYYYYYIIIIIOOOOOONNNNNNNNNEEEEEEAAAAAAA
XFFFFFFFFFFFFWWWWWWWWKKKKKKKSPPSSSSSSSPPZZZZZWWWWWFFFFFFFFFFFWWWWWWWWWWKKKKKKKKKJJTTYHHHHHWWWWWWWWJYYYYYYYIIIIIIOOOOONNNNNNNNNNEEEEEENAAAAAA
FFFFFFFFFFFWWWWWWWWKKKKKKKKPSSSSSSSSSSPZZZZZZZZWWWWFFFFFFFFWWWWWWWWWMMKKKKKKKKKKJJJTYHHHHWWWWWWWWWYYYYYYYYIIIIIIOOOOOONNNNNNNNNEEREEEEAAAAAB
FFFFFFFFFRRRRRRRWKKKKKKKKKPPSSSSSSSSSZZZZZZZZZZZWWWFFFFFFFFWWWWWWWFFJJKKKKKKKKKKJJJJYYYYHWWWWWWWWWWWYYYYYYYYIIIIOOOOOOONVVNNNEEEEEEEEEAATABB
FFFFFFFFFFRRYRRRKKKKKKKKKKKKDSSSSSSSSZZZZZZZZVWWWVVFFFFFFUFWWWWWWWVFFJKKKJJJJJJJJJJJYYYYYFWWWWWWWWWWYYYYYYYYIIIIOOOOOOOOAVVNNNEEEEEEEEEEEAEB
FFFFFFFFFFRRRRRRRVKKKKKKKKKSSSSSSSSXSSZZZZZZZVVVVVVFFFFFFUFWWWWWWWVVVJJJJJJJJJJJJJJFYYYYWWWWWWWWWWYYYYYYYYYIIIIIIOOOBBVOVVVVVEEEEEEEEEEEEEEE
FFFFFFFFFFFRRRRRRVRKKKKKKKKKKSSSSSSSSZZZZZZZRRVVVVZZFFVVVFFWWWWWWWVVVJJJJJJJJJJJJJNNNNNWWWWWLWWWWYYYYYYYYIIIIIIIIIOBBVVVVVVVVVEEEEEEEEEEEEEE
FFFFFFFPPPRRRRRRRRRRKKKKKKKKKSSSSSSSSSZZZZZZRRVVVVVZZZVVVVVWWWWWWVVVJJJJJJJJJJJJJJJJNNNNWWWWWLLWLLLLLLYIIIIIIIIIIMMBBVVVVVJJJJJEEEEEEEEEEEEE
FFFFFFFPPPRRRRRRRRKKKKKKKKKKKKSSSSSSSSHZZZZZRVVVVVVVVVVVVVVVVVVVVVVVVVJJJJJJJJJJJJJJJNNNNNWWWWLLLLLLLLIIIIBIIIIIMMMMBVVVJJJJJJJJEEEEEEEEEQED
FFFFFFRPPPRRRRRRRRRKKKKKKKKKKHHSHSHHLLBXZBRRRRRVVVVVVVVVVVVVVVVVUVVVVJJJJJJJJJJJJJJJNNNNNWWWWWLLLLLLLLIIIBBBIIIIMMMMBVVJJJJJJJJJJJEEEEEEEEED
FEFFFFRPPPRRRRRRRRRKKKKKKKKAHHLHHHHHBLBBBBRRRRVVVVVVVVUUVUUUUUUUUUBBBBBJJJJJJJJJJNNNNNNNNWWWLLLLLLBLBBBSSBBBBBIIMMMMMVFJJJJJJJJJJJJJEEEEEEEE
EEBBBFRPPPRRRRRRRRRRHKKKJKKJJHHHHHHHBBBBBBRRVRRVVVVVVUUUVVUUUUUUUUUEBBBBBBJJBBBNNNNNNNNZNWWWLLLLLLBLBBBBBBBBBIIIMMMMMMEAJJJJJJJJJHJJEEEEEEEE
EEBBBBRPPPRRRRRRRRRRHHHHJKKJCHHHHHHVBBBBBBBRVVVVVVVVVUUUUUUUUUUUUUUBBBBBBBBBBBBNNNNNNNZZZWWWWLZLLLBBBBBBBBBBOOIIIIMDDMEEJJJJJJJJJJJJOJQQEQSE
EEBLBMMPPPRRRRRRRRRRHHJJJJJJCHHHHHHVBBBBBBBVVVVVVVVVVUUUUUUUUUUUUUUBBBBBBBBBBBBNBBNNNNNZZWWWWWZZZBBBBBBBBBBOOOIIIIDDDMEDJJJJJJJJJJJJJJQQQQQH
EEBBBBBPPPRRRRRRRRRRRHHJJJJJJHHHHHVVBBBBBBYYVVVVVVVVVUUUUUUUUUUUUUUBBBBBBBBBBBBBBBNNNZZZZZZZZZZZZBBBBBBBBOOOOOIIIODDDDEDJJJJJJJJJJJJJJQQQQQH
EEEBBBBPPPRRRRRRRRPPPJJJJJJJJJHHHHVBBBBBBBVVVVVVVVVVVVUUUUUUUUUUUUBBBBBBBBBBBSBBBZZZZZZZZZZZZZZZZZBBBBBOGOOOOOOOOOODDDDDJJJJJJJJJJJSSQQQQQQQ
BBBBBBBBJBRPPRRRRRPPPJPJJJJJJJJKHVVBBGGBGBGGVVVVVVVVVVVUUUUUUUUUUUBBBBBBBBBBBSBXXZZZZZZZZZZZZZZZZBBBBBBOOOOOOOOOOODDDDDDJJJJJJJJJJJQQQQQQQQQ
KBBBBBBBBBDPPPRRRPPPPPPPPPPJJJJKHHVBBHGGGGGVVLVVVVVVVVUUUUUUUUUKKUKBBBBBBBBBSSSSSSSZZZZZZZZZZZZZZBBBBOOOOOOOOOOOOODDDDDDDDDDJJJJJJJJQQQQQQQQ
KBBBBBBBBBDPDPRRPPPPPPPPPPPJJWJJHWBBBHHGGMGVVVVVVVVVVVVUUUUUUUUKKKKBBBBBBBBSSSSSSSSSZZZZZZZZZZZZBBBBBBOOOOOOOOOOOIOODDDDDDDDDDDDDQQQQQQQQQQQ
BBBBBBBBBBDDDPRPPPPPPPPPPPPJPWWWWWWWHHHGMZZZZZZZZVVVVVVHKKKKKKKKKKKUEBBBBBBSSSSSSSSSZZZZZZZZZZZZBBBBBBOOOOOOOOOOOOOODDDVDDDDDDDDDDQQQQQQQQQQ
BBBBBBBBBBDDDDDDPPPPPPPPPPPPPWWWWHHHHHHHMZZZZZZZZVVBVVVHCKKKKKKKKUUUUGGBBBSSSSSSSSSSZZZZZZZZZZZZZZOOOBOOOOOOOOOOOOOOVVVVDDDDDDDDDDDDDQQQQQQQ
BBBBBBBBBDDDDDDDPPPPPPPPPPPPPWWWHHHHHHHMMZZZZZZZZVVVQQCCCKKKKKKKKUUUUUBBBBYYSSSSSSNZZZZZZZTZZZZZOOOOOOOOOOOOOOOOOOOVVVVZZZZDDDDDDQQDDQQQQQQQ
BBBBBBBBBBDDDDDDDPPPPPPPPPPPWWWWHHHHHHHHHZZZZZZZZWWMMQCCCCCKKKWKUUUUUUUBBBBYYSYSSSSSZZZZZZTTTTTTTSOOOOMOXOOOOOOOOOOVVVVVZZZZDDDDDQQDQQQQQQQQ
MBBBBBBBBJDDDDDDDDLPPPPPPPPPPPPWHHHHHHHHHZZZZZZZZMMMMCCCCKKKKKKKUUUUUUUYYYYYYYYSSSSSZZZZZTTTTTTTTOOOOOOOXOOOOOOOOOOVVVVVZZZZZZDDQQQQQQQQQQQQ
MMJJJJJJJJJJDJJDDDLLLLLPPAQQPQQHHHHHHHHHHZZZZZZZZMMMMCCCCJKKDDDDUIUUUUUYYYYYYYYSSUUZZZZZZTTTTTTTAAOOOOOOOOOOOOOOOOBVVVSSSZZZZDDDDDDQQQQQQQQR
MMJJJJJJJJJJJJJJJLLLLLLLPAQQPQQQQQHHHHHHHHGGMMMMMMMMMNCCCCCCDDDDFFUUUUUYFFYYYYYYSZUZZZZZTTXTTJJJJJOOOOOOOOOOOOOOOBBVVVSSSSZZDDDEEDEQQQQQQQQR
MMJJJJJJJJJJJJJJJJJJLLLLPAQQQQQQQQHHHHVVVHGGMMMMMMMMMMMCCCCCDDDDDFFFUUFYFFYYYYYZYZZZZZZZZZJJJJJJJOOOOOOODLOOLLROOBBBVVSVVSSSEEEEEEEQQQQRQRRR
MMJJJJJJYJJJJJJJJJLLLLLLQAQQQQQQQQHVVHVVVGGGGMMMMMMMMMMMNCCCWDDWDFFFUFFYFFYYYYYZZZZZZZZZZZJJJJJJJOOOOOOOLLLLLLLOBBBVVVVVSSSSEEEEEEEQQQQRRRRR
MMMJJJJJJJJJJJJJJLLLLLLLQQQQQQQQVVHVVHVVVGGMMMMMMMMMMMMMMNCSWDDWWFFFFFFFFFFYYYYZZZZZZZZZZZZYYYYJJOOOOOOLLLLLLLLLLVVVVVVYESSSSEEEEEEEFERRRRRR
MMJJJJJJJJJJJJJJJLLLLLQQQQQQQQQQVVVVVVVVVVVMMMMMMMMMMMMMMMCSWWWWWFFFFFFFFFFYYYZZZZZZZZZZZJAYYYYJJJOOOOALQLLLLLLLKVVVVVVYEEEEEEEEEEEEEERRRRRR
MMGGJJJJSSJJJLJLJLLLLLLQQQQQQQQQQQVVVVVVVVVVMMMMMMMMMMMMMWSSWWWWWFFFFFFFFFFYYYZZZZZZZZZZZJJYYYYJJBOOOOOOSSLLLLLKKVVVVVVEEEEEEEEEEEEEEAERRRRR
MMGGJJSSSSSJJLLLLLLLLLLQQQQQQQQQQVVVVVVVVVVVMMMMMMMMMMMMMWWWWWWWWFFFFFFFFFFFYYYZZZZZZZZZZZYYYYYJJJWOOOCCSSLLLELKKKVVVVVEEEEEEEEEEEEEEEERRRRR
MMGGJSSLLSLLJLLLLLLLLLLQQQQQQQVVVVVVVVVVVVVVVJJMMMMMMMMWWWWWWWWWWFFFFFFFFFYFYYYYZZZZZZZZZZYYYYYJJJJSSSSCSSSLLEEVVVVVVVVVEEEEEEEEEEEEEEERRRRR
MMMMSSSLLLLLJLLBLLLLLQLQQQQQQVVVVVVVVVIVVVVZZJJMMMMMMMWWWWWWWWWWFFFFFFFFFYYYYYYYZZZZZZZZZZYYYYYJJJSSSSSSSSSSEEEVVVVVVVVVEEEEEEEEEEEEEEEERRRR
SSSMSLLLLLLLLLBBBLLLLQFFFFFFFFFVVVVVVVIVVVZZJJJJJMMMMMMMWWWWWWWWFFFFFFFFFFFYYYYYZZZZZZZZZZYYYYYJRJSSSSSSSSSSSRRRRRRRRVVVVWEEEEEEEEEEEEERRRRR
SSSSSSLLLLLLBBBBBBBBBBFFFFFFFFFVVVVVVVIIIIZZJJJJMMMMMMMMWWWWWWWWFFFFFFFFFFFYYYYYYYFFWZZZZLYYYYYJRRSSSSSSSSSSSRRRRRRRRVVVWWEETEEEEEEEGEEERRRR
SSSSSLLLLLLLLBBBBBBBBBFFFFFFFFFVVVVVIVIIIZZZJJJJXXXXWMMMWWWWWWWWAFFFFFFFFFFFVVYYVVFFFFFLLLYYYYYJRRSSSSSSSSSSSRRRRRRRRVVVVEEIEEEEIEEEEERRRRRR
SYYSSLLLLLLLBBBBBBBBBBFFFFFFFFFFFFVIIIIISZZJJJJJXXXWWMMMMWWWWWEFFFFFFFFFDFVVVVVVVAFFFFFFFLYYYYYJJSSSSSSSSSSSSRRRRRRRRVVVVIIIEEEIIEEEXERRRRRR
SYYYSSSSLLSLBBBBBBBBBBBFFFFFFFFFFFVIIIISSSSSJJJXXXXWWWWWWWWWWXXFFFFFFFFDDDDVVVVVAAFFFFFFFFYYYYJJJSSSSSSSSSSSSRRRRRRRRNNVVVIEEEIIIIRRRRRRRRRR
SYSSSSSSSSSSBBBBBBBBBBTFFFFFFFFFFFVIIIIIISSSSXXXXXXWWWWWWWWMWXXFFFFFFFFDDDDVVVVVVAFFFFFFFFYYYYJJJSSSSSSSSSSSSRRRRRRRRNIIIIIIIIIIIIRRRRRRRRRR
SYSSSSSSSSSBBBBBBBBBBBTFFFFFFFFFFFIIIIIISSSXXXXXXXXXWWWWWWWMXXXMMFFFFFDDDDDVDVVVVFFFFFFFFYYYYYYJYSSSOOSSSSSSSRRRRRRRRNNIIIIIIIIIIRRRRRRRRRRR
SSXXXSSXSSSSSUBBBBBBBTTFFFFFFFFFFFIIPPPPXSSSXXXXIXXXWWWWWMMMMMMMMFFFFDDDDDDDDVVVFFFFFFFFFYFFYYYYYYYOOOSSSSOSURRRRRRRRRRIIIIIIIIIIIRRRRRRRWRW
SSSXXXXXSSSSUUBBBBBBBTTTTTFFFFFFFFAPPPPLLLLLLLLLIIWWWWWWMMMMMMMMMMFMMDDDDDDDDDDQQFFFFFFFFFFYYYYYOOOOOOOOOOOUUUGGGGRRRRRNLIIIILIIIIRGWRRRWWWW
SSSXXXXXSSSUUUUBBBBBBTTTTTTTBBBBBAAAPPPLLLLLLLLLIIIWWWWWIIIMMMMMMMMMMDDDDDDDDDDQZFFFFFFFFFFYYYYYOOOOOOOOOOOUUGGGGDRRRRRNLLLLLLIIIIGGWWWWWWWW
SSSXXXXXSSSUUUUBBBBTTTTTTTTTBBBBBAAFFFFLLLLLLLLLIIIIIIIIIIIMMMMMMMMMMDDDDDDDQQQQQQFFFFFFQFFYYYBBBOOOOOOOOOUUGGGGGDRRRRRNNLLLLLLLIIGGGWWWWGWW
SSXXXXXXSSSUUUUUBBBTTTTTTTTTTRRBBBABFFFLLLLLLLLLIIIIIIIIIIIMLMMMMMMMMDDDDDDDQQQQQQFFFFQQQFQYQBBBBOOOOOOOOOOOOGGGGDRRRRROLLLLLLLLLIGGGWWWGGWW
XXXXXXXXSSUUUUUUUUUGGTTTTTTTTRRRRBBBFFFLLLLLLLLLIIIIIIIIILLLLLMMMMMMMDDDDQDDDDQQQQFQFFQQQQQQQQBBBOOOOOOOOTTYGGGGOORRRRROOLLLLLLLLGGGGGGGGGGG
XXXXXXXXSXUUUUUUUUUGGTTTTTTTTRRRBBBBFFFLLLLLLLLLIIIIIIIIIILLLLMMMMMMMDDVDQQQDQQQQQQQFQQQQQQQQQBBOOOOOPOJJYYYGGGGGORRRRROOLLLLLLLLLGGGGGGGGGG
XXXXXXXXXXUUUUUUGGGGGTTTTTTTRRRRRBBBBFFFFFFFFFFFIIIIIIILLLLLVLLLLMLMVVVVVFQQQQQQQQQQQQQQQQQQQQBBOOOOOOOJJJYYYYGYGOOOOOOOOOOLLLLLLIGGGGGGGGGG
XXXXXXXXXUUUUUUUUGNNGGTTTTTTTTKRBBBBBBFFFFFFFFFIIIIIIIIIVLLLVVLLLLLLVVVVVFFQQQQQQQQQQQQQQQQBQBBBOOOOOOJJJJYYYYYYGOOOOOOOOOOLLGGGGGGGGGGGGGGG
XXXXXXXXXUUUUUUUGGNNGGTTTTTTTTTRBBBBBBFFFFFFFFFIFFIIIRRRVVVVVVVLVVLLVVVVFFFQSQQQQQQQQQQQQQQBBBBBBBOOOJJJJJYYYYYYGGGOOOOOOOLLLLGGGGGGGGGGGGGG
XXXXXXXXXXXUUUUUUNNNNTTTTTTTTTTBBBBBBBBRFFFFFFFFFFFIIRRRVAVVVVVLVVVVVVVFFFFFQQQQQQQQQQQNQZQBBBBBBBOOOJJJJJYYYYYYYGOOOOOOOOOLLLGGGGGGGGGGGGGG
XXXXXXXXXXXUUUUNNNNNNNTTTTTTTTTTTBRRRRRRFFFFFFFFFRRRRRRRVVVVVZZVVVVVVVVVVFFFFFQQQQQQQQQQQQBBBBBBBBOOOJJJJJYYSYYYYGGOOOOOWOOLLLGGKGGGGGGGGGGG
XXXXXXXXXXXXUUUNNNNNNTTTWTTHHHTTHRRRRRRRFFFFFFFFFRRRRRRRVVVVVVZZVVVVVVVVVFFFFFFQQQQQUQQBBBBBBBBBBBORBQQQQQQQYYGGYGGOOOOOWOOLLLLGGGGGGGGGGGGG
XXXXXXXXXXXXUUNNNNNNNNTWWTTHHHHHHHRRRRRRRRRRRRRRRRRRRRRRRVVVOVVVVVVVVVVVVVFFFFFFFFFQBBBBBBBBBBBBBBBBBWWQQQQQYGGGGGOOOOOOOOOLLLLGGGGGGGGGGGGG
XXXXXXXXXXXUUUUNNNNNNNNNWWTTHHHHHHRRRRRRRRRRRRRRRRRRRRRRRVOOOOVVVVVVVVBBVVFFFFFFFFFFBBBBBBBBBBBBBBBBBWQQQQQQYGGGGGOOOPPPOLLLLLLLLGGGGGGGGGGG

View File

@@ -16,11 +16,12 @@ filename = getFilename2Data(aocDay)
def taskA (data) -> int:
gameScoreA = 0
return gameScoreA
return gameScoreA
def taskB (data) -> int:
st=time.time()
gameScoreB = 0
return gameScoreB
return gameScoreB
def task(task: int,data) -> int:
score=0
@@ -39,9 +40,9 @@ def main():
print ('please check file %s on path %s' % (filename, path))
quit()
st=time.time()
print ('Day '+aocDay+': Tasks 1: '+ str(task(1,data))+ ' executation time: ' + str(int((time.time()-st)*1000)) + 'ms')
print ('Day '+aocDay+': Tasks 1: '+ str(task(1,data)[0])+ ' executation time: ' + str(int((time.time()-st)*1000)) + 'ms')
st=time.time()
print ('Day '+aocDay+': Tasks 2: '+ str(task(2,data))+ ' executation time: ' + str(int((time.time()-st)*1000)) + 'ms')
print ('Day '+aocDay+': Tasks 2: '+ str(task(2,data)[0])+ ' executation time: ' + str(int((time.time()-st)*1000)) + 'ms')
if __name__ == "__main__":
main()