From 71954ac209d44661387b5736469aeecbca6dbb7d Mon Sep 17 00:00:00 2001 From: Andre Henriques Date: Fri, 5 Dec 2025 18:36:02 +0000 Subject: [PATCH] Day 5 --- Cargo.toml | 4 + src/day5/act.txt | 1187 +++++++++++++++++++++++++++++++++++++++++++++ src/day5/main.rs | 84 ++++ src/day5/test.txt | 11 + 4 files changed, 1286 insertions(+) create mode 100644 src/day5/act.txt create mode 100644 src/day5/main.rs create mode 100644 src/day5/test.txt diff --git a/Cargo.toml b/Cargo.toml index 45ab54c..64ac841 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,5 +19,9 @@ path = "src/day3/main.rs" name = "day4" path = "src/day4/main.rs" +[[bin]] +name = "day5" +path = "src/day5/main.rs" + [dependencies] anyhow = "1.0.100" diff --git a/src/day5/act.txt b/src/day5/act.txt new file mode 100644 index 0000000..34dce3a --- /dev/null +++ b/src/day5/act.txt @@ -0,0 +1,1187 @@ +497458586604999-497711062590372 +41309854048025-43014990865227 +344667062859210-348736539371429 +449204286753645-449204286753645 +336210234598159-340213222277093 +32481929539190-33027415663811 +169252239292079-169514419579733 +503880513481618-510363006480404 +262165827730746-265746891636662 +47602060860500-48822273098786 +364399239089632-370550487683860 +141817804854638-143438781692475 +2261684599028-5180514187253 +408825058302067-409465688768264 +13182490441200-17518135959179 +148126305672652-149728988856481 +484216760219199-490751885735602 +492973881546722-493737375405067 +151349725370477-159111108576050 +162254570865579-163066061821496 +500244884593201-500440804470407 +35900716213951-36065676708649 +50814177303978-56227170300569 +405550940483349-405947297526270 +304676347560277-307181067849947 +134848360253649-139165051413836 +161961842098506-162254570865579 +500783970767037-501243892157700 +141110879224678-142462371371238 +492670673114691-493156582241321 +405286266719310-405832953265399 +148962472483890-150426652871489 +95954253840562-98622921811723 +167973774523200-168585326875038 +554274158841155-557986397944224 +40385096192164-41977476974390 +255285371087927-260778312172250 +307889097643322-309596668499109 +167286071943878-167442275587476 +163223555476139-163993634146626 +124451588068167-129736265482743 +468539300904731-471278395727760 +527387560488409-531876047853669 +48388440563837-49982281923676 +403258725921782-403680831392037 +402724010002017-403443305271321 +540885938531324-540885938531324 +81956860391438-89001974615876 +38301054539987-38658414201631 +34808518784850-35274948120493 +2261684599028-9478268158138 +30871087275654-31490725034622 +301721263703349-304165661952140 +144086464956671-145625218910559 +524085951468286-528165119486530 +129736265482743-129736265482743 +544910813654314-549967380403628 +409960988060568-410567899597609 +166831398384305-167442275587476 +458300895742700-460511789698423 +38301054539987-38658414201631 +243073751491817-246494378977966 +184424689605497-184424689605497 +405286266719310-405550940483349 +309030540397661-311068750109033 +364399239089632-370550487683860 +413753160447984-419419554895292 +147147572655647-148386148123132 +456979033323619-459396302860554 +36506853650840-37030744884219 +225143540949360-228111361601879 +292165880932329-297392058433027 +142805774861706-144485408502357 +413753160447984-413753160447984 +303477418697890-305509786788553 +169837085790207-169955577341205 +392833675391524-398105632785763 +424408525335241-430450367869555 +496255041447813-496640702781038 +460046928340232-462253802187834 +38990444267140-39392984283065 +73675673572377-73675673572377 +54945612375940-58428910604826 +167973774523200-168585326875038 +534265197769765-540885938531324 +501746564287290-502100513546582 +37734192439120-38136971289837 +554274158841155-561141890858315 +327541730275048-329685656072697 +101478670728422-101478670728422 +494954855855969-495690627466662 +172142428156136-179161655221298 +409960988060568-410722053699236 +211364841109869-219503270744682 +35900716213951-36402349286210 +406851664100544-407207477447633 +32092271819681-32385877676249 +111946270847813-117153893466308 +63520533534653-67536923926747 +46398351772652-47982555102718 +547128088128200-549967380403628 +492973881546722-493156582241321 +33027415663811-33451647632624 +151349725370477-159111108576050 +403443305271321-404187352991068 +408087570610579-408236038870119 +503880513481618-503880513481618 +73675673572378-78388452421375 +246494378977967-249462386401510 +33451647632624-34046287938432 +145018257952475-146451137338903 +324354020248461-327541730275046 +43294187349878-44870157966762 +42616490891203-44045815414108 +463485783577335-468539300904729 +145909336348626-147400720418802 +498226091925123-498520378134641 +282335278337104-286931112828445 +492973881546722-493156582241321 +492973881546722-493560088228725 +473365148199504-477385637074643 +355117362328542-360689940273475 +411300415285487-411448197657727 +262165827730746-268504092975430 +195211123138822-199247962196937 +81956860391438-89001974615876 +348736539371429-348736539371429 +184424689605497-187350314178584 +90939937497222-95954253840561 +286931112828446-289033242711731 +477385637074644-480212112042281 +455586248360302-457968263808789 +392833675391524-401237485721193 +235690226742767-240518203638828 +454161631461926-456463585244292 +34046287938432-34294494685710 +179161655221299-179161655221299 +373839519853459-381212015390902 +501746564287290-502100513546582 +252418982331214-257534284283436 +384655514573061-389453813541483 +514636621988291-514636621988291 +332845604792710-338470420440039 +404394156912290-405063785543397 +101478670728422-108849842823358 +62146978838226-69200310544028 +402569879964295-402724010002017 +44355883467040-46071214648300 +133231903041165-134848360253647 +411055969835047-411761761137984 +312551809024514-321073154896380 +384655514573060-384655514573060 +514636621988292-519637453983909 +273132530029641-278443551989840 +452536295360078-455170138757470 +498900761926207-499147573597136 +117153893466309-117153893466309 +228111361601879-228111361601879 +315438662911298-317943936645132 +39392984283065-39573326937823 +306460320481251-308268396239570 +496640702781038-497458586604999 +195211123138821-195211123138821 +25614186108730-27895699650459 +39392984283065-39895610804011 +214234865967332-216869497608584 +409800947732246-410252161527986 +297392058433028-297392058433028 +169096599505938-169252239292079 +498226091925123-498715437850076 +231728340051690-240518203638828 +436531143397013-438481973708643 +202466773855029-205830298324806 +376256441131917-381212015390902 +434455444798911-441756314448057 +34294494685710-34630425267266 +36402349286210-36506853650840 +33826150892238-34630425267266 +495169041393397-495955535370098 +30612442347173-31042146256335 +205830298324808-210265154760982 +23045707853474-27895699650459 +45375236741849-46961693349925 +446517837398726-449204286753644 +484216760219199-490751885735602 +402973256366973-403443305271321 + +237489536941528 +371208278369782 +46409714417669 +285663123920262 +475584545408563 +557912887537893 +273971416562356 +258339097429005 +178059221108688 +113631919131177 +235172477507334 +254628676830006 +515228054395140 +374614979943916 +92320270970630 +55060291805539 +178995773380876 +329537637206097 +248438629253488 +488122959492279 +175646091915361 +429797226296573 +93251693584077 +324642682562602 +333950358510800 +297202166182396 +191950946769576 +86605871729166 +446278114161088 +331948999127499 +365138383638243 +200880578696448 +382116001295756 +67212148185586 +498374307839443 +184438170694034 +256117366365254 +382781461852498 +247238874090754 +472587743201814 +50155769795406 +243124532661637 +361393855360430 +90424373621546 +366756101556627 +63087561148894 +265478935661835 +64707091718940 +537768778479364 +507438480561145 +412694791063815 +517629759351040 +303258864479650 +357597782409440 +167161281871668 +191593959025659 +14785460829921 +161743048896898 +439933625969455 +272647447224375 +560666848109862 +274950710083753 +123310770629447 +106795292180872 +472150665022864 +517739043454659 +46047292089962 +543829866108058 +453597774861747 +278547540626033 +84683150568088 +200638398965596 +304983829970948 +79672115437840 +270050780476958 +23446773873832 +58430425650344 +510931245045251 +222944875578287 +126691780323533 +508446958468490 +428077957923387 +464070636326546 +286430639160538 +56172735342248 +321661350750599 +530322371356040 +20426266248326 +539936817230017 +347047596599214 +328590952753165 +67698388372695 +426650511515624 +273039490637555 +490456475405740 +45438712146313 +274745180640744 +36749119288165 +500833346702912 +309567134641573 +121755283750374 +140933730873488 +493338588115043 +539460435066799 +515505335119442 +265513194757392 +178585436869623 +212763107230059 +381662536545140 +504823854251745 +485894988438917 +465249601153370 +121446842290028 +114275229561377 +416105795383779 +455248786631767 +24234601570073 +302181264362345 +504946690439070 +112003757110176 +418882919513305 +371403504454899 +167201207135172 +387928794038435 +382385269884179 +135037570823981 +552080281406614 +62404891670791 +340610237328954 +401184094864421 +236620972185492 +504075792286625 +145691777335809 +101872443917933 +396880936176955 +66517361818656 +142140070974702 +325589015837538 +479449298572684 +246408853663144 +497907339909393 +47520838345093 +12328828925158 +374523171461514 +380513318508192 +317513599563632 +192135898735448 +495393700468116 +350372837726156 +250789189679386 +219525660695164 +160526772168642 +208433872918513 +81385884439148 +549506765684339 +200105864611241 +506737190668941 +397920294151563 +88852329817724 +426724430647403 +231907766629876 +129850802629545 +495823359885525 +347847147222676 +535954726508367 +50042352715656 +200562247858265 +380107168700850 +413206124411858 +248238984982554 +18973742602730 +397403482823728 +507215905729893 +444348127463976 +86722149911105 +147505945121930 +396141602473913 +364629307257334 +545264953113833 +25403730561768 +263220027610524 +231411641209762 +380823805412899 +528742022391492 +128037231373033 +552014786139556 +233194167796042 +85300670654362 +457090575601156 +55780458005961 +68694042068844 +474883751741456 +413089198013137 +234663858249572 +534355666723263 +437979856196314 +94240216100689 +255702347233552 +287710464470302 +222451796918440 +104259225943859 +403796941136368 +245979265330353 +262255304383583 +44213233142129 +66490372830833 +420686444727735 +116989743002816 +114325837011411 +413784342275178 +167286986665777 +377752332308908 +120887835459068 +116632696399367 +198553183541356 +322404057777009 +413301234329042 +297929823993006 +52650524901136 +514176193877126 +195426311877190 +135335441857772 +535213313882859 +401745236888253 +363257597683768 +137211517528672 +19213881150058 +57635255079254 +331532917998459 +499064284058256 +242414419097540 +435438009110790 +373174032686976 +310540741781067 +337419017705998 +4067570619237 +332503185485045 +361977446459178 +448015234272152 +411976935700035 +338950014069391 +205306269429649 +101293381416258 +436941962753163 +466370926940860 +386411009536143 +178919982628141 +60636834930524 +181487738774916 +108090582337658 +19709795624544 +112007432787072 +474393599393121 +131975141765376 +354183268961676 +209503472609396 +87338600528353 +556557792646916 +89835827795620 +373585564513355 +497421997649724 +490302590849291 +538464856538391 +279015316610512 +479551026868924 +312593988989423 +152653053688217 +66301761681662 +557937455329201 +244028409234419 +213178508642306 +485819337266424 +158333854876642 +401297680901226 +236000651466733 +247988960511855 +458526859585781 +394334387203706 +246472520468635 +63525975931408 +102619731929262 +309955426335695 +108608097477095 +60958294214189 +498635639992744 +474064472410688 +387973742980582 +142416742433748 +372268036155728 +561765795395753 +417210870076754 +74365564523368 +380508939796416 +380441792743165 +123368837911124 +356494170737466 +261131267808702 +197424175490695 +280561859551063 +243990968486749 +85922362274808 +366874736347225 +522148907221638 +163804027056440 +140926205590548 +497777738060622 +176125766033565 +413401772558665 +379223225251176 +122168732249072 +204552953919453 +246858700133030 +548037281511329 +274087452015560 +441928978539771 +257264811857819 +11021929884493 +234611673562569 +395683356151757 +108839021231953 +505861495679383 +36159944370390 +271451782537321 +489991038092210 +94620489851484 +364825232623823 +114069084558924 +193231214119923 +187314538622758 +373991901646155 +314235292647963 +513416849816028 +107975263245194 +196152023594350 +3457588457968 +509732556222597 +512826284968686 +103514249826817 +15395325640098 +265025467085426 +432573125497211 +294139712749522 +175507151491095 +270801802684198 +368428565723025 +21389237495091 +255015896378700 +503522718361896 +559575873218772 +99225226409364 +421418163224552 +44431666932703 +240554488620706 +1840669748398 +318700439424725 +464147481286862 +149257713467338 +242960102717805 +410331721577790 +155232068248544 +250513756121091 +409497171435296 +276890359738788 +246496617688737 +28149118324347 +255675617733561 +61066723144702 +224916920007142 +372638145204624 +558510547265193 +472597993974307 +163739209448217 +533872112076464 +195382900772062 +116018604516660 +29036600501130 +273238537881819 +533216595689564 +7199176534948 +440086394370646 +476193368364680 +482373645674160 +166493974388675 +4637159461148 +190110199425033 +480165402107102 +528886178025268 +255154838323601 +226821290588145 +174527336625570 +507510182881378 +304527467168311 +309408223231677 +394039192118797 +117078017048215 +411483689619791 +333117755184952 +383272250872999 +152576859603289 +523487261316122 +300624362486496 +12865484122247 +386200837859100 +491394137205298 +159374757252430 +390343880882318 +83842334196206 +45003509020643 +349319598290583 +287081554567587 +82195123670855 +447656539378478 +414646860348553 +306553470908763 +58599078911065 +96343005944387 +129077981886940 +345637118312562 +429750808977822 +123865705214566 +154692778547208 +290655567054607 +462338392579161 +422225937233313 +236621935928161 +360986443290850 +2177263850836 +502017615953888 +555005598877461 +223887464112318 +78982979305656 +103501213978104 +503138455701982 +486011123284604 +236818509128197 +292194846270451 +419890484017481 +111793767854796 +247317293900679 +363068841675260 +102123839342333 +432622553634660 +36518921412983 +505736670776755 +393619559401797 +433682675371694 +184771597664703 +498977558501482 +27283102865196 +498570848455365 +349678333066288 +552220507232975 +180237572252102 +510147052058498 +541637065189428 +64918162419622 +452207324178068 +371561657978682 +283919499057880 +111832135225573 +441499513872606 +484697320230551 +281248398929339 +385090115951549 +175337968913331 +191968539208528 +64813290001323 +94931509016011 +379085932843077 +461817701202946 +437048575175076 +73333142998478 +167959036908547 +468297690476752 +399946268079209 +6099868366752 +29160978187393 +1273685963091 +554971616362485 +142218354950911 +503421334431226 +408495535166103 +332363402366431 +515196171797092 +301381277680012 +374320503375000 +163507598995396 +237400825051666 +386356713896387 +74110443264815 +406005347259700 +8470351156624 +291075075423825 +75682605375193 +339263977244434 +372359554773295 +482544738802813 +500308216997724 +102613948558592 +251646518051004 +259768763357372 +112679982416659 +528486675650606 +454371346734443 +528697654033725 +84518729915638 +39798653058524 +166339309170754 +166382236023095 +534248849921028 +452394571545788 +41139417795886 +221305629332003 +52836088514766 +273776898366977 +408097662660014 +120584811355277 +307796416381546 +312327688463290 +8475304763216 +332566506100144 +391407657189335 +427529049217520 +532055752553611 +507119346870120 +230688492728761 +92402699011091 +25328333849141 +67511334874095 +443293956672517 +444270403378767 +172691391079984 +61172783794477 +166993344232399 +532504250979417 +474327898034514 +522065213880311 +435604501458913 +502694121063216 +536066050837617 +106536356229795 +300815378631611 +280391930984784 +45899267732855 +113224590773386 +425149567863152 +241049483039708 +437754662706685 +246450040479765 +472331590325432 +377960360736634 +393985833860872 +109382919827353 +160100499429969 +274191952150847 +545405108849360 +386087749560371 +73399928367120 +331669336573584 +456036462076619 +456144762675431 +446709917104709 +8475329982701 +315476198152685 +497847243230670 +433575526810033 +442431238577656 +43357807618399 +111962193892349 +310638502639648 +189407747990505 +436819477212384 +404644881205367 +320565018691530 +177140951049244 +324496658495188 +75417104515139 +117709019855766 +504767757142407 +486731592564977 +232814803953146 +281474543535435 +134699572152724 +49125502101470 +182105427209290 +547121496167161 +312112594285900 +4549081852423 +255091135108620 +364564330055835 +29748999833221 +379354637682667 +125456060248398 +522396524076629 +448194479243694 +346466131191149 +122690612617145 +221235008969645 +408631291476265 +530677609159881 +29635118231937 +369438766250107 +265988048944817 +371137042583695 +452020365949116 +178566152032678 +230511831977490 +336361703421884 +184343162340190 +331128471629151 +535009515008652 +235729187692947 +311918823120943 +293043538050654 +434926803028054 +145789876173875 +91966393734502 +496287398573965 +526635468769392 +532341918431145 +81443511093262 +95932463236880 +9310640968331 +274605830305299 +1774581682289 +282030923523574 +333033425998207 +345465786408222 +427910654425213 +467025503457150 +547828537935392 +490032407217099 +70765632566324 +277345605287475 +320420875307690 +163026984497505 +86408469416611 +219609380926397 +209496393745665 +327071615247757 +388290919475649 +92929788309011 +4090780679715 +424634965158140 +193390349691711 +13250553172321 +137073482108578 +418205000954276 +496213319367927 +369991584136562 +67872879241637 +122845370435263 +354745291723389 +246330666047360 +527500753405201 +53200467178369 +546241408401136 +509298518507420 +241341528963910 +127910291822180 +33291379550276 +448277502575954 +14810916030402 +53625120646413 +380668105505081 +102249165191152 +182048434233584 +10950257806837 +23438012093899 +1772558746224 +102155946378802 +193235269948996 +386679257043630 +454965228105204 +198849119469459 +103937550728938 +310476294284738 +87407587724469 +85215707758050 +547710037142877 +39887692872118 +190856343573286 +50841590681319 +76853039204951 +344295330253704 +83836843119323 +65621413356904 +181885000687601 +247790174611448 +71126406118162 +413047124476449 +227974345562591 +92187662341732 +12664235355256 +370973095466143 +105371601970942 +211613991713870 +28115901264073 +75143844771265 +367380774008894 +173823758769258 +417380145217195 +108548146417657 +510442888535703 +112370568599702 +118271929223124 +33556020373071 +91169811875752 +261081120752343 +196564922304091 +419549879556356 +342094091997200 +271600597402566 +51002052222310 +304815253819354 +285912492235202 +149942067375176 +126951230066615 +322486155991690 +234190356822486 +330376945656922 +189940057298701 +456484856670576 +54904845808342 +481856341643606 +132734038694112 +417854136438851 +401532507250525 +283436615061069 +557536000885367 +55212557698468 +420906163088661 +107998146297549 +533977275465986 +333495118751439 +315000756640200 +305119674158415 +260674590457552 +522946585956348 +341000270634170 +549041103951677 +120051382902194 +216519205498435 +1726067093873 +160700806857547 +334757298983537 +34137221650900 +59994301205083 +545592722348954 +285176776007922 +195127674472606 +31845034113380 +434803718933080 +542599071822662 +144514667117257 +430612462271171 +359572517296368 +353795593298784 +531316214802039 +248341479664299 +304016843851042 +360790293672056 +234465167659510 +115218855009457 +97631683735933 +151963783239018 +426015954364464 +302198701851925 +259898114561603 +56044981607777 +67992960012506 +377748445090943 +163138021146358 +46657878307529 +56029303467219 +35624978942423 +509666191749688 +537405059316134 +28054880234707 +487165709489521 +188784799767233 +390689982927956 +323547944892394 +46141574608800 +447265356931088 +84854590765078 +3899995244011 +500279987840521 +158887186818193 +278717407990060 +72150143510768 +197266184831970 +454157487448613 +243568960007226 +174061967763839 +385834159711566 +196657319111745 +196645044710293 +211054546271059 +486305517396295 +252883320188468 +375478074055580 +114205528234364 +6682112744304 +356309175970621 +72648998109215 +91961765562774 +146871122284002 +203700420641467 +452040164608126 +254696685051786 +306367891298922 +95268315653803 +359053085738421 +116991299173958 +297365330470705 +291397780731514 +418951630875059 +70436535477126 +396673573873919 +118542729994047 +428809300362809 +177263257334411 +59865766784701 +348480401152777 +511646081575089 +162289459387419 +210169711571389 +528954819273416 +118496681886594 +113827840998068 +445809983457960 +37237001175105 +342267549928028 +501454739860935 +106781622825778 +22959343188784 +114139046793169 +376485488854166 +46920274186863 +163761430029755 +170667966006148 +312274890914477 +64775000757693 +275257268898584 +45405340482299 +35565228251704 +133177917386237 +131324628744133 +515286408976329 +550242048808870 +383707625898408 +265928026262499 +375462874352915 +172759707567124 +153441883681470 +180285667990553 +406654568223168 +505695886930739 +510801775904365 +466377033817262 +419588872279862 +34353867137931 +259944486471011 +526650783248332 +365046894167487 +518189685539396 +454011101184845 +162019409648531 +474716484718105 +481283569827382 +543669727927088 +444589633428635 +562238221742710 +75522072437025 +271095834111323 +8076640388543 +49130292420753 +178917124864212 +460604865306184 +176878103863620 +470086065068386 +310994112972265 +491326415853978 +187325218536142 +270045131896330 +149682387417631 +455942990980138 +555141868208804 +131947265180135 +401042361858131 +176949369995516 +12545937399912 +431147425314242 +527224018055474 +407529537779942 +332096879539248 +267934979999808 +519339341745724 +278500242522378 +463436009394127 +337608075862468 +383363673845919 +559900628666769 +162209062591103 +65899296620952 +160780096189808 +434925124317098 +336856534674083 +271386041633434 +29520233986842 +28648017931427 +27601590328603 +541399959498894 +313666547708609 +532746715080601 +442467579304801 +220808525343753 +107277897293626 +106676329656426 +46466445620692 +270115751923864 +484860724008575 +366766357774453 +506341665777177 +237531851600337 +180270092015085 +209058719511715 +123343210652494 +512792786346435 +218653872688665 +317396507807121 +461734391166913 +426945718220436 +477476933596965 +62398825923070 +269589918058067 +128310554393284 +408495422946098 +52671797281524 +414642072898844 +19073916481341 +75901621639923 +284027863376670 +70691136059476 +105124181770051 +272596635549973 +76192049601918 +19827759838791 +295163502716946 +179151233532369 +285860381325415 +111169658732472 +299741604789192 +543400033756100 +516791714914607 +257905495981934 +368598890009793 +63211402926871 +246234256294812 +555394617179285 +410946540748489 +226653899725230 +46899008301697 +326216091281003 +184526097678916 +237987876478043 +199333343012126 +101752520646883 +182924584344749 +108064927661760 +54778574337805 +244578245562369 +378025948118301 +133373395946079 +555119635979678 +292798636185145 +408617040552252 +544803431186551 +125356012999922 +562474517285440 +153895114728406 +253035387257266 +275783590586311 +36556799088007 +106396211395242 +123883396167375 +107845684044072 +125570807249438 +46777044794373 +168949340209155 +526674187577927 +278127735888748 +216869602174268 +231459259607809 +327252477722006 +170192383832560 +199385869761304 +372477028456448 +377654579096311 diff --git a/src/day5/main.rs b/src/day5/main.rs new file mode 100644 index 0000000..ae03f91 --- /dev/null +++ b/src/day5/main.rs @@ -0,0 +1,84 @@ +use anyhow::Result; +use std::{fs, ops::RangeInclusive}; + +trait Extend { + fn extend(&self, other: &T) -> Option; +} + +impl Extend> for RangeInclusive { + fn extend(&self, other: &RangeInclusive) -> Option> { + if other.contains(self.start()) && other.contains(self.end()) { + return Some(other.clone()); + } else if self.contains(other.start()) && self.contains(other.end()) { + return Some((*self).clone()); + } else if self.contains(other.start()) { + return Some(*self.start()..=*other.end()); + } else if self.contains(other.end()) { + return Some(*other.start()..=*self.end()); + } + return None; + } +} + +fn main() -> Result<()> { + let text = fs::read_to_string("src/day5/act.txt")?; + + let mut valid_ids: Vec>> = text + .split("\n") + .take_while(|s| s.len() > 0) + .map(|s| { + let mut v = s.split('-').map(|a| a.parse().unwrap()); + let start: u64 = v.next().unwrap(); + let end: u64 = v.next().unwrap(); + return Some(start..=end); + }) + .collect(); + + let mut expanded = true; + while expanded { + expanded = false; + for i in 0..valid_ids.len() { + let range_to_extend = &valid_ids[i]; + if range_to_extend.is_some() { + let mut range_to_extend = valid_ids[i].as_ref().unwrap().clone(); + for j in (i + 1)..valid_ids.len() { + if let Some(maybe_comp) = valid_ids[j].as_ref() { + if let Some(extended) = range_to_extend.extend(&maybe_comp) { + println!( + "{:?} expanded by {:?} into {:?}", + range_to_extend, maybe_comp, extended + ); + expanded = true; + range_to_extend = extended; + valid_ids[j] = None; + } + } + } + valid_ids[i] = Some(range_to_extend); + } + } + valid_ids = valid_ids.into_iter().filter(|a| a.is_some()).collect(); + } + + let valid_ids = valid_ids.into_iter().map(|a| a.unwrap()); + + valid_ids.clone().for_each(|a| println!("{:?}", a)); + + let ids_to_check = text + .split("\n") + .skip_while(|s| s.len() > 0) + .skip(1) + .filter(|s| s.len() > 0) + .fold(0, |sum, line| { + let i: u64 = line.parse().unwrap(); + sum + valid_ids.clone().any(|range| range.contains(&i)) as i64 + }); + + let num_valid_ids = valid_ids.fold(0, |sum, range_id| { + sum + range_id.end() - range_id.start() + 1 + }); + + println!("sol1: {}! sol2: {}", ids_to_check, num_valid_ids); + + Ok(()) +} diff --git a/src/day5/test.txt b/src/day5/test.txt new file mode 100644 index 0000000..2e9078d --- /dev/null +++ b/src/day5/test.txt @@ -0,0 +1,11 @@ +3-5 +10-14 +16-20 +12-18 + +1 +5 +8 +11 +17 +32