diff --git a/day9/1.py b/day9/1.py new file mode 100644 index 0000000..ee57ad4 --- /dev/null +++ b/day9/1.py @@ -0,0 +1,14 @@ +with open(r'day9/input.txt', 'r') as input: + lines = list(map(lambda x: list(map(lambda y: int(y),x.split(','))),input.read().split('\n')[:-1])) + +def surface(a,b): + return (abs(a[0]-b[0])+1)*(abs(a[1]-b[1])+1) + +best = surface(lines[0],lines[1]) + +for i in range(len(lines)): + for j in range(i): + best = max(best,surface(lines[i],lines[j])) + +print(best) + diff --git a/day9/2.py b/day9/2.py new file mode 100644 index 0000000..853a8eb --- /dev/null +++ b/day9/2.py @@ -0,0 +1,55 @@ +with open(r'day9/input.txt', 'r') as input: + lines = list(map(lambda x: list(map(lambda y: int(y),x.split(','))),input.read().split('\n')[:-1])) + +def surface(a,b): + return (abs(a[0]-b[0])+1)*(abs(a[1]-b[1])+1) + +inner = set() + +for i in range(len(lines)): + j = (i+1)%len(lines) + if lines[i][0] == lines[j][0]: + sign = 1 if lines[i][1] <= lines[j][1] else -1 + for x in range(lines[i][1],lines[j][1],sign): + inner.add((lines[i][0],x)) + else: + sign = 1 if lines[i][0] <= lines[j][0] else -1 + for x in range(lines[i][0],lines[j][0],sign): + inner.add((x,lines[i][1])) + +if lines[0][0] == lines[1][0]: + init = (lines[0][0]-1,lines[0][1]+1) +else: + init = (lines[0][0]+1,lines[0][1]+1) + +print(init) + +L=[init] +neigh = [[-1,0],[-1,-1],[0,-1],[1,0],[0,1],[1,1],[-1,1],[1,-1]] +while len(L): + sommet = L.pop(0) + if sommet not in inner: + inner.add(sommet) + for nei in neigh: + new = (sommet[0]+nei[0],sommet[1]+nei[1]) + if new not in inner and new not in L: + L.append(new) + +print("init done") + +def is_inside(a,b): + for i in range(min(a[0],b[0]),max(a[0],b[0])+1): + for j in range(min(a[1],b[1]),max(a[1],b[1])+1): + if (i,j) not in inner: + return False + return True + +best = surface(lines[0],lines[1]) + +for i in range(len(lines)): + for j in range(i): + if is_inside(lines[i],lines[j]): + best = max(best,surface(lines[i],lines[j])) + +print(best) + diff --git a/day9/input.txt b/day9/input.txt new file mode 100644 index 0000000..6de9a66 --- /dev/null +++ b/day9/input.txt @@ -0,0 +1,496 @@ +98418,50192 +98418,51404 +97889,51404 +97889,52598 +97505,52598 +97505,53817 +97618,53817 +97618,55025 +97538,55025 +97538,56250 +97566,56250 +97566,57527 +97861,57527 +97861,58695 +97425,58695 +97425,59747 +96491,59747 +96491,60979 +96474,60979 +96474,62182 +96292,62182 +96292,63253 +95629,63253 +95629,64604 +95907,64604 +95907,65699 +95338,65699 +95338,66689 +94517,66689 +94517,67992 +94526,67992 +94526,68999 +93791,68999 +93791,70245 +93603,70245 +93603,71118 +92623,71118 +92623,72323 +92324,72323 +92324,73312 +91609,73312 +91609,74462 +91180,74462 +91180,75647 +90785,75647 +90785,76375 +89675,76375 +89675,77406 +89043,77406 +89043,78623 +88656,78623 +88656,79826 +88216,79826 +88216,80401 +86982,80401 +86982,81670 +86595,81670 +86595,82291 +85456,82291 +85456,83125 +84571,83125 +84571,84170 +83899,84170 +83899,85263 +83254,85263 +83254,85798 +82084,85798 +82084,86784 +81325,86784 +81325,87488 +80320,87488 +80320,88169 +79303,88169 +79303,88472 +78015,88472 +78015,89422 +77206,89422 +77206,89967 +76112,89967 +76112,91240 +75477,91240 +75477,91500 +74207,91500 +74207,91836 +73003,91836 +73003,92462 +71965,92462 +71965,92953 +70857,92953 +70857,93430 +69746,93430 +69746,94493 +68884,94493 +68884,94368 +67518,94368 +67518,94855 +66409,94855 +66409,95127 +65224,95127 +65224,95686 +64134,95686 +64134,96270 +63040,96270 +63040,96976 +61963,96976 +61963,97089 +60729,97089 +60729,97274 +59519,97274 +59519,97739 +58360,97739 +58360,97026 +57012,97026 +57012,98118 +55933,98118 +55933,97599 +54648,97599 +54648,97622 +53435,97622 +53435,97790 +52232,97790 +52232,97869 +51022,97869 +51022,97663 +49810,97663 +49810,98471 +48578,98471 +48578,97728 +47388,97728 +47388,97837 +46165,97837 +46165,97799 +44946,97799 +44946,97268 +43788,97268 +43788,96977 +42611,96977 +42611,97318 +41324,97318 +41324,96853 +40176,96853 +40176,96807 +38941,96807 +38941,96020 +37888,96020 +37888,95929 +36659,95929 +36659,95403 +35555,95403 +35555,95293 +34316,95293 +34316,95009 +33126,95009 +33126,94327 +32088,94327 +32088,93976 +30920,93976 +30920,93317 +29887,93317 +29887,93149 +28620,93149 +28620,92600 +27530,92600 +27530,91700 +26636,91700 +26636,91685 +25236,91685 +25236,90459 +24556,90459 +24556,90008 +23402,90008 +23402,89285 +22423,89285 +22423,88957 +21153,88957 +21153,88139 +20234,88139 +20234,86939 +19634,86939 +19634,86144 +18720,86144 +18720,85852 +17347,85852 +17347,84914 +16545,84914 +16545,83748 +15981,83748 +15981,83245 +14745,83245 +14745,82306 +13954,82306 +13954,81137 +13435,81137 +13435,80172 +12693,80172 +12693,79387 +11720,79387 +11720,78255 +11197,78255 +11197,77079 +10760,77079 +10760,76008 +10192,76008 +10192,75166 +9262,75166 +9262,74251 +8425,74251 +8425,73325 +7577,73325 +7577,72066 +7343,72066 +7343,70964 +6826,70964 +6826,70065 +5867,70065 +5867,68714 +5905,68714 +5905,67641 +5318,67641 +5318,66562 +4725,66562 +4725,65430 +4260,65430 +4260,64043 +4608,64043 +4608,62905 +4208,62905 +4208,61736 +3915,61736 +3915,60698 +3049,60698 +3049,59476 +2937,59476 +2937,58321 +2480,58321 +2480,57064 +2625,57064 +2625,55885 +2269,55885 +2269,54685 +2021,54685 +2021,53466 +1950,53466 +1950,52236 +2130,52236 +2130,51035 +1524,51035 +1524,50178 +94727,50178 +94727,48597 +2170,48597 +2170,47378 +2085,47378 +2085,46133 +1770,46133 +1770,44966 +2390,44966 +2390,43767 +2567,43767 +2567,42601 +2960,42601 +2960,41332 +2726,41332 +2726,40179 +3158,40179 +3158,39001 +3446,39001 +3446,37674 +3165,37674 +3165,36637 +3993,36637 +3993,35579 +4671,35579 +4671,34363 +4842,34363 +4842,33250 +5322,33250 +5322,31905 +5220,31905 +5220,30702 +5520,30702 +5520,29576 +6013,29576 +6013,28676 +6963,28676 +6963,27640 +7606,27640 +7606,26480 +8020,26480 +8020,25717 +9123,25717 +9123,24226 +9014,24226 +9014,23538 +10194,23538 +10194,22562 +10912,22562 +10912,21427 +11412,21427 +11412,20565 +12285,20565 +12285,19571 +12984,19571 +12984,18427 +13517,18427 +13517,17733 +14570,17733 +14570,17071 +15634,17071 +15634,15862 +16133,15862 +16133,15044 +17036,15044 +17036,14403 +18096,14403 +18096,13476 +18897,13476 +18897,12771 +19890,12771 +19890,12242 +21013,12242 +21013,10968 +21576,10968 +21576,10790 +22940,10790 +22940,10133 +23952,10133 +23952,8814 +24555,8814 +24555,8727 +25925,8727 +25925,8091 +26956,8091 +26956,7711 +28124,7711 +28124,7110 +29173,7110 +29173,6168 +30071,6168 +30071,5505 +31115,5505 +31115,4914 +32198,4914 +32198,4882 +33494,4882 +33494,4440 +34629,4440 +34629,4109 +35802,4109 +35802,4274 +37113,4274 +37113,3409 +38134,3409 +38134,2997 +39289,2997 +39289,2721 +40480,2721 +40480,2302 +41647,2302 +41647,2788 +42959,2788 +42959,2096 +44092,2096 +44092,1984 +45310,1984 +45310,1700 +46515,1700 +46515,1991 +47756,1991 +47756,2097 +48976,2097 +48976,2002 +50191,2002 +50191,1992 +51407,1992 +51407,1772 +52638,1772 +52638,2642 +53796,2642 +53796,1850 +55090,1850 +55090,2096 +56294,2096 +56294,3011 +57389,3011 +57389,2887 +58637,2887 +58637,2967 +59860,2967 +59860,3418 +61005,3418 +61005,3399 +62264,3399 +62264,4330 +63264,4330 +63264,3958 +64647,3958 +64647,4794 +65653,4794 +65653,5424 +66711,5424 +66711,5246 +68083,5246 +68083,5995 +69091,5995 +69091,6679 +70114,6679 +70114,6906 +71351,6906 +71351,7903 +72203,7903 +72203,8090 +73480,8090 +73480,8712 +74526,8712 +74526,8958 +75808,8958 +75808,9939 +76631,9939 +76631,10853 +77479,10853 +77479,11322 +78639,11322 +78639,12151 +79539,12151 +79539,13199 +80251,13199 +80251,13429 +81648,13429 +81648,14471 +82356,14471 +82356,15101 +83438,15101 +83438,16016 +84254,16016 +84254,17101 +84886,17101 +84886,18284 +85386,18284 +85386,18866 +86559,18866 +86559,19505 +87704,19505 +87704,20972 +87810,20972 +87810,21926 +88552,21926 +88552,22550 +89774,22550 +89774,23797 +90104,23797 +90104,25032 +90414,25032 +90414,26014 +91118,26014 +91118,26855 +92091,26855 +92091,28061 +92409,28061 +92409,29098 +93043,29098 +93043,29972 +94050,29972 +94050,31145 +94423,31145 +94423,32270 +94902,32270 +94902,33566 +94920,33566 +94920,34609 +95617,34609 +95617,35825 +95815,35825 +95815,37010 +96088,37010 +96088,38260 +96094,38260 +96094,39290 +97001,39290 +97001,40450 +97424,40450 +97424,41705 +97364,41705 +97364,42884 +97719,42884 +97719,44094 +97893,44094 +97893,45345 +97652,45345 +97652,46544 +97888,46544 +97888,47736 +98442,47736 +98442,48981 +97675,48981 +97675,50192