From 6861e00c470e251daca847404769733bec1528e7 Mon Sep 17 00:00:00 2001 From: Paul-Henri Froidmont Date: Mon, 8 Dec 2025 07:28:09 +0100 Subject: [PATCH] Day 8 --- input/day08 | 1000 +++++++++++++++++++++++++++++++++++++++++++++++ src/day08.scala | 59 +++ 2 files changed, 1059 insertions(+) create mode 100644 input/day08 create mode 100644 src/day08.scala diff --git a/input/day08 b/input/day08 new file mode 100644 index 0000000..d804125 --- /dev/null +++ b/input/day08 @@ -0,0 +1,1000 @@ +66808,15875,57273 +56891,2658,63198 +67170,13852,22738 +34042,76706,39911 +48789,35433,67250 +16982,1436,35054 +30664,71747,26236 +77873,70059,20919 +14515,77582,79377 +14927,1271,61792 +83150,73855,35726 +30011,68572,37323 +46666,11321,68709 +18580,19768,48589 +1678,49167,80667 +53735,49678,74907 +31330,66239,83043 +56786,21990,48648 +27272,95316,92953 +88698,10094,27502 +84129,69753,56007 +98437,62344,68158 +57706,31327,42124 +37900,8092,70301 +92452,26287,29055 +49397,5402,7464 +60200,11594,10924 +28251,43712,16520 +21465,89343,52643 +722,79468,67298 +96055,95806,16892 +53396,3388,37087 +58231,5473,44823 +67015,54505,90686 +7568,26733,5426 +30225,88131,47081 +48546,31703,16899 +73387,88307,28928 +37345,51215,33299 +10477,72760,41980 +67959,53748,27917 +46062,24863,36571 +61797,68768,47448 +47851,95604,42562 +50608,86964,73465 +2533,40563,30557 +2479,25486,46373 +58095,65273,74619 +26648,93896,18682 +19089,37543,24679 +83328,12159,5985 +45861,53119,43832 +26905,36378,43340 +28393,59707,46750 +79095,27867,9539 +45999,50356,46800 +48434,24110,19365 +98776,22975,3632 +24301,41595,54570 +19092,39143,95989 +19491,69967,2751 +6170,84696,12445 +45341,12379,16627 +99030,12432,93196 +475,1903,5608 +94738,41881,15631 +36548,5330,39213 +54379,81732,7133 +38046,66094,56324 +53862,18493,36163 +18525,88575,36712 +52155,12040,44165 +93225,32248,41528 +17050,39279,67365 +11362,91387,48036 +1920,94710,25583 +67092,43000,10909 +17636,63041,81919 +92771,2885,55387 +76132,10765,32736 +86913,40775,71773 +51022,69286,56400 +31050,54691,87520 +8297,96495,65666 +14356,29991,84667 +83058,27507,52783 +23284,50618,99076 +39427,21015,98746 +29841,55124,23064 +77665,82102,55980 +91673,27096,56654 +33793,40834,55240 +3241,77900,81042 +67612,23639,7614 +5113,74934,53891 +2080,52347,63357 +11806,44234,3665 +63597,89987,89413 +82629,55756,18584 +31397,10300,80577 +28503,34821,99096 +46444,11050,25371 +81583,64604,97189 +21724,83579,66801 +5490,76338,42061 +52868,26468,87790 +81891,37939,99566 +4046,41864,66049 +82211,53803,40510 +89147,26013,98706 +1583,77376,38712 +70779,94281,91228 +80100,51912,55834 +61207,82185,21781 +45741,52593,97037 +80229,69180,47232 +16922,74346,9156 +20665,20022,90189 +25862,90040,18565 +17071,40543,28878 +4817,47545,88307 +669,41976,29570 +38705,30439,52566 +55940,78422,76623 +44759,28937,81677 +64001,48945,20565 +60379,9996,31756 +7742,58044,3582 +14819,70895,93983 +49441,60700,28757 +63203,55236,41254 +43267,83618,41126 +74675,69775,56928 +76457,90025,78844 +69370,76187,43171 +18269,20481,10709 +89684,75427,94135 +27809,250,95 +9039,49160,46811 +42594,33352,69718 +65699,89042,68347 +54454,22242,48820 +92437,29713,23039 +84766,73281,7187 +92879,16526,61126 +46791,6872,65460 +50396,64814,31091 +16381,63568,68484 +21282,18641,66545 +54798,85780,35757 +58418,46236,70882 +28464,1333,59095 +41881,47871,24086 +60936,36566,51268 +72383,85433,68310 +87929,10891,38196 +69150,42334,49347 +62352,38373,50540 +54089,93502,5845 +6363,75068,39594 +21132,58629,19572 +81079,36820,31768 +10463,23205,97447 +18318,97470,7101 +62144,34562,33472 +25564,50195,66470 +68007,7861,82999 +81526,51805,64573 +14578,38033,38634 +86533,65273,84268 +34221,3379,51527 +28841,91825,48383 +98536,55906,25763 +82220,24833,6197 +88851,73589,48878 +327,88586,57420 +20974,24343,46443 +19282,70178,60310 +1970,28994,49507 +34845,40472,47965 +95164,85301,62557 +8024,1479,42924 +93582,38190,74933 +92178,49083,47658 +23435,49972,72193 +45155,73612,83127 +54554,37510,85462 +39733,52341,43854 +53475,53547,43292 +40209,83085,11061 +13587,5459,5015 +69896,60231,31003 +14897,33707,85479 +28810,86400,22502 +5530,86554,20505 +5227,2089,73227 +37169,61539,88822 +57452,46634,16907 +16657,16246,22182 +5786,94318,50469 +33186,94498,90648 +90510,43547,73177 +20489,41228,75588 +65612,99306,37707 +30640,19834,6226 +35682,24949,19739 +89261,54234,81275 +89909,19112,99695 +33334,69203,82860 +93282,80761,72500 +60862,80029,37904 +89729,48551,31038 +69748,33790,39989 +47147,4705,17833 +47010,896,66690 +42731,72395,524 +20579,8942,18649 +48945,76205,36770 +96894,90497,29966 +14909,99733,66363 +30728,80471,34509 +27257,62287,22488 +41534,9969,19607 +54379,77942,67111 +85150,5407,59767 +30851,57154,74046 +70783,89018,48817 +81791,60062,92822 +29120,79880,24712 +177,58120,36023 +69234,77369,35722 +57304,27441,38510 +19517,59478,51880 +39860,18560,43709 +14094,71999,62941 +88180,7143,2943 +18625,53770,10397 +30070,30856,67007 +21423,47393,63107 +7916,7304,40618 +60156,49919,99437 +88110,19794,80088 +93599,87774,56544 +53564,8199,3525 +89629,90418,55518 +50119,75513,17662 +46325,20376,30325 +56011,50576,26821 +79273,89714,94578 +42634,16933,78796 +76582,10059,34747 +43894,12565,53271 +48889,93200,86170 +16077,54180,64356 +21271,10672,7280 +18419,42254,44365 +56986,71763,51435 +7652,50938,60116 +70398,94691,49090 +48470,43700,60374 +15489,84654,40421 +35127,74360,22606 +58079,46883,45536 +45243,1396,80653 +91633,4186,87490 +20571,46963,73935 +1762,11646,70386 +27439,72919,82544 +93653,65934,49399 +34189,78296,42688 +86250,8709,60947 +73446,5283,60154 +54713,18405,80869 +92304,86737,95129 +58717,63892,25509 +59469,9872,80724 +80375,94186,2210 +54578,16811,21210 +77016,56592,9404 +3218,9639,88474 +67817,446,16537 +37436,94611,77200 +22665,33750,26161 +14553,94505,45722 +35062,37305,67247 +92031,33252,37463 +86642,31557,66417 +7704,54592,75444 +71554,47577,15305 +14102,28314,85163 +69075,35703,50939 +56687,21840,44505 +79483,96910,9385 +42644,57050,31338 +9574,83164,52946 +96110,28567,13637 +71054,88415,17405 +27125,87847,16292 +13666,2416,97187 +45332,74325,19674 +9351,56102,56287 +66127,2189,31814 +41119,23477,53519 +94062,91678,42790 +79023,25074,67091 +41033,50194,39288 +25851,87832,96203 +53096,76889,21833 +83654,8633,27728 +38039,83581,21754 +55288,4243,48173 +83315,36506,93960 +35661,60667,16296 +2007,3598,38812 +23145,37738,84273 +49992,26997,60149 +14678,60622,49327 +32302,3892,85731 +6271,73177,27120 +55524,87210,79999 +64896,64694,33848 +79624,93188,43007 +98989,54017,42804 +21904,86120,21337 +10189,64792,26503 +54278,24755,33030 +61722,83313,76247 +81728,8053,81055 +28477,2318,72078 +10497,99587,36769 +22111,64132,63514 +92557,49968,31592 +19811,50404,55720 +33107,19658,17758 +72611,6811,12724 +80571,9184,65334 +63344,11497,4840 +56383,53839,22977 +78030,1966,59196 +4332,42667,19739 +9940,49692,98245 +79715,10932,92172 +77856,41457,12922 +84007,1424,86205 +33541,54194,10073 +79398,45671,87742 +2754,10143,26958 +83646,4788,82868 +35791,93562,36645 +24059,20332,27833 +32284,94246,9770 +49308,62333,7017 +95596,94548,25976 +86171,7537,53973 +84928,87378,79197 +71454,66694,58234 +95317,55661,76157 +61678,11623,22128 +33676,82038,43356 +50707,33431,24586 +65829,67950,62699 +1560,54267,70124 +85909,27116,87709 +38529,17146,66944 +37670,64644,41845 +65484,74391,74995 +8725,4183,27241 +2819,72797,91363 +89492,331,1167 +543,27424,78009 +47169,25844,38375 +28765,92421,16225 +58794,79588,58062 +53985,90969,72330 +98707,16374,43411 +21220,38572,74630 +44953,16810,57226 +54404,34503,34857 +21436,81026,67829 +81623,23437,27556 +48441,32935,79308 +51780,42917,48581 +63493,68634,1175 +13174,77004,38837 +71275,42973,32777 +34093,86190,30557 +77640,49407,49287 +77147,87406,97948 +56532,89230,70927 +32137,49928,21483 +97215,63433,89540 +13445,33718,94341 +84649,50590,15859 +59866,19684,41104 +90466,96740,12382 +23609,16569,936 +22265,46127,14372 +94875,92326,96622 +20527,42359,18717 +36495,98778,22302 +47999,32506,28902 +91874,52864,93760 +32768,39613,21438 +68921,19314,92550 +56738,16724,34923 +5501,48509,28729 +82808,21614,84393 +7105,34879,61328 +78939,8710,58392 +21291,42694,88252 +43538,59031,98003 +62320,68758,5619 +89102,79282,19735 +3698,80711,87 +73031,67746,98290 +56502,23643,26806 +23898,67269,30209 +45912,21721,21594 +45382,53817,56791 +22634,10416,93147 +77351,61724,11011 +80759,26439,34388 +186,35644,10221 +30634,97539,28383 +90798,29812,22669 +97833,58931,1688 +33573,99633,29333 +83604,34039,18398 +47866,44003,22863 +26437,98663,6651 +63265,80734,524 +50972,4304,55148 +19084,1689,34073 +33882,35406,6855 +53812,86556,76715 +85267,45052,85427 +62685,11592,41042 +55935,65602,36433 +86759,6646,47210 +96558,77039,11388 +74217,21715,43080 +1923,41399,54758 +27698,24640,41685 +63301,58227,59456 +20201,77736,22281 +47403,70418,62678 +50433,18297,69521 +38519,56302,8571 +83921,65553,18745 +57983,89389,84950 +73676,32791,61217 +55541,20279,41335 +73621,11045,14350 +49286,62615,93877 +91881,18428,18854 +55289,30497,51348 +85493,80330,52331 +30310,97555,34342 +6891,61523,53307 +96528,49075,34742 +1992,58134,69214 +55280,46205,7058 +6933,13043,29101 +88134,27821,96836 +27461,36001,95279 +7064,29862,94361 +83877,44789,6314 +6972,54953,78387 +90965,38708,19826 +92367,4903,33245 +16418,78034,51457 +62255,6738,17353 +64628,71244,96722 +64277,82527,82451 +87433,30098,35585 +5441,84338,8612 +74724,12388,36089 +24572,41639,15594 +8184,85475,83600 +98891,52624,57014 +3260,88356,39971 +50040,82175,38733 +23262,99486,30419 +74369,97476,70166 +56584,72963,67455 +41551,68630,59292 +393,93602,59894 +78289,95743,42246 +92675,12614,80163 +99533,8302,71290 +23152,66711,94570 +1629,60503,4810 +63796,16466,18352 +77026,5029,9610 +6282,69470,97869 +82246,20115,85247 +20978,77010,85015 +73656,71938,20505 +19441,18082,85587 +92439,97441,18538 +1921,54552,88303 +87315,81851,96158 +11458,37587,96736 +48197,34072,7831 +55916,23064,77172 +91351,73513,94184 +72442,55955,82160 +4339,9910,58815 +55894,4170,41121 +14851,18457,67432 +2703,31497,56045 +4353,21506,10829 +77088,22503,70140 +62638,25889,41001 +96257,4690,54487 +160,31404,23145 +38509,78316,46937 +65578,21231,10116 +27429,87760,21373 +72701,23255,80075 +25490,63419,79807 +39050,49203,80322 +40680,38985,69610 +12540,30927,67120 +42503,63483,2448 +60295,69154,23732 +70818,56069,66848 +23075,5985,82947 +45275,64629,86899 +31383,95835,38948 +49609,98021,8713 +10083,71529,25258 +401,35699,90077 +6897,8390,14487 +51775,59180,50230 +63837,4787,70660 +50456,94681,62131 +20600,74266,26692 +78992,65350,23917 +41926,62260,27411 +18865,7349,96372 +19798,99548,63192 +61321,6466,36736 +14467,97238,40675 +52490,24358,48012 +60521,37598,70964 +82919,22804,95724 +30906,41223,61741 +32324,15411,87069 +1889,1607,35312 +70000,89332,6378 +72364,5116,31500 +31644,4567,63513 +23849,65467,74928 +71545,56509,90945 +16136,81831,21383 +6583,90516,1441 +11111,73072,76146 +46500,17134,80982 +9077,67410,91147 +63436,69692,36288 +49711,32188,1988 +66015,37683,25008 +59921,97940,55060 +11665,49346,38791 +21563,98729,49888 +84354,52073,97648 +63592,52155,37199 +12903,9171,73347 +7742,97872,10709 +45869,38999,57506 +10384,21428,50157 +74560,73124,73811 +44558,34713,73340 +7797,62643,35623 +35677,84692,969 +82215,20761,51390 +92822,25665,71782 +85324,88323,66080 +61054,39929,30479 +68420,42872,1325 +68871,61737,87468 +61245,67232,90778 +96080,80275,29700 +23676,98840,48988 +3998,42837,23934 +49775,80806,31317 +21159,9326,36301 +32391,87322,98772 +99983,94499,797 +56312,39778,1279 +42977,54206,59807 +31469,94269,19944 +98615,45776,9710 +19186,93978,77208 +36512,68019,68221 +23527,53913,23844 +60369,40669,29896 +592,40074,95447 +74086,15451,36349 +5664,59622,34069 +81471,22666,16640 +80512,38317,62123 +7613,91005,55845 +75716,60751,48298 +91823,61916,6627 +51101,90290,16075 +68774,72629,91289 +16579,49143,99177 +46168,78559,10502 +26718,79020,93079 +41368,26639,65900 +17215,34529,74484 +42098,18123,71754 +4390,14487,76993 +78024,1008,72660 +71540,45570,47222 +94627,62230,34922 +22267,32345,21469 +57160,66796,73712 +3924,62967,80806 +18061,3637,63727 +28363,42203,57759 +61861,29593,32483 +73388,57329,89620 +39805,93731,91568 +72307,66776,71939 +22479,45968,25047 +64931,57028,38659 +12547,48418,97018 +23945,92412,78702 +17041,89990,28822 +4091,26010,90423 +78383,27686,19002 +13636,10494,89327 +4436,56106,55439 +14559,62684,27101 +57140,46186,21521 +17844,47953,54390 +6895,23343,8808 +16108,75445,33633 +29397,66748,59112 +1859,23661,87016 +48789,26591,76378 +76039,30103,46734 +21313,37048,22263 +69751,61779,23042 +93031,32501,5198 +43117,57120,12249 +66627,53190,59723 +61342,7552,61760 +95079,69239,78309 +87875,75526,61107 +71326,56905,8700 +12885,21377,3906 +38575,2584,94815 +44689,84822,69759 +36382,43204,69317 +26603,16830,48936 +39061,51248,82116 +49960,91795,6812 +12893,12605,40250 +17825,87032,85631 +39429,12329,6282 +90265,70359,5529 +16818,3581,64960 +75995,71627,54604 +57589,23524,56764 +74574,16740,18566 +23346,85968,98173 +65335,29995,41985 +41664,26941,36362 +78138,25916,63151 +85553,51248,88851 +35414,42374,85797 +97514,54525,93994 +41992,17546,12921 +81332,59568,36481 +23896,82371,13209 +57741,16400,64875 +63026,18769,27518 +25326,71950,32679 +30617,26108,42782 +89187,9703,84540 +54243,28637,78222 +88444,27462,69263 +70752,54873,63272 +89304,50258,85143 +64377,54418,52473 +32259,4358,19592 +77015,710,63673 +1157,65912,65820 +8827,6843,31855 +85530,8925,73422 +97728,94622,29643 +6183,36516,15900 +10429,51367,96567 +98101,60458,91156 +15409,33018,22840 +5460,58890,8468 +76766,40806,28544 +96594,22369,4236 +19990,97995,31384 +40361,54903,59301 +16370,71869,11019 +31161,28236,79927 +72626,29936,78235 +66346,71569,35611 +85236,161,36515 +6144,15112,8628 +26374,14922,38987 +38515,18168,84594 +12835,4942,48295 +32667,41323,56112 +62084,65390,50976 +85247,48210,32592 +82510,32984,56343 +52068,48158,13475 +72482,7033,48424 +10706,56640,31920 +23158,75158,1839 +12734,26247,78386 +17126,9310,71369 +79509,56115,43510 +13953,81649,41166 +35593,82543,12771 +33044,56864,8575 +34705,13256,71553 +73633,76030,81170 +13908,75937,30918 +27836,16186,70333 +86798,14949,42124 +73904,92852,62406 +75150,44678,80055 +8503,91834,9033 +75698,91873,74829 +63050,5438,87494 +51189,94139,97495 +4246,60741,65787 +83264,89129,89852 +23318,70241,55258 +43570,19219,74237 +55578,63919,19120 +72840,12262,44939 +44086,48953,9246 +1577,80887,57330 +90912,46297,62704 +76640,38069,35673 +90703,20962,19553 +11214,48681,26476 +26981,61505,13957 +7680,89390,7663 +76000,65243,30793 +26271,64682,65444 +83420,62900,97921 +97120,1143,70205 +77809,90190,1501 +14148,77797,9171 +89584,23392,74584 +30463,96997,41282 +80989,67920,95732 +11033,62056,6710 +79330,32091,67645 +74318,20665,30059 +6389,55044,9718 +35709,99246,14833 +96327,23765,37156 +85074,45377,98950 +73018,84624,96331 +66772,70475,80173 +79433,97469,22710 +76854,8853,92971 +26425,38183,63343 +34648,27067,90866 +99693,11695,39359 +23313,78823,70303 +35770,23790,31574 +48059,98476,75865 +47058,58609,56698 +75056,34301,12330 +10407,5429,24406 +19982,48113,11410 +39749,50049,45608 +75294,35849,45279 +24626,11136,5391 +49845,15988,71138 +40147,32269,16845 +30605,50670,89010 +32462,35342,3909 +84145,21117,13625 +21562,78303,8025 +39876,85752,57757 +38027,94681,80442 +26909,4454,65270 +96275,35266,26130 +30851,90737,86067 +68898,50953,4712 +7095,90844,33939 +28817,45634,70383 +83139,8970,96331 +87547,64410,9203 +51645,25642,90416 +72179,25137,42578 +91667,53410,84977 +98714,24340,55886 +22275,86208,21490 +67587,91241,69406 +12590,47773,97512 +80321,91948,85612 +90013,63437,83432 +31704,22585,20276 +7118,94187,63359 +68147,98684,64737 +37696,34811,28569 +54979,71558,13312 +71764,85071,8266 +76144,97310,83896 +909,71234,13515 +73335,22898,85763 +86988,2950,550 +81879,74613,72795 +85791,74478,47063 +35312,40498,6185 +65136,45121,40730 +50093,90970,35409 +56514,35554,65507 +37458,55374,96168 +72010,36122,83543 +9071,89017,17952 +22916,58511,40968 +33568,12781,69749 +2661,64293,79290 +27433,46373,71422 +81334,99072,25240 +70412,65847,13262 +20827,31373,18012 +5083,99558,70174 +89801,173,94956 +84066,23944,3448 +78916,63704,47692 +29176,94329,5763 +62523,23240,77264 +71943,80786,4898 +4087,19934,69612 +89534,7056,38087 +25513,42786,31003 +80167,71983,83501 +69143,40745,6933 +73481,53418,70996 +19654,57312,65081 +83004,98729,99282 +25665,66628,96065 +85961,73716,73980 +39294,54016,95577 +54099,68993,71031 +71198,25038,50244 +84623,72445,76349 +41545,51067,25020 +35594,88321,87388 +33423,71815,2832 +1565,34742,8705 +18242,68989,81142 +85460,87978,32395 +21282,87070,58820 +11428,31010,16230 +23124,43246,90055 +65393,53294,90939 +95979,53978,97163 +58032,68593,7042 +80046,52381,4039 +73773,17035,26995 +65987,93153,51111 +46944,56730,81726 +51230,56710,49636 +36487,96224,49976 +19531,51621,40736 +30739,13324,48771 +78044,40247,20897 +19460,40288,56007 +48303,98432,81980 +27182,50994,96470 +89660,33017,44732 +59338,24898,58370 +93372,20239,4637 +1577,44700,30617 +31015,26085,93288 +88294,20378,57996 +40024,2606,30393 +18623,64893,8856 +16101,74544,58108 +54646,45714,29913 +66169,59361,99288 +77460,7380,96693 +46391,49177,25301 +65010,30110,55916 +60161,8624,65577 +1319,85028,96744 +22264,81084,35303 +88617,95256,98310 +42640,40938,65192 +11802,5520,95179 +97365,91969,2343 +11500,74388,51331 +95069,56068,94758 +89374,24091,59202 +91495,98318,52286 +21871,34855,3541 +48344,82737,23931 +4302,78433,61913 +50901,64077,99754 +61340,34992,9967 +69446,35896,81084 +5183,24440,9777 +69690,82853,80364 +25867,44060,81658 +95325,3076,29009 +20324,53588,80081 +10994,37546,27875 +30589,85863,13329 +61571,2781,58841 +66527,84642,16798 +69709,88892,2173 +22093,37334,58430 +11178,89738,33566 +62216,50582,82013 +33024,21950,38145 +87009,57188,32904 +15621,33823,67749 +10153,4888,64016 +33145,54071,70153 +47324,25999,52361 +8253,9453,28797 +87937,25478,22907 +65921,13700,57087 +78977,16439,37024 +97758,61749,32090 +16362,6154,70925 +43323,54656,19744 +68253,74574,3109 +7213,94938,66918 +89131,21600,41704 +81252,83922,65998 +70903,37034,23813 +71610,24938,3107 +70192,28449,65262 +11253,57723,23243 +392,70861,27632 +92179,64110,83609 +30970,60260,60809 +67666,9017,8472 +25684,46503,71523 +61750,1818,78411 +44466,9760,14148 +59796,7701,76381 +98545,34309,88609 +18089,1041,57090 +83987,14384,2282 +70438,1375,81195 +2073,35983,9372 +89649,51119,76132 +69751,64558,76469 +11688,61944,8929 +74528,45958,61521 +136,53618,61516 +71338,10257,85975 +32470,38815,55522 +67513,51499,1385 +98555,11,60988 +49251,40823,73364 +15813,59434,12767 +80618,91417,55518 +14831,92657,54703 +65873,85942,26190 +2366,60421,86919 +83105,27236,27647 +27386,23134,28875 +33746,36575,58103 +41489,72961,64219 +54899,6571,49743 +88586,86694,86666 +20863,28728,36148 +62318,99572,88667 +51774,21639,8617 +7755,85582,77147 +27750,2505,95626 +2286,70407,11780 +16143,17195,47620 +78575,10763,76491 +92719,97886,11307 +25950,8525,72348 +23687,32925,21274 +16983,31143,71020 +98604,59334,31999 +71770,66943,53750 +98890,60465,8569 +86012,51566,11076 +55402,38979,62133 +24378,35574,40106 +85753,35052,42256 +12669,18429,43226 diff --git a/src/day08.scala b/src/day08.scala new file mode 100644 index 0000000..a973a5f --- /dev/null +++ b/src/day08.scala @@ -0,0 +1,59 @@ +package aoc +package day08 + +import scala.math.pow + +val dayNumber = "08" + +@main def part1: Unit = + println(part1(loadInput(dayNumber))) + +@main def part2: Unit = + println(part2(loadInput(dayNumber))) + +case class Box(x: Long, y: Long, z: Long): + def distanceSquared(other: Box): Double = + pow(x - other.x, 2) + pow(y - other.y, 2) + pow(z - other.z, 2) + +type Circuit = Set[Box] +extension (circuit: Circuit) + def distances = circuit.toList + .combinations(2) + .collect { + case List(b1, b2) if b1 != b2 => + (b1, b2, b1.distanceSquared(b2)) + }.toList.sortBy(_._3) + +extension (circuits: Vector[Circuit]) + def connect(b1: Box, b2: Box) = + val idx1 = circuits.indexWhere(_.contains(b1)) + val idx2 = circuits.indexWhere(_.contains(b2)) + val c1 = circuits(idx1) + val c2 = circuits(idx2) + circuits.updated(idx2, Set.empty).updated(idx1, c1 ++ c2).filter(_.nonEmpty) + +def part1(input: String): Long = + val boxes = input.split('\n').map { case s"$x,$y,$z" => Box(x.toInt, y.toInt, z.toInt) }.toSet + + val circuits = + boxes.distances.take(1000).foldLeft(boxes.toVector.map(Set(_))) { + case (circuits, (b1, b2, _)) => + circuits.connect(b1, b2) + } + + circuits.toList.map(_.size).sorted.takeRight(3).reduce(_ * _) + +def part2(input: String): Long = + val boxes = input.split('\n').map { case s"$x,$y,$z" => Box(x.toInt, y.toInt, z.toInt) }.toSet + + var lastDistance = Option.empty[(Box, Box)] + + boxes.distances + .to(LazyList) + .scanLeft(boxes.toVector.map(Set(_))) { case (circuits, (b1, b2, _)) => + lastDistance = Some(b1, b2) + circuits.connect(b1, b2) + } + .dropWhile(_.size > 1).head + + lastDistance.map((b1, b2) => b1.x * b2.x).get