+5
data/06/input.txt
+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
+
* + + * + * + * * + * * + + * * + + * + * * + * * * + + * + * + * * + * + * + + + * * * * + + * + + * + * * * + + + * + + * + * * * + * * + * + + * * + * * + + + + * + * * + * + * + + * * + * + + + + + + * * + + * + + + + * + + * * * + + + + * + + + * * * + + * + * * + + + + + * + + + + + + + + * + + * * + + + + * * * + * * * + * * + + + * + + * + + * * * * * * + * * + * * * * + * + * + * + * + + + * + + * + * * * * + + * * + + + + * * + * * + + * * * * * * * + * * + + * * * + * + + * + * * + * + + + + * + * + + * * + + * + + + + + + * * + * + * * * + * + + + * + + * + + + + + * + + * + * + + + * + + * + * * * + * * * * * * * * + + + * + * * + + * + * * * * + + + * + * + + * + * + + + + + * + * + + + + * + + + * + * * * + * * * * + * + * + + + * + * + * + + + + + + + * + * + + + + + * * * * + * * + + * * + + * + + * * * * + + + * * + * * * * + + * * * + + + * + * * * + * * + + + + * * + + + + * * + * * * + + + + * + * * * + * * * + * + * * * * * + + + + + + * * + + * + * * + + + * * + + + * * + * * + * + * + + + * * * + + * * + + + + * * * + * + + * + + + + * + + * * + * * * * + + + * * * * * + + + + + * * + * + * + + * + + + * * * + + * + * + + + * * + * * + * * + * * * * + * + + + + + + * + * * * + + + + + + + * + * + + * * * * * * * * * + + * + + * + * + + + * + + * + * * * * * + * + * * + * * * * * * + * * * * + * * * + + + * * + + * + * * * + + * * * * * + * * * + * * * * + + + + + * * * + + + * + + + + * * + * + * * * + + + + + + + * + + * + * * * * * * + * + * + + * * * * * + * + * * + + + + + + * * * + + + * + + + * * + * * + * + + * * * + + + * + + + + + + + + * + + + + * * * + * + + * * + + + * + + * * + + * + + * * + * + * + + * * + * + + + * + + + + * + * * + + + + + * * + + + * * + * + + * * * + * * + * + * + + * * + * * + + + * * + + + * + * + * * * * * * + * + + + + + * + * * * * * + * * * * * + + + + * + * + * * * + * + + * + + + * * + + + * * + * * + * * + + * * * + * + + + * * * + * + * * * + * + * + + + * + * + + * + * * * + + + + * * * + * * + *
+135
src/06/solution.cxx
+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
+
}