From af9dc5628a0211206bf332c3851997acf5f508bb Mon Sep 17 00:00:00 2001 From: Andrew Ekstedt Date: Mon, 8 Dec 2025 06:27:09 +0000 Subject: [PATCH] day 8 --- day08/est.py | 24 ++ day08/input | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++ day08/old.py | 65 ++++ day08/sample | 20 + day08/sol.py | 113 ++++++ 5 files changed, 1222 insertions(+) create mode 100644 day08/est.py create mode 100644 day08/input create mode 100644 day08/old.py create mode 100644 day08/sample create mode 100644 day08/sol.py diff --git a/day08/est.py b/day08/est.py new file mode 100644 index 0000000..d0c18fe --- /dev/null +++ b/day08/est.py @@ -0,0 +1,24 @@ +points = [] +for line in open("input"): + x,y,z = map(int,line.split(',')) + points.append((x,y,z)) + +import math +def dist(p,q): + return math.sqrt(sum((x-y)**2 for x,y in zip(p,q))) + +import random +n = len(points) +min_dist = float('inf') +#for _ in range(n): +# a = random.choice(points) +for a in points: + b = random.choice(points) + d = dist(a,b) + if d == 0: + continue + min_dist = min(d,min_dist) + +print(min_dist) + + diff --git a/day08/input b/day08/input new file mode 100644 index 0000000..9360b21 --- /dev/null +++ b/day08/input @@ -0,0 +1,1000 @@ +9189,3574,10813 +41463,12814,3315 +84281,50235,51639 +20698,11641,88278 +3504,56768,83521 +92381,69947,16996 +29937,94780,71934 +47780,12205,30091 +17711,78233,14781 +39887,62570,33681 +55869,56243,93623 +67424,86438,73441 +99177,85158,73968 +85611,77473,76410 +13261,64156,15985 +84981,85692,23226 +26376,38114,9587 +14293,54868,55624 +17159,55949,39816 +96111,32587,35496 +51851,89458,56145 +71908,4156,1715 +21329,51425,46051 +80255,46149,97668 +69895,10427,52304 +17129,44714,57999 +52866,31438,98314 +79407,82226,22527 +69090,10323,53037 +42063,38032,25485 +11116,77983,87620 +33373,28157,98245 +56555,89315,26548 +63585,15293,92506 +93678,90117,57112 +65428,83358,60607 +21004,88937,58108 +6237,56803,180 +32199,73555,38372 +22296,85780,33024 +88578,30060,35064 +94255,19694,11055 +32143,50841,16582 +31339,96197,55653 +7591,82849,30991 +11116,22074,78658 +92787,72294,24393 +74962,39398,92322 +25457,65021,11412 +66905,95403,91576 +87950,49143,58840 +18490,83415,38057 +28946,48878,41434 +88727,93145,61956 +65239,32590,73435 +1702,48261,30755 +53925,1532,28152 +48288,59731,86094 +45692,33874,30851 +96333,5954,7232 +15616,31084,92306 +82,97293,57920 +98893,8336,8497 +89836,19180,763 +8414,51115,47405 +88760,32300,15555 +26904,3328,38913 +19635,70188,98201 +4978,60642,6814 +15808,54852,39730 +7789,17504,84213 +9034,31715,8236 +87892,12943,24986 +33622,40611,61042 +43898,14275,94869 +45141,3179,16631 +50026,77703,66392 +64344,40754,23114 +97380,31298,79693 +57283,77166,52313 +38908,92338,41531 +55705,46413,60487 +15388,91897,18912 +59921,60550,72421 +19291,22884,33858 +75978,69328,95231 +87861,43976,24406 +93118,72407,12329 +20444,77450,93100 +83644,84244,13778 +3279,72637,90289 +43993,96295,85053 +90878,18045,91439 +58179,16231,26719 +81999,79622,68585 +49807,20287,55142 +33908,23842,29706 +49608,28979,27455 +56320,25371,45529 +44637,45333,36278 +59704,62336,65179 +54155,40281,81307 +12625,47734,16363 +11675,45789,55699 +91084,7814,83058 +88923,6587,92751 +19408,19042,53942 +78960,88141,7617 +65018,10210,95992 +62451,38827,4734 +88974,74387,18457 +51612,41596,52687 +4332,4654,74499 +92147,31552,87691 +87372,37037,52260 +4807,82107,61273 +5144,73216,53303 +30660,62861,26274 +42067,10124,71728 +82007,7915,99522 +16599,27823,40714 +37512,95511,25347 +48986,80090,94151 +8019,56424,3676 +38115,96862,69693 +80953,32747,42315 +47101,49325,95270 +58972,69612,18665 +44014,29226,58226 +18560,44647,36044 +80668,50368,66181 +46348,76485,10757 +70508,7650,4390 +79122,31767,71757 +75587,88962,46951 +1668,98700,24377 +80838,9259,88059 +27910,68258,71416 +10045,69648,39450 +66962,89658,93450 +12243,3651,19717 +22218,13062,77846 +1507,7022,10440 +44920,62120,45554 +15529,18235,99109 +63709,77643,52691 +76995,54153,65695 +75543,67143,40526 +22498,74561,77736 +92628,35653,40172 +54234,52718,20725 +34016,53521,56130 +27416,48075,62892 +90244,83066,54410 +74273,47563,88067 +80361,56355,93985 +91121,84159,34357 +8563,47351,34126 +76308,11838,5994 +95666,53424,5826 +76226,14811,43259 +8506,77046,18040 +50990,2148,20096 +64523,54838,89665 +91038,29426,25072 +92387,56212,33017 +6338,41059,5514 +78610,94609,38602 +61177,18470,32533 +76196,4590,27517 +10451,95692,51530 +53725,10166,32509 +122,6328,256 +79203,78065,90314 +66402,55101,76719 +51177,89031,90242 +12849,37360,10192 +59733,45214,50721 +28811,79032,66798 +45402,40629,72176 +25899,62334,78599 +98219,15277,86162 +89273,99826,30238 +71328,98773,69808 +89297,68503,21839 +3238,47719,57255 +62961,65504,10746 +48042,58729,214 +73150,253,44767 +79196,11464,33348 +73624,53121,28927 +7331,6756,52502 +78076,65166,94638 +61328,46672,63613 +4754,99496,7118 +46765,63535,4938 +73118,16761,21791 +65163,38321,33294 +5072,63474,56248 +84157,62879,43590 +57871,45965,20732 +63712,49408,31907 +74397,76574,27934 +62873,48968,94536 +43513,12293,99926 +51036,4007,52464 +27508,63563,409 +62071,48218,14539 +47374,57920,52358 +60153,14110,57812 +28317,32215,26440 +11165,52886,32547 +70842,96484,1912 +15506,27701,53692 +92627,83023,13686 +19575,13621,63406 +64849,68126,61486 +34318,43124,27245 +86199,70262,82754 +79170,46539,22955 +885,35401,9520 +70685,2041,65520 +55871,30740,91229 +12990,9741,11767 +39481,35374,22711 +74324,91178,99464 +58187,65542,69642 +57297,35575,34597 +89186,43067,68253 +20520,64002,5510 +24240,22571,70351 +19429,33027,20103 +55181,74076,81015 +46531,35517,86960 +76359,47858,25989 +37982,12202,66367 +1474,10605,25737 +94843,15654,90784 +95488,95361,79948 +38742,66601,82569 +68927,68277,65702 +37118,74195,49390 +4636,56701,27637 +75537,63466,25916 +63740,91314,45074 +11209,78858,70737 +59205,72415,70178 +33257,96217,50449 +29034,23304,8369 +3521,9936,216 +18136,47519,69150 +56234,2818,25092 +43500,19561,66885 +11253,32540,2853 +58050,29288,24875 +21740,29652,31335 +23911,56768,16262 +14528,39864,40421 +6810,31276,15880 +70502,51177,85337 +97301,35150,73211 +22368,67590,63002 +32216,51830,3430 +15949,42875,18240 +18926,29193,42705 +54101,6384,83740 +68786,39265,53371 +5744,49735,95538 +45106,13097,32658 +8825,2755,36385 +91671,80842,74980 +94526,18271,19319 +87911,97397,83454 +19501,71123,22369 +16401,24796,50723 +89315,39488,73539 +29477,61310,79374 +99237,35035,74399 +79281,99543,95723 +49688,28924,84755 +16657,41117,11951 +59266,52537,903 +22293,42353,65919 +6648,92270,50598 +86787,45667,98431 +9407,50202,26317 +3167,41213,40064 +17259,58640,62656 +48397,64950,47397 +70908,18231,19548 +84174,83218,54448 +99233,24590,25491 +98735,33298,57074 +21069,92909,62503 +28919,74961,27997 +10090,29903,60384 +55877,13784,27390 +11860,45418,75169 +85073,94312,97725 +11406,69042,21794 +5479,10656,35090 +27962,91729,98224 +31339,67512,94793 +18728,41332,41793 +60974,60244,31584 +70299,57188,70777 +70847,64096,44861 +3328,18428,28070 +46537,32998,68199 +20876,52093,3756 +11343,18190,24513 +21448,92511,54196 +81169,27524,74414 +94917,8352,80372 +58645,25947,60254 +80568,94873,6242 +52373,96419,25845 +52974,69670,47513 +86502,23023,16215 +58324,97181,51650 +62357,69,53374 +94473,32628,46778 +28800,5231,90291 +7876,30360,18384 +38142,92395,99212 +5691,78154,64375 +63387,41897,71038 +71034,55809,63274 +59486,48177,4682 +89240,72808,15225 +38248,21594,5101 +76463,76016,46475 +51625,8029,76543 +63872,28709,71104 +96485,20189,79356 +91388,75447,46820 +50500,50440,80364 +26934,97255,64893 +26100,52615,35870 +80135,85365,63353 +99709,72803,30945 +6606,3519,64984 +31894,53066,50272 +77349,88573,68592 +14816,40264,19889 +65734,59726,94475 +61395,68941,14658 +25982,41412,56168 +22001,24593,40955 +27269,92928,40289 +24344,76889,60525 +45352,33222,61073 +75257,29356,45390 +76255,84970,46051 +9324,64452,31928 +60189,19052,6090 +96298,74037,5983 +12904,14602,40114 +3308,27679,6663 +32259,14268,29233 +91933,72104,62429 +23071,59955,14155 +65344,27699,57218 +28634,92740,89811 +48624,87129,7510 +38806,23885,28423 +48018,21552,22914 +39093,70090,5496 +7937,30191,97881 +54424,79768,83891 +26671,33050,20393 +15504,14675,89629 +375,80937,2632 +69575,57298,18752 +12205,86391,77705 +61934,20137,91758 +80091,76549,53140 +56216,38396,73313 +37463,71420,24874 +11048,979,79387 +16902,36859,18971 +2414,65580,32132 +17165,7640,84118 +2949,67027,74535 +83095,41946,94316 +13187,67534,20976 +57840,91395,60027 +51908,72421,93565 +25436,79678,49435 +42517,29156,77123 +6496,44230,53830 +76523,71892,56517 +52513,56019,41386 +66364,11474,59692 +67492,81771,97565 +54080,2211,86089 +45753,48878,21548 +63773,7198,49703 +27414,23076,90180 +81772,13493,14265 +30944,67480,55500 +61464,82835,52011 +22159,96191,96381 +19635,26178,44115 +24368,1289,39230 +80707,51625,39862 +72026,32370,54007 +3467,80477,67683 +2546,45499,57716 +47837,72530,31723 +35667,99542,1647 +43713,70422,40137 +82240,31123,64905 +39785,19440,5330 +77256,5136,45767 +28485,31742,32153 +43716,65941,43399 +11873,87829,98999 +61455,4171,7312 +78110,48036,83186 +77135,74780,26741 +29659,40713,30746 +44331,15032,29152 +24385,92405,18832 +82338,72171,84322 +12492,64771,54306 +95702,61708,56322 +21909,70012,66721 +44725,83537,99567 +10827,45350,32882 +97831,96361,75092 +20533,32303,52644 +44368,70524,35284 +29392,45391,28240 +19147,83467,79920 +8169,5745,6979 +17421,97340,18675 +75443,19430,99176 +60247,49552,30460 +60457,140,90848 +74898,75359,83537 +37169,26350,70771 +36616,78813,26312 +38592,15755,21149 +26638,37380,43213 +67618,51464,57887 +70816,2051,13192 +56672,59638,47841 +50955,57759,97893 +80248,73559,4104 +62038,26854,99792 +85347,63363,9664 +72814,53984,90314 +23588,40361,73565 +27146,62671,4777 +76220,94009,63961 +55382,75452,49601 +44759,57215,18450 +32363,32005,24112 +30934,92952,81202 +97997,19583,12314 +29472,70151,41364 +74673,34851,52156 +16501,11943,97588 +55055,69494,89366 +4036,93441,99509 +16310,58636,58369 +52952,40348,92707 +18178,44098,87595 +42132,11746,17802 +12506,41084,4101 +96693,2153,70695 +22495,5478,73943 +54396,82329,20274 +13301,93993,30206 +81111,15505,69798 +66769,12086,40634 +75735,89010,74217 +24486,57028,91942 +90169,44084,58253 +57604,13733,41673 +57132,7646,8007 +14177,51999,9329 +58547,69294,25359 +66778,97298,98639 +23157,45404,91976 +81562,59298,21349 +57771,89952,81556 +5838,44005,39199 +61362,10862,9837 +18426,3237,24581 +28705,24640,5956 +87169,1074,31058 +57223,68181,35839 +95603,55936,70361 +10677,87667,44498 +30481,95510,1279 +466,71384,27409 +72718,98613,29837 +42565,17578,66869 +48800,86027,3745 +42061,69891,43532 +35765,92856,89473 +34790,15464,40223 +80083,13043,82200 +32222,15972,72321 +12394,45656,47918 +38921,56026,7149 +27049,36035,12229 +46349,13243,71853 +46194,47198,53351 +97219,53984,30775 +29661,43339,9882 +51336,97284,67514 +92675,63133,85984 +51862,67298,37800 +18910,77216,80011 +29791,89958,6052 +19198,62313,90059 +41817,29600,91186 +25743,84781,8729 +76308,23176,35807 +52797,28021,91071 +31440,43551,96492 +74304,81792,40877 +80013,53462,39674 +34811,56335,84858 +51213,6891,99220 +70627,28404,98414 +59354,53446,78988 +2622,39594,38253 +23132,11023,24127 +11123,96497,99570 +69825,99536,70458 +38251,96558,58736 +29923,24596,27448 +75163,13165,55826 +6242,13375,94354 +70569,28763,49880 +44385,65769,60627 +2461,37911,60375 +11371,82336,41077 +69155,3222,38625 +54739,28564,13906 +88625,49409,94599 +10222,6305,90895 +99165,91034,86698 +57646,97341,63712 +91822,12921,80443 +20872,78827,45720 +95365,67773,86656 +92324,44945,19235 +78496,49562,10534 +44373,4871,94934 +76164,18444,95829 +52481,71437,96269 +27951,50613,60119 +63289,58868,90533 +87206,12672,71300 +83869,9951,27634 +43821,25416,39171 +25832,1549,76411 +22464,90373,88836 +93125,75342,55508 +75800,28493,82175 +72056,9296,58726 +51219,62303,40109 +79242,80116,2083 +65572,75559,15646 +81446,79462,95117 +28016,88492,98475 +29252,51861,3977 +61303,3762,17700 +35943,95849,29900 +71695,35408,19476 +63346,43501,67516 +97116,89895,98587 +91242,20807,15064 +18681,60905,23148 +63882,28329,65036 +73368,83815,53021 +58820,97737,21111 +57649,1704,36635 +11841,54500,45240 +84008,52236,56744 +11475,15990,98094 +48042,89316,43157 +8490,3194,43425 +56043,83429,54689 +47917,43396,32715 +70362,4294,66066 +58260,17298,90874 +61830,84452,4589 +88858,34761,50594 +54746,90033,70567 +1547,71614,72970 +91750,12940,86896 +30887,74996,46751 +52057,95861,51344 +76988,59349,18143 +24425,30498,44088 +76151,11333,68633 +69033,29503,48933 +67384,61681,74078 +85732,23216,32133 +44523,7013,79543 +9793,33235,54793 +70672,91333,46950 +34104,10154,10732 +13083,21148,59807 +29264,70076,38586 +57478,42051,90291 +86896,64833,30711 +87572,10507,48026 +99775,95826,56923 +70983,36683,97634 +88917,14369,94903 +87562,3304,77258 +42467,39293,39361 +56255,19162,94887 +77402,94157,61376 +475,99747,46520 +16771,12493,18042 +86062,16260,99987 +32116,91505,59118 +74038,35012,96477 +11062,8401,89331 +85641,3977,44400 +83255,57358,50414 +36618,6625,45613 +63154,28238,33000 +37329,69120,302 +31887,95992,72911 +17390,84193,27880 +5329,63340,15789 +5248,59970,89879 +69754,1450,1330 +74193,92997,38710 +22655,29317,41515 +813,44096,35218 +99202,3414,1430 +55027,35128,35309 +64062,86971,85102 +8610,96055,40478 +65800,66167,95097 +47004,8198,55336 +97609,50367,15415 +60565,61222,15821 +5936,98574,42752 +45243,33395,82028 +96351,51420,79663 +96353,64941,86559 +88614,63426,22189 +18249,47837,71573 +12684,24811,77751 +77994,6365,36418 +59058,64351,28457 +68704,16620,83758 +98021,92669,90796 +45420,33586,14303 +15390,67149,91257 +25848,97970,94348 +44163,59620,65991 +52754,98199,66532 +17145,20330,50988 +42405,50623,77887 +22937,93008,76651 +17801,32551,16638 +13921,52992,15164 +63898,10766,4355 +34243,26747,28194 +41922,48073,1516 +26886,84192,39261 +47621,21070,99724 +8924,29465,28727 +16789,77082,33224 +27952,99804,12648 +12950,55608,47513 +63920,56898,77882 +67212,48987,10961 +58225,74599,46235 +32479,20726,10279 +51841,25744,94640 +85176,23160,76832 +56037,8938,35895 +26874,96725,91986 +56605,11729,29517 +74812,80024,34744 +26960,41978,38842 +5712,21681,45521 +49614,71466,18189 +48129,76541,25150 +65168,13611,40618 +25913,64866,16657 +19180,97054,34035 +13289,3207,91703 +91021,30638,54466 +591,45632,80459 +33644,11992,75396 +42223,38540,55984 +34355,16491,67772 +81043,68833,13028 +20749,99351,9033 +13801,67578,81462 +61135,93410,62644 +37600,1274,57900 +55552,83420,74555 +7495,29888,86815 +36838,9164,13164 +90485,47031,39779 +97979,15020,46407 +2757,74758,58356 +17280,42207,38649 +17947,13550,50167 +95108,7349,89971 +9882,66475,37974 +69463,65430,98456 +96557,35695,57634 +26279,20598,35812 +23207,66123,54418 +94931,80084,18124 +95719,44040,75748 +45096,93779,10664 +14578,59820,62261 +66168,16288,84072 +32768,52985,14373 +10218,23745,87367 +43259,31426,14799 +7982,18237,4280 +63570,3653,10856 +51207,53275,42674 +12692,97738,19150 +55211,55415,7674 +34213,5433,78960 +28915,84890,73171 +71168,83796,88655 +40099,21062,34251 +67208,15974,89050 +91530,86284,12375 +71600,84153,58329 +98992,35532,66875 +58017,11310,35536 +70363,29631,2416 +88774,76158,56001 +37412,90255,83331 +92529,87082,46823 +52973,6004,74108 +24741,95092,8883 +4374,81409,63622 +19706,22038,4754 +77505,17836,57419 +21592,50627,27147 +35504,28749,20637 +38963,42631,67897 +48268,29924,24983 +77664,87275,51074 +23374,13531,42345 +48835,27199,4823 +78845,83220,62157 +31331,9220,58610 +89327,66396,85904 +29499,9462,27333 +83814,56937,26827 +95666,10560,77644 +8744,52155,19391 +53572,7550,56007 +58095,92136,75800 +51986,5973,72211 +59844,9634,88739 +23496,31595,2387 +4546,31920,32961 +11840,68083,82322 +40244,25300,22618 +58039,46323,50718 +76922,46222,74306 +61155,6182,65747 +46892,56475,79579 +49315,36864,60859 +96951,55383,97745 +20240,25819,68267 +62214,58324,85179 +19329,3824,74214 +56970,21654,99524 +33171,96704,25014 +83749,6573,32891 +71384,34723,64513 +29877,35151,91392 +28233,46257,13883 +51724,57343,20459 +34890,10962,81271 +15408,6930,74496 +8818,27911,55665 +13398,32515,27432 +73737,12059,24440 +9211,12419,4209 +31316,93021,70349 +74484,73583,50376 +57333,63316,35240 +17700,46664,99995 +68779,33005,80221 +76027,97735,90190 +66272,83299,63862 +23362,53423,80867 +67785,38038,75754 +23561,92316,84959 +27359,14834,73141 +3021,30238,16742 +9082,32065,31794 +19533,45960,44461 +88716,1513,56577 +61187,27452,82663 +2456,87242,90006 +30553,48864,20376 +82753,28532,6673 +93132,8229,79749 +56614,2013,21292 +38508,32562,48988 +65272,26680,79974 +73812,97060,77773 +88225,33456,46979 +26735,16421,94848 +6507,28261,81556 +44986,29622,90300 +66327,98699,39157 +79294,87449,48294 +73742,17700,70276 +64157,1873,7286 +23316,23839,83553 +79884,39013,35494 +25699,83707,51885 +85459,61801,42378 +19448,98852,78841 +86617,8080,65004 +12393,17555,38305 +69128,64473,55170 +90197,49598,56058 +96055,78728,92560 +77864,18827,64760 +97130,27927,52012 +74590,24275,33776 +53393,9043,48633 +20157,38689,52252 +97116,52087,64550 +55666,2382,17593 +91290,10176,58423 +7321,76195,9583 +13891,49940,31865 +3039,14688,6005 +5705,79355,38403 +50040,27610,88936 +90651,54776,41134 +1856,38053,64577 +88358,5723,78918 +21638,96408,42323 +34550,10906,1588 +65742,28992,72988 +9718,20199,83 +11686,94068,96922 +487,89826,67613 +45213,44041,67613 +78076,12632,84272 +27976,82716,47930 +71260,47777,87078 +62700,77457,89200 +26475,54269,58657 +87046,30902,3668 +83335,12784,20088 +84495,21459,80355 +3625,27563,95836 +80426,16465,53730 +17646,54905,58751 +5452,19512,51258 +64039,13278,69830 +82990,25733,34468 +70694,8289,29255 +99853,67450,70581 +79488,25228,3258 +2832,68729,53279 +48999,19708,90276 +30268,3270,29195 +84372,22301,53926 +16387,75160,93543 +819,48395,65138 +2866,76950,40003 +44241,96071,54443 +6681,17659,43555 +53669,24950,84956 +83409,73846,62328 +14612,8798,55715 +30833,55953,86951 +59947,42490,44530 +12104,76103,93618 +68392,92925,57823 +776,29599,18731 +70466,37742,35817 +89074,70063,92964 +19696,85972,43314 +42215,61243,65103 +400,52012,85499 +94821,78443,62908 +88272,94981,971 +76830,55328,69617 +69316,40217,93585 +9354,35683,15254 +77464,20141,11485 +10479,97166,59333 +28431,55322,5893 +80095,3911,61010 +67481,27220,22767 +62051,30192,19973 +60629,91581,4686 +55273,61328,12633 +20690,73749,84295 +22392,26446,34882 +44580,23328,84416 +30015,35648,33289 +95011,49783,25762 +9269,86738,91141 +10863,46751,14413 +77567,60599,26009 +93224,1857,65813 +82246,77784,67847 +38499,60790,13182 +41004,78164,3864 +52790,99714,69309 +70906,84259,69043 +74608,38406,52130 +42559,22345,22870 +32702,34136,68377 +18097,61287,62428 +76139,63428,65050 +36867,3366,97950 +36790,14587,43800 +51404,91723,45517 +20636,47722,72218 +20148,34145,60656 +30717,61297,16579 +73226,35382,36562 +74854,54669,74276 +4030,93607,35391 +5781,91672,927 +52948,6067,54058 +73241,70663,89364 +30130,47496,80956 +84976,75527,13605 +72253,53494,47051 +87029,43938,6432 +22712,58295,26512 +19598,59892,6207 +66714,40859,34207 +68589,56296,60721 +81412,53119,81522 +65619,16999,78527 +53658,85768,67439 +70571,18568,21389 +74482,580,94521 +30425,41963,70256 +24386,67780,72515 +83077,63169,18505 +80017,39058,30447 +86122,79942,79693 +4327,11007,22724 +48169,98407,63786 +90385,15936,63675 +4486,70791,30701 +75571,21465,30654 +12494,87786,4991 +92194,90476,93601 +40142,42866,31617 +41522,88148,99269 +26798,11720,26501 +70554,19510,71901 +65803,22151,36905 +64707,22735,71765 +38927,22734,58282 +55879,10519,17019 +85037,13754,28527 +40846,3307,17746 +57312,51269,24161 +60808,11220,78283 +37580,84280,21367 +59813,64686,95542 +45299,40063,19645 +28807,4998,51338 +94010,50404,58699 +83618,54497,98634 +39794,82154,25030 +87744,99353,27710 +61350,45265,93190 +75131,47788,5168 +67980,8397,72581 +48437,40001,20507 +12234,84350,73494 +27546,64052,55401 +60085,62339,66780 +46213,65843,75392 +61926,75456,23002 +56201,72853,77941 +76989,15042,95242 +50262,8795,30286 diff --git a/day08/old.py b/day08/old.py new file mode 100644 index 0000000..2f3d9db --- /dev/null +++ b/day08/old.py @@ -0,0 +1,65 @@ + +import math +from math import floor, sqrt +from itertools import chain + +D = 4000.0 + +import math +def dist(p,q): + return sqrt(sum((x-y)**2 for x,y in zip(p,q))) + +def solve(input, limit, D=D): + points = [] + for line in open(input): + x,y,z = map(int,line.split(',')) + points.append((x,y,z)) + + def shrink(p): + x,y,z = p + return floor(x/D), floor(y/D), floor(z/D) + + m = {} + for p in points: + q = shrink(p) + m.setdefault(q,[]).append(p) + + def nearest(p): + mindist = float('inf') + minpoint = p + for r in near(shrink(p)): + for n in m.get(r,[]): + if n != p: + d = dist(p,n) + if d < mindist: + mindist = d + minpoint = n + return minpoint + + #for p in points: + # q = shrink(p) + # print(p, nearest(p), list(chain(*[m.get(x,[]) for x in near(q)]))) + + pairs = [] + for p in points: + q = nearest(p) + if p != q: + d = dist(p,q) + pairs.append((d,p,q)) + + pairs.sort() + print(len(pairs)) + print(*pairs[:10], sep='\n') + + +def near(q): + x,y,z = q + for dx in (-1,0,+1): + for dy in (-1,0,+1): + for dz in (-1,0,+1): + #if not (dx==dy==dz==0): + yield x+dx,y+dy,z+dz + +solve("sample", 10, D=350) +solve("input", 10, D=8000) + diff --git a/day08/sample b/day08/sample new file mode 100644 index 0000000..e98a3b6 --- /dev/null +++ b/day08/sample @@ -0,0 +1,20 @@ +162,817,812 +57,618,57 +906,360,560 +592,479,940 +352,342,300 +466,668,158 +542,29,236 +431,825,988 +739,650,466 +52,470,668 +216,146,977 +819,987,18 +117,168,530 +805,96,715 +346,949,466 +970,615,88 +941,993,340 +862,61,35 +984,92,344 +425,690,689 diff --git a/day08/sol.py b/day08/sol.py new file mode 100644 index 0000000..4e5f2c1 --- /dev/null +++ b/day08/sol.py @@ -0,0 +1,113 @@ +import math +from math import floor, sqrt + +def dist(p,q): + return sqrt(sum((x-y)**2 for x,y in zip(p,q))) + +def solve(input, limit): + points = [] + for line in open(input): + x,y,z = map(int,line.split(',')) + points.append((x,y,z)) + + def nearest(p): + mindist = float('inf') + minpoint = p + for q in points: + if q != p: + d = dist(p,q) + if d < mindist: + mindist = d + minpoint = q + return minpoint + + #for p in points: + # q = shrink(p) + # print(p, nearest(p), list(chain(*[m.get(x,[]) for x in near(q)]))) + + pairs = [] + for p in points: + for q in points: + #q = nearest(p) + if p != q: + d = dist(p,q) + pairs.append((d,p,q)) + + pairs.sort() + print(len(pairs)) + print(*pairs[:10], sep='\n') + + circuit = [] + direct = set() + parent = {p:p for p in points} + size = {p:1 for p in points} + + def find(x): + root = x + while parent[root] != root: + root = parent[root] + while parent[x] != root: + x, parent[x] = parent[x], root + return root + + def union(p,q): + p = find(p) + q = find(q) + if p == q: + return + if size[p] < size[q]: + p,q = q,p + parent[q] = p + size[p] += size[q] + + # part 1 + + n = 0 + for _,p,q in pairs: + if n >= limit: + break + if (p,q) in direct or (q,p) in direct: + # already directly connected + continue + print("connecting", p, q) + n += 1 + union(p,q) + direct.add((p,q)) + + seen = set() + sizes = [] + for p in points: + r = find(p) + if r in seen: + continue + seen.add(r) + print(r, size[r]) + sizes.append(size[r]) + + sizes.sort(reverse=True) + print(sizes[:3]) + + t = 1 + for x in sizes[:3]: + t *= x + print(t) + + # part 2 (continued) + for _,p,q in pairs: + if (p,q) in direct or (q,p) in direct: + # already directly connected + continue + print("connecting", p, q) + n += 1 + union(p,q) + direct.add((p,q)) + r = find(p) + if size[r] == len(points): + print(p,q) + print(p[0]*q[0]) + break + + +solve("sample", 10) +solve("input", 1000) +