Advent of Code 2025, done in C++

Compare changes

Choose any two refs to compare.

+7
.clang-format
··· 1 + BasedOnStyle: Google 2 + AlignConsecutiveDeclarations: true 3 + AlignConsecutiveAssignments: true 4 + AlignConsecutiveMacros: true 5 + BinPackParameters: false 6 + ColumnLimit: 80 7 + IndentWidth: 4
+15
.editorconfig
··· 1 + # EditorConfig is awesome: https://EditorConfig.org 2 + 3 + # top-most EditorConfig file 4 + root = true 5 + 6 + # Unix-style newlines with a newline ending every file 7 + [*] 8 + end_of_line = lf 9 + insert_final_newline = true 10 + 11 + # 4 space indentation 12 + [*.cxx] 13 + indent_style = space 14 + indent_size = 4 15 +
+2 -2
Justfile
··· 22 22 23 23 # Run tests for a specific day. Defaults to today's day-of-month. 24 24 test day=default_day: sync 25 - day=$(printf '%02d' "{{day}}"); meson test -C build "day${day}" 25 + day_raw="{{day}}"; day=$(printf '%02d' "$((10#$day_raw))"); meson test -C build "day${day}" 26 26 27 27 # Run a day's solution on the "real" data set. 28 28 run day=default_day: sync-release 29 - day=$(printf '%02d' "{{day}}"); meson compile -C build-release "run-day${day}" 29 + day_raw="{{day}}"; day=$(printf '%02d' "$((10#$day_raw))"); meson compile -C build-release "run-day${day}" 30 30 31 31 # Clean the build folder. Useful... sometimes. 32 32 clean:
+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
+5
data/06/input.txt
··· 1 + 25 2965 84 3 591 58 6 824 218 77 6 241 2 8 49 89 5 33 23 3 7 12 5 551 25 512 3361 1 87 7113 93 9 849 266 9516 262 1 8 84 499 5667 6 87 8 1 7183 5 67 43 3945 42 87 62 3 9 5 11 3212 783 93 68 5 54 7 99 978 1694 1 75 26 6 47 76 928 535 4 86 221 68 53 63 31 71 22 27 27 4112 9 7 56 25 18 71 52 922 9 6138 9 897 7 9 6 1 58 7233 89 812 51 1315 674 2687 37 752 55 7 965 392 54 94 24 595 93 222 58 526 82 3 23 94 43 82 92 948 213 19 26 4273 79 5 921 76 542 78 213 55 55 7918 56 41 1388 6 64 57 83 54 647 3 6 76 67 324 823 83 534 44 315 936 915 5447 25 79 14 3 427 882 72 6 92 1 67 44 558 12 3 92 448 465 13 57 72 84 499 18 76 8 549 3916 3 55 978 8 6 4 8864 982 233 24 83 1 857 792 182 57 25 9 45 49 2746 446 883 46 42 43 91 975 8 772 489 72 7 98 92 71 31 76 174 39 49 433 4 23 39 117 19 358 84 13 71 65 89 2 8419 84 71 4 23 199 3284 52 6 397 74 43 61 9 9584 18 23 62 1614 94 957 28 45 2912 7 62 8 3 52 6 38 295 341 484 574 96 1542 618 51 92 5 9 78 2 92 284 91 476 62 7249 854 947 91 3 16 7 54 174 4338 762 11 766 84 61 49 6 883 3296 1595 8667 2 819 32 4 51 8531 689 3523 478 81 9 444 9 6416 9156 1 1 132 29 7 46 39 97 2518 45 68 1 1932 55 4 36 11 69 55 3 95 83 53 516 94 45 72 2 98 922 67 92 881 1 821 8 8 82 841 53 1331 572 84 5 529 62 3 5 99 38 86 2995 41 863 213 3 86 44 9773 4463 34 481 558 75 75 9989 31 5 213 17 75 295 652 21 126 735 43 34 439 2 8 71 514 8 5 3 28 71 4 16 366 3 5 564 768 45 81 7936 3 7 59 79 41 52 43 24 34 648 551 384 4917 283 982 42 2 8764 12 78 93 134 42 78 55 87 33 55 45 317 75 523 918 7 28 941 12 551 83 53 7 12 531 57 877 56 5 99 411 93 25 6 63 36 41 886 3 8245 88 87 262 25 653 4 23 889 92 6 827 99 427 16 728 743 69 2 6 39 997 52 56 43 169 68 13 55 86 88 4 269 258 7 7 5 329 688 7 79 913 51 38 7 6 53 85 7811 27 492 64 134 2 83 35 224 1 68 48 19 517 469 6 29 2 884 5473 19 26 52 91 5 381 91 79 97 35 49 8337 2147 52 11 986 3 62 35 33 7 63 54 3 82 369 74 48 2 5427 979 417 2 553 162 8 92 2344 457 464 9354 99 4 87 6 46 1558 9 41 111 8122 6693 77 615 815 447 25 875 35 22 4 946 86 94 979 1 799 86 519 237 1 436 57 972 445 87 58 12 5 78 95 4742 272 7 8867 767 81 968 83 599 6 5 34 999 88 372 792 52 287 876 331 65 6 45 1 593 212 832 37 72 843 987 31 35 9367 742 21 7 632 19 72 2191 75 5 84 218 8318 646 818 57 9 42 6 22 31 25 12 216 43 58 968 2532 293 759 932 57 276 511 86 589 51 1139 12 7421 913 298 982 455 277 71 2 56 52 649 894 1791 915 3294 593 38 8 3 27 8111 73 92 32 594 1 61 644 3 87 3 386 9475 39 5 93 7 28 963 32 1 34 296 699 3 61 25 7927 8 629 1265 24 19 14 461 1694 9 5 29 483 73 96 21 5 48 53 5 611 451 75 558 88 37 184 4 7884 9256 61 7413 67 33 2438 534 7 29 455 37 78 91 46 3295 66 13 491 52 5 958 86 123 48 2934 41 443 44 84 4 786 84 61 933 551 377 697 19 217 27 766 99 372 7 9 84 17 3 15 85 94 533 13 85 85 55 1776 2 9 36 27 7488 228 77 235 1448 21 293 847 641 4397 37 26 6734 81 72 6 9 379 43 53 255 2 14 341 551 84 369 384 46 769 1872 34 4 86 21 99 6 7 733 42 139 815 45 1 97 69 33 783 25 6 186 661 924 93 858 5 3 86 2 788 723 83 41 84 97 94 24 695 699 85 48 79 5497 15 19 57 9196 65 7213 5 56 69 293 8 5416 616 76 367 31 96 7 84 152 792 7812 92 62 195 48 71 18 552 21 5 642 924 12 78 385 489 29 83 3 73 99 82 48 54 919 4 851 63 61 91 25 198 38 717 6741 1 8416 418 61 46 8 9 119 38 89 7 836 238 62 9 2 38 995 38 788 88 5 2 + 676 8283 35 2 892 361 484 941 639 12 2 848 75 47 37 92 225 622 1 64 18 43 24 385 75 692 2977 3 19 4723 96 93 659 171 4621 823 39 17 68 942 6978 2 73 83 26 6968 41 896 84 7425 16 26 368 28 21 796 728 332 625 48 326 73 482 5 46 473 3714 73 98 24 7 29 49 386 932 3 989 158 86 71 82 387 88 48 49 918 2896 675 43 21 33 16 327 626 617 541 3743 6 4214 8 87 15 3 937 5434 15 338 3315 852 614 1166 66 267 38 5 519 816 38 98 47 511 83 924 23 598 18 6 77 78 32 711 46 15 176 861 42 9236 58 2 581 13 4459 72 572 62 12 2375 28 26 9715 71 658 46 44 4 729 5 97 27 68 744 335 622 21 213 547 378 997 2469 24 59 878 7 683 952 31 7 449 1 27 87 411 61 9 33 242 316 41 17 44 462 314 23 915 3 985 462 73 92 4219 93 59 75 426 43 241 29 13 145 756 852 242 46 441 928 899 7132 7215 946 283 53 41 28 88 112 57 939 731 77 4 61 76 27 56 95 7954 893 82 268 39 81 97 23 65 273 62 14 199 57 49 36 557 67 273 8 53 174 6512 65 12 437 23 32 668 165 6935 44 54 75 3133 17 775 236 66 9726 284 969 34 7 31 754 88 887 746 535 3237 67 3599 187 77 166 8 443 233 7 75 993 262 614 71 8913 555 288 27 24 94 54 94 789 3141 226 44 712 85 17 77 678 994 564 2732 1175 2 461 68 54 13 1387 384 326 323 86 52 81 2 9435 1164 32 6 297 13 71 51 73 82 822 2922 15 96 8849 32 34 45 39 37 192 5 56 94 29 984 38 68 44 6 84 275 6 518 621 45 484 463 9926 14 352 31 3463 216 67 5 966 52 75 94 33 17 637 9921 66 542 869 23 98 74 835 5795 18 725 689 19 48 2979 22 6 64 31 72 596 734 18 752 159 322 17 421 616 1 61 793 551 88 1 84 616 8 932 821 32 24 743 762 34 14 2676 767 9 49 65 57 76 58 126 258 898 318 781 9295 543 151 74 68 1588 6 37 574 225 764 69 62 91 43 286 45 783 92 933 48 66 31 729 79 576 94 38 4 58 583 63 78 65 18 95 389 24 184 6 12 11 62 931 761 527 55 75 811 48 714 76 556 549 49 946 961 96 596 42 116 256 47 9 17 4 919 33 17 42 512 67 87 21 16 23 5 827 366 22 9 95 235 241 5 44 863 6 73 12 3 26 91 5617 28 589 54 674 68 39 68 294 1 687 39 32 293 945 251 496 1 653 853 49 5 433 56 7 371 77 12 98 67 235 5837 118 87 61 396 79 8975 49 36 9 697 689 7 49 968 9 96 8 3916 396 387 5 818 134 93 37 4466 624 2115 4597 39 9385 61 9 46 8469 2 35 558 3758 386 43 749 171 333 99 736 476 62 6 694 57 76 534 7 658 81 433 678 282 48 656 198 746 38 29 85 7 22 47 449 578 67 2311 415 73 757 277 529 685 66 24 698 6313 51 977 262 377 694 243 66 41 23 62 566 242 827 92 891 916 78 99 795 7692 74 85 82 892 22 83 8453 35 97 23 865 2324 241 611 158 3 53 93 68 52 25 65 115 48 555 95 3194 618 318 327 876 445 269 92 426 7343 6528 87 2235 248 562 6747 313 177 66 25 155 43 717 826 2278 9663 3339 959 1833 5 24 92 7753 83 69 89 881 8 417 159 344 51 358 992 8149 84 68 58 382 43 838 57 99 22 663 525 43 58 338 416 85 227 7329 43 43 35 295 3785 85 1 19 145 9 37 21 1 36 24 57 142 294 42 3656 744 69 553 28 9185 2826 71 9829 45 54 4934 634 3 96 472 55 397 92 24 7535 5 88 96 21 53 974 2824 779 26 8191 84 692 676 83 73 747 64 46 145 317 5745 4239 24 866 65 436 61 182 4 933 35 18 351 51 315 94 6919 881 36 21 285 8468 39 56 49 63 5866 323 59 9457 2818 91 144 435 16 3839 78 153 93 25 25 21 7 39 75 943 688 9 95 199 182 537 4814 615 981 569 7292 81 4 21 2567 84 78 54 311 425 82 673 988 9 211 24 46 445 71 18 941 386 954 74 738 589 46 73 4 442 695 746 97 111 232 636 871 833 11 982 52 46 7455 9199 4882 7 646 79 163 76 44 59 842 9 4773 462 26 92 99 55 35 36 929 454 4419 56 7 653 63 883 82 236 62 53 555 11 71 95 759 213 56 89 91 46 87 514 81 999 324 4 156 22 927 64 48 554 51 6821 8769 6 7716 188 25 87 356 1 824 17 99 7 599 1356 84 38 83 13 849 397 475 66 535 3 + 449 1768 51 39 6267 194 1363 84 643 54 21 836 175 32 95 3 3354 736 6 43 162 22 82 468 3 138 599 7 67 1413 56 29 79 83 6833 74 149 742 334 482 793 28 59 343 365 3866 5624 215 62 334 1 59 568 42 326 698 984 767 15 238 2182 956 541 49 476 871 3214 15 81 87 426 77 692 536 712 11 685 76 47 21 87 7152 94 4 65 881 1546 936 6127 9 8897 1 228 816 58 245 477 33 1114 36 36 13 7 567 2973 66 731 8499 588 173 634 55 19 81 3 715 467 27 94 6 432 29 211 81 319 58 4 82 4428 18 292 27 6 394 458 54 1164 99 41 76 69 6977 18 681 4 75 4717 7 35 1346 567 356 581 67 7 47 35 17 35 881 893 29 929 8 629 179 8 616 2482 57 99 571 14 569 821 43 49 319 18 91 19 935 31 89 96 8644 711 27 15 42 1153 881 48 976 73 24 664 86 9 6254 88 16 27 113 96 347 65 671 394 62 999 685 5 837 713 6634 1485 858 955 71 25 699 829 269 443 881 476 966 74 48 72 13 39 13 3 7729 9831 55 387 82 1369 81 1 76 313 45 94 252 69 668 44 757 99 557 1 839 914 1259 3 13 187 6 68 141 196 3639 4397 4 15 669 76 792 811 15 72 566 114 397 71 65 343 923 9 969 854 9162 46 3737 19 96 9861 44 917 129 23 89 929 258 789 766 544 74 627 44 59 73 57 37 613 572 412 16 462 6 93 99 998 736 95 554 3214 39 826 28 17 563 9126 913 91 62 6 91 93 47 5413 4418 62 6 397 35 668 92 17 32 791 6343 71 54 8192 75 73 37 88 41 323 77 21 13 87 641 36 26 98 53 66 74 2 437 48 16 122 195 7354 43 921 14 7384 412 83 94 882 346 24 8373 39 315 9815 1846 3228 518 666 997 8 76 469 8372 74 36 915 57 83 565 326 82 78 13 156 197 26 2 276 798 215 88 162 558 9 381 355 6868 76 99 694 237 9 419 225 731 44 442 86 42 245 38 339 28 52 125 24 97 72 683 455 8762 777 1 825 861 67 81 82 3768 3 71 197 7884 272 67 61 34 84 2963 217 66 881 769 62 381 75 981 79 48 76 83 51 26 337 38 5 835 64 99 211 99 3317 6 81 4 56 918 645 449 49 54 144 15 278 89 576 51 17 218 38 33 4 96 826 52 73 56 67 5 978 44 49 46 944 8553 1 293 67 16 7 642 415 25 163 73 76 52 26 96 252 7 56 91 38 34 13 3587 9 298 62 78 36 19 27 218 68 7974 87 26 57 867 282 8249 87 66 73 66 9 858 37 51 715 214 1 6 12 728 1565 138 824 53 655 739 2477 7 27 68 822 1228 17 49 48 2 33 13 2721 364 649 429 242 463 36 733 8915 548 1163 271 62 9898 21 39 26 74 1 41 264 3767 662 56 367 892 317 15 71 175 28 59 277 1 2 33 7 664 15 778 852 849 66 822 844 96 76 77 38 89 45 67 539 61 86 792 93 8235 381 121 646 486 34 39 15 3647 57 455 265 74 846 349 14 61 86 58 694 694 527 79 997 85 95 151 458 1583 23 4 366 75 55 58 487 86 98 55 156 6837 26 82 284 399 57 76 45 57 46 44 74 17 944 3 835 962 422 86 961 749 397 66 435 1298 6931 29 1699 3965 322 7149 738 73 86 727 261 78 277 746 6742 1315 2551 683 6149 9 16 73 8297 56 19 21 686 1 882 285 527 21 5576 72 318 79 344 26 955 18 683 48 75 89 425 744 698 15 779 72 262 366 7377 84 57 25 13 548 11 33 1 669 5 43 95 4 84 47 45 13 371 26 2384 476 112 134 18 83 39 1 8 65 96 932 737 48 722 989 81 2437 51 59 7241 9 14 85 67 389 2547 1629 535 2 1878 712 241 854 67 99 288 68 63 34 532 5297 7958 46 728 25 786 28 361 36 4716 62 97 722 43 4256 56 2954 326 29 52 2271 5554 174 32 99 8 626 24 67 7123 146 71 636 46 55 939 45 269 63 96 96 95 58 29 1 4815 136 14 28 628 599 652 6678 46 698 928 161 654 17 17 8975 69 18 17 548 847 2 5 358 7 2958 55 78 143 23 58 59 411 446 46 69 6851 92 13 9 491 72 218 816 158 448 3194 238 148 83 952 68 57 6453 9749 9349 7 185 32 995 61 69 74 846 45 8766 925 67 71 39 23 41 15 283 788 984 8 5 32 37 387 475 56 85 41 939 23 473 93 682 758 543 15 392 36 4 336 296 684 99 22 143 21 713 13 3989 513 173 1994 5466 91 5999 718 8 2 728 82 442 64 991 53 332 2144 8 62 59 57 46 863 255 94 717 4 + 685 791 28 41 8761 757 7635 5 56 86 49 554 518 35 51 2 1718 4652 5 91 786 14 2349 442 3 999 715 14 35 177 83 31 87 31 55 46 561 951 767 2 98 48 8 771 397 83 6635 975 91 838 5 7 378 72 371 6239 537 96 1 616 5317 147 213 19 153 58 195 53 67 61 279 9 498 926 483 195 152 55 83 99 54 4625 4 3 18 834 3761 719 9985 6 7323 7 735 276 93 133 5 15 4994 92 46 65 73 192 371 5 3 4359 93 124 76 24 74 2 78 58 24 47 5 4 35 99 62 64 4 3 54 28 9529 38 986 5 5 617 856 51 2247 64 34 87 63 5771 1 9 5 1 85 5 23 8815 184 455 632 1 3 63 66 862 55 832 539 1 162 3 257 266 3 69 6 85 74 438 84 34 38 21 99 824 22 53 6 588 83 34 35 6949 538 87 27 39 5369 693 96 661 563 3 53 18 8 3592 1299 92 91 6 13 744 9 289 161 5 361 7165 7 641 836 7243 7947 5 367 24 69 425 872 544 4 634 7 563 85 23 18 4 32 624 5 8693 9533 5 497 71 2156 16 7 57 957 5 8 919 2 646 15 41 64 139 13 3366 775 8699 8 67 59 7 9 212 166 8766 1493 6 23 488 18 579 613 2 81 141 535 855 835 99 829 271 7 42 822 4178 94 836 15 99 6135 13 621 535 73 89 498 645 94 156 16 4 75 78 63 4 33 6 9 922 342 61 653 6 45 46 763 885 25 1 3328 34 2 7 93 856 633 2 78 66 8 975 31 46 5 59 91 97 26 66 561 3 9 78 667 2337 47 67 9988 6 19 67 15 15 348 87 79 77 7 718 1 85 78 24 9 17 6 794 5 53 927 569 1787 54 649 15 57 113 67 38 22 378 98 9126 7 411 4532 1133 7183 242 519 829 5 27 1 98 2 53 579 3 5 84 115 72 26 881 569 994 84 6 68 63 583 87 461 146 71 131 439 9333 65 25 789 342 78 555 723 115 35 531 28 4 456 94 157 41 9 432 33 4 13 131 461 3845 625 6 328 494 19 24 74 339 5 514 562 9721 961 2 98 31 63 1949 849 1 473 439 95 696 36 76 31 68 393 71 689 334 29 29 4 494 33 3 57 52 1328 47 48 6 9 18 767 421 56 9 571 45 735 49 132 85 15 197 15 9 4 89 17 1 85 72 94 7 58 62 9 9 45 9983 2 116 13 57 12 24 771 79 416 96 35 3 49 65 6 2 9343 25 46 32 24 128 8 449 6 6 53 84 26 4 75 2155 56 75 4 894 271 6871 425 89 25 64 9 652 72 86 9 621 4 8 55 162 298 65 411 31 983 989 7589 7 66 74 861 8643 94 22 5 4 16 32 2 19 757 2346 131 35 135 195 8 793 6286 897 15 8427 7 15 15 65 21 8 654 9377 9 61 121 52 5855 5 5 1952 9 52 19 4 9 54 73 594 71 16 959 489 7 665 3 54 99 65 53 254 23 57 31 7 28 92 9 5432 72 139 73 793 12 78 67 8451 21 25 486 46 719 5 25 59 51 12 81 6 558 91 517 8 59 894 535 977 64 3 348 3 65 94 86 68 62 1 512 9451 52 8 518 294 64 95 72 86 4 9 6 38 852 9 192 86 94 57 292 125 76 57 5 5467 121 22 723 2324 199 9114 376 3 14 629 457 745 91 36 77 8951 297 76 1943 47 55 34 61 31 92 28 363 36 765 287 382 71 3887 43 14 9 157 49 812 9 132 25 74 641 726 71 464 25 128 89 992 19 1664 58 83 45 49 62 45 51 7 4 2 12 4 697 29 9 39 24 6 9 4521 344 245 398 332 42 94 8 4 2 13 11 467 76 916 55 7 9144 5 32 779 3 78 6 48 182 7376 2581 73 4 91 172 912 157 1 78 111 9 133 3 4 6799 6327 23 1 79 79 3 19 87 4148 39 19 921 7 8734 97 2589 717 47 59 2569 14 122 97 4 1 892 66 2 9357 6 9 129 35 82 362 49 457 44 31 41 14 37 55 5 5171 55 49 47 2 389 362 1396 33 637 67 362 116 31 68 5194 46 97 57 53 932 4 6 946 26 6296 39 2 845 1 24 37 615 448 922 5 1947 23 7 53 845 86 859 628 218 361 3937 946 966 5 821 78 68 126 4864 9886 7 19 243 566 25 9 1 424 74 932 4 17 7 95 7 34 7 565 368 5 3 8 97 6 667 2359 88 535 31 57 7 786 3 26 232 195 81 426 579 7 967 267 527 9 53 719 16 4298 7 2763 429 665 2228 4286 24 56 37 4 2 217 66 91 33 854 62 672 9744 8 68 872 28 3 784 85 5 995 5 + * + + * + * + * * + * * + + * * + + * + * * + * * * + + * + * + * * + * + * + + + * * * * + + * + + * + * * * + + + * + + * + * * * + * * + * + + * * + * * + + + + * + * * + * + * + + * * + * + + + + + + * * + + * + + + + * + + * * * + + + + * + + + * * * + + * + * * + + + + + * + + + + + + + + * + + * * + + + + * * * + * * * + * * + + + * + + * + + * * * * * * + * * + * * * * + * + * + * + * + + + * + + * + * * * * + + * * + + + + * * + * * + + * * * * * * * + * * + + * * * + * + + * + * * + * + + + + * + * + + * * + + * + + + + + + * * + * + * * * + * + + + * + + * + + + + + * + + * + * + + + * + + * + * * * + * * * * * * * * + + + * + * * + + * + * * * * + + + * + * + + * + * + + + + + * + * + + + + * + + + * + * * * + * * * * + * + * + + + * + * + * + + + + + + + * + * + + + + + * * * * + * * + + * * + + * + + * * * * + + + * * + * * * * + + * * * + + + * + * * * + * * + + + + * * + + + + * * + * * * + + + + * + * * * + * * * + * + * * * * * + + + + + + * * + + * + * * + + + * * + + + * * + * * + * + * + + + * * * + + * * + + + + * * * + * + + * + + + + * + + * * + * * * * + + + * * * * * + + + + + * * + * + * + + * + + + * * * + + * + * + + + * * + * * + * * + * * * * + * + + + + + + * + * * * + + + + + + + * + * + + * * * * * * * * * + + * + + * + * + + + * + + * + * * * * * + * + * * + * * * * * * + * * * * + * * * + + + * * + + * + * * * + + * * * * * + * * * + * * * * + + + + + * * * + + + * + + + + * * + * + * * * + + + + + + + * + + * + * * * * * * + * + * + + * * * * * + * + * * + + + + + + * * * + + + * + + + * * + * * + * + + * * * + + + * + + + + + + + + * + + + + * * * + * + + * * + + + * + + * * + + * + + * * + * + * + + * * + * + + + * + + + + * + * * + + + + + * * + + + * * + * + + * * * + * * + * + * + + * * + * * + + + * * + + + * + * + * * * * * * + * + + + + + * + * * * * * + * * * * * + + + + * + * + * * * + * + + * + + + * * + + + * * + * * + * * + + * * * + * + + + * * * + * + * * * + * + * + + + * + * + + * + * * * + + + + * * * + * * + *
+4
data/06/test.txt
··· 1 + 123 328 51 64 2 + 45 64 387 23 3 + 6 98 215 314 4 + * + * +
+142
data/07/input.txt
··· 1 + ......................................................................S...................................................................... 2 + ............................................................................................................................................. 3 + ......................................................................^...................................................................... 4 + ............................................................................................................................................. 5 + .....................................................................^.^..................................................................... 6 + ............................................................................................................................................. 7 + ....................................................................^.^.^.................................................................... 8 + ............................................................................................................................................. 9 + ...................................................................^...^.^................................................................... 10 + ............................................................................................................................................. 11 + ..................................................................^...^.^.^.................................................................. 12 + ............................................................................................................................................. 13 + .................................................................^...^.....^................................................................. 14 + ............................................................................................................................................. 15 + ................................................................^.^.......^.^................................................................ 16 + ............................................................................................................................................. 17 + ...............................................................^.....^.^.^...^............................................................... 18 + ............................................................................................................................................. 19 + ..............................................................^...^.^.^.^...^.^.............................................................. 20 + ............................................................................................................................................. 21 + .............................................................^.^.^.........^.^.^............................................................. 22 + ............................................................................................................................................. 23 + ............................................................^...^.^.^.^.^...^.^.^............................................................ 24 + ............................................................................................................................................. 25 + ...........................................................^.^.^.....^.^.^.....^.^........................................................... 26 + ............................................................................................................................................. 27 + ..........................................................^.....^.^.......^.^.^.^.^.......................................................... 28 + ............................................................................................................................................. 29 + .........................................................^.....^.....^...^.^...^...^......................................................... 30 + ............................................................................................................................................. 31 + ........................................................^.....^.^.^.^.^...^.^.....^.^........................................................ 32 + ............................................................................................................................................. 33 + .......................................................^...^...^.^...^.^.^.....^.....^....................................................... 34 + ............................................................................................................................................. 35 + ......................................................^.^.^...^.^.^.^...^.^.....^.^...^...................................................... 36 + ............................................................................................................................................. 37 + .....................................................^...^.^.^.^.^.^.^.^.^.....^.^.^.^.^..................................................... 38 + ............................................................................................................................................. 39 + ....................................................^.^.^.....^.^.^.^.^.^.^.^.^...^.^...^.................................................... 40 + ............................................................................................................................................. 41 + ...................................................^.^.^.^.^...^.....^...^.......^.^.....^................................................... 42 + ............................................................................................................................................. 43 + ..................................................^.^.^...^.^.^.....^.^...^.^.^.^...^.^...^.................................................. 44 + ............................................................................................................................................. 45 + .................................................^...^.^.........^...^.^.^...^.....^.^.^...^................................................. 46 + ............................................................................................................................................. 47 + ................................................^.^.^...^...^.^.^.^.^.^...^.^.^...^.^.^.^...^................................................ 48 + ............................................................................................................................................. 49 + ...............................................^.^.^.^.....^.^.^.^...^.^...^...^.....^.^.^.^.^............................................... 50 + ............................................................................................................................................. 51 + ..............................................^.^.^.^.^...^.^.....^.^.^.^.^.....^...^.^.^...^.^.............................................. 52 + ............................................................................................................................................. 53 + .............................................^.^.^.^...^.^.......^.^.^.^...^.^.^...^...^...^.^.^............................................. 54 + ............................................................................................................................................. 55 + ............................................^.^.........^.^.^...^...^.^.^.....^.^.^.....^...^.^.^............................................ 56 + ............................................................................................................................................. 57 + ...........................................^.^.....^.^.^.^.^.^...^.^...^.^.^.....^.......^...^.^.^........................................... 58 + ............................................................................................................................................. 59 + ..........................................^.^.......^.^.^.....^.^.....^.................^.^.^.^.^.^.......................................... 60 + ............................................................................................................................................. 61 + .........................................^...^.^.^...^...^.^.^.^.^...^.^.^.....^.^.^...^.^.^.^.^...^......................................... 62 + ............................................................................................................................................. 63 + ........................................^.^...^.....^.^.......^.^...^.......^...^.^.^.^.^...^...^.^.^........................................ 64 + ............................................................................................................................................. 65 + .......................................^.^.^.^.....^.^.^...^...^.^.^.^.^.^.^.^.^...^.^.....^.^.^.^.^.^....................................... 66 + ............................................................................................................................................. 67 + ......................................^.^.........^.....^.^.^.....^.^...^...........^.^.^.^.......^.^.^...................................... 68 + ............................................................................................................................................. 69 + .....................................^...^...^.....^.^.^.....^.^.^...^.....^.^.^.^.^.^.^.^...^.^.^.....^..................................... 70 + ............................................................................................................................................. 71 + ....................................^.......^.^.^.^...^...^.^.^.^.^.^.^.^.^.^.^...^.^...^...^...^...^.^.^.................................... 72 + ............................................................................................................................................. 73 + ...................................^...^.^.^.^.^...^...^.^.^.^.^...^.^.^...^...^.^...^.^.^.^.^...^.^.^.^.^................................... 74 + ............................................................................................................................................. 75 + ..................................^.^.^.^.^...^.^.^...^...^.^.^.^.^.^...^.^.......^.....^.^.^.^.......^.^.^.................................. 76 + ............................................................................................................................................. 77 + .................................^...^.^.^.^.^.^.^.^.^...^.....^.^.^.^.^...^.^.....^.^.^.^...^.^.^.....^.^.^................................. 78 + ............................................................................................................................................. 79 + ................................^...^.^...^.^.^.........^.^.^.....^.^.....^...^.^.^.^.^.^...^.^.^...^.^.^.^.^................................ 80 + ............................................................................................................................................. 81 + ...............................^.^.^.....^.^...^.^.^.^...^.^.^.^.^...^.^.^.^.^.^.^.....^.^.^...^.^.^...^.^.^.^............................... 82 + ............................................................................................................................................. 83 + ..............................^.^...^.^.^...^.^.^.^.^...^...^.....^...^.^.^.....^.....^.^.^.^.....^.^.^.^.^...^.............................. 84 + ............................................................................................................................................. 85 + .............................^.......^.^.^...^.^...^.^.^.^.^.....^.^.........^.^.^...^.^.^.^.^.^.^.^.......^.^.^............................. 86 + ............................................................................................................................................. 87 + ............................^.^...^.^.^.....^.^.......^.^.^...^.^...^.^.....^.^...^.....^...^.^.^.^.^...^.^...^.^............................ 88 + ............................................................................................................................................. 89 + ...........................^...^.^.^.......^.^...^.^.^.^.^.^.....^...^...^.^.^.^.....^.^.^...^.^.^...^.^.....^...^........................... 90 + ............................................................................................................................................. 91 + ..........................^.......^...^.^.^...^.^.^.^...^.^...^.^.^.^.^.^.^...^...^.^...^.....^...^.....^.^...^...^.......................... 92 + ............................................................................................................................................. 93 + .........................^.^.^.^.^.....^...^.^.^...^...^.^...^...^.^...^.^.^.^.....^...^...^.^.^...^...^.^.^.^.^.^.^......................... 94 + ............................................................................................................................................. 95 + ........................^.^...^.^.^.....^.^...^.^.^.^.^...^.^.^.^.^...^.....^.....^.^.^.^.^.^.^...^...^...^.^.^...^.^........................ 96 + ............................................................................................................................................. 97 + .......................^.^.^.^.^...^.^.......^.......^.^.^.^.....^...^.^.^.....^.^.^.......^.^.^...^...^.^.^.^.^.^.^.^....................... 98 + ............................................................................................................................................. 99 + ......................^.....^.^.......^.^.....^.^.^.^.^...^.....^.^.^.^.^.^.^.^.....^...^.^.^.....^...^.........^.^.^.^...................... 100 + ............................................................................................................................................. 101 + .....................^.^.^...^.^...^.^.^.^...^...^.^.^...^.....^.^.....^.^.....^.^.........^.^...^.^.^.^.^.^.....^.^.^.^..................... 102 + ............................................................................................................................................. 103 + ....................^.^.^.^.^...^...........^...^...^...^...^.^...^...^.....^.^.....^.^.....^.^.^.^.^.^.^...^.^.^.....^.^.................... 104 + ............................................................................................................................................. 105 + ...................^.^...^.^...^...........^.^.^.^.^.^...^.^.....^.^.....^.....^.^.^...^.^.^.^.^...^.^.....^...^.^...^.^.^................... 106 + ............................................................................................................................................. 107 + ..................^.^.....^.............^.^.^.^.^.^.^.^.^.^...^...^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.....^.......^...^.^.................. 108 + ............................................................................................................................................. 109 + .................^.....^...^.^...^...^.^...^.^.^...^...^.^.^.^.....^.^.^...^.^.^.^.^...^.^.^.^.....^.....^...^...^.^...^.^.^................. 110 + ............................................................................................................................................. 111 + ................^.^.^.^.....^...^...^.^...^.^...^.^...^.^.....^.^.^.^...^.^.^.............^.^...^.^.........^.^.^...^.^.^.^.^................ 112 + ............................................................................................................................................. 113 + ...............^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.........^.^.^.^...^.^.^.^.^...^...........^...^...^.^.^.^.....^...^.^............... 114 + ............................................................................................................................................. 115 + ..............^.....^.^...^.^.....^.^...^.^.^.^.^...^.^...^...^.^...^.......^.^...^.......^.^.....^.^...^.....^.......^.^.^.^.^.............. 116 + ............................................................................................................................................. 117 + .............^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^...^.....^.^...^.^.^.....^.^.^.^.^...^.^.^.^.^.^.^...^.^.^...^.^.^.^.^.^.^.^............. 118 + ............................................................................................................................................. 119 + ............^.^.^.^.^.^...^...^...........^.^.^.^.^.^.^...^.^...^...^...^.^.^.^.........^.^...^.^.^.^.^.^.^...^.....^.......^.^.^............ 120 + ............................................................................................................................................. 121 + ...........^.^.....^.^.^.^.^.^.^.^...^.^.^.^.^...^.^.^.....^.^.^.^.^...^.......^...^.^.^.^.....^...^.^.^.^.^.....^.^.^.^.^...^.^.^........... 122 + ............................................................................................................................................. 123 + ..........^.^.^.^.^.^.^...^.....^.^.^...^.^.^...^...^.^.^.^.^.^.^.......^.^.......^.^.^.^.^.....^.^.^.^.^.^.....^.^...^.^...^.^.^.^.......... 124 + ............................................................................................................................................. 125 + .........^.....^.^.^.^...^...^...^...^.^...^.^.......^.^.^.^.^...^.^.^.....^.^.^.^.......^.^.^...^.^.^.^.^.......^...^.....^.^...^.^......... 126 + ............................................................................................................................................. 127 + ........^.^...^.^.^.^.^.^.....^...^.....^.^.^...^...^...^.^.^...^.^.^...^.^.....^...^.....^.^.^.^...^...^.^.^.^.....^.^.^...^.....^.^........ 128 + ............................................................................................................................................. 129 + .......^...^...^.^.^.....^.^...^...^.^.....^...^...^.^.^.^.^...^.^...^.^.^.^.....^.^.^...^.^.^...^.^...^.^.^.....^.^.^.^...^.^.^.^.^.^....... 130 + ............................................................................................................................................. 131 + ......^...........^.^.^.^.....^.^.^.^...^...............^.^.......^.^...^.^.^.^.....^...^...^.^.^.^.^...^.^...^.^.^.........^...^.^.^.^...... 132 + ............................................................................................................................................. 133 + .....^.^.^.^...^.^.^.^.^.^...^.......^.^...^.^.^.^.....^.^.^.^.^.^.^.^.^.^.^...^.^.....^.^.^...^.^...^.......^.^...^.^...^.^.^...^.^.^.^..... 134 + ............................................................................................................................................. 135 + ....^.^.^...^...^...^.^.^.^...^.^.......^.....^.....^...^.^...^...^.^.^.^.^.......^.^.^...^.^.^.....^.^.^...^...^.^.^.^.^...^.......^...^.... 136 + ............................................................................................................................................. 137 + ...^.^.....^.^.^...^...^.^.^...^.^.^.^...^...^...^.^.^.^...^.^.^.^.^.^...^.^...^.^.^...^.....^.^.^...^.^.^...^.^.^.^.^.......^.^...^.^.^.^... 138 + ............................................................................................................................................. 139 + ..^.^.^.^...^.^.^.^...^.^.^.^.^.^.^...^...^.^.^.^...^.....^...^.^.^.^.^.^...^...^.^.^.^.....^.......^.^.^.^.^.....^.^.^.^.^.........^.^...^.. 140 + ............................................................................................................................................. 141 + .^.^.^.^.^.^.^.^.^...^.^.^...^...^.....^.^.....^.^.^.^.^.^...^...^.^...^.^.^.^.^...^.^.^.^...^.^.^.^...^...^...^...^.^.^.^.....^.^.^.....^.^. 142 + .............................................................................................................................................
+16
data/07/test.txt
··· 1 + .......S....... 2 + ............... 3 + .......^....... 4 + ............... 5 + ......^.^...... 6 + ............... 7 + .....^.^.^..... 8 + ............... 9 + ....^.^...^.... 10 + ............... 11 + ...^.^...^.^... 12 + ............... 13 + ..^...^.....^.. 14 + ............... 15 + .^.^.^.^.^...^. 16 + ...............
+1000
data/08/input.txt
··· 1 + 47571,21070,9804 2 + 26014,44873,23440 3 + 21436,20018,6336 4 + 86942,19462,93901 5 + 49070,89301,48095 6 + 35616,79795,87684 7 + 46059,52360,21723 8 + 815,59491,16082 9 + 36997,51041,15723 10 + 48823,39495,7825 11 + 51753,4208,6052 12 + 54168,42076,29285 13 + 20754,25389,97173 14 + 59500,82003,9597 15 + 50009,95623,78606 16 + 16875,26902,85926 17 + 94936,11855,20459 18 + 29649,39961,5964 19 + 75013,82858,46898 20 + 41418,34129,78316 21 + 53899,91211,30110 22 + 23881,28275,96163 23 + 57427,65737,22498 24 + 61932,26265,53341 25 + 66932,22206,44871 26 + 21918,87742,17383 27 + 6367,78929,46730 28 + 45731,28754,95626 29 + 99274,72570,7847 30 + 30049,55955,65389 31 + 29114,49335,69452 32 + 93501,53260,46406 33 + 90751,50824,44853 34 + 17876,94582,42247 35 + 76370,58963,43822 36 + 7098,80312,49281 37 + 84161,27963,78109 38 + 26305,54455,7015 39 + 20715,36202,93555 40 + 53829,86237,93455 41 + 82380,63810,94552 42 + 89368,99839,21849 43 + 87497,47331,94985 44 + 15162,51381,770 45 + 95313,7542,11728 46 + 53233,25116,16166 47 + 39381,93503,98765 48 + 44807,73664,70213 49 + 64971,93696,88679 50 + 57739,609,67547 51 + 20052,59602,10551 52 + 97480,93610,27749 53 + 64800,39151,87207 54 + 20649,60628,94244 55 + 39906,63714,7798 56 + 63509,47318,9956 57 + 4450,90472,41313 58 + 63768,62774,11958 59 + 10544,27294,3096 60 + 36575,34168,46729 61 + 15982,19416,54354 62 + 79358,80933,60698 63 + 28189,14011,71324 64 + 99923,71592,65177 65 + 95588,3920,27088 66 + 20412,59125,6914 67 + 64359,62132,47563 68 + 80252,13527,57773 69 + 55512,16749,62123 70 + 29926,23937,64662 71 + 39571,82975,19998 72 + 45426,9316,91331 73 + 44477,20201,75955 74 + 2271,90540,17806 75 + 50227,93207,93092 76 + 11411,51340,57663 77 + 97754,96323,37130 78 + 98986,72665,15300 79 + 56185,47869,72908 80 + 41878,1363,14758 81 + 17185,33485,94935 82 + 56299,27990,23411 83 + 56452,5027,31447 84 + 29500,44948,51617 85 + 80321,14706,47434 86 + 11412,5698,63814 87 + 20894,72581,79096 88 + 16983,21117,47752 89 + 70243,75746,49340 90 + 8209,66696,24132 91 + 68345,8500,13353 92 + 66274,29803,36754 93 + 73740,3744,81183 94 + 93764,84714,68608 95 + 95758,92527,3581 96 + 1595,75495,24023 97 + 46264,54482,91932 98 + 88312,9307,89820 99 + 52494,90230,12337 100 + 13233,52655,32914 101 + 4316,69743,11655 102 + 60985,41967,58045 103 + 148,48360,76118 104 + 9168,81733,47376 105 + 7509,59153,81292 106 + 9286,92278,40935 107 + 6689,8277,65867 108 + 77303,26813,98281 109 + 97274,74605,8928 110 + 64111,1255,72466 111 + 47709,95260,99519 112 + 76389,53573,75496 113 + 91718,92565,80380 114 + 96354,38927,53770 115 + 54341,34652,75607 116 + 4883,54110,88424 117 + 7132,40749,94152 118 + 12116,58680,18862 119 + 82365,88948,64824 120 + 17238,81714,99059 121 + 7750,63178,72867 122 + 97873,63681,11835 123 + 29111,86352,22560 124 + 22221,10434,97955 125 + 33953,31092,14817 126 + 25563,63991,7561 127 + 91343,83184,43020 128 + 30333,91579,24170 129 + 43793,38500,78262 130 + 91079,65108,91185 131 + 9241,37569,48652 132 + 32460,746,63944 133 + 27812,99211,48865 134 + 33771,79759,60765 135 + 47927,66642,17212 136 + 21386,6415,23249 137 + 37948,8261,87194 138 + 43984,30104,67605 139 + 21734,65992,73999 140 + 86262,95474,9534 141 + 59214,83053,21772 142 + 90581,53940,87498 143 + 8241,19458,85268 144 + 58944,35703,85983 145 + 59911,38963,75410 146 + 99952,28406,68011 147 + 44037,55766,58629 148 + 4033,63003,64904 149 + 80639,28101,43807 150 + 56561,21523,8735 151 + 54799,81572,967 152 + 72303,47576,77866 153 + 73283,18699,89146 154 + 16438,5180,57306 155 + 85275,58630,78887 156 + 73122,12677,20791 157 + 23579,72966,44771 158 + 77605,53061,89981 159 + 44904,96197,31499 160 + 25606,69589,99058 161 + 90709,92773,25475 162 + 13674,79937,55109 163 + 30367,3176,72024 164 + 73198,59340,47212 165 + 66561,11630,359 166 + 81408,91758,96519 167 + 84170,22261,90978 168 + 61563,94745,30976 169 + 98606,76722,59057 170 + 72801,32395,14427 171 + 78479,39897,7663 172 + 97123,13861,46867 173 + 72658,62349,8080 174 + 14154,66620,28768 175 + 4557,99680,63147 176 + 2146,49024,61993 177 + 14654,3716,91456 178 + 66004,116,66251 179 + 2322,16850,71882 180 + 33229,94451,8875 181 + 29805,23309,81315 182 + 50029,36838,21929 183 + 82209,590,52032 184 + 21747,2975,97024 185 + 49535,18114,20733 186 + 3618,28912,40469 187 + 96636,97224,98582 188 + 57756,40775,84060 189 + 34034,79567,87609 190 + 25778,12133,5076 191 + 83296,8348,96603 192 + 70987,83036,78511 193 + 74585,66133,47503 194 + 45046,4953,14146 195 + 73068,56031,53588 196 + 53556,96933,17970 197 + 34304,44725,61677 198 + 81552,5207,10274 199 + 75676,34240,54779 200 + 26235,58317,78470 201 + 49044,58067,48983 202 + 41488,57392,13388 203 + 94175,28337,69652 204 + 22770,10382,52096 205 + 8129,73930,74894 206 + 27652,5751,2110 207 + 90856,9187,3182 208 + 71313,45401,62757 209 + 34566,84469,64732 210 + 59016,52067,4406 211 + 21917,26138,45029 212 + 97263,71628,37478 213 + 59537,72454,41174 214 + 4539,20633,62147 215 + 64138,74645,12101 216 + 83582,87586,79578 217 + 20401,60949,46910 218 + 70557,448,53317 219 + 85318,94930,54753 220 + 70992,94321,97929 221 + 25168,46035,84153 222 + 60606,1952,11388 223 + 21193,43019,39906 224 + 96635,25530,84545 225 + 374,52915,33797 226 + 4568,83473,12379 227 + 48299,44457,82027 228 + 83266,6879,32563 229 + 40391,95543,82502 230 + 38721,83550,86705 231 + 16498,3509,47973 232 + 46405,83872,84187 233 + 82310,92631,8186 234 + 96936,37313,2996 235 + 81772,60821,57329 236 + 71034,95270,59124 237 + 55347,49238,48950 238 + 38397,67390,4520 239 + 63155,14251,65728 240 + 76221,52730,58846 241 + 72010,46346,1935 242 + 10706,67290,12780 243 + 14173,89327,94873 244 + 81847,1935,70812 245 + 662,50973,84260 246 + 5755,43879,46625 247 + 24597,45916,35947 248 + 79693,44291,14249 249 + 57132,19072,4563 250 + 65615,47356,5321 251 + 51448,68876,39994 252 + 97074,47951,9852 253 + 84316,82211,79901 254 + 98008,94765,89135 255 + 66447,25627,42794 256 + 97780,52819,8822 257 + 21586,98713,27242 258 + 56338,25461,57018 259 + 21307,99640,86841 260 + 57220,4743,51006 261 + 54794,89524,22565 262 + 73269,13665,65911 263 + 91607,73120,69334 264 + 58479,41460,10925 265 + 48014,39814,63837 266 + 34417,90040,85444 267 + 7194,36015,93413 268 + 7868,97501,37561 269 + 91080,17487,79945 270 + 69784,87574,12615 271 + 3132,23539,47343 272 + 53840,21079,56691 273 + 14928,70069,77892 274 + 84516,59600,18173 275 + 94950,16419,10539 276 + 95786,75343,20956 277 + 77478,9485,20339 278 + 61532,12904,76720 279 + 57961,93013,50244 280 + 89776,75175,5051 281 + 65822,70073,28510 282 + 40531,35936,69847 283 + 59523,70583,52831 284 + 40175,32972,23371 285 + 90438,35912,38646 286 + 9190,71603,2301 287 + 89914,64437,39884 288 + 19231,20532,21738 289 + 20291,28387,29046 290 + 61401,12081,48512 291 + 70367,83299,72938 292 + 83775,15129,69950 293 + 65702,40589,28248 294 + 67004,66912,6380 295 + 92528,51355,9539 296 + 78714,75787,68757 297 + 11715,10091,10377 298 + 20186,48397,99790 299 + 92315,41383,55587 300 + 92772,78647,24218 301 + 27061,61947,52007 302 + 56991,14015,55863 303 + 61421,37878,69228 304 + 92103,39528,29743 305 + 72506,97359,35180 306 + 53018,24457,19496 307 + 3710,47703,24976 308 + 22916,27182,6379 309 + 42884,85646,26272 310 + 82100,98605,30769 311 + 1821,91791,94846 312 + 83792,55739,65047 313 + 46214,65415,81282 314 + 66988,40521,21596 315 + 45494,52681,57995 316 + 2212,70960,79823 317 + 33321,19720,39301 318 + 19669,55897,20490 319 + 9730,6780,10006 320 + 55897,67619,63154 321 + 85947,46340,80569 322 + 17833,80348,39175 323 + 53730,29488,16550 324 + 97827,97934,56043 325 + 79680,52251,79901 326 + 15440,84026,45232 327 + 34900,47716,88735 328 + 31175,30778,37122 329 + 653,6797,65269 330 + 39498,56985,61145 331 + 13639,4464,54937 332 + 36506,73704,92509 333 + 87986,54749,53371 334 + 86831,89128,24572 335 + 30369,50407,58265 336 + 44688,73717,6276 337 + 34669,23598,35669 338 + 38200,44889,66909 339 + 5804,48890,22794 340 + 33804,15381,41749 341 + 31083,32018,9933 342 + 41887,64511,29207 343 + 86779,64028,44144 344 + 82940,57300,4258 345 + 11837,83350,22362 346 + 53566,55374,15050 347 + 94542,42256,70529 348 + 57924,9304,52928 349 + 37874,91291,5924 350 + 27458,33422,50557 351 + 40032,20648,34773 352 + 19329,95504,64776 353 + 43060,59066,72108 354 + 38735,37842,70331 355 + 34756,30542,72483 356 + 8645,64076,29678 357 + 14422,9744,59856 358 + 36690,33825,5724 359 + 28010,71813,49198 360 + 79220,57332,56033 361 + 85797,27675,39216 362 + 20001,86620,15888 363 + 46676,25791,13225 364 + 31040,8856,9734 365 + 69598,20191,54257 366 + 31748,94398,62648 367 + 56233,47124,70615 368 + 86810,74097,63829 369 + 55402,87748,14049 370 + 64651,2504,94470 371 + 27971,25371,34425 372 + 7225,62165,53127 373 + 77869,9942,69819 374 + 72986,43646,21958 375 + 13212,64016,58505 376 + 99141,27615,61691 377 + 21479,16593,66867 378 + 13086,99145,53945 379 + 39562,70835,13715 380 + 77232,8696,6263 381 + 43493,37183,20948 382 + 90373,8567,28002 383 + 54144,51686,74721 384 + 20266,92932,54157 385 + 77664,69955,28639 386 + 18112,57499,37970 387 + 15268,17169,42698 388 + 32468,30659,49133 389 + 34070,13151,91140 390 + 87010,95748,2013 391 + 46275,45143,53050 392 + 10494,54292,36448 393 + 50234,76183,70819 394 + 80526,16331,62884 395 + 6032,43454,88976 396 + 1797,46200,32248 397 + 26840,76571,42950 398 + 27949,6053,95123 399 + 40843,57826,7905 400 + 62034,4876,80293 401 + 9905,9552,83286 402 + 75639,43573,56302 403 + 77035,5633,66609 404 + 11388,10209,68548 405 + 58492,99441,377 406 + 40265,14242,48084 407 + 4968,53030,15790 408 + 3046,79682,31531 409 + 71977,44774,83696 410 + 30341,61916,1749 411 + 30350,11026,837 412 + 44840,32588,63636 413 + 88505,10183,71612 414 + 32489,46938,18115 415 + 12210,5579,13040 416 + 17211,56521,90358 417 + 12646,96369,22505 418 + 34639,2499,36923 419 + 59882,65605,45102 420 + 77122,1567,96902 421 + 32974,16234,91201 422 + 52678,75753,35067 423 + 25434,92606,39762 424 + 93863,32581,75702 425 + 55269,32940,90736 426 + 31196,79296,2411 427 + 32139,5425,88534 428 + 42087,6540,70085 429 + 47680,12084,40442 430 + 82708,7433,75986 431 + 70100,43677,91632 432 + 75563,23981,42045 433 + 62069,50198,16274 434 + 91806,43797,19221 435 + 94941,43234,34002 436 + 93098,75133,93017 437 + 48110,24269,17706 438 + 90038,11689,72942 439 + 70544,38775,33456 440 + 2341,41646,83120 441 + 80223,44823,83163 442 + 23490,69775,90768 443 + 27119,88592,42351 444 + 49695,70167,79602 445 + 19734,54281,76912 446 + 3279,5818,16862 447 + 81007,57021,81242 448 + 81876,58981,63066 449 + 43321,31203,33556 450 + 31841,1330,10307 451 + 7949,71731,55618 452 + 26908,18268,30532 453 + 30285,88907,22633 454 + 24152,45805,60561 455 + 79302,72702,76457 456 + 24447,34767,60079 457 + 43353,98225,81031 458 + 68030,16759,9191 459 + 10141,12438,160 460 + 23463,5953,51134 461 + 15644,40590,57515 462 + 7584,17705,36278 463 + 45766,1900,6245 464 + 86762,62967,34062 465 + 54341,66546,41201 466 + 78187,91320,38408 467 + 37740,21065,4798 468 + 69745,98152,82847 469 + 58165,40210,7664 470 + 57808,97649,77099 471 + 59203,67064,43833 472 + 46238,42254,26635 473 + 42951,88292,67386 474 + 36255,71840,99352 475 + 86904,78475,63880 476 + 54625,41741,21814 477 + 51844,76869,66151 478 + 25449,1275,32406 479 + 53191,93381,13297 480 + 5047,32201,16966 481 + 78811,90884,23148 482 + 7102,60280,11362 483 + 74647,66893,26489 484 + 59242,8613,34456 485 + 28920,62015,38343 486 + 27722,65056,73880 487 + 84968,18892,48779 488 + 33795,33661,27615 489 + 95964,60359,73002 490 + 47608,24948,90615 491 + 83227,61252,77096 492 + 19549,49439,77542 493 + 38483,9359,99684 494 + 78665,15778,25976 495 + 13515,34388,9467 496 + 27094,30181,47555 497 + 77474,87811,56069 498 + 11371,79142,62321 499 + 35008,74101,91095 500 + 62614,92190,30576 501 + 45410,96553,90163 502 + 54834,29978,70659 503 + 73603,93724,29451 504 + 89408,16626,97888 505 + 61381,98593,92817 506 + 41656,60287,40274 507 + 42710,95785,86735 508 + 40148,27444,62101 509 + 38839,2726,156 510 + 53884,39879,77757 511 + 50182,33953,83335 512 + 4024,39407,78713 513 + 71201,69212,47612 514 + 72814,63909,21368 515 + 25091,8651,21835 516 + 66834,49263,47463 517 + 5794,19003,38757 518 + 25736,83973,63167 519 + 67326,69732,77723 520 + 55857,72729,21881 521 + 50893,26818,86959 522 + 21374,85006,32064 523 + 46247,5364,83390 524 + 64814,27275,70599 525 + 55152,54557,13088 526 + 24181,58143,23758 527 + 13931,48317,38065 528 + 66846,58449,51695 529 + 17876,21013,65658 530 + 99456,42478,6183 531 + 2146,27003,13244 532 + 79344,99111,98338 533 + 95675,22459,34986 534 + 67511,11973,23633 535 + 99088,18678,44464 536 + 17574,15741,74468 537 + 52103,86699,84509 538 + 78626,11978,41367 539 + 47184,33523,33023 540 + 62769,24411,39138 541 + 87083,10852,31442 542 + 71856,70552,41731 543 + 22827,20002,50990 544 + 3114,77254,71048 545 + 90444,55101,96536 546 + 12030,39124,9112 547 + 94730,50534,98462 548 + 65481,15521,6185 549 + 95416,25512,66803 550 + 30379,44564,35308 551 + 62359,30836,858 552 + 4783,30816,54071 553 + 93777,17819,93849 554 + 86860,48488,79960 555 + 38540,2096,26954 556 + 23403,55836,96988 557 + 92987,29804,88423 558 + 55332,20896,27899 559 + 10502,40551,24563 560 + 52516,39967,73612 561 + 99221,5902,84311 562 + 27715,4077,71754 563 + 26862,39283,2862 564 + 91760,34382,78320 565 + 49179,7364,82913 566 + 78199,2221,93708 567 + 61153,9597,79648 568 + 5073,82720,11302 569 + 61822,12463,66129 570 + 4315,14262,34326 571 + 77730,8771,72616 572 + 44595,64796,26351 573 + 61178,31519,77512 574 + 15747,87199,83147 575 + 16945,74163,59198 576 + 87054,85958,93672 577 + 28777,63191,29253 578 + 14354,8173,49003 579 + 52594,74550,96034 580 + 38416,18312,17255 581 + 73466,43537,40330 582 + 56769,52928,16350 583 + 96188,24420,61532 584 + 92933,42686,80599 585 + 74947,24413,55186 586 + 13898,41541,45573 587 + 5903,9073,21540 588 + 31417,19227,24337 589 + 5684,18176,63010 590 + 40224,43390,75761 591 + 98842,81166,44187 592 + 60881,32949,51308 593 + 53788,17800,23102 594 + 634,7754,1148 595 + 10482,71646,44004 596 + 7876,40227,62958 597 + 34829,29713,27785 598 + 68001,35821,96923 599 + 12827,8515,47275 600 + 54025,36049,42296 601 + 50915,34964,4004 602 + 23993,52708,56057 603 + 14674,10455,38981 604 + 31864,82531,59991 605 + 47438,24692,70707 606 + 92477,3072,40434 607 + 43571,76861,58998 608 + 80011,43036,49467 609 + 78019,90390,53249 610 + 53615,57975,45625 611 + 1702,24160,35037 612 + 35805,90333,23305 613 + 37707,79539,11741 614 + 2905,31052,78344 615 + 76311,17530,7380 616 + 44106,13061,19110 617 + 94819,93976,56394 618 + 12610,69169,81221 619 + 53121,60839,43572 620 + 21724,18243,70406 621 + 53261,60232,97572 622 + 28546,53689,69683 623 + 12694,57936,65968 624 + 82882,35505,12859 625 + 66837,55685,71303 626 + 11623,65623,62165 627 + 90587,26879,99017 628 + 27843,99230,84416 629 + 18509,40083,47141 630 + 32637,34159,3665 631 + 58801,76994,2826 632 + 73093,1048,47133 633 + 26146,25503,49013 634 + 7857,22552,93407 635 + 49429,99842,3603 636 + 54820,29343,21395 637 + 64989,49335,40131 638 + 40602,70291,18076 639 + 32379,67852,85939 640 + 20612,72997,59130 641 + 14587,34614,74057 642 + 72896,28351,44524 643 + 85587,53315,64171 644 + 36796,65835,69821 645 + 83564,79081,95423 646 + 56047,43325,37106 647 + 74816,99621,54441 648 + 70201,80468,22097 649 + 58402,85776,84389 650 + 4333,87626,83957 651 + 95489,48004,48147 652 + 37140,48179,76671 653 + 12264,22325,77463 654 + 70235,26337,43215 655 + 46901,79727,68156 656 + 23161,20519,23792 657 + 59846,24712,14913 658 + 88611,29379,9015 659 + 39654,50052,26737 660 + 56287,59461,66472 661 + 88871,52617,18550 662 + 79113,24225,16655 663 + 10981,25969,55227 664 + 8510,67023,66310 665 + 32241,81237,37402 666 + 13931,70565,9485 667 + 79335,45054,82935 668 + 49671,91517,34724 669 + 92078,48871,72204 670 + 56332,34226,55585 671 + 24562,71347,66647 672 + 82680,47080,28954 673 + 96352,1933,91494 674 + 72322,67853,89273 675 + 65082,14009,14444 676 + 1530,93847,47174 677 + 57820,18394,44986 678 + 22059,67185,79553 679 + 54557,53617,82442 680 + 46335,94730,72199 681 + 1962,12383,95849 682 + 65542,7955,29447 683 + 65144,38401,90221 684 + 35508,96042,82430 685 + 59163,14334,70945 686 + 70460,53300,52123 687 + 34023,78099,25284 688 + 19821,58522,74364 689 + 78588,13592,91207 690 + 89449,57983,53125 691 + 12631,60064,18667 692 + 23148,69953,14387 693 + 98065,60673,84824 694 + 3390,41925,34979 695 + 4661,22151,32161 696 + 42596,95326,23249 697 + 82168,82291,87225 698 + 78988,98863,79186 699 + 6992,45268,16858 700 + 69975,2042,57466 701 + 34943,27480,95116 702 + 8672,88889,10200 703 + 67403,28635,76571 704 + 46559,40091,74483 705 + 32881,7955,1367 706 + 51198,10001,96743 707 + 64130,56646,87474 708 + 80325,76483,89384 709 + 57046,60012,101 710 + 15077,16678,7927 711 + 3728,94382,39608 712 + 15964,69261,26463 713 + 83716,84460,70427 714 + 37320,30284,25700 715 + 46415,18770,63022 716 + 53399,28785,13774 717 + 74314,24151,28583 718 + 57140,15836,8623 719 + 71056,64222,65027 720 + 81218,79768,87696 721 + 22604,98045,70064 722 + 58915,75139,69740 723 + 56457,97339,81568 724 + 52208,10114,12451 725 + 74661,63103,4369 726 + 66959,4518,62250 727 + 49440,99642,8009 728 + 1807,65914,78391 729 + 27868,87246,62097 730 + 28780,60481,87911 731 + 27347,46484,10107 732 + 79586,4525,90940 733 + 17376,89075,64772 734 + 86798,5050,78881 735 + 40056,44781,7813 736 + 59740,19006,96758 737 + 84464,39836,33204 738 + 15036,29703,16044 739 + 40650,23464,33328 740 + 27586,94834,79957 741 + 72347,33172,98871 742 + 14928,56291,35185 743 + 19170,98017,88766 744 + 69095,39961,3157 745 + 14921,52255,4091 746 + 77408,21152,57035 747 + 15144,47264,61817 748 + 41243,87263,23238 749 + 49725,50503,70957 750 + 72742,49967,58307 751 + 62427,6785,17789 752 + 49372,10110,79026 753 + 73493,89522,62465 754 + 88764,83921,83214 755 + 85906,51672,39417 756 + 59951,8945,94301 757 + 66027,79004,89099 758 + 7721,79152,13019 759 + 31354,81139,71349 760 + 94292,22483,23272 761 + 83134,50745,53565 762 + 64572,51568,54087 763 + 35576,40786,82339 764 + 71536,29869,62731 765 + 82761,89931,9438 766 + 30326,6389,41591 767 + 88438,4028,46263 768 + 43045,39921,83709 769 + 19525,88390,6197 770 + 94923,78355,59908 771 + 66648,53480,72957 772 + 10316,95770,80697 773 + 64258,78272,34499 774 + 9602,14890,55144 775 + 32620,44416,74996 776 + 74381,54598,75987 777 + 68025,31961,88390 778 + 80103,84533,18000 779 + 52588,26228,18397 780 + 85996,65143,44905 781 + 58927,60922,53393 782 + 63291,59103,83939 783 + 44399,42038,79279 784 + 66706,53739,81533 785 + 97850,28487,74736 786 + 11409,45929,74659 787 + 76366,10982,68153 788 + 45192,22217,8001 789 + 12567,79477,83157 790 + 99016,29496,15868 791 + 99441,48371,39632 792 + 13125,33481,67353 793 + 14041,98765,696 794 + 57667,56475,65880 795 + 73596,42904,3828 796 + 40033,2119,49966 797 + 47248,88788,35167 798 + 12448,95861,56639 799 + 52634,66539,44159 800 + 78326,13152,13323 801 + 84603,97333,88368 802 + 25207,75486,41433 803 + 48253,93053,34986 804 + 43208,54954,83110 805 + 76374,5075,87221 806 + 91156,42808,47615 807 + 19242,85722,11737 808 + 49409,18079,11095 809 + 2164,15802,99410 810 + 51637,23686,84491 811 + 8799,33160,78581 812 + 45410,37478,85256 813 + 48724,80570,70207 814 + 5337,32514,2350 815 + 25825,34176,15584 816 + 23758,37015,71970 817 + 67949,45676,17850 818 + 69889,22576,9602 819 + 49666,25941,51764 820 + 82425,36914,85367 821 + 71935,5950,24079 822 + 99034,60825,28744 823 + 47463,71130,7873 824 + 65916,77191,67546 825 + 52639,64934,27059 826 + 25286,43802,54243 827 + 21765,82892,46133 828 + 83714,55468,26432 829 + 8234,25559,71966 830 + 69309,17480,92126 831 + 86058,99047,87034 832 + 70891,95150,42356 833 + 9190,82148,93273 834 + 88920,38914,57393 835 + 62428,31091,34420 836 + 34320,75262,48894 837 + 71159,98023,37547 838 + 16134,23614,55280 839 + 69673,12353,1603 840 + 49368,97222,43249 841 + 84405,95532,66840 842 + 37839,3437,48182 843 + 22393,71847,80523 844 + 93911,50316,60776 845 + 43028,3938,60629 846 + 27619,3021,9514 847 + 77399,27707,8919 848 + 57263,83406,68290 849 + 22053,30972,96730 850 + 53940,36034,57408 851 + 41239,99148,63259 852 + 57045,78769,10005 853 + 58374,63114,26580 854 + 50821,77483,49296 855 + 82959,42165,29481 856 + 96273,24985,2153 857 + 49241,7520,19081 858 + 50757,94282,77801 859 + 38752,75862,20439 860 + 26794,19821,90257 861 + 60011,47770,15012 862 + 99084,34347,79964 863 + 69079,11566,60069 864 + 75589,80080,46358 865 + 2731,39043,87971 866 + 81258,93577,27120 867 + 98782,3083,31148 868 + 21067,10434,97759 869 + 17633,90336,18283 870 + 42288,35286,35492 871 + 97043,85410,6868 872 + 15744,47437,31523 873 + 39150,72388,66272 874 + 29176,54342,60288 875 + 17332,51184,31921 876 + 98546,6055,85092 877 + 25437,71642,66423 878 + 10807,74499,22047 879 + 65389,64539,92105 880 + 13522,94556,95640 881 + 88993,44952,15621 882 + 44035,68710,12057 883 + 34173,62229,34852 884 + 48462,14122,96488 885 + 42631,98310,94112 886 + 28817,73863,45216 887 + 99285,74724,42942 888 + 32630,41705,74013 889 + 52914,89386,95045 890 + 3556,18655,22825 891 + 2197,65519,88154 892 + 56784,5609,52806 893 + 4401,90031,71062 894 + 89583,17186,94403 895 + 36613,70447,35887 896 + 93664,54419,41441 897 + 96846,91670,87650 898 + 52315,40033,99990 899 + 75452,67163,63407 900 + 44113,22893,12942 901 + 65470,67631,10701 902 + 18129,39210,64248 903 + 41498,571,37885 904 + 27692,49007,90764 905 + 65234,44201,37549 906 + 98101,76266,62596 907 + 89892,60472,76556 908 + 44543,72496,99023 909 + 37655,77646,27591 910 + 61180,40551,94668 911 + 45105,30201,36649 912 + 1620,31850,73921 913 + 58609,32384,11624 914 + 22892,66188,2899 915 + 62972,33611,70756 916 + 98837,98135,5464 917 + 66354,96306,20181 918 + 90856,2587,42432 919 + 43583,72337,78299 920 + 8702,45615,61530 921 + 65039,22806,64843 922 + 20120,41245,2180 923 + 30525,30948,54581 924 + 98879,57234,78496 925 + 41667,25886,83297 926 + 55523,71875,31645 927 + 92425,62653,32116 928 + 98157,24050,87488 929 + 15418,7193,9628 930 + 24897,83358,13207 931 + 77311,85920,40203 932 + 93757,20098,21627 933 + 23158,29915,65544 934 + 96552,55054,86728 935 + 63301,54813,44068 936 + 9332,69606,9495 937 + 74920,57406,77815 938 + 39925,15384,17409 939 + 76192,66369,4419 940 + 7579,48260,96351 941 + 59656,30550,75934 942 + 67737,67440,2241 943 + 49823,35541,55277 944 + 49428,19266,20196 945 + 39982,30538,15958 946 + 97713,42981,17162 947 + 44913,5665,26625 948 + 68888,94239,48645 949 + 20780,45996,92313 950 + 95933,17224,21793 951 + 63415,21295,8067 952 + 55039,38657,95442 953 + 75331,70835,14103 954 + 54143,10508,68882 955 + 43973,68618,68679 956 + 70531,12478,99652 957 + 35890,82580,8365 958 + 82110,41720,78025 959 + 47005,86989,64248 960 + 82238,51772,65545 961 + 63597,41735,96550 962 + 27146,93957,15649 963 + 49435,67306,14087 964 + 85150,43746,62836 965 + 69372,82749,49615 966 + 60686,63853,9791 967 + 25514,76765,56150 968 + 40131,55748,98207 969 + 74245,17028,5951 970 + 30561,94489,18399 971 + 70284,31612,20113 972 + 40691,63157,12305 973 + 98572,87740,48052 974 + 4913,93685,72983 975 + 4390,29821,52250 976 + 27517,82896,47853 977 + 95298,50022,36325 978 + 15917,50554,71325 979 + 2439,13008,41417 980 + 63228,43487,2803 981 + 27655,25186,81653 982 + 1750,16142,28036 983 + 795,65209,42189 984 + 43047,74977,86760 985 + 9260,32662,4268 986 + 89945,53054,67979 987 + 66023,27710,75801 988 + 34051,71757,96026 989 + 74547,84567,40114 990 + 55156,40862,19705 991 + 88279,57251,52701 992 + 97760,82882,52581 993 + 71440,82452,62216 994 + 12542,33903,6417 995 + 68098,28185,12970 996 + 19268,67975,24536 997 + 83973,44435,89151 998 + 96679,29711,69197 999 + 17807,80459,30036 1000 + 82541,92402,2312
+20
data/08/test.txt
··· 1 + 162,817,812 2 + 57,618,57 3 + 906,360,560 4 + 592,479,940 5 + 352,342,300 6 + 466,668,158 7 + 542,29,236 8 + 431,825,988 9 + 739,650,466 10 + 52,470,668 11 + 216,146,977 12 + 819,987,18 13 + 117,168,530 14 + 805,96,715 15 + 346,949,466 16 + 970,615,88 17 + 941,993,340 18 + 862,61,35 19 + 984,92,344 20 + 425,690,689
+155
src/05/solution.cxx
··· 1 + #include "common/getinputpath.h" 2 + #include <algorithm> 3 + #include <filesystem> 4 + #include <fstream> 5 + #include <print> 6 + #include <ranges> 7 + #include <sstream> 8 + #include <string> 9 + #include <vector> 10 + 11 + class Range { 12 + public: 13 + Range(long long from, long long to, bool inclusive) 14 + : from(from), to(to), inclusive(inclusive) {} 15 + 16 + long long from; 17 + long long to; 18 + bool inclusive; 19 + 20 + bool contains(long long value) { 21 + auto real_from = std::min(from, to); 22 + auto real_to = std::max(from, to); 23 + 24 + if (inclusive) { 25 + return value >= real_from && value <= real_to; 26 + } else { 27 + return value >= real_from && value < real_to; 28 + } 29 + } 30 + 31 + long long size() { 32 + auto real_from = std::min(from, to); 33 + auto real_to = std::max(from, to); 34 + if (inclusive) { 35 + real_to += 1; 36 + } 37 + 38 + // TODO(fix): may be buggy with from is negative and to is positive 39 + return real_to - real_from; 40 + } 41 + }; 42 + 43 + // runtime on Ryzen 5 5600G: 0.003s 44 + int main() { 45 + auto path = get_input_path(DATA_FOLDER); 46 + auto data_size = std::filesystem::file_size(path); 47 + std::string data = ""; 48 + data.resize(data_size); 49 + std::ifstream data_ifstream(path); 50 + if (!data_ifstream.is_open()) { 51 + std::println("Unable to read from the solution file at {}", path.string()); 52 + return 1; 53 + } 54 + data_ifstream.read(data.data(), data_size); 55 + 56 + auto split_idx = data.find("\n\n"); 57 + auto data_ranges = data.substr(0, split_idx); 58 + auto data_ids = data.substr(split_idx + 2); 59 + 60 + std::vector<Range> ranges{}; 61 + { 62 + auto stream = std::stringstream(data_ranges); 63 + for (std::string t; std::getline(stream, t);) { 64 + // parsing 65 + auto split_idx = t.find("-"); 66 + auto left = std::stoll(t.substr(0, split_idx)); 67 + auto right = std::stoll(t.substr(split_idx + 1)); 68 + 69 + // RAM is expensive these days 70 + // burning the CPU in attempts to occupy as less RAM at peak as possible 71 + // fuck OpenAI 72 + bool skip = false; 73 + for (auto [i, range] : std::ranges::views::enumerate(ranges)) { 74 + bool left_in_range = left >= range.from && left <= range.to; 75 + bool right_in_range = right >= range.from && right <= range.to; 76 + if (left_in_range && right_in_range) { 77 + // my hand just itches to use goto 78 + skip = true; 79 + break; 80 + } 81 + if (left_in_range) { 82 + ranges[i] = Range(range.from, right, true); 83 + skip = true; 84 + break; 85 + } 86 + if (right_in_range) { 87 + ranges[i] = Range(left, range.to, true); 88 + skip = true; 89 + break; 90 + } 91 + if (left <= range.from && right >= range.to) { 92 + ranges[i] = Range(left, right, true); 93 + skip = true; 94 + break; 95 + } 96 + } 97 + if (skip) { 98 + continue; 99 + } 100 + 101 + auto new_range = Range(left, right, true); 102 + ranges.push_back(new_range); 103 + } 104 + } 105 + 106 + std::sort(ranges.begin(), ranges.end(), 107 + [](Range one, Range other) { return one.from < other.from; }); 108 + 109 + std::vector<Range> merged_ranges = std::ranges::fold_left( 110 + ranges, std::vector<Range>(), [](std::vector<Range> acc, Range range) { 111 + if (acc.empty() || acc.back().to < range.from) { 112 + acc.push_back(range); 113 + } else { 114 + acc.back().to = std::max(range.to, acc.back().to); 115 + } 116 + 117 + return acc; 118 + }); 119 + 120 + std::vector<long long> ids{}; 121 + { 122 + auto stream = std::stringstream(data_ids); 123 + for (std::string t; std::getline(stream, t);) { 124 + auto id = std::stoll(t); 125 + ids.push_back(id); 126 + } 127 + } 128 + 129 + long long password_part_1 = 0; 130 + 131 + std::ranges::for_each(ids, [&merged_ranges, &password_part_1](long long id) { 132 + bool is_fresh = false; // guilty until proven innocent! 133 + for (auto range : merged_ranges) { 134 + is_fresh = range.contains(id); 135 + if (is_fresh) { 136 + break; 137 + } 138 + } 139 + if (is_fresh) { 140 + password_part_1 += 1; 141 + } 142 + }); 143 + 144 + long long password_part_2 = 0; 145 + 146 + for (auto range : merged_ranges) { 147 + password_part_2 += range.size(); 148 + 149 + std::println("{} - {}", range.from, range.to); 150 + } 151 + 152 + std::println("Eureka! {} / {}", password_part_1, password_part_2); 153 + 154 + return 0; 155 + }
+135
src/06/solution.cxx
··· 1 + #include "common/getinputpath.h" 2 + #include <algorithm> 3 + #include <cstddef> 4 + #include <filesystem> 5 + #include <fstream> 6 + #include <functional> 7 + #include <optional> 8 + #include <print> 9 + #include <sstream> 10 + #include <string> 11 + #include <vector> 12 + 13 + int main() { 14 + auto data_path = get_input_path(DATA_FOLDER); 15 + auto data_size = std::filesystem::file_size(data_path); 16 + std::ifstream data_ifstream(data_path); 17 + if (!data_ifstream.is_open()) { 18 + std::println("Failed to open input file at {}", data_path.string()); 19 + return 1; 20 + } 21 + 22 + std::string data{}; 23 + data.resize(data_size); 24 + data_ifstream.read(data.data(), data_size); 25 + 26 + long long password_part_1 = 0; 27 + // password_part_2 requires a whole different way of parsing data. look for 28 + // the next block. 29 + { 30 + std::vector<std::vector<std::string>> data_p1{}; 31 + std::stringstream data_ss(data); 32 + for (std::string t; std::getline(data_ss, t);) { 33 + std::stringstream t_stream(t); 34 + 35 + std::string word; 36 + std::vector<std::string> words{}; 37 + // stringstream >> buffer_string skips all whitespaces (space, tab, \n, 38 + // etc.) and overwrites the buffer_string. 39 + while (t_stream >> word) { 40 + words.push_back(word); 41 + } 42 + data_p1.push_back(words); 43 + } 44 + 45 + // now, calculations. 46 + 47 + for (size_t i = 0; i < data_p1[0].size(); ++i) { 48 + std::optional<long long> subtotal = std::nullopt; 49 + std::string operation = data_p1.back()[i]; 50 + 51 + for (size_t j = 0; j < data_p1.size() - 1; ++j) { 52 + if (!subtotal.has_value()) { 53 + subtotal = std::stoll(data_p1[j][i]); 54 + continue; 55 + } 56 + 57 + switch (operation[0]) { 58 + case '+': { 59 + subtotal = subtotal.value() + std::stoll(data_p1[j][i]); 60 + break; 61 + } 62 + case '*': { 63 + subtotal = subtotal.value() * std::stoll(data_p1[j][i]); 64 + break; 65 + } 66 + } 67 + } 68 + 69 + password_part_1 += subtotal.value(); 70 + } 71 + } 72 + 73 + long long password_part_2 = 0; 74 + // let's rotate the world 75 + { 76 + // splitting string by \n 77 + std::vector<std::string> data_p2{}; 78 + std::stringstream data_ss(data); 79 + for (std::string t; std::getline(data_ss, t);) { 80 + data_p2.push_back(t); 81 + } 82 + 83 + // reading it like Japanese hiragana in traditional (vertical, 84 + // right-to-left) writing 85 + std::vector<std::string> rotated_data{}; 86 + for (long i = data_p2[0].size() - 1; i >= 0; --i) { 87 + std::string buffer_string{}; 88 + for (size_t j = 0; j < data_p2.size(); ++j) { 89 + if (data_p2[j][i] == ' ') { 90 + continue; 91 + } 92 + 93 + buffer_string.push_back(data_p2[j][i]); 94 + } 95 + if (!buffer_string.empty()) { 96 + rotated_data.push_back(buffer_string); 97 + } 98 + } 99 + 100 + std::vector<long long> acc{}; 101 + std::vector<long long> solutions{}; 102 + for (auto number : rotated_data) { 103 + char last_character = number.back(); 104 + switch (last_character) { 105 + case '*': { 106 + auto actual_number = number.substr(0, number.size() - 1); 107 + acc.push_back(std::stoll(actual_number)); 108 + long long solution = 109 + std::ranges::fold_left(acc, 1LL, std::multiplies<>()); 110 + solutions.push_back(solution); 111 + acc = std::vector<long long>(); 112 + continue; 113 + break; 114 + } 115 + case '+': { 116 + auto actual_number = number.substr(0, number.size() - 1); 117 + acc.push_back(std::stoll(actual_number)); 118 + long long solution = std::ranges::fold_left(acc, 0LL, std::plus<>()); 119 + solutions.push_back(solution); 120 + acc = std::vector<long long>(); 121 + continue; 122 + break; 123 + } 124 + } 125 + 126 + acc.push_back(std::stoll(number)); 127 + } 128 + 129 + password_part_2 = std::ranges::fold_left(solutions, 0LL, std::plus<>()); 130 + } 131 + 132 + std::println("Eureka! {} / {}", password_part_1, password_part_2); 133 + 134 + return 0; 135 + }
+142
src/07/solution.cxx
··· 1 + #include <cstddef> 2 + #include <format> 3 + #include <fstream> 4 + #include <map> 5 + #include <print> 6 + #include <string> 7 + #include <vector> 8 + 9 + #include "common/getinputpath.h" 10 + 11 + void render(std::vector<std::string>& data) { 12 + if (data.size() < 2) { 13 + return; 14 + } 15 + 16 + for (size_t i = 1; i < data.size(); ++i) { 17 + auto& previous = data[i - 1]; 18 + auto& current = data[i]; 19 + 20 + for (size_t ch = 0; ch < current.size(); ++ch) { 21 + char previous_ch = previous[ch]; 22 + char current_ch = current[ch]; 23 + if (previous_ch != 'S' && previous_ch != '|') { 24 + continue; 25 + } 26 + 27 + // render 28 + if (current_ch == '^') { 29 + // split 30 + if (ch > 0) { 31 + current[ch - 1] = '|'; 32 + } 33 + if (ch < current.size()) { 34 + current[ch + 1] = '|'; 35 + } 36 + } else { 37 + current[ch] = '|'; 38 + } 39 + } 40 + } 41 + } 42 + 43 + long long count_beams_split(std::vector<std::string>& data) { 44 + if (data.size() < 2) { 45 + return 0; 46 + } 47 + auto out = 0; 48 + 49 + for (size_t i = 1; i < data.size(); ++i) { 50 + auto& previous = data[i - 1]; 51 + auto& current = data[i]; 52 + 53 + for (size_t ch = 0; ch < current.size(); ++ch) { 54 + if (previous[ch] == '|' && current[ch] == '^') { 55 + out += 1; 56 + } 57 + } 58 + } 59 + 60 + return out; 61 + } 62 + 63 + struct Position { 64 + size_t x = 0; 65 + size_t y = 0; 66 + 67 + bool operator==(const Position& other) const { 68 + return x == other.x && y == other.y; 69 + } 70 + 71 + bool operator<(const Position& other) const { 72 + return y < other.y || (y == other.y && x < other.x); 73 + } 74 + }; 75 + 76 + long long count_possible_paths(std::vector<std::string>& data, 77 + Position position, 78 + std::map<Position, long long>& cache) { 79 + // TODO 80 + if (position.y == data.size()) { // if we reached bottom 81 + return 1; 82 + } 83 + long long result = 0; 84 + if (data[position.y][position.x] == '|' || 85 + data[position.y][position.x] == 'S') { 86 + Position new_pos{.x = position.x, .y = position.y + 1}; 87 + result = count_possible_paths(data, new_pos, cache); 88 + 89 + } else if (data[position.y][position.x] == '^') { 90 + Position left = Position{.x = position.x - 1, .y = position.y}; 91 + Position right = Position{.x = position.x + 1, .y = position.y}; 92 + 93 + // a weird workaround to satisfy some static checks. maps must 94 + // be sortable. 95 + if (cache.contains(position)) { 96 + result = cache[position]; 97 + } else { 98 + result = count_possible_paths(data, left, cache) + 99 + count_possible_paths(data, right, cache); 100 + 101 + cache[position] = result; 102 + } 103 + } 104 + 105 + return result; 106 + } 107 + 108 + long long count_possible_paths(std::vector<std::string>& data, 109 + std::map<Position, long long>& cache) { 110 + Position start{ 111 + .x = data[0].find_first_of('S'), 112 + .y = 0, 113 + }; 114 + return count_possible_paths(data, start, cache); 115 + } 116 + 117 + // runtime on Ryzen 5 5600G: 0.003s 118 + int main() { 119 + auto data_path = get_input_path(DATA_FOLDER); 120 + std::ifstream data_ifstream(data_path); 121 + if (!data_ifstream.is_open()) { 122 + std::println("Cannot open the file at {}", data_path.string()); 123 + return 1; 124 + } 125 + 126 + std::vector<std::string> data{}; 127 + for (std::string t; std::getline(data_ifstream, t);) { 128 + data.push_back(t); 129 + } 130 + 131 + render(data); // this has some great potential for TUI visualization 132 + 133 + long long password_part_1 = count_beams_split(data); 134 + 135 + std::map<Position, long long> cache{}; 136 + long long password_part_2 = 137 + count_possible_paths(data, cache); // this one too 138 + 139 + std::println("Eureka! {} / {}", password_part_1, password_part_2); 140 + 141 + return 0; 142 + }
+199
src/08/solution.cxx
··· 1 + #include <algorithm> 2 + #include <cmath> 3 + #include <fstream> 4 + #include <iterator> 5 + #include <map> 6 + #include <print> 7 + #include <ranges> 8 + #include <set> 9 + #include <vector> 10 + 11 + #include "common/getinputpath.h" 12 + #include "common/istest.h" 13 + 14 + const int STEPS = is_test() ? 10 : 1000; 15 + 16 + struct Box { 17 + int x; 18 + int y; 19 + int z; 20 + 21 + float euclidean(Box& other) { 22 + return std::sqrt(std::pow((other.x - this->x), 2) + 23 + std::pow((other.y - this->y), 2) + 24 + std::pow((other.z - this->z), 2)); 25 + } 26 + 27 + bool operator==(const Box other) const { 28 + return this->x == other.x && this->y == other.y && this->z == other.z; 29 + } 30 + 31 + bool operator<(const Box other) const { 32 + return this->x < other.x || (this->x == other.x && this->y < other.y) || 33 + (this->x == other.x && this->y == other.y && this->z < other.z); 34 + } 35 + 36 + std::string to_string() { return std::format("{} {} {}", x, y, z); } 37 + }; 38 + 39 + struct Connection { 40 + Box a; 41 + Box b; 42 + float distance; 43 + 44 + bool operator==(const Connection& other) const { 45 + return (other.a == this->a && other.b == this->b) || 46 + (other.a == this->b && other.b == this->a); 47 + } 48 + 49 + bool contains(Box box) { return this->a == box || this->b == box; } 50 + 51 + bool connected(Connection connection) { 52 + return this->contains(connection.a) || this->contains(connection.b); 53 + } 54 + 55 + bool operator<(const Connection other) const { 56 + return this->distance < other.distance; 57 + } 58 + }; 59 + 60 + Connection make_connection(Box& one, Box& other) { 61 + return Connection{.a = one, .b = other, .distance = one.euclidean(other)}; 62 + } 63 + 64 + // standard DSU 65 + class DSU { 66 + std::vector<int> size{}; 67 + std::vector<int> parent{}; 68 + 69 + public: 70 + DSU(int n) { 71 + parent.resize(n); 72 + size.resize(n); 73 + 74 + for (int i = 0; i < n; ++i) { 75 + parent[i] = i; 76 + size[i] = 1; 77 + } 78 + } 79 + 80 + int find(int i) { 81 + return (parent[i] == i) ? i : (parent[i] = find(parent[i])); 82 + } 83 + 84 + void unite(int x, int y) { 85 + int s1 = find(x); 86 + int s2 = find(y); 87 + 88 + if (s1 == s2) { 89 + return; 90 + } 91 + if (size[s1] < size[s2]) { 92 + parent[s1] = s2; 93 + size[s2] += size[s1]; 94 + } else if (size[s1] > size[s2]) { 95 + parent[s2] = s1; 96 + size[s1] += size[s2]; 97 + } else { 98 + parent[s2] = s1; 99 + size[s1] += size[s2]; 100 + } 101 + } 102 + 103 + std::vector<int> sizes() { return size; } 104 + }; 105 + 106 + int main() { 107 + auto path = get_input_path(DATA_FOLDER); 108 + std::ifstream data_ifstream(path); 109 + if (!data_ifstream.is_open()) { 110 + std::println("Cannot open the file at {}", path.string()); 111 + return 1; 112 + } 113 + 114 + std::vector<Box> data{}; 115 + for (std::string t; std::getline(data_ifstream, t);) { 116 + int x{}; 117 + int y{}; 118 + int z{}; 119 + 120 + auto first_comma_idx = t.find_first_of(','); 121 + auto x_str = t.substr(0, first_comma_idx); 122 + auto yz_str = t.substr(first_comma_idx + 1); 123 + auto second_comma_idx = yz_str.find_first_of(','); 124 + auto y_str = yz_str.substr(0, second_comma_idx); 125 + auto z_str = yz_str.substr(second_comma_idx + 1); 126 + 127 + x = std::stoi(x_str); 128 + y = std::stoi(y_str); 129 + z = std::stoi(z_str); 130 + 131 + data.push_back(Box{.x = x, .y = y, .z = z}); 132 + } 133 + 134 + long long estimated_conns = data.size() * data.size() - data.size(); 135 + std::print("Generating connections... est. {}", estimated_conns); 136 + 137 + // replacing this with an unordered set would make things faster 138 + std::set<Connection> connections{}; 139 + for (auto box1 : data) { 140 + for (auto box2 : data) { 141 + if (box1 == box2) { 142 + continue; 143 + } 144 + 145 + Connection conn = make_connection(box1, box2); 146 + if (connections.contains(conn)) { // connection already exists 147 + continue; 148 + } 149 + connections.insert(conn); 150 + std::print("\r"); 151 + } 152 + } 153 + std::println(); 154 + 155 + std::println("Sorting connections..."); 156 + std::vector<Connection> connections_vec = 157 + connections | std::ranges::to<std::vector<Connection>>(); 158 + std::ranges::sort(connections_vec, [](Connection one, Connection other) { 159 + return one.distance < other.distance; 160 + }); 161 + 162 + std::println("Calculating three largest connected components..."); 163 + DSU dsu(data.size()); 164 + 165 + std::map<Box, size_t> data_idxs{}; 166 + for (auto [idx, box] : data | std::ranges::views::enumerate) { 167 + data_idxs[box] = idx; 168 + } 169 + 170 + long long counter = 0; 171 + Connection last_connected; 172 + long long password_part_1; 173 + for (auto conn : connections_vec) { 174 + counter += 1; 175 + if (dsu.find(data_idxs[conn.a]) != dsu.find(data_idxs[conn.b])) { 176 + dsu.unite(data_idxs[conn.a], data_idxs[conn.b]); 177 + last_connected = conn; 178 + } 179 + if (counter == STEPS) { 180 + auto sizes = dsu.sizes(); 181 + std::ranges::sort(sizes); 182 + std::ranges::reverse(sizes); 183 + 184 + std::println("Three biggest: {}, {}, {}", sizes[0], sizes[1], 185 + sizes[2]); 186 + int s1 = sizes[0]; 187 + int s2 = sizes[1]; 188 + int s3 = sizes[2]; 189 + password_part_1 = s1 * s2 * s3; 190 + } 191 + } 192 + 193 + long long password_part_2 = last_connected.a.x * last_connected.b.x; 194 + 195 + std::println(); 196 + std::println("Eureka! {} / {}", password_part_1, password_part_2); 197 + 198 + return 0; 199 + }
+5 -4
src/common/getinputpath.cxx
··· 1 + #include <filesystem> 2 + 1 3 #include "common/istest.h" 2 - #include <filesystem> 3 4 4 5 const std::filesystem::path get_input_path(std::filesystem::path data_root) { 5 - std::filesystem::path data_path = 6 - data_root / (is_test() ? "test.txt" : "input.txt"); 6 + std::filesystem::path data_path = 7 + data_root / (is_test() ? "test.txt" : "input.txt"); 7 8 8 - return data_path; 9 + return data_path; 9 10 }
+5 -5
src/common/istest.cxx
··· 2 2 #include <string_view> 3 3 4 4 bool is_test() { 5 - std::string_view mode = "real"; 6 - if (const char *env_mode = std::getenv("AOC_MODE")) { 7 - mode = env_mode; 8 - } 5 + std::string_view mode = "real"; 6 + if (const char* env_mode = std::getenv("AOC_MODE")) { 7 + mode = env_mode; 8 + } 9 9 10 - return mode == "test"; 10 + return mode == "test"; 11 11 }