From 2859a83b88773abae7d277d3114e0d48e714a616 Mon Sep 17 00:00:00 2001 From: Ben Kyd Date: Fri, 5 Dec 2025 21:47:57 +0000 Subject: [PATCH] day 5 --- 2025/5.txt | 1170 +++++++++++++++++++++++++++++++++++++++++++++++++ 2025/6.txt | 0 2025/aoc | Bin 99856 -> 101312 bytes 2025/aoc.cpp | 1 + 2025/day5.hpp | 82 ++++ 2025/day6.hpp | 22 + 6 files changed, 1275 insertions(+) create mode 100644 2025/5.txt create mode 100644 2025/6.txt create mode 100644 2025/day5.hpp create mode 100644 2025/day6.hpp diff --git a/2025/5.txt b/2025/5.txt new file mode 100644 index 0000000..4bb13ed --- /dev/null +++ b/2025/5.txt @@ -0,0 +1,1170 @@ +213205509444883-217326119178383 +204028058956732-206357346689122 +267638662803789-267638662803789 +161518128431535-162211655141254 +427815309156367-428209112233595 +424003402121023-424821946030767 +175023754421204-175023754421204 +193658747860277-195872396751820 +165174470608617-165455213184493 +142914847639458-146495235254098 +302161844316724-302811454083038 +201317146392281-203680438163617 +429470458932778-429545503098505 +276734673978459-280839273781544 +525388252879654-530788873362415 +302553299774028-302939011277575 +72206822427466-79146949214971 +302939011277575-303124699217159 +462933970020376-471346905712697 +403909304754428-410668871655703 +333550261133514-338887885936350 +193658747860277-199169520770507 +456205052796416-460819192832472 +81076166149322-81347583055330 +82391634373473-82596084043885 +399091147175413-399091147175413 +3799290744865-3799290744865 +82391634373473-83094841962568 +345618405179851-345618405179851 +83977081220581-84634191907261 +414809602890962-414809602890962 +59305869430952-59305869430952 +15915286053651-17141089021731 +81076166149322-81571317517920 +301057928920460-301057928920460 +206955088139744-209270512762890 +544411189949490-548557612115354 +241814573139760-250052324042398 +62005974637606-66244098101022 +253256394459803-260114323058272 +83279573835972-83596816559687 +161987919070964-162485745765190 +352570075757187-356028557783340 +333550261133514-337596191662566 +202595941199027-204735893907022 +135406693629827-136756337303456 +374606129846789-378124314651253 +312746952788203-317584934290883 +433405855667336-441707011426288 +222383944250845-230402701262548 +168497956858385-168986638151215 +82814697374730-83094841962568 +42818804685719-45140749679146 +87654485209002-88414327244873 +429470458932778-429545503098505 +163252311445123-163392231641762 +474235903668691-481728314013923 +365609753121507-367921024942666 +429470458932778-429545503098505 +116300309838728-118408321339437 +45140749679148-47696418275161 +286142177650644-287081268792188 +18683203355469-19697462096554 +486758001201230-491664846541474 +131362732886229-139045313257661 +367393906087255-370176258300954 +308468516859984-309203568483508 +378124314651255-381398793057510 +307412270675198-307973118165736 +495609920801633-498085043720681 +314812595098738-320363322564884 +326204386424004-330762376087721 +548557612115356-550666819579298 +236918001572818-239803208355915 +362403277362722-364894725875739 +493009916493525-495110373417581 +428970175235750-429057683979633 +83977081220581-84395290996630 +498952080726273-500652427572097 +525388252879654-525388252879654 +500289151886821-502306727407778 +84834990556933-85640324761394 +356028557783341-361512368222187 +425010948617421-425374568035215 +453561624497971-457649826440755 +444413035638328-450520289771835 +233562232194856-239803208355915 +215396115748227-219542066628513 +124686322091079-128725826006565 +253256394459803-260114323058272 +414809602890962-419715174110563 +12115428410534-13479808702945 +433405855667336-437096669641888 +485532499893097-491664846541474 +476951396635787-477940327871613 +93405994213523-97216189452539 +72206822427466-79146949214971 +326204386424004-330762376087721 +83596816559687-83977081220581 +154537462650505-154537462650505 +24747598258971-27912801163795 +515740263435366-515740263435366 +104044130542431-107961981060322 +164943741195430-165818543014747 +175023754421204-177774181016088 +515740263435367-522107388480339 +306562960361355-307295707308006 +87085548843772-87781822775167 +364317893246299-366838251329989 +497505569060219-499596001026913 +383092628166021-391214586599086 +14709285310818-16226245328327 +50795924941939-59305869430952 +86402429319437-87085548843772 +369246670112573-371332810982097 +427069728093328-427619318406186 +508894418256370-511365141996145 +168012963427099-168790686895784 +429057683979633-429470458932778 +294019513027683-301057928920460 +31689401124223-37053754943957 +85725281436986-86498280258826 +273929584127738-276734673978458 +205691130079223-208019881583469 +305883736321513-306562960361355 +110940853542246-118408321339437 +146495235254098-146495235254098 +20748523913351-24747598258970 +81347583055330-82070008227691 +208790047644351-210972459132194 +17643683798624-19000209178089 +302811454083038-302939011277575 +471346905712697-471346905712697 +85725281436986-86051125252015 +265088098018194-267638662803788 +503422300537863-508894418256369 +393740144790032-399091147175412 +167030614629233-167202593210283 +31689401124223-31689401124223 +282463235907380-289721798332242 +13921330771335-15240164412244 +83912506234540-83977081220581 +386567672073240-391214586599086 +304441952399986-304635442788465 +154537462650506-159845864095183 +16743850095214-17957826429903 +345618405179852-351338285762531 +122811772099834-127512665949023 +62005974637606-69683117530333 +305541167481338-305651241655026 +555082104474805-559517041232799 +166424154345753-166771486914483 +423571567463083-423877358791616 +10243185741232-11743782153710 +11277251601637-12468884018173 +167030614629233-167426194263208 +559517041232800-559517041232800 +494572295516804-496376955743620 +182655281468791-185338761628283 +427384137182626-427815309156367 +97216189452540-97216189452540 +536565187793325-539160358417727 +12906793712917-14539801376815 +185338761628285-188402522641289 +3799290744866-9199770770251 +429470458932778-429953338505420 +225414247715485-228267959693604 +536565187793325-539160358417727 +88583581137116-89047622016807 + +417270233264984 +14224643536999 +249371968346974 +352302688530952 +435679439563325 +41642737069856 +53773188465390 +391278032181892 +126281452574122 +475817248421743 +209476665574491 +122675778286307 +428283171524715 +416534595621402 +444659639104379 +153576111137517 +168164605409982 +334835909359805 +528684717842206 +86059463891362 +151730456018022 +380316140337312 +43234422631780 +347593418072177 +464322080594664 +456527594969670 +215282174220231 +229700549082772 +458511100559549 +418264519127388 +372974584423704 +145770007270721 +266492398968408 +147022587387324 +127345928876632 +500359168832723 +275106075656032 +105778311533435 +192860201920562 +479341063665754 +68662427949054 +451664934680840 +511487613193432 +562134509163509 +531311854874517 +480875699214138 +198572401354507 +155941563326933 +150726712678876 +559919143310458 +506811095299167 +314058637804092 +356079539936085 +413118864146833 +431999117332139 +235676646485387 +73813973234506 +534573250945444 +146069441747676 +18718446804667 +276022874587480 +77894004624546 +15986643956169 +462900434169982 +269515610448569 +178328610322231 +74703310151746 +271696472959878 +195985271992762 +138055992787671 +454313083922677 +541291896975957 +428464920079091 +449473564854956 +298662992304284 +236429044858672 +331903572298671 +350848180579824 +286380519159668 +465800946203338 +562278452256171 +306793225368252 +397960837669751 +167456872134660 +204308952406833 +5332656550212 +207950041475572 +339653047908569 +344670347309194 +396284316332409 +109125679422499 +379659441324655 +553826430375453 +194428709355045 +279460434121196 +490452836622911 +333924531746098 +262754232568912 +140296433075947 +452295606060609 +78274836814650 +389087616105274 +513761114877622 +481286127383670 +33180677874883 +274949176929992 +522963509248107 +527763769859334 +432330087714050 +394838673802869 +469650785063626 +159007805688758 +455896978581450 +275657888187193 +354617190426279 +287924781523701 +320459050320540 +163528194321318 +25622522364457 +389534719909319 +432646896553908 +123792720051454 +66674775014163 +92298285076627 +444436681592575 +145268497459776 +528055477482525 +339599459403792 +225408485098248 +385945002718951 +100103153692052 +70563144830372 +295067398062001 +97507183647966 +179243409212528 +211975148830702 +276187280019874 +171276107798144 +278793993307426 +75656553315225 +441195078504292 +498098840491784 +400370477566556 +553789944431218 +312689836028119 +296142949686765 +458978825447458 +162900794111522 +428466055043971 +243673235069240 +486609706519567 +263538545120474 +102949075498185 +447106670676791 +558712689748779 +391354301848385 +547256147437840 +249070775242775 +512984460161286 +51038978027298 +354061276641946 +110171198975731 +497613228009801 +239652904266317 +470845109643047 +519473935178555 +463743336734996 +560117724347930 +328934262734465 +251948394549521 +235086705182584 +254115997695283 +32128499565446 +63080803275488 +167507524386821 +305780400227118 +461103732913106 +494807833009248 +328155384795138 +181646302185711 +480479356124914 +481652205004318 +93752760533196 +257228589210317 +157098513294570 +217760930009905 +205722130711021 +383076478305196 +474861433410895 +166091544432674 +72985490754119 +346582974740791 +451136239933969 +538748064148111 +288181602292539 +390581022159711 +467254408736518 +96113037577542 +540303653222027 +4436738480901 +243153888045300 +237105446680223 +11232529116767 +412777890144009 +402878756460992 +356269103259268 +472163548456870 +393659011377264 +59056447042791 +264787044039823 +204764924792990 +312459614842562 +66743414240907 +192814895677953 +102258921068235 +468272145066849 +159675974927063 +172030127029963 +109034286367895 +142474748763992 +366368626545260 +14335041104082 +497012041284177 +313667686080271 +456492752535990 +287039110331610 +521593250782070 +84605652812915 +84596447538067 +68279021896235 +295579605096812 +62294569866097 +345333169437312 +377475335674445 +349221307023812 +305959412133449 +452468477478921 +379691942070323 +20648297487357 +310964630747268 +316779622079844 +252132484492563 +316154875032559 +172675638722391 +438161243071050 +437791132740048 +533368843025734 +210500557562917 +263862548991265 +518594012305851 +326468732154814 +310774570149262 +371157800448208 +369642567515959 +407277194845282 +373262368331661 +98830446739071 +489191418701928 +89199964522682 +109821726420094 +488904007292128 +179434831567037 +294005784481659 +44049532468260 +382632111136335 +390980316453461 +132589783632537 +115532032484779 +354734769329072 +212817661928320 +64166375331091 +144194914018539 +554482955493711 +445603119608357 +249637642808387 +358162031541914 +53884762304177 +497779116573797 +139144319689582 +319043948021542 +293357438834275 +356773832342936 +425684600053583 +136504381647739 +516476422443162 +421628066903281 +185564796488638 +454978117360752 +110112938289945 +118829270869180 +535137465441529 +480118480569991 +403679437817032 +459142432667018 +190425432044222 +45787668028077 +17476114973935 +381227909127479 +28696436061200 +119739055949174 +270984309648368 +542421563231164 +350582192270523 +230113400587912 +400119591992161 +354108404019562 +470454168993106 +178027330059804 +561701596848914 +432749725896490 +280144282810756 +175471556886458 +158638537204813 +3423878569728 +23212379050071 +70816624264310 +152710267648008 +264313105255866 +162827149679053 +240727480999682 +411210917977834 +443159975931260 +38276838576587 +95497284983761 +97156613604225 +294030660612698 +514026854500690 +510528487992104 +238575580200042 +156744775091624 +482015938137898 +65499063442228 +533015673763384 +417550871890227 +91756875242250 +295395899041306 +500768176705488 +56218193108321 +242372569704393 +166038451410947 +150480134840041 +360513019313375 +398140942335468 +210259835509207 +499853924623735 +519242529240175 +183309644637083 +98470950346799 +418936723592169 +205190932271418 +33712896376095 +23201452974265 +494398705771843 +327173803026407 +369115283437346 +144434646008046 +110758729754683 +505430409791676 +19618143820210 +490904864361351 +241354935876373 +174511385663874 +290741388568852 +32155714822203 +114577527905614 +423840503262925 +196253819817563 +291975241251306 +500400623234330 +447969168935231 +358001613750219 +490491321668148 +84808639377922 +493283722615796 +302489878833229 +232935650440229 +495013765899131 +394815044374739 +296657336896227 +190412350358702 +534653572581888 +328850671281289 +389481353809004 +359937519271548 +338921108491694 +154330768901587 +179999444376275 +271913076648123 +327016994845206 +40940335739749 +464503244194793 +387530982203971 +61682191690249 +292226013020416 +235597159323192 +139581582922563 +539138260469324 +199645255445214 +416102095885854 +184408486698811 +72853573252794 +307230221187552 +208718183210142 +85475563358082 +332930474336381 +542569132071634 +222120659530537 +428486768848934 +50546456982748 +439048552637474 +93680673066572 +335577882881430 +149381316957894 +273917981119962 +284207372541459 +560134189006237 +439534807658822 +62951269623136 +345570090800037 +7795947193503 +201288246099159 +194190566077552 +168296899749644 +274697313348062 +478263730887817 +416883569615692 +419716106848812 +90222775151278 +166131575502577 +136725279026111 +406920589859872 +22799532405021 +92305725530387 +254114455649461 +101055054668723 +104990319099389 +553219565218379 +262811451047677 +294028780093422 +233344457904529 +456689490359781 +497828684797910 +54731808353017 +156378669504087 +308097151971544 +80946381658354 +97657004495501 +174175716540071 +174174962284120 +548988637995994 +123062560435724 +101608317560160 +391076366105052 +426499532499044 +6884879402707 +340463345319512 +345239944804516 +498597365044429 +390441014626557 +329675870060976 +351514802000195 +555213273068052 +249255158011198 +538949282947726 +196197988102626 +103943538950527 +181963498426569 +312811272853810 +485669870186874 +511199043594652 +506819339894425 +219934716316395 +526074244731736 +388712580961781 +456414040541168 +326943910622866 +441837859940234 +373222293363087 +194542551489050 +231242503734411 +532524032922054 +137488424122242 +227656157255778 +132378524937589 +542828317231154 +454252870742934 +135281837075949 +383876587828987 +238948305403770 +437445735682454 +379213990112929 +381460529073509 +34337867148608 +311337320147231 +201257847020697 +297350884838117 +198999601108724 +158288273072696 +524438984681493 +71291700184272 +512273856599242 +267567787286367 +268521511591152 +447882575482086 +253018550683872 +502335857889237 +390005102559579 +185270934624696 +208012073669107 +508404694483572 +408413247516419 +152817108360437 +524108395429341 +558380403261330 +131449982048331 +70204649139718 +86542239061964 +274289528913351 +275898557485501 +497158313254548 +149814803162433 +553708392302261 +254285377476261 +431354303697820 +489126583518036 +405061016298013 +109332816851646 +103030862536923 +434187088782275 +276544790949015 +341399050162106 +246082063500747 +77402687727500 +500136589963435 +373341401975844 +89218203965726 +217965731602965 +118113751656246 +429026024642265 +208370351528332 +389577558163516 +415836771180145 +61353149322936 +80442346951375 +37647604359448 +32510786750231 +139363735141481 +341384051874871 +479573452832838 +251923924949308 +502436727670457 +356820975286835 +77220754741864 +265255859527646 +187662036260970 +44159353458813 +205675009851157 +209162225970226 +126552717130865 +537694475681942 +271967190526864 +16129858311873 +406558243475209 +41584671315254 +189350044682815 +414813971884885 +166445521119759 +421414769392964 +258193897525780 +129000475023726 +160102967827398 +259361542157044 +306704714274888 +231679142407610 +163078963508226 +135755106055079 +131268611120761 +399384103588111 +244130745293657 +340208111307003 +408536333327485 +492123609486060 +107810837331359 +284910345787006 +185018969965357 +65970078275621 +470253520149753 +161643683287111 +132230548345331 +548647547302593 +247680336108197 +107089372500486 +110165466056755 +433447533808783 +304903085023282 +196255974272770 +528599869870149 +328787103268445 +161354610527288 +413829848422700 +365755468060296 +482517977627600 +307022105168555 +246006602083654 +122030441288830 +541872170429419 +400843086758761 +482534676551994 +185919863770600 +462353355457585 +562917909941012 +190869015740358 +515899382734125 +484425008732526 +508581145125899 +518623236886156 +69576212144565 +317195606578441 +398362177306622 +394080520843900 +141267354712397 +314772439140271 +542380947639293 +503065352812025 +374452106653404 +337188710156848 +529761545891872 +101621585847815 +164126361675919 +85526680823296 +53068597291337 +217621552435387 +176989738949355 +124662764591310 +554638051114105 +558224345352173 +357475309752342 +295643047559471 +496247539835523 +199933887457670 +353026401946126 +134655711483979 +335807764452577 +207739690903197 +520792015103503 +545735856820161 +535423775529173 +255201909892093 +522093028638616 +269932187893724 +361014686090466 +512556128316410 +22749448306174 +103561641284939 +447246981687804 +13699282413272 +417267623662228 +107475339404339 +510806875187339 +512504944693385 +386624808039169 +149893645529147 +8418829277187 +59714167225351 +494291496068490 +288799377906226 +158738238218326 +522407846964927 +353890049109841 +518429096774451 +87836682933837 +52625276776155 +264709383364198 +550249326945159 +522230185005266 +47840372059452 +152834422735457 +429338780274998 +3363809890131 +267216882821215 +71705146135946 +102160230432148 +406957054403535 +398167749122229 +36004367205148 +339892358252151 +54938444498399 +136631503675256 +113005072974716 +221156332882434 +230523892958867 +65055033069585 +537043019968191 +476603272598660 +300837101554756 +148954210296557 +504868993167456 +27424169294192 +386969796825838 +20486514139614 +255081411130076 +13451213140569 +155136186017734 +241322316420425 +258655342636806 +334036328465912 +132090285878237 +388520108093791 +79023610402621 +381766688079024 +386743531419885 +48320792489192 +247568916997206 +72968443167249 +120788362556618 +876823046701 +241281441786611 +76710409791576 +91230845975727 +443276654379811 +514373945848590 +239187798567826 +442678304173571 +260037506233019 +197377602965277 +182544728321319 +347166407894067 +13672850404311 +237795124309123 +367496114240733 +174810193224736 +492950541304214 +509215453821213 +424701168094531 +326352251795679 +534360199966256 +72245328877641 +107084674262434 +491992695505708 +459491221827267 +428245398422741 +9489060451602 +491041684615282 +125051209508764 +482233446988432 +448396520698779 +381781940651704 +360754780607448 +495420800081650 +11110405946214 +325596915022454 +463549159048137 +58884451871719 +451028129368881 +391844180352132 +126854306767525 +55828684133200 +76823273053826 +157103442162547 +297831711052286 +175635081401523 +132635950619001 +357700338496654 +284360316440540 +432719128139517 +381722437234285 +539383522220315 +319393675373641 +281714147327064 +107715113415816 +240120030661210 +172791660803233 +502297377234208 +535655069682621 +241425025638118 +115975496963469 +136367673850153 +436124321078925 +237066955400610 +180337819864308 +225842232818783 +108017353855468 +91841394485179 +81673967057812 +255797850268244 +283629339470153 +35464951337070 +472498651190775 +31296506513277 +536544210459283 +317859205061918 +19701340259734 +516056372604020 +327566984044775 +396240683128638 +31087758412921 +488377991676964 +392828650549956 +246919329604239 +371210101878345 +424682795377861 +4659994590307 +436851022257833 +22415833069678 +167835897459537 +169300722186317 +482692114126600 +56250741696209 +498070299617537 +241700711816876 +194606455201358 +165083964109101 +221870213534219 +50750412353656 +17115109803128 +308437767897249 +369755120734801 +311431717242784 +528878377997693 +346260851350547 +81270459848668 +528915874721365 +281314131914232 +209307057037354 +104588754711586 +519241764459210 +280949649453964 +152855614863362 +283614086688322 +404440903904106 +289696070008943 +550591902219243 +29517049333319 +272316706009884 +497813676542263 +424488409762048 +462791026073687 +510212146598334 +403390463695276 +86447168103904 +139976551789226 +394914711944661 +138028264431749 +127846112861729 +95227564036602 +33655502800504 +260773410170203 +351389224041523 +337225484116032 +113429999159969 +142324859911221 +271660547654325 +433891427456118 +394794516182229 +402733531351286 +545852051442338 +558346108836322 +416738443099575 +303841340474299 +161574617477273 +354844649557266 +448369944364581 +491521151084653 +22085035096921 +80319430505395 +58803155364631 +214120208818869 +236168261445080 +173108238265535 +240045538063686 +67925402608689 +539757991509483 +363048782889211 +48714895414947 +94787029698092 +375946034188233 +515296211999195 +339780591476678 +340227734341902 +177248448798641 +51302238860258 +151386766217259 +507749120111726 +293902391260032 +181631023544542 +373593799685082 +476561268997598 +312913925066489 +26037097727160 +144982437470825 +309549851622790 +322811308393950 +296495906208680 +311339547592957 +438680599006714 +429643622541649 +90266986693688 +348128645855160 +412875179671111 +497173275011290 +204126248360340 +505527979817527 +329634699915169 +389022234310062 +151975676526078 +277982498241758 +20177858742981 +90377215102103 +528874288252822 +196014629643597 +311892128787263 +148189548179827 +529225374799519 +378342314818775 +145614577369576 +57712111779633 +50826942726721 +451130613602896 +246228697367539 +83475847777934 +62569965586920 +500733026987925 +183926289261916 +342384746006324 +500512725421577 +440032944544871 +436409641122584 +322611105218158 +110302709696077 +476063737765137 +335070622918544 +464905953424623 +423765969231332 +438574195471629 +172445561218570 +455073744249756 +365120264938473 +31584345965667 +320275526407238 +229799236225423 +176642367241503 +322965240768016 +117986743562127 +479415201599494 +392931517266607 +333532124608404 +176805090007048 +5091162380344 +504358320170281 +119377058908335 +265894068257778 +167351876631132 +124704959044617 +373314403305604 +279254305601617 +287252887793925 +48771927621889 +208168954121578 +93145929830513 +373970354259011 +206999292157513 +78124421808241 +438860219622119 +212532497721950 +548704204888361 +139713687631528 +117854468902935 +413377837409901 +152446971058436 +170253946427765 +15442801965865 +440792688490779 +451377542795027 +143958052173350 +105764333303929 +56435158835677 +45145053792093 +406523883981013 +141269179434975 +287500579964733 +97800948546339 +479807405893491 +460736409451005 +133366013006983 +261846917771104 +41094746232105 +172392405513696 +148985142938343 +370717106576732 +466799240644811 +429903382916175 +197544706094109 +354535834828033 +188171237250860 +132048468564151 +426768605345187 +502618908371958 +271098480654350 +279823513545612 +58609737910842 diff --git a/2025/6.txt b/2025/6.txt new file mode 100644 index 0000000..e69de29 diff --git a/2025/aoc b/2025/aoc index 3f42aa92a9d21f22d78649bbf13b5e3803097a9d..0762a84c7d0c4c72aadc880434c800338ba175c2 100755 GIT binary patch delta 21015 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 U4%cI;C=%Q9}YXn zQ}-(LoH`RzOEa7P#ncPRo+$nQFn7Vk%)(I+pm_N3eHo#Wu5f$k|2WvBSc5G* z1Tyu?fGg(BFD#uoWB&iH^uJvJa`g8robW$N)bGCVuk@nuuTPjI6lcUK7WyG}Ju zlCOeD6UI^Z+GA%fcw*+`4_3@8#ww^^RxJ$lsm+KNSpfctx@6N%oC>8s!i;$(?4wBs zM!w(q`3K3D-Zqy8^%*#D(=$KboTzATmIIUn& zPIsT)W7jw6I6k|3wbb$UKQBG9=(#L|w)NMW4UTUYUyprs$ISs7Us(Cr^DA$R zDV^unb=+T8YSIh8Ni}9DT1~G_I`-4q<=&dN4DGwKI>-06)&DK_YyFgUW8Z)D+kss^ zS$_4)${*&v@P^~tH{WYndiqoSODR9?GsNG0XJOtP$MUj~qXXAIYze+GnSJB+QN#P) z9yq)%Z}f(w7oRMib#hzngafbl8{eb2w_oO|;uX_>)KBS1o%n6;q)*=rEy?!sXpRRWk-WkX`fp^X2ImyAN5oWwGA3cBZpe-&sYc zVj8c#I(fm@Cthy2JLS`Z172DboAljVLYIWapXD|gPdN@RI-B?XvWfoB2CW^RKX+Uo lQ|8g$S&w~v{CLCCcOP1J>FP#5emN%6)cV@%CHsYi{{;YnY0&@x delta 11471 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 diff --git a/2025/aoc.cpp b/2025/aoc.cpp index 340dfe7..5e1c36f 100644 --- a/2025/aoc.cpp +++ b/2025/aoc.cpp @@ -12,6 +12,7 @@ #include "day2.hpp" #include "day3.hpp" #include "day4.hpp" +#include "day5.hpp" void GenerateDay(int day, std::filesystem::path base) { diff --git a/2025/day5.hpp b/2025/day5.hpp new file mode 100644 index 0000000..0e6a502 --- /dev/null +++ b/2025/day5.hpp @@ -0,0 +1,82 @@ +#pragma once +#include "aoc.hpp" + +#include + +class Day05 : public AOCDay +{ +public: + Day05() {} + ~Day05() {} + int Day() override { return 5; } + + std::vector> freshIDs; + + uint64_t PartOne(File& f) override + { + bool ranges = true; + int ret = 0; + for (auto line : f.Lines()) + { + if (line == "") + { + ranges = false; + continue; + } + + if (ranges) + { + int dash = line.find('-', 0); + uint64_t a = std::stoll(line.substr(0, dash)); + uint64_t b = std::stoll(line.substr(dash + 1)); + + freshIDs.push_back({a, b}); + } + else + { + uint64_t foodStuff = std::stoll(line); + for (auto range : freshIDs) + { + if (foodStuff >= range.first && foodStuff <= range.second) + { + ret++; + break; + } + } + } + } + return ret; + } + + uint64_t PartTwo(File& f) override + { + // sort by first ID + std::sort(freshIDs.begin(), freshIDs.end()); + + uint64_t total = 0; + uint64_t curL = freshIDs[0].first; + uint64_t curR = freshIDs[0].second; + + for (size_t i = 1; i < freshIDs.size(); i++) + { + auto [L, R] = freshIDs[i]; + + if (L > curR + 1) + { + total += (curR - curL + 1); + curL = L; + curR = R; + } + else + { + curR = std::max(curR, R); + } + } + + total += (curR - curL + 1); + + return total; + } +}; + +ADD_AOC_DAY(Day05); diff --git a/2025/day6.hpp b/2025/day6.hpp new file mode 100644 index 0000000..b04a865 --- /dev/null +++ b/2025/day6.hpp @@ -0,0 +1,22 @@ +#pragma once +#include "aoc.hpp" + +class Day06 : public AOCDay +{ +public: + Day06() {} + ~Day06() {} + int Day() override { return 6; } + + uint64_t PartOne(File& f) override + { + return 0; + } + + uint64_t PartTwo(File& f) override + { + return 0; + } +}; + +ADD_AOC_DAY(Day06);