Advent of Code solutions
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

im not super happy with my original solution but im too stupid to have figured out the smart way anyway i just wnated to document it so maybe it sticks in my brain man i hate myself

Rain 33f4e62a 1f211ccf

+1314
+7
2025/rust/5/Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "day5" 7 + version = "0.1.0"
+6
2025/rust/5/Cargo.toml
··· 1 + [package] 2 + name = "day5" 3 + version = "0.1.0" 4 + edition = "2024" 5 + 6 + [dependencies]
+1189
2025/rust/5/input.txt
··· 1 + 339893944525735-341573247957386 2 + 423438371167408-423502470336830 3 + 262699977171339-263246133728782 4 + 29180284211785-29730008796749 5 + 132544507610547-137087142052530 6 + 23727132980908-24603001401235 7 + 262528185117162-263085544855089 8 + 278121291685441-279423792646708 9 + 202477978128141-205982854352667 10 + 274463477362983-275863832619429 11 + 127277194066829-129270589323885 12 + 425054220427689-425356002864623 13 + 283717918146714-291086505335569 14 + 445774156312423-450884035624356 15 + 487238777185959-488157184493647 16 + 393782800985246-393782800985246 17 + 20426179820728-21137302925949 18 + 262699977171339-263246133728782 19 + 414549244618549-420017715070945 20 + 194125833859829-198449918005728 21 + 342665552480232-351143879956110 22 + 296019656390500-300395659650882 23 + 114939338459819-114939338459819 24 + 175149241808595-175149241808595 25 + 445774156312423-450884035624356 26 + 120874182899623-122762189815132 27 + 328556244653334-328556244653334 28 + 126170609209916-128081824507706 29 + 262528185117162-263246133728782 30 + 84920130679541-89269134684673 31 + 427575616353376-428143904474569 32 + 315693160736914-316119983917126 33 + 536907620118594-541143301356516 34 + 51321996928312-58149382333159 35 + 6041699109053-8259409660507 36 + 536907620118594-536907620118594 37 + 262188459833851-262699977171339 38 + 268030285196104-268462129653606 39 + 424166511008291-424612005634052 40 + 73644888165784-76131000838029 41 + 377649615919740-379699191722247 42 + 24603001401235-24692377041223 43 + 262528185117162-263085544855089 44 + 28001128997679-28738485844631 45 + 462762828985082-467463792918065 46 + 151484933308185-158481850461088 47 + 124523639568588-126529033062109 48 + 547094794199386-552157901862623 49 + 424891088952857-425356002864623 50 + 553058446900473-554826446674715 51 + 198449918005729-198449918005729 52 + 325208623392997-328556244653334 53 + 393782800985246-399415465035554 54 + 335392597509604-337205669446452 55 + 316119983917126-316188509511379 56 + 256867644218170-258756363447274 57 + 414549244618548-414549244618548 58 + 370269641605433-370269641605433 59 + 265818031704004-266178021034862 60 + 222148266105282-230309362759739 61 + 313087077413334-313676560982419 62 + 423843770045988-424166511008291 63 + 425356002864623-426054214787874 64 + 483666067613425-490881397596491 65 + 383085173648020-388160587680424 66 + 372849446456380-377649615919739 67 + 346565096006290-351143879956110 68 + 278987466551756-280406070212435 69 + 338714983554929-340500998929847 70 + 231878096452284-237604614657333 71 + 318102362316439-318556053224939 72 + 434963757343316-438631551475846 73 + 25783899732513-26332840585266 74 + 362625807626180-370269641605432 75 + 128417379415542-130436031966168 76 + 506839680367273-510928010190367 77 + 253028798312085-256867644218169 78 + 427575616353376-428143904474569 79 + 94505334681795-98183188622321 80 + 333174891890554-334988015572048 81 + 241978613856141-241978613856141 82 + 428916202837418-429538127636993 83 + 268230103327458-268797341611553 84 + 557131570064931-558769656642589 85 + 404581299168828-406869527717397 86 + 523340675231862-529066786873501 87 + 472978879230494-478831004559105 88 + 312085043544302-312192934237898 89 + 296019656390500-300395659650882 90 + 93023428038450-98183188622321 91 + 17885912613467-17885912613467 92 + 235395632958908-240707044954582 93 + 31432978866415-35637248224267 94 + 453427253894083-457095038326658 95 + 428916202837418-429422397505146 96 + 155581812556513-158481850461088 97 + 336646854435127-338053502056979 98 + 51321996928312-51321996928312 99 + 263782729868133-264051675157226 100 + 556126332740713-557788019054178 101 + 307463890753288-310619345754687 102 + 331821206314684-333513262756265 103 + 271531768899694-273077136665943 104 + 63628572996359-66628254284040 105 + 262699977171339-263085544855089 106 + 241978613856141-248260861671440 107 + 123482404446575-125472687251453 108 + 268462129653606-269308538681718 109 + 102612830996165-107918875798501 110 + 28441546265925-29180284211785 111 + 89269134684674-89269134684674 112 + 319809300911099-320639220593398 113 + 215396873736574-217941411729146 114 + 273316887035581-274848291657662 115 + 526622986373255-531678288886630 116 + 962264753707-6041699109051 117 + 269008234292091-269734151922013 118 + 275403302765621-276626676271015 119 + 505492675832765-510928010190367 120 + 284352990146276-286908739119520 121 + 422895203642572-423502470336830 122 + 424166511008291-424360470436452 123 + 163380603732730-168545647715998 124 + 272557611651537-273797127520072 125 + 134929267793493-139827237631659 126 + 404581299168828-409435707818761 127 + 205982854352669-209290832337978 128 + 319809300911099-320639220593398 129 + 313676560982419-314272594986212 130 + 558983116833360-560494715305956 131 + 102612830996165-104469500761976 132 + 547094794199385-547094794199385 133 + 467463792918067-471455932383841 134 + 142579388871358-148962275463882 135 + 515328808609514-521571901600704 136 + 182235514601443-186478410694773 137 + 427077744871335-427426180796775 138 + 478831004559106-478831004559106 139 + 277095147993385-278659837794324 140 + 28441546265925-28946643221318 141 + 430096001198177-430918129809744 142 + 423438371167408-424166511008291 143 + 427881334159983-428370887361456 144 + 26522925260154-27048017714740 145 + 318970716123283-319809300911099 146 + 163380603732730-165782878498884 147 + 317553347526856-318203463676413 148 + 72589080211307-78415099870601 149 + 428916202837418-429538127636993 150 + 497752594628206-501454397904299 151 + 425824611813033-426664928888235 152 + 279866996388808-281255682465296 153 + 26097722441977-26818789285419 154 + 186478410694773-186478410694773 155 + 27779401024357-28001128997679 156 + 428916202837418-429422397505146 157 + 422613323679727-423096430225013 158 + 28946643221318-29730008796749 159 + 267452589398241-268030285196104 160 + 42989499150596-49378247334244 161 + 276116643632938-277514876683302 162 + 558261730358597-559754786418535 163 + 114939338459820-119138582403378 164 + 555064022257716-556668738494546 165 + 302299016140945-307463890753286 166 + 554289396158190-555857160884127 167 + 385670052358832-391745365774918 168 + 560238283413109-561730870608778 169 + 63628572996359-66628254284040 170 + 25600577620245-25783899732513 171 + 337646029202255-339387500067209 172 + 35637248224268-38645470784544 173 + 561373954529617-562817005870729 174 + 142579388871358-148962275463882 175 + 122375914880675-123870600638342 176 + 355361191896455-360200554003391 177 + 334147049549245-335926042899456 178 + 453427253894083-461098359210451 179 + 438631551475846-438631551475846 180 + 24921876651891-25189930505444 181 + 27500028074749-28001128997679 182 + 20426179820728-20900072773349 183 + 495246724746630-497752594628205 184 + 314466993982017-314712513064905 185 + 26818789285419-27500028074749 186 + 212012929716803-220403742996021 187 + 175149241808596-179087636204056 188 + 12517106852476-17885912613467 189 + 190 + 466048543662453 191 + 61396949950730 192 + 432114642562007 193 + 243346306664145 194 + 42274284252406 195 + 438405003020487 196 + 219829530374526 197 + 545368004080383 198 + 44289757948734 199 + 347258407842201 200 + 304732544178901 201 + 167274841695773 202 + 256163756191829 203 + 541256019447146 204 + 268795910910828 205 + 503633907442158 206 + 541460872700981 207 + 462789402153153 208 + 47225598303970 209 + 347068420552719 210 + 546660890656134 211 + 9211021131640 212 + 220577365545146 213 + 325075856364271 214 + 73042056291735 215 + 242392316035160 216 + 344593972909904 217 + 287814757604408 218 + 139613623522256 219 + 239274104436980 220 + 226414063121523 221 + 553739063238786 222 + 9675671775357 223 + 307718719268062 224 + 34917236969147 225 + 581410613167 226 + 336383432845083 227 + 326376634663593 228 + 532219197316144 229 + 374654238015608 230 + 312195391670649 231 + 178639019690591 232 + 379321174797880 233 + 145303548216911 234 + 152278977772457 235 + 281816485690263 236 + 356462122001179 237 + 442208695476052 238 + 55106978675876 239 + 125377302406463 240 + 151001424215547 241 + 517606739061474 242 + 522259270861799 243 + 366491962789383 244 + 456984819888264 245 + 436235496091312 246 + 82793080421246 247 + 497807659226636 248 + 11368755102937 249 + 90061017160503 250 + 410475422823024 251 + 156428953730094 252 + 139054696433633 253 + 79276113785260 254 + 3814972571923 255 + 406683719821747 256 + 214108739361607 257 + 115432987219777 258 + 10076233468129 259 + 371371459043204 260 + 204171325647783 261 + 509588534522043 262 + 238910597998066 263 + 395513002594386 264 + 410404635931261 265 + 358676340841520 266 + 493256520570897 267 + 134614077832252 268 + 490711289239150 269 + 443095182324783 270 + 472625875023088 271 + 96462764101950 272 + 485101903035719 273 + 409366690741766 274 + 243949477019755 275 + 548183885752076 276 + 298785736066811 277 + 1044658618763 278 + 544511592096119 279 + 77726148773402 280 + 89430385665603 281 + 358895471808140 282 + 173746106934221 283 + 167961763054966 284 + 446090976391107 285 + 182788838233480 286 + 462302633602832 287 + 362513673988919 288 + 351103657540284 289 + 372841775713618 290 + 483580312849190 291 + 420260837902587 292 + 284079453398773 293 + 12165486880392 294 + 306095937861584 295 + 98244128325675 296 + 482282506445812 297 + 357510470338846 298 + 129201158453864 299 + 151906908758437 300 + 525582651220731 301 + 75362820443631 302 + 257798920035506 303 + 229402760554507 304 + 560738641317459 305 + 8126423594932 306 + 542722775469009 307 + 236981380817231 308 + 120128873061121 309 + 318128341474661 310 + 285718192847757 311 + 163072305446719 312 + 319992677077213 313 + 257154034043613 314 + 410346931884367 315 + 247912311350008 316 + 21977349550620 317 + 141784744967945 318 + 281532164311276 319 + 132855557459086 320 + 455375198972840 321 + 553012336988859 322 + 221302360679532 323 + 149697587088910 324 + 141136150918089 325 + 40202718340118 326 + 299215951392130 327 + 548839460528944 328 + 383404426978352 329 + 429196783183612 330 + 427203424759704 331 + 117225161300036 332 + 330797991776898 333 + 72616057926257 334 + 526012170655346 335 + 274167207688827 336 + 358932447824714 337 + 462887244388198 338 + 341347729921659 339 + 524648166238751 340 + 485124391870555 341 + 328261557479652 342 + 51954303704701 343 + 516443087111043 344 + 424286639638929 345 + 528183438162443 346 + 360138072530839 347 + 561529068348440 348 + 326176339836424 349 + 65035169918751 350 + 343949528825580 351 + 286669374868503 352 + 349711044017445 353 + 255199850947870 354 + 425335003169998 355 + 62799359535029 356 + 23458044763318 357 + 346070173007785 358 + 326562229332943 359 + 60126264838242 360 + 53272190510727 361 + 365976482014839 362 + 1788139576873 363 + 404345913080805 364 + 124530282797560 365 + 189027632248528 366 + 254677061816454 367 + 117874505609654 368 + 88840087905561 369 + 309462196983730 370 + 287563337319523 371 + 497401189943064 372 + 409654223921877 373 + 430655369098918 374 + 253257094402795 375 + 98549097214568 376 + 460640507099380 377 + 163371985481824 378 + 191797006788004 379 + 541376567463654 380 + 104447794454963 381 + 34707950137881 382 + 287655999588875 383 + 319700504397535 384 + 247356367181626 385 + 147400028760343 386 + 502897438178103 387 + 138780594630942 388 + 91970580507233 389 + 139193338264657 390 + 253799600300191 391 + 548993917488751 392 + 461863065836506 393 + 222962596026251 394 + 234543214446904 395 + 201713848748191 396 + 6941850455005 397 + 401971328078577 398 + 333020131875343 399 + 150362805976349 400 + 390340601652872 401 + 302995818901903 402 + 386866606336301 403 + 180690988911337 404 + 496193678943938 405 + 407283156609030 406 + 499102294425499 407 + 456399340493740 408 + 388293589780080 409 + 77739317074226 410 + 39308070551340 411 + 82276314669115 412 + 286990236861067 413 + 490230466587730 414 + 365700907247040 415 + 283382493013186 416 + 313311282092008 417 + 425313099658778 418 + 347347105979340 419 + 470355315127502 420 + 483885171770149 421 + 285356965662760 422 + 264101910689510 423 + 489341931496654 424 + 55079375868649 425 + 39029858711540 426 + 544543841422239 427 + 373844539199619 428 + 431264243749572 429 + 64477552147477 430 + 399678734801192 431 + 451729351232109 432 + 393235364278359 433 + 97888304234341 434 + 538913497369139 435 + 26672976054115 436 + 507978079141706 437 + 520811596742679 438 + 95052557045155 439 + 97923638115328 440 + 208976143710696 441 + 302676949197762 442 + 85639966303546 443 + 316782922426370 444 + 392575757918915 445 + 218536735498330 446 + 461004135831151 447 + 529070994943410 448 + 342371680380893 449 + 64389478074188 450 + 298384781497959 451 + 469955560693307 452 + 281899863765398 453 + 407735839579907 454 + 286053144817254 455 + 113312431663084 456 + 377551327181210 457 + 342070899689455 458 + 140320685411440 459 + 153631146806925 460 + 20083704516965 461 + 296598218632277 462 + 483918022619322 463 + 12656529129394 464 + 47897702399929 465 + 138069817816397 466 + 224906448058474 467 + 43000087749078 468 + 421725922710310 469 + 358011934973521 470 + 248434678274014 471 + 109126204857082 472 + 393304978284695 473 + 171010686356445 474 + 242182530320676 475 + 126677810455657 476 + 550434592352703 477 + 420598813944333 478 + 515038742363422 479 + 375470840299721 480 + 275622949833912 481 + 397359184937254 482 + 530436781984297 483 + 225201835229207 484 + 469681977237009 485 + 167703353323945 486 + 59696123121193 487 + 325554843278062 488 + 561887516666616 489 + 297755823631819 490 + 280959724344018 491 + 293324092153189 492 + 497141847190179 493 + 264947583538685 494 + 105634533261092 495 + 348688691550230 496 + 377548933259501 497 + 347783818416999 498 + 412251775119754 499 + 461807773448418 500 + 134943621017307 501 + 281046691891722 502 + 411924513381349 503 + 478226176167160 504 + 29912848192710 505 + 213293328096322 506 + 105279710805124 507 + 133910865885759 508 + 287481733590333 509 + 142934548984147 510 + 524688271718839 511 + 456518538773598 512 + 424456663446776 513 + 558972695174694 514 + 298826696761689 515 + 239736661199297 516 + 82339044549581 517 + 216091811351148 518 + 5858739472460 519 + 426595960375826 520 + 88261855015736 521 + 197058715499821 522 + 167743981683794 523 + 432443066542861 524 + 100358651778697 525 + 158591643546365 526 + 88339065709227 527 + 366309320632188 528 + 339984947385387 529 + 140849703134196 530 + 404938342751913 531 + 357337934875392 532 + 54028415570348 533 + 524021573136747 534 + 25834028303898 535 + 496134482590913 536 + 353132581025357 537 + 4581346486723 538 + 524364239659390 539 + 27042677275981 540 + 155713804150171 541 + 495023663719842 542 + 503243033679697 543 + 555329828594036 544 + 208587489965397 545 + 556347688637869 546 + 92528690081374 547 + 117984062642491 548 + 54438722455110 549 + 199340416540301 550 + 231395694283517 551 + 212260360623899 552 + 98829936635896 553 + 262226932623479 554 + 93673656038764 555 + 106404484631219 556 + 368808526093778 557 + 159094713971448 558 + 561094565445787 559 + 345195713884858 560 + 352119495945492 561 + 31152384565167 562 + 36308216504991 563 + 448693754294579 564 + 430087334294903 565 + 167743197967927 566 + 77702125733904 567 + 411098013120879 568 + 410684579448068 569 + 525557100617240 570 + 365364534885899 571 + 364768842852464 572 + 18396852231361 573 + 382496566205340 574 + 507692298372823 575 + 292300634358521 576 + 348653829254321 577 + 357958413411452 578 + 142726171854221 579 + 314410257039150 580 + 540052282309098 581 + 39911643474854 582 + 379046845399252 583 + 283843418693321 584 + 153281326571123 585 + 171342944811822 586 + 461542628049598 587 + 58405345196405 588 + 36812705189702 589 + 289849902528470 590 + 442470634556598 591 + 302041504315158 592 + 432836210445790 593 + 359249576807901 594 + 421569629568962 595 + 396231466734860 596 + 325946477244160 597 + 84463555634362 598 + 115565219635036 599 + 409230253887266 600 + 551888724683333 601 + 42034363373076 602 + 16749723011775 603 + 366046532866430 604 + 307963253913256 605 + 453615523509546 606 + 150282461535958 607 + 378631415178427 608 + 365305595031639 609 + 251794381220769 610 + 423394676420644 611 + 403925118840654 612 + 31651879671809 613 + 529158528014209 614 + 405694828752960 615 + 515747512983825 616 + 1995496814886 617 + 428436733762261 618 + 248299068845115 619 + 389359068731104 620 + 291808390876621 621 + 507848907211852 622 + 358596837284788 623 + 140938442715579 624 + 465256462776875 625 + 546315619141516 626 + 230740028641739 627 + 197656958532062 628 + 208300388881141 629 + 273827150115713 630 + 333700958100045 631 + 509141787304557 632 + 294112346949019 633 + 8560617028980 634 + 381918745202441 635 + 337977692848210 636 + 12326888005104 637 + 166380379178640 638 + 478834884460187 639 + 531298478230872 640 + 212855542451513 641 + 469374250628222 642 + 313054538265714 643 + 67987980701794 644 + 201744409425544 645 + 253885444790722 646 + 346404335959515 647 + 201951259152792 648 + 526810882654473 649 + 438496515334614 650 + 3519567596207 651 + 458809825491944 652 + 151882774834335 653 + 199712351418156 654 + 295803356855609 655 + 149366376602013 656 + 159355115334094 657 + 268593862362367 658 + 154401285436397 659 + 369299760914646 660 + 298520683426661 661 + 395412144250944 662 + 343604220845413 663 + 517653489720672 664 + 135756838937095 665 + 18533051364932 666 + 234499919003254 667 + 61797459139800 668 + 505510743593236 669 + 382525697873574 670 + 529137069935889 671 + 33177534471078 672 + 88211934042914 673 + 187674019240535 674 + 516881305690241 675 + 191335891727178 676 + 273216181727810 677 + 202151928210417 678 + 394644918090293 679 + 523673202482785 680 + 396531074327781 681 + 562893327024004 682 + 521715834075857 683 + 143569153110518 684 + 213099198866023 685 + 62524993624628 686 + 551124967425109 687 + 127969069147351 688 + 482763045602631 689 + 55599188612183 690 + 434332355833792 691 + 103472148975938 692 + 267588541865758 693 + 174804997403395 694 + 353437553205218 695 + 129809279952184 696 + 403732651980002 697 + 264408287480445 698 + 546262191807117 699 + 168669948969784 700 + 31366817164354 701 + 521359376841270 702 + 256737175305032 703 + 119987932615137 704 + 501466880981719 705 + 309257382233562 706 + 547788608186852 707 + 118840977596199 708 + 251349197136972 709 + 99966836011490 710 + 87286875126404 711 + 162610843608581 712 + 114197696373824 713 + 532172248485362 714 + 372976895928113 715 + 454043321861393 716 + 499570253470593 717 + 98194764296160 718 + 149048713005194 719 + 36462447404968 720 + 119499953401246 721 + 110946717252920 722 + 236158795350728 723 + 269131919457352 724 + 75420895400706 725 + 330425786716881 726 + 113456058069254 727 + 241573316083204 728 + 477745111276833 729 + 141531653006622 730 + 37838660838322 731 + 167545475883098 732 + 350250739261985 733 + 195510914139575 734 + 213681945061694 735 + 252282011353978 736 + 378649756594774 737 + 83014236153943 738 + 424576178176716 739 + 547746955745259 740 + 23674250997368 741 + 547338986202630 742 + 473652154622440 743 + 185930963666692 744 + 156210053164636 745 + 203707309684811 746 + 370810604730087 747 + 57033317787837 748 + 321833621208731 749 + 406770299704537 750 + 80153502207276 751 + 98830295265812 752 + 165853528373496 753 + 497430174013940 754 + 99728462609464 755 + 36226181859916 756 + 59261812711976 757 + 491230921542696 758 + 94473507687190 759 + 358364544782099 760 + 30871507724921 761 + 479492020020685 762 + 344586136566843 763 + 541149303400533 764 + 355427912804871 765 + 232404462776539 766 + 486383983341948 767 + 540991954231946 768 + 475955049359243 769 + 106032407211680 770 + 107851752128583 771 + 172521649791540 772 + 473284852180767 773 + 526270185413273 774 + 242200094256915 775 + 217718960472002 776 + 47298288669949 777 + 281206601577168 778 + 304789648526555 779 + 528950959130385 780 + 320388028445033 781 + 231318565366016 782 + 215240159201580 783 + 558233975637338 784 + 114950176939516 785 + 237880160240319 786 + 462288347792288 787 + 237749068682670 788 + 344576852695596 789 + 175169466780017 790 + 159279090409719 791 + 559256907527464 792 + 164117042678139 793 + 175569315301399 794 + 534879738710118 795 + 169665938227899 796 + 208551669627908 797 + 342900760031827 798 + 262067611671421 799 + 142400720413794 800 + 426363110417118 801 + 491642141814311 802 + 378201483965202 803 + 289051799817561 804 + 438322260130791 805 + 512044144441800 806 + 242868781778816 807 + 383218442660831 808 + 168795022470730 809 + 319398560889081 810 + 541574665457272 811 + 13037069096081 812 + 431462964030100 813 + 196005908976659 814 + 161028530968856 815 + 205100079356500 816 + 43927965767453 817 + 473334952405326 818 + 99566607907530 819 + 440993556746878 820 + 269662604295888 821 + 28986908849505 822 + 465838213569038 823 + 28430124312066 824 + 480534641991740 825 + 147591365429971 826 + 54118887076464 827 + 483445743394599 828 + 296621954833145 829 + 351653690610146 830 + 179890135175570 831 + 165963715861530 832 + 523004924624411 833 + 52889350832105 834 + 226172711464864 835 + 262279940005509 836 + 464681292700079 837 + 254125655127708 838 + 100089718431342 839 + 187629651321101 840 + 312506968986769 841 + 546204854998535 842 + 232109754715922 843 + 510211117084252 844 + 466052249226975 845 + 186782818249156 846 + 235459982596918 847 + 373242486616525 848 + 177171193139645 849 + 258604212100572 850 + 2672448375055 851 + 147531420280559 852 + 367502780088218 853 + 76798869258329 854 + 507876564215505 855 + 108102381638702 856 + 259635133286446 857 + 301100808918543 858 + 440562426797579 859 + 358112446275590 860 + 560666082235189 861 + 455062897124577 862 + 322849832059814 863 + 284646745368082 864 + 357128287092916 865 + 205192653092667 866 + 13679564862753 867 + 479500129593947 868 + 139643405381180 869 + 95517558317607 870 + 294899362520314 871 + 52134916937632 872 + 241131142864414 873 + 138441429317148 874 + 418393119369948 875 + 76521045273913 876 + 506396896869115 877 + 138011305119537 878 + 530101612984563 879 + 238918545962409 880 + 361087065744207 881 + 380449366524578 882 + 219300062651271 883 + 297014256235924 884 + 513131144699665 885 + 480975760423212 886 + 239489306243995 887 + 87826900899544 888 + 60518131509487 889 + 258565484607866 890 + 136741013535804 891 + 125011195123910 892 + 428153432151246 893 + 126030739012535 894 + 178831466142589 895 + 300539751709096 896 + 532147653675671 897 + 200209311142538 898 + 265146231844683 899 + 521368645348622 900 + 440552781915008 901 + 455314776158241 902 + 429807004108770 903 + 544232552175879 904 + 324380325550089 905 + 55968463429138 906 + 78664367979753 907 + 435025795198597 908 + 327363511284227 909 + 203650460762424 910 + 35454428011184 911 + 55632272150843 912 + 68340257311122 913 + 41182494881864 914 + 224100175352775 915 + 310136054802832 916 + 249131912752499 917 + 8010253180772 918 + 101008440400384 919 + 522881977105901 920 + 1206111427783 921 + 71093760751221 922 + 401766424733956 923 + 311706038185842 924 + 170690863923282 925 + 304823628276000 926 + 543442196371271 927 + 122056217773373 928 + 524422967554000 929 + 210827493780937 930 + 1424538654375 931 + 192826093239423 932 + 466547283106100 933 + 324376014013422 934 + 55449633293804 935 + 213867389782077 936 + 264045315980293 937 + 445739025067324 938 + 445414813197259 939 + 417398270096065 940 + 25160040340740 941 + 101975399588458 942 + 413897201769539 943 + 319581919313459 944 + 242224395174621 945 + 121565528628651 946 + 540116240381716 947 + 446134126726789 948 + 140085317944744 949 + 407800536525399 950 + 23520185459264 951 + 312426602382786 952 + 362692786826065 953 + 149906708826358 954 + 432915386394237 955 + 542411405029943 956 + 224144264597347 957 + 396057071638344 958 + 322420690503533 959 + 542300825950532 960 + 428951652386111 961 + 44907865109847 962 + 236825015888067 963 + 369296338737070 964 + 295436071753547 965 + 124974914625705 966 + 501886748148166 967 + 522845901520544 968 + 463338752936594 969 + 316664423283387 970 + 211203656921873 971 + 306217645285181 972 + 468845907117164 973 + 316168970517967 974 + 269155719001957 975 + 191007773181233 976 + 366134493702622 977 + 11020453837033 978 + 512383583351912 979 + 117401192424688 980 + 375215104888875 981 + 348579367604164 982 + 407180459979803 983 + 281343639571160 984 + 228720978309246 985 + 532485278372661 986 + 183234260516678 987 + 546599797614127 988 + 442412317398542 989 + 422856125694104 990 + 99777046283368 991 + 121660908756750 992 + 418209781582140 993 + 274600220836044 994 + 25047420164763 995 + 117709054483821 996 + 194023050322465 997 + 141300548034734 998 + 503585939827440 999 + 394997003749050 1000 + 252545088186918 1001 + 239059179402969 1002 + 389399142928290 1003 + 129867508286339 1004 + 63936709347458 1005 + 456573856582001 1006 + 51082923862366 1007 + 273119286271135 1008 + 325402659344905 1009 + 49472763307611 1010 + 144627724744950 1011 + 442445084527759 1012 + 384917147673635 1013 + 364716283115156 1014 + 32970777779466 1015 + 240872107353364 1016 + 195777573797370 1017 + 152795709588427 1018 + 518239564643138 1019 + 547420470895757 1020 + 211991802712576 1021 + 460879459495758 1022 + 279297455404843 1023 + 126915135780664 1024 + 253069352222874 1025 + 391094791865893 1026 + 152810554102397 1027 + 545518032989468 1028 + 551066422669849 1029 + 326138617787558 1030 + 489754716149689 1031 + 171516670586071 1032 + 485211502070703 1033 + 91669729311665 1034 + 347276536241459 1035 + 114562701703076 1036 + 238217772952981 1037 + 224495417277563 1038 + 202633290052952 1039 + 304442753594315 1040 + 333179426792402 1041 + 137092167754403 1042 + 329859763931371 1043 + 320193269551071 1044 + 479428172821413 1045 + 17441186514940 1046 + 69176963342818 1047 + 99495143676646 1048 + 248522838761888 1049 + 200383604294797 1050 + 334113539634749 1051 + 444562995150575 1052 + 392904268431677 1053 + 516810812435942 1054 + 441185109948250 1055 + 286932586241173 1056 + 87456554572428 1057 + 454346101135879 1058 + 434009940266040 1059 + 163952439750511 1060 + 171883265386708 1061 + 202151191448525 1062 + 527550470544533 1063 + 461263018723453 1064 + 360987380943786 1065 + 393499402594162 1066 + 50132955601618 1067 + 538123279244077 1068 + 202420184357637 1069 + 412384173932068 1070 + 465421770354619 1071 + 80206575211238 1072 + 211379218692059 1073 + 551390597817880 1074 + 33502743097456 1075 + 341432060790304 1076 + 136063823540686 1077 + 520165333515850 1078 + 112790916644231 1079 + 313539699886873 1080 + 397646575644755 1081 + 240014722331240 1082 + 394680436323955 1083 + 290462116374841 1084 + 50115588357371 1085 + 21149266685719 1086 + 334741024469678 1087 + 447383994395004 1088 + 340827571598077 1089 + 24980610865150 1090 + 280636702038363 1091 + 57362212145657 1092 + 308107127501772 1093 + 145875184348827 1094 + 270202186978602 1095 + 106317285988428 1096 + 423505249756028 1097 + 47491240098453 1098 + 84338393931654 1099 + 348806752159741 1100 + 656853400446 1101 + 153430868088150 1102 + 141911499392150 1103 + 355419964186 1104 + 541254122998827 1105 + 397640780555186 1106 + 178580246823206 1107 + 428338877726525 1108 + 411229963839022 1109 + 475415806818705 1110 + 74751331656379 1111 + 1306077115106 1112 + 547587076108068 1113 + 333022084973979 1114 + 44946838034366 1115 + 378100646060737 1116 + 452992374807524 1117 + 12566483585004 1118 + 418739209812939 1119 + 92224213807114 1120 + 148779302911819 1121 + 403752929387991 1122 + 168287583473333 1123 + 81175599053619 1124 + 142289382541822 1125 + 521310771532563 1126 + 140562296210081 1127 + 67533214321885 1128 + 302683082362289 1129 + 439016390049020 1130 + 294260430105268 1131 + 282795810297042 1132 + 488001374438664 1133 + 292124752168910 1134 + 46725117064443 1135 + 326001108392664 1136 + 262840851522014 1137 + 312481925062003 1138 + 246925963017323 1139 + 561157040022052 1140 + 313205697846853 1141 + 545115105411262 1142 + 11244954197076 1143 + 523068356417287 1144 + 472806159536337 1145 + 56903025517866 1146 + 267739129233660 1147 + 350634395445777 1148 + 399965892624258 1149 + 239000596507159 1150 + 162439075926100 1151 + 486244502742199 1152 + 126473074911463 1153 + 230306231694064 1154 + 273988489781101 1155 + 71924986502572 1156 + 445466270220771 1157 + 415830805527973 1158 + 47992811699111 1159 + 69709534484952 1160 + 64808816259481 1161 + 367725906477514 1162 + 488243530257191 1163 + 151806467329857 1164 + 448290929824870 1165 + 186996062434327 1166 + 94925477079884 1167 + 22884285442739 1168 + 164483994673903 1169 + 384552619864233 1170 + 41090892922468 1171 + 356258868257553 1172 + 489153382432892 1173 + 485305501009055 1174 + 75024535267605 1175 + 82708618260741 1176 + 300046407863665 1177 + 238539887721928 1178 + 112863942181489 1179 + 228697151527720 1180 + 395443094925108 1181 + 248505819468840 1182 + 462621488405484 1183 + 284451457283178 1184 + 433783031151241 1185 + 330915260945863 1186 + 446161676735200 1187 + 185418834460196 1188 + 185651451282046 1189 + 246350588246465
+112
2025/rust/5/src/main.rs
··· 1 + #![feature(get_disjoint_mut_helpers)] 2 + 3 + use core::slice::GetDisjointMutIndex; 4 + use std::ops::RangeInclusive; 5 + 6 + fn part1(ranges: Vec<RangeInclusive<usize>>, ids: Vec<usize>) -> usize { 7 + ids.iter().fold(0, |acc, v| { 8 + if ranges.iter().any(|range| range.contains(v)) { 9 + acc + 1 10 + } else { 11 + acc 12 + } 13 + }) 14 + } 15 + 16 + //i hate this 17 + fn part2(mut ranges: Vec<RangeInclusive<usize>>) -> usize { 18 + // combine ranges so they arent overlapping 19 + loop { 20 + let mut changed = false; 21 + for (ii, iv) in ranges.clone().iter().enumerate() { 22 + for (ji, jv) in ranges.clone().iter().enumerate() { 23 + if ranges.get(ii).unwrap() == ranges.get(ji).unwrap() { 24 + continue; 25 + } 26 + if ii != ji && iv.is_overlapping(jv) { 27 + changed = true; 28 + let start = iv.start().min(jv.start()); 29 + let end = iv.end().max(jv.end()); 30 + 31 + *ranges.get_mut(ii).unwrap() = *start..=*end; 32 + *ranges.get_mut(ji).unwrap() = *start..=*end; 33 + } 34 + } 35 + } 36 + 37 + if !changed { 38 + break; 39 + } 40 + } 41 + 42 + ranges.sort_by(|x, y| x.start().cmp(y.start())); 43 + ranges.dedup(); 44 + 45 + ranges 46 + .iter() 47 + .fold(0, |acc, range| acc + range.clone().count()) 48 + } 49 + 50 + // i kinda stole this but i just wanted to implement it myself so hopefully it sticks 51 + fn part2_smart(mut ranges: Vec<RangeInclusive<usize>>) -> usize { 52 + ranges.sort_by(|x, y| x.start().cmp(y.start())); 53 + 54 + let mut current_range = ranges.first().unwrap().clone(); 55 + 56 + ranges.get(1..).unwrap().iter().fold(0, |acc, range| { 57 + if range.start() > current_range.end() { 58 + let to_add = current_range.clone().count(); 59 + current_range = range.clone(); 60 + acc + to_add 61 + } else if range.end() > current_range.end() { 62 + current_range = *current_range.start()..=*range.end(); 63 + acc 64 + } else { 65 + acc 66 + } 67 + }) + current_range.count() 68 + } 69 + 70 + fn main() { 71 + let file_contents = include_str!("../input.txt"); 72 + let (ranges_str, ids_str) = file_contents.trim_end().split_once("\n\n").unwrap(); 73 + 74 + let ranges: Vec<RangeInclusive<usize>> = ranges_str 75 + .lines() 76 + .map(|r| r.split_once('-').unwrap()) 77 + .map(|(lhs, rhs)| (lhs.parse::<usize>().unwrap()..=rhs.parse::<usize>().unwrap())) 78 + .collect(); 79 + 80 + let ids: Vec<usize> = ids_str 81 + .lines() 82 + .map(|s| s.parse::<usize>().unwrap()) 83 + .collect(); 84 + 85 + println!("Part 1 Results: {}", part1(ranges.clone(), ids)); 86 + println!("Part 2 Results: {}", part2(ranges.clone())); 87 + println!("Part 2 Smart Results: {}", part2_smart(ranges)); 88 + } 89 + 90 + mod tests { 91 + #[test] 92 + fn part1() { 93 + let ranges = vec![3..=5, 10..=14, 16..=20, 12..=18]; 94 + let ids = vec![1, 5, 8, 11, 17, 32]; 95 + 96 + assert_eq!(super::part1(ranges, ids), 3); 97 + } 98 + 99 + #[test] 100 + fn part2_dumb() { 101 + let ranges = vec![3..=5, 10..=14, 16..=20, 12..=18]; 102 + 103 + assert_eq!(super::part2(ranges), 14); 104 + } 105 + 106 + #[test] 107 + fn part2_smart() { 108 + let ranges = vec![3..=5, 10..=14, 16..=20, 12..=18]; 109 + 110 + assert_eq!(super::part2_smart(ranges), 14); 111 + } 112 + }