Advent of Code 2025, done in C++

day[05]: solution for Part 1 and Part 2

bpavuk.neocities.org 007ebb14 e0355ea4

verified
Changed files
+1377
data
src
+1191
data/05/input.txt
··· 1 + 527028483603237-530596046705806 2 + 231611686269733-232830228664181 3 + 75475032395596-76960084164171 4 + 203839219483157-205309276440608 5 + 50899806602568-58580276960637 6 + 348023446284659-349432400960533 7 + 99300079175333-99300079175333 8 + 243603050472076-244121129344428 9 + 215608453928184-218347151677708 10 + 559603756857369-560747959347574 11 + 357973561889555-361367389958275 12 + 153034818227400-159360207888955 13 + 502733798128162-503279006301491 14 + 323013740729363-323381915985523 15 + 527028483603237-530596046705806 16 + 61641386395983-67021230322014 17 + 91024067485337-99300079175333 18 + 232449072996959-234097971321113 19 + 148783445784670-148783445784670 20 + 15833326205797-17418339643302 21 + 505605330381036-506207894991252 22 + 112602413285185-119326613429128 23 + 123946485247056-129469892544921 24 + 137167742337992-137324020583710 25 + 511152287424346-511253380025377 26 + 246461419852156-247170936427773 27 + 504676621204473-505026491432594 28 + 510534926915260-510900675620171 29 + 234587388109332-235821545099396 30 + 329912182745310-330381374217602 31 + 73828954111068-75232756067163 32 + 135752935675329-136378697282213 33 + 496191249922313-501122630801934 34 + 133979736497382-134764106087904 35 + 252104186307035-257089307127655 36 + 504302623647034-505026491432594 37 + 76526080063341-78067653480180 38 + 133979736497382-134654293556154 39 + 558677362576826-560155745642088 40 + 74524948975609-76105959782870 41 + 235635330848985-237191841329135 42 + 541917811955625-541917811955625 43 + 119326613429129-119326613429129 44 + 553872392553945-555266156778988 45 + 366414367343123-371371164109127 46 + 345992126286124-347761851238364 47 + 133286158975157-133979736497382 48 + 505178666516591-505853679404368 49 + 385779390535182-389543666687966 50 + 136893495537949-137167742337992 51 + 327348264387941-327866800676191 52 + 131664742722233-132008978697672 53 + 516853543506548-521402105555623 54 + 354383952572690-357973561889554 55 + 82739490947292-89017889386605 56 + 552959255039459-554658031622118 57 + 342031782279918-343652907746898 58 + 508484714248278-508961054793712 59 + 237519915568507-239145977273580 60 + 507770887945018-508484714248278 61 + 343907345660132-345606200241766 62 + 483916138291259-490404769570928 63 + 464852542067488-467203292140343 64 + 77632426688474-79114482043408 65 + 442834205538352-447108362422934 66 + 403656227860835-403656227860835 67 + 246461419852156-247170936427773 68 + 222613372587062-226711219326389 69 + 325646224334292-326081258515740 70 + 273530143840563-280932638034120 71 + 2020409498513-6492182236039 72 + 239362201739794-240956508377631 73 + 103697640811728-103697640811728 74 + 464852542067488-471273807149096 75 + 137784042454372-138569267642138 76 + 556942026237883-558021643102410 77 + 250248951956584-250773157158356 78 + 508484714248278-508961054793712 79 + 329912182745310-330381374217602 80 + 247170936427773-247866876325266 81 + 438390869383638-441208567253203 82 + 166867276405365-169858552714393 83 + 317448008624870-317448008624870 84 + 131664742722233-132343845539301 85 + 322876735023384-323487090592579 86 + 557866275687601-559015258148801 87 + 262675114041629-270790651126896 88 + 413510315014473-420007769205209 89 + 242471956463321-242597321380948 90 + 521402105555623-521402105555623 91 + 243603050472076-244341783051255 92 + 142132531346043-148783445784670 93 + 131282276978058-131864946681032 94 + 453739749815969-459023513536430 95 + 415465248953494-418338269312101 96 + 435010996678516-438390869383637 97 + 245241776827571-245413024187675 98 + 218347151677709-218347151677709 99 + 374162092970043-377611071422835 100 + 504302623647034-504519885344972 101 + 34077459182861-39777947758526 102 + 26392981832048-27184361782686 103 + 455640553554951-461195813672932 104 + 537068214024169-541917811955624 105 + 376155658293602-380858986836400 106 + 82739490947292-84836363036474 107 + 397748480001034-397748480001034 108 + 136893495537949-137628729613168 109 + 507326835905711-508025842388742 110 + 324922873483849-325166493618721 111 + 195435929723019-200695398398917 112 + 41749006858622-45856980801485 113 + 78785040359990-80030288498488 114 + 134261966072861-135110609174502 115 + 385779390535182-389543666687966 116 + 262675114041629-262675114041629 117 + 163457238066213-166867276405364 118 + 544396384414554-551941721325111 119 + 403656227860836-408398229161489 120 + 70475724803704-71997715360766 121 + 41749006858622-45856980801485 122 + 20753943053572-27184361782686 123 + 103697640811728-109322877986643 124 + 504302623647034-504519885344972 125 + 53498304611067-55771266424594 126 + 181598181282532-190696236439008 127 + 136031474719714-136893495537949 128 + 140020791580455-140400459583434 129 + 305187053481863-310519894847258 130 + 283722612347495-288529460316528 131 + 324576992288902-325400357860404 132 + 335780791417434-340717141451355 133 + 135273702699110-136031474719714 134 + 321885261062598-322500760215531 135 + 2020409498512-2020409498512 136 + 247635420618152-248168741920366 137 + 10809942857493-15833326205796 138 + 244999949675850-245241776827571 139 + 122420293179842-126572678076742 140 + 346979435906074-348658916848459 141 + 473454317579521-481021223255510 142 + 252104186307035-257089307127655 143 + 332441272969558-335780791417432 144 + 426124866409633-429906562980455 145 + 249600206770349-249922379246403 146 + 248986021389910-249359585895003 147 + 561261795684072-562841287225609 148 + 393079650593881-397748480001033 149 + 185652825479208-187119812414873 150 + 173953027389372-179515478581254 151 + 327561022376665-328177748368301 152 + 349945753303336-351545827340308 153 + 236387775465212-238197708561329 154 + 233299681147638-235054475210142 155 + 244999949675850-245697091078303 156 + 560605314311115-561930684727783 157 + 238631856949366-239910573540071 158 + 364741905307008-371371164109127 159 + 243856713965175-244121129344428 160 + 247479120838145-247635420618152 161 + 31917117922914-34077459182859 162 + 292145500212003-292145500212003 163 + 511832090589807-512338970187689 164 + 447108362422936-449629160130141 165 + 424346163029900-429906562980455 166 + 509344387593849-509861907786160 167 + 344929686478190-346606734251988 168 + 314266885205282-317448008624870 169 + 349204609735176-350596934361940 170 + 555687085700713-557093789144241 171 + 133614070485386-133979736497382 172 + 473454317579521-473454317579521 173 + 226711219326391-230643027991650 174 + 276637728866547-280932638034120 175 + 342988184222313-344614607589202 176 + 292145500212003-297719133030350 177 + 133168028889494-133747912047206 178 + 504302623647034-504519885344972 179 + 135752935675329-136562658228344 180 + 203839219483157-209702986145200 181 + 134654293556154-134764106087904 182 + 173953027389371-173953027389371 183 + 544396384414553-544396384414553 184 + 72610827321812-74139327712477 185 + 506207894991252-507105474607917 186 + 555061918895904-556176843887873 187 + 192711220582644-196555681976860 188 + 283722612347495-287505783920120 189 + 71476667916353-73009555122235 190 + 486150733366819-488568724471762 191 + 192 + 333238176511983 193 + 485689992458747 194 + 549508264451078 195 + 33431507780279 196 + 559802145764979 197 + 233626241952600 198 + 561293064269704 199 + 54611723120308 200 + 329927376327474 201 + 316432132471650 202 + 176408968598599 203 + 302590848025064 204 + 225404480754421 205 + 355943937692688 206 + 230512904598418 207 + 12363346143090 208 + 114741821575203 209 + 425585306430426 210 + 105794541748033 211 + 63204897129359 212 + 480220099502638 213 + 369559694173945 214 + 259794609697498 215 + 394919482126261 216 + 95343838552578 217 + 377064693071571 218 + 387553021361688 219 + 54165960451051 220 + 68847393049220 221 + 518843425882193 222 + 159107953851712 223 + 217221319851440 224 + 315392797785894 225 + 143344047650409 226 + 227727688557414 227 + 29324798738189 228 + 44649229613259 229 + 287908262819671 230 + 23893469383317 231 + 71604573428899 232 + 291974862345939 233 + 386022920727495 234 + 184607106234930 235 + 15285701743385 236 + 339990086631368 237 + 91375408336743 238 + 367255925551385 239 + 78174550889769 240 + 152713653148877 241 + 6019989324296 242 + 181256493811438 243 + 83045077581486 244 + 491015280526305 245 + 414912747557253 246 + 414065279294813 247 + 275373389496166 248 + 21661434284885 249 + 496416852297839 250 + 477494791955461 251 + 327602736217782 252 + 138880747979879 253 + 271480550392019 254 + 158160500147986 255 + 22359716987517 256 + 414576689092834 257 + 305803184784229 258 + 65692053784284 259 + 360173762583092 260 + 458128731749150 261 + 378315157016904 262 + 198233403051772 263 + 52327402075788 264 + 459496109629835 265 + 48860372473025 266 + 454257819227706 267 + 97472804550722 268 + 502964175459770 269 + 459100485158840 270 + 131796816478263 271 + 495898100350915 272 + 509758287149052 273 + 554302977506672 274 + 141460841946747 275 + 368399402770221 276 + 144833542575552 277 + 459257396837051 278 + 128897248295935 279 + 94684258795493 280 + 517185225146550 281 + 353038510608703 282 + 438915863504618 283 + 44729354181035 284 + 274623254066270 285 + 77767089952860 286 + 199443030693887 287 + 245599182009338 288 + 513597666643845 289 + 548898983360812 290 + 168833181122479 291 + 108599615430535 292 + 267323690512525 293 + 478748932732586 294 + 418044899650582 295 + 438723699239049 296 + 377021028407774 297 + 521243413249980 298 + 186372087298993 299 + 177696180629499 300 + 424607798783136 301 + 175043083959588 302 + 71542085709966 303 + 122881136856443 304 + 53642445871607 305 + 55983883980568 306 + 307482918699313 307 + 548034266877241 308 + 107443352691469 309 + 308944791230750 310 + 336435445141577 311 + 18349719491670 312 + 448205670457427 313 + 71542585287717 314 + 408033037307226 315 + 480102956094501 316 + 420109993028969 317 + 395424521350835 318 + 185379878797077 319 + 203710057829105 320 + 36557592044669 321 + 551870675458765 322 + 546868807269922 323 + 504793474214081 324 + 66889203140506 325 + 277358386195352 326 + 154658725086261 327 + 458710471506147 328 + 140063001204899 329 + 554589123545113 330 + 187764639288738 331 + 280805527975913 332 + 458767928415331 333 + 327562713156083 334 + 227404441777348 335 + 58510480179466 336 + 288486494720799 337 + 63237257198643 338 + 448172041690679 339 + 42280135521746 340 + 192789521352439 341 + 156869200380410 342 + 333308827586207 343 + 168770744819228 344 + 206756346672463 345 + 445490948585152 346 + 558298887368719 347 + 41757079751796 348 + 123233680453554 349 + 101710668548164 350 + 293051383933234 351 + 462115775599059 352 + 156790852024775 353 + 42146634104362 354 + 529361812764217 355 + 375031732026888 356 + 361654048249706 357 + 556482382871481 358 + 438952718905184 359 + 195800957172995 360 + 447685099105065 361 + 3167800942342 362 + 208897665420647 363 + 315160556343878 364 + 345884001759232 365 + 122757578730601 366 + 126844669879576 367 + 286578117506275 368 + 559076784806808 369 + 133183790416412 370 + 424801834309423 371 + 224969252327364 372 + 374350766089642 373 + 20798997670184 374 + 289417380274906 375 + 184315518776518 376 + 371292335190090 377 + 114582339644698 378 + 208127482443002 379 + 279570456318369 380 + 477243481897708 381 + 137615434402227 382 + 155587329960576 383 + 66058404247566 384 + 6009626878305 385 + 467744254435927 386 + 247816923962984 387 + 261599002789618 388 + 297502156271657 389 + 506808816995009 390 + 545665721143573 391 + 147717106107093 392 + 4012198244055 393 + 148435918998957 394 + 246749347260119 395 + 239376349150393 396 + 227276111047012 397 + 364636121327145 398 + 517935259795945 399 + 474439763479168 400 + 43520261515585 401 + 280856775504394 402 + 75286142706624 403 + 131996546479158 404 + 86881586573971 405 + 508673411390645 406 + 250812186729577 407 + 423847559969065 408 + 223713790582714 409 + 546169006985788 410 + 315891576181866 411 + 489122094481310 412 + 475976446227767 413 + 154259526095214 414 + 128476226213058 415 + 503015859091746 416 + 334986513955732 417 + 75578041521823 418 + 411249026105852 419 + 6961569038731 420 + 530192246099700 421 + 446871809147527 422 + 277602939775284 423 + 258190499459374 424 + 539417674939313 425 + 478261671944180 426 + 165763609730570 427 + 117972782963073 428 + 469561640920263 429 + 120202048183618 430 + 422630678791095 431 + 524898844581346 432 + 294638145309687 433 + 254396332912069 434 + 56492904870038 435 + 181323276371441 436 + 24563499850507 437 + 205865074842223 438 + 148409995925774 439 + 395905756559261 440 + 246720675862029 441 + 66613251955864 442 + 54321217823722 443 + 83363680130035 444 + 31331826491519 445 + 369263420444315 446 + 153585492077154 447 + 26955824861402 448 + 22181157571828 449 + 33780712543998 450 + 56160872499578 451 + 390901897324810 452 + 438758055522387 453 + 83723410127998 454 + 239700116295950 455 + 10986346065127 456 + 21616081875381 457 + 183162530553635 458 + 423092070823128 459 + 166301878995476 460 + 369306563784273 461 + 16879629962184 462 + 560571735506509 463 + 387532639382396 464 + 458507186052187 465 + 42069097096577 466 + 259593097594975 467 + 310058462635834 468 + 299871431824265 469 + 16082780296802 470 + 296509123823706 471 + 310711658803761 472 + 295331711956231 473 + 263735055537003 474 + 352432028729091 475 + 126398905211847 476 + 519658672816043 477 + 280192070333888 478 + 95167114311387 479 + 7724622964718 480 + 369059413707853 481 + 407224185915014 482 + 157210350166793 483 + 487514577914260 484 + 98252950133724 485 + 440363069543446 486 + 417429307246762 487 + 405604516492090 488 + 265092074416263 489 + 126664645818342 490 + 113579085457754 491 + 75905498316434 492 + 302354855339641 493 + 59102049425656 494 + 280130340136360 495 + 478494650079721 496 + 264501498508817 497 + 116663854295906 498 + 284135376096844 499 + 57339172396252 500 + 125908990581492 501 + 218698452226404 502 + 479066189543047 503 + 193992192301764 504 + 26935168322503 505 + 371050124007331 506 + 444128611785680 507 + 54655542495528 508 + 556257788880115 509 + 156109812323271 510 + 405143694880279 511 + 355947553028693 512 + 279181834119431 513 + 417842173912253 514 + 475447264397728 515 + 55724984827730 516 + 425808365149730 517 + 168849060821640 518 + 156207061705977 519 + 131293018861777 520 + 397742035837384 521 + 96457963600273 522 + 46367169863551 523 + 337263087738255 524 + 394915248600831 525 + 444461394522373 526 + 517303468399826 527 + 429667661403856 528 + 196126205904706 529 + 345645786967901 530 + 395094838057755 531 + 2454513324534 532 + 10669231861146 533 + 181653878244795 534 + 5371429552757 535 + 437239845288438 536 + 305253685206642 537 + 397782367989380 538 + 116070532783845 539 + 360208932753546 540 + 386395002336574 541 + 518479266388798 542 + 479470049286739 543 + 245213360203745 544 + 544805559539410 545 + 339066959466973 546 + 469022935378584 547 + 79584652573505 548 + 312843271512692 549 + 134384452340553 550 + 178327648734890 551 + 306022231371999 552 + 3032700546010 553 + 233699956073485 554 + 135215114494364 555 + 219224396779922 556 + 113845604633989 557 + 34093972860838 558 + 194782165353201 559 + 499416593344766 560 + 255174640655237 561 + 402958518901791 562 + 265739275480141 563 + 25292455870054 564 + 276724600410563 565 + 355997692469246 566 + 457676611759223 567 + 386047176287638 568 + 190039724559619 569 + 518280416553328 570 + 445079132020583 571 + 366751170462266 572 + 498555774054597 573 + 72048936868320 574 + 342497936372764 575 + 361252126585596 576 + 327840502439476 577 + 438315420764905 578 + 377653416678653 579 + 306791029781783 580 + 143098032488114 581 + 489451109209073 582 + 77885509362987 583 + 6821213007110 584 + 440638166411650 585 + 132088062077987 586 + 380565217714357 587 + 206441957599982 588 + 230445944085264 589 + 294544923364596 590 + 550955891098415 591 + 14814329045909 592 + 350660806006538 593 + 350789312113174 594 + 285443827330665 595 + 228446679627565 596 + 58280132644935 597 + 77497961379779 598 + 284718621487764 599 + 91583410841066 600 + 240711774586230 601 + 307371626015792 602 + 360341200112712 603 + 560878863073836 604 + 234408108815672 605 + 217929533512520 606 + 380949194277822 607 + 181962520261892 608 + 540232704378619 609 + 555280853519688 610 + 339599056777540 611 + 253331530299096 612 + 246432668510514 613 + 239485570722378 614 + 380450561320510 615 + 225753113308679 616 + 117381802211798 617 + 374882327903152 618 + 108651606868446 619 + 196944808288008 620 + 356898895235334 621 + 468918539568103 622 + 269570725731051 623 + 95733154606750 624 + 56777936035388 625 + 223730424738654 626 + 446335891855758 627 + 365975701734335 628 + 135691958743519 629 + 242613950355869 630 + 339761933169496 631 + 554172216673937 632 + 376099942871301 633 + 218193986422737 634 + 186286494218132 635 + 15542487103388 636 + 413998674312200 637 + 55662990646422 638 + 527419095668533 639 + 371551454668194 640 + 93282723288280 641 + 57611056990687 642 + 38801274595908 643 + 465669027392228 644 + 478172714532509 645 + 321798249758777 646 + 562462072531947 647 + 27173249223386 648 + 541338226718552 649 + 510833718417249 650 + 459293257919227 651 + 2578180288392 652 + 208664979169711 653 + 84166930707618 654 + 500435517139878 655 + 562907926846899 656 + 517735411417109 657 + 179409781136024 658 + 34898720974673 659 + 284923768208670 660 + 157983270022598 661 + 153131433816426 662 + 18393721953180 663 + 316322152660920 664 + 22355375605940 665 + 397246603329883 666 + 554967036051278 667 + 497281145240675 668 + 247656977357763 669 + 453922640286096 670 + 145221535272945 671 + 34772548877377 672 + 377385228995380 673 + 488414668953237 674 + 560545999900166 675 + 397718924038897 676 + 480127998411675 677 + 112984100991634 678 + 240894109209186 679 + 485722350510848 680 + 43371763020897 681 + 558269615993025 682 + 215754841367985 683 + 390164427363240 684 + 14732406523558 685 + 236009002762192 686 + 174342432125225 687 + 255463600507178 688 + 395182843721300 689 + 342602554208911 690 + 528507951564388 691 + 241875347976305 692 + 113957535730919 693 + 216559962572878 694 + 182415070955063 695 + 163985599290058 696 + 371001440724072 697 + 15272810587403 698 + 193319822867177 699 + 556343558336378 700 + 179109223017207 701 + 415127953575123 702 + 297848316250039 703 + 392671541548341 704 + 405304458530244 705 + 274714701484250 706 + 15049178690632 707 + 338480856292885 708 + 286625209351685 709 + 425366337053578 710 + 448545315533944 711 + 541900814421204 712 + 256913769690019 713 + 288429342353686 714 + 228318984823114 715 + 527126883649505 716 + 484801026677458 717 + 133951108335060 718 + 529472005696509 719 + 59700611717831 720 + 487761375293315 721 + 447035565574216 722 + 317155237736864 723 + 397547052933411 724 + 275596068169327 725 + 512302379205978 726 + 205693522964636 727 + 379891574363121 728 + 365896673931096 729 + 328804216175169 730 + 200216131738280 731 + 302825641282669 732 + 473502552425839 733 + 66958058021682 734 + 51269372537828 735 + 500921134113309 736 + 103962306584888 737 + 539336505275948 738 + 117286064994115 739 + 172772484112629 740 + 239759022413835 741 + 521095052346700 742 + 454776741466267 743 + 447066658605720 744 + 547255227253350 745 + 304963494744784 746 + 289560800497618 747 + 316501300548757 748 + 479086400557057 749 + 95326786124590 750 + 140968225791906 751 + 115072271879595 752 + 7234969939639 753 + 482956881124572 754 + 183466145923095 755 + 235393384642509 756 + 62406042864843 757 + 400707058435945 758 + 503105276932101 759 + 357566027207386 760 + 148521846514124 761 + 275750878909114 762 + 339370667768190 763 + 127048273590265 764 + 458527823927160 765 + 97444273980082 766 + 16182985223411 767 + 213183555533691 768 + 45309658270905 769 + 403839396039789 770 + 466098726186136 771 + 106643286670766 772 + 38176877510118 773 + 198314756910366 774 + 346517497511178 775 + 205928624831403 776 + 222864314271686 777 + 251640741435146 778 + 407508376987872 779 + 92519113502818 780 + 407317720738958 781 + 175305340425784 782 + 476620889550377 783 + 87305299787417 784 + 444545756281778 785 + 404518714951703 786 + 555409238703627 787 + 251797579995822 788 + 255256702255660 789 + 176681045179075 790 + 77481671334174 791 + 116544169170029 792 + 444122536639737 793 + 389103049935920 794 + 498748642522853 795 + 3873265377540 796 + 98050617645202 797 + 116322321801355 798 + 226367094720147 799 + 485075143875541 800 + 242573360392439 801 + 71795567210757 802 + 476601047034728 803 + 508048526398655 804 + 159198298530093 805 + 216436956386224 806 + 345416699145181 807 + 90380860243029 808 + 253472698754537 809 + 83400513334807 810 + 427310261563924 811 + 69822171498753 812 + 559842914094152 813 + 459287725352528 814 + 243613041158610 815 + 10991341630189 816 + 228807721663261 817 + 7024115782429 818 + 267146826788972 819 + 338032239059017 820 + 289546948436021 821 + 35124843837602 822 + 394075516816769 823 + 268803645511645 824 + 359678225963348 825 + 447579217132384 826 + 337227837807736 827 + 50064495804948 828 + 346738572598688 829 + 236973679957932 830 + 43507024710250 831 + 182054289915448 832 + 144962295951723 833 + 306576462663442 834 + 158787725603721 835 + 495369066056668 836 + 447459395413273 837 + 344057922446779 838 + 395633153332042 839 + 504718322801880 840 + 235325433870928 841 + 437195528511478 842 + 244135922948465 843 + 479388167560850 844 + 178697225954098 845 + 354741533520645 846 + 266092889230046 847 + 204778327811708 848 + 133257651959153 849 + 559858783952067 850 + 561750347064356 851 + 502088076822870 852 + 57253215150981 853 + 380137870011881 854 + 477972427100420 855 + 240572372889603 856 + 176519348368910 857 + 337265364653435 858 + 425502606217221 859 + 88576070604575 860 + 317517207500234 861 + 334105164420725 862 + 419958207401485 863 + 226900054801398 864 + 276961545643777 865 + 370262654409489 866 + 398886404251719 867 + 296429275430113 868 + 195072882755515 869 + 396911272168989 870 + 442208814882751 871 + 113545916394642 872 + 489754561221551 873 + 233920144851839 874 + 173259249369816 875 + 500231355309754 876 + 498284415309088 877 + 125185151329730 878 + 186407854088461 879 + 435099856585532 880 + 312951870547422 881 + 173641362386746 882 + 360822501532038 883 + 74035636115208 884 + 504940391363034 885 + 276398928003630 886 + 81858899939103 887 + 498355101838391 888 + 375087870889487 889 + 228666656803973 890 + 117849645842035 891 + 82230055753383 892 + 335785444943772 893 + 548302224679651 894 + 185276923758010 895 + 164883456297448 896 + 22085894978041 897 + 332890468372985 898 + 235730411838964 899 + 132694589236093 900 + 465257687386031 901 + 45463633229820 902 + 512144440666001 903 + 480435371181081 904 + 142485026456679 905 + 462878761958728 906 + 311750601954392 907 + 553648287051728 908 + 531478033022331 909 + 460796621783993 910 + 142368477545699 911 + 74076278950557 912 + 140439968185513 913 + 236396470256590 914 + 91860232604208 915 + 223643558098429 916 + 186390913765094 917 + 364894662860662 918 + 447459334215839 919 + 537531128123739 920 + 466218978171566 921 + 126669151202583 922 + 444807397890455 923 + 349062089817739 924 + 267434577690225 925 + 560827859984118 926 + 543253291644329 927 + 514749596671611 928 + 214538957126727 929 + 123785267864708 930 + 72460640000387 931 + 113447716967257 932 + 268936473540085 933 + 276821706576117 934 + 544257143536500 935 + 82528952979392 936 + 63833623452162 937 + 327942426374098 938 + 327087219832414 939 + 198165652850622 940 + 479015009633885 941 + 64895098316007 942 + 109357893943813 943 + 426409434523539 944 + 112785097737550 945 + 416983983303055 946 + 142741383992303 947 + 538988077235072 948 + 16786678261214 949 + 21164214411945 950 + 134856300517455 951 + 305078463170046 952 + 303351929503674 953 + 247465549128864 954 + 263204170523635 955 + 364953615267699 956 + 521418348349631 957 + 63548040800203 958 + 467923158941396 959 + 92690222721000 960 + 254607307817705 961 + 315864590216006 962 + 560194766273868 963 + 57740965943123 964 + 467500963508666 965 + 64837056509709 966 + 388201743880703 967 + 449442624540704 968 + 514951833787168 969 + 108013527943658 970 + 35164526162999 971 + 245368857412234 972 + 138434397003144 973 + 36568275186461 974 + 428992681216520 975 + 88481766597912 976 + 245305461122876 977 + 194265537540846 978 + 168923914421957 979 + 386962933269608 980 + 137066559578368 981 + 458270149682274 982 + 488069857309447 983 + 234384742346167 984 + 62174068894886 985 + 557903634980987 986 + 207715338997417 987 + 480598384362874 988 + 154285980882286 989 + 154109362470773 990 + 426356812378993 991 + 137103739914800 992 + 530043648763879 993 + 237548210272004 994 + 407973990813914 995 + 325660721822690 996 + 366188709699096 997 + 66357483907787 998 + 508053585941702 999 + 497609763483254 1000 + 159345788693352 1001 + 266504908036111 1002 + 294179053237191 1003 + 79762673063029 1004 + 368453507033728 1005 + 88044353937870 1006 + 438409019445213 1007 + 293640084947314 1008 + 124562453993162 1009 + 270733529213570 1010 + 225383748762657 1011 + 22656925974863 1012 + 45753428221904 1013 + 12308965830816 1014 + 264478729958918 1015 + 187327926216617 1016 + 156237597038581 1017 + 512313969753142 1018 + 376857045442655 1019 + 547345752323760 1020 + 309009326256121 1021 + 322372699828345 1022 + 333725943467458 1023 + 471851170183208 1024 + 54397268148001 1025 + 35195325793204 1026 + 42277663445555 1027 + 183516135243541 1028 + 275376456197836 1029 + 369039746819263 1030 + 78769262868325 1031 + 372527716775987 1032 + 18484140147936 1033 + 85327286707391 1034 + 284283673228431 1035 + 355111648629777 1036 + 133597382682728 1037 + 475835693490394 1038 + 387127844576620 1039 + 507901751969565 1040 + 554351666415617 1041 + 289354297422412 1042 + 558003852365488 1043 + 99777852969028 1044 + 76910619800607 1045 + 269850823651503 1046 + 478945097944206 1047 + 75697824382299 1048 + 360460512821572 1049 + 293259869435075 1050 + 335549913652882 1051 + 497894910138558 1052 + 526824704037943 1053 + 58747445640376 1054 + 150428040936251 1055 + 334729039550240 1056 + 290593453052687 1057 + 308985893570621 1058 + 203875153466187 1059 + 422651545426053 1060 + 384663799808318 1061 + 361991609992814 1062 + 377373804266245 1063 + 455827670362139 1064 + 104590623650983 1065 + 57717523945642 1066 + 289215949135955 1067 + 279227190564306 1068 + 480037691230924 1069 + 379352975398179 1070 + 286239461806878 1071 + 6288706511920 1072 + 306203959502495 1073 + 132448912858619 1074 + 87444167270659 1075 + 195068918309615 1076 + 4583897617995 1077 + 278660466522789 1078 + 229077410961495 1079 + 252512285630884 1080 + 165702653225540 1081 + 57301645713338 1082 + 45476816770253 1083 + 104420509876312 1084 + 435928956867717 1085 + 273738252326421 1086 + 527592700256469 1087 + 274920860531438 1088 + 360461851428776 1089 + 457549708994889 1090 + 291781669625491 1091 + 74180496831125 1092 + 160275843387166 1093 + 193576416576971 1094 + 447891132305591 1095 + 136097875796043 1096 + 473879264008074 1097 + 342198614509293 1098 + 255620089584600 1099 + 253368119366628 1100 + 460058494829337 1101 + 238677179316060 1102 + 543435794096850 1103 + 125804528329371 1104 + 290067397130136 1105 + 232119285671042 1106 + 35694654573054 1107 + 42641552702267 1108 + 278776839076591 1109 + 103699070401591 1110 + 279365288063702 1111 + 417643384147076 1112 + 379617509547 1113 + 379645369232055 1114 + 311322634544213 1115 + 355309621133856 1116 + 429812843801729 1117 + 530934225704976 1118 + 330069171861872 1119 + 393722308841935 1120 + 68340441633804 1121 + 518143442338427 1122 + 232986159926944 1123 + 361743588078637 1124 + 217329960800401 1125 + 405088222683749 1126 + 343569438466783 1127 + 129128398485888 1128 + 253088938306002 1129 + 15716384141993 1130 + 237474176118378 1131 + 178860999465503 1132 + 75048075834107 1133 + 347432831372643 1134 + 374490515012787 1135 + 165463789709837 1136 + 43210266758020 1137 + 240320757904606 1138 + 546043742308925 1139 + 268675982457278 1140 + 177771306654206 1141 + 145786507718584 1142 + 11076363163905 1143 + 484909609574872 1144 + 128816963311079 1145 + 523319854124247 1146 + 26117232648704 1147 + 137050674692694 1148 + 23079577770737 1149 + 443411377285142 1150 + 65315168934772 1151 + 499140575667238 1152 + 527800907809878 1153 + 52685290797686 1154 + 145080076415183 1155 + 527652341580953 1156 + 238859707235644 1157 + 78797347429720 1158 + 356975639606757 1159 + 94196665557651 1160 + 435856797725816 1161 + 401856923204375 1162 + 4848439154911 1163 + 396231979271263 1164 + 446175960814349 1165 + 155684562354319 1166 + 175037918819066 1167 + 325333380510412 1168 + 368728830828405 1169 + 270416737462765 1170 + 169564774661274 1171 + 460530813706825 1172 + 540961108919221 1173 + 113046162484226 1174 + 96073579932556 1175 + 103978930453644 1176 + 509735553698137 1177 + 106330238456740 1178 + 145231786002646 1179 + 488984892594469 1180 + 44508439338201 1181 + 227325068421387 1182 + 237889201401574 1183 + 44486142440592 1184 + 424902175633277 1185 + 518747415560671 1186 + 33943878442428 1187 + 192946509962666 1188 + 509687942128140 1189 + 355986284736312 1190 + 387842938635694 1191 + 268219264421529
+12
data/05/test.txt
··· 1 + 3-5 2 + 10-14 3 + 16-20 4 + 12-18 5 + 10-20 6 + 7 + 1 8 + 5 9 + 8 10 + 11 11 + 17 12 + 32
+174
src/05/solution.cxx
··· 1 + #include "common/getinputpath.h" 2 + #include <algorithm> 3 + #include <cstddef> 4 + #include <filesystem> 5 + #include <fstream> 6 + #include <print> 7 + #include <set> 8 + #include <sstream> 9 + #include <string> 10 + #include <vector> 11 + 12 + class Range { 13 + public: 14 + Range(long long from, long long to, bool inclusive) 15 + : from(from), to(to), inclusive(inclusive) {} 16 + 17 + long long from; 18 + long long to; 19 + bool inclusive; 20 + 21 + bool contains(long long value) { 22 + auto real_from = std::min(from, to); 23 + auto real_to = std::max(from, to); 24 + 25 + if (inclusive) { 26 + return value >= real_from && value <= real_to; 27 + } else { 28 + return value >= real_from && value < real_to; 29 + } 30 + } 31 + 32 + auto all_values() { 33 + auto real_from = std::min(from, to); 34 + auto real_to = std::max(from, to); 35 + 36 + std::set<long long> out{}; 37 + if (inclusive) { 38 + for (auto i = real_from; i <= real_to; ++i) { 39 + out.insert(i); 40 + } 41 + } 42 + 43 + return out; 44 + } 45 + 46 + long long size() { 47 + auto real_from = std::min(from, to); 48 + auto real_to = std::max(from, to); 49 + if (inclusive) { 50 + real_to += 1; 51 + } 52 + 53 + // TODO(fix): may be buggy with from is negative and to is positive 54 + return real_to - real_from; 55 + } 56 + }; 57 + 58 + // runtime on Ryzen 5 5600G: 0.003s 59 + int main() { 60 + auto path = get_input_path(DATA_FOLDER); 61 + auto data_size = std::filesystem::file_size(path); 62 + std::string data = ""; 63 + data.resize(data_size); 64 + std::ifstream data_ifstream(path); 65 + if (!data_ifstream.is_open()) { 66 + std::println("Unable to read from the solution file at {}", path.string()); 67 + return 1; 68 + } 69 + data_ifstream.read(data.data(), data_size); 70 + 71 + auto split_idx = data.find("\n\n"); 72 + auto data_ranges = data.substr(0, split_idx); 73 + auto data_ids = data.substr(split_idx + 2); 74 + 75 + std::vector<Range> ranges{}; 76 + { 77 + auto stream = std::stringstream(data_ranges); 78 + for (std::string t; std::getline(stream, t);) { 79 + // parsing 80 + auto split_idx = t.find("-"); 81 + auto left = std::stoll(t.substr(0, split_idx)); 82 + auto right = std::stoll(t.substr(split_idx + 1)); 83 + 84 + // RAM is expensive these days 85 + // burning the CPU in attempts to occupy as less RAM at peak as possible 86 + // fuck OpenAI 87 + bool skip = false; 88 + for (size_t i = 0; i < ranges.size(); ++i) { 89 + auto range = ranges[i]; 90 + 91 + bool left_in_range = left >= range.from && left <= range.to; 92 + bool right_in_range = right >= range.from && right <= range.to; 93 + if (left_in_range && right_in_range) { 94 + // my hand just itches to use goto 95 + skip = true; 96 + break; 97 + } 98 + if (left_in_range) { 99 + ranges[i] = Range(range.from, right, true); 100 + skip = true; 101 + break; 102 + } 103 + if (right_in_range) { 104 + ranges[i] = Range(left, range.to, true); 105 + skip = true; 106 + break; 107 + } 108 + if (left <= range.from && right >= range.to) { 109 + ranges[i] = Range(left, right, true); 110 + skip = true; 111 + break; 112 + } 113 + } 114 + if (skip) { 115 + continue; 116 + } 117 + 118 + auto new_range = Range(left, right, true); 119 + ranges.push_back(new_range); 120 + } 121 + } 122 + 123 + std::sort(ranges.begin(), ranges.end(), 124 + [](Range one, Range other) { return one.from < other.from; }); 125 + 126 + std::vector<Range> merged_ranges{}; 127 + merged_ranges.push_back(ranges[0]); 128 + for (size_t i = 1; i < ranges.size(); ++i) { 129 + auto &last = merged_ranges.back(); 130 + auto &curr = ranges[i]; 131 + 132 + if (curr.from <= last.to) { 133 + last.to = std::max(last.to, curr.to); 134 + } else { 135 + merged_ranges.push_back(curr); 136 + } 137 + } 138 + 139 + std::vector<long long> ids{}; 140 + { 141 + auto stream = std::stringstream(data_ids); 142 + for (std::string t; std::getline(stream, t);) { 143 + auto id = std::stoll(t); 144 + ids.push_back(id); 145 + } 146 + } 147 + 148 + long long password_part_1 = 0; 149 + 150 + for (auto id : ids) { 151 + bool is_fresh = false; // guilty until proven innocent! 152 + for (auto range : merged_ranges) { 153 + is_fresh = range.contains(id); 154 + if (is_fresh) { 155 + break; 156 + } 157 + } 158 + if (is_fresh) { 159 + password_part_1 += 1; 160 + } 161 + } 162 + 163 + long long password_part_2 = 0; 164 + 165 + for (auto range : merged_ranges) { 166 + password_part_2 += range.size(); 167 + 168 + std::println("{} - {}", range.from, range.to); 169 + } 170 + 171 + std::println("Eureka! {} / {}", password_part_1, password_part_2); 172 + 173 + return 0; 174 + }