From a1b55ca2526c8660ebe05c8807539ba042854c5e Mon Sep 17 00:00:00 2001 From: Luke Else Date: Sun, 7 Dec 2025 22:25:11 +0000 Subject: [PATCH] feat: Day 6 Completed --- input/day06 | 5 ++ input/day06_test1 | 4 ++ input/day06_test2 | 4 ++ src/solutions/day06.rs | 139 +++++++++++++++++++++++++++++++++++++++-- 4 files changed, 146 insertions(+), 6 deletions(-) diff --git a/input/day06 b/input/day06 index e69de29..76fa5d1 100644 --- a/input/day06 +++ b/input/day06 @@ -0,0 +1,5 @@ +15 343 97 448 92 94 81 537 655 361 68 4544 41 59 42 66 43 2 9 6 74 13 56 69 84 217 1 1 6 9 1375 648 5 23 289 927 798 29 832 11 52 771 282 82 97 31 834 14 8847 4 57 754 35 539 754 932 75 489 893 72 9 941 76 85 8 61 51 25 48 532 983 4 644 44 2253 9 391 1262 35 913 9 74 63 867 5 69 512 425 64 72 2 62 5 58 7676 221 2 282 68 977 14 617 82 48 47 46 5 4261 67 55 7 35 694 21 39 18 138 9 52 9153 8 8 44 14 7464 8 4 73 3 98 25 92 792 293 513 5 82 6296 5 372 412 33 37 66 73 4 5 876 18 49 56 7 766 32 12 29 369 51 7 17 87 77 55 958 58 489 747 3638 76 5755 84 478 9 795 8 417 4 532 3 51 689 75 1 5 24 6 97 564 688 5 67 874 198 3595 24 39 95 4754 6735 693 586 816 9 53 36 82 31 44 314 9 6946 24 47 14 45 41 57 653 83 35 781 474 23 5 4 66 335 9 6 93 688 19 76 94 3 865 8791 4 852 57 92 391 89 84 47 46 94 567 85 61 18 877 14 7 3 49 3695 6512 27 57 9 54 22 6 5 5 748 121 995 4247 85 23 2 886 599 826 824 776 43 63 32 984 976 1 26 21 89 33 52 43 89 2 76 454 2 7 258 267 382 78 553 4481 1664 113 8 2164 82 26 728 9 139 67 28 257 788 22 2 74 83 12 6 778 185 463 5514 478 315 844 991 924 94 812 8 54 66 196 9649 16 6 25 751 2 846 11 7 63 9 78 2 782 951 562 28 78 268 879 924 87 44 92 364 24 83 12 128 8768 15 65 62 31 82 6 172 57 679 47 383 31 76 76 17 9657 9 4 58 9 18 24 11 642 95 5 12 195 115 9 62 73 6 23 36 78 15 17 1497 37 936 87 187 16 41 9632 343 5581 9 39 917 275 19 417 3 866 6692 54 16 44 285 716 317 442 737 1119 93 41 8713 4 13 36 59 7516 91 923 495 291 89 89 72 28 6 93 56 3133 5681 2 5 44 61 4546 427 6694 513 446 7 4 2 29 26 769 478 348 23 49 74 1 63 36 68 72 32 15 7 95 1 989 85 1931 71 766 1 15 68 15 25 2 6481 468 4 2 67 662 132 8 22 235 3 762 225 335 1 72 281 7 15 795 3364 33 215 91 3 13 76 7125 656 5 647 521 61 181 5 566 18 22 173 51 558 46 779 812 79 18 346 541 457 6 83 5678 14 36 18 63 599 62 22 96 575 5 362 56 82 519 8 71 5 9 874 6185 49 95 3 3 585 4 5913 16 811 8499 76 76 4787 22 37 7 38 73 351 239 151 98 3343 741 13 9486 264 9 43 171 92 34 36 369 86 81 13 95 54 19 41 35 261 49 22 588 87 6272 3 4 165 54 67 73 3 3 961 163 92 696 46 31 75 34 6 34 9 2 28 45 24 21 77 224 13 63 121 856 98 16 46 1 64 95 25 87 26 37 553 94 655 828 571 8723 227 17 14 59 845 495 24 544 39 4 513 417 51 98 39 3 38 7 64 3988 87 42 488 5 1 769 13 9872 76 69 699 458 117 2 49 441 8 7 1833 86 99 84 163 42 5 7776 6 6 53 656 4 36 967 999 64 7 996 79 8954 8431 47 49 53 36 7 927 35 4 85 2486 9164 4 71 463 1 934 32 4 86 19 48 71 93 8 431 986 19 78 3 691 899 7 95 73 71 56 83 298 185 3 542 48 23 4 216 2831 5979 45 5254 3472 34 67 23 785 2 264 2992 69 161 7 83 16 98 72 425 92 39 9 77 34 65 41 67 76 7 979 12 4242 434 921 21 92 4 1 47 8364 734 235 43 571 8 824 75 719 64 61 836 7 481 66 5871 13 3 2 24 31 48 959 1 1168 4 9 572 12 355 712 776 394 1 69 258 44 7 4 91 754 19 53 171 57 7476 465 2 212 73 12 23 2 35 46 59 6 3 82 668 545 6 1 397 67 893 6 34 22 8 56 4 29 819 98 825 8 22 339 36 2214 28 43 6681 46 446 654 747 96 136 27 8 72 8 45 2 244 93 312 88 16 2784 74 83 769 6 912 278 17 7 91 638 37 64 813 62 51 45 84 57 618 7231 47 237 43 1 36 87 62 25 4 37 592 847 5 677 685 48 543 146 68 71 242 799 94 631 39 85 24 8866 268 6841 7 823 356 8 33 36 17 5691 4 25 72 1427 5 392 66 25 8 99 57 32 2 22 59 34 241 4 76 4 783 29 64 12 823 8 14 197 459 33 26 627 53 57 68 +18 439 37 564 83 484 14 5633 611 724 28 1617 28 55 33 79 42 38 352 41 42 86 33 19 32 351 27 1 47 3 7454 388 33 534 347 231 392 14 914 91 47 432 347 95 31 84 43 16 3461 3 45 6998 35 726 867 189 16 566 92 585 46 442 55 263 9 36 97 58 81 52 2845 772 291 96 3254 9 899 9717 51 871 3 21 377 342 9 38 78 922 81 64 59 65 725 76 6723 986 7 164 58 93 44 178 77 52 33 39 17 1331 48 8 6 37 397 29 87 678 52 34 56 9285 4 88 846 58 5645 34 17 63 6838 93 35 495 325 571 987 829 299 7798 1 7996 513 19 87 9 55 54 252 723 44 88 35 3 72 75 63 77 651 85 86 66 26 73 14 949 43 243 715 5385 17 7898 678 842 25 124 7 4716 85 694 4 52 178 391 15 41 679 11 86 415 983 642 13 217 824 9388 27 31 68 4181 2973 773 276 291 73 17 69 347 11 67 222 9 289 23 951 89 429 99 13 85 55 76 747 628 3 364 9999 91 277 2 56 75 127 15 23 48 722 33 8271 17 995 77 72 471 44 227 49 4 138 396 57 18 19 149 89 414 8 73 4779 472 116 91 846 19 29 813 9 57 424 2663 854 3383 36 43 99 517 487 748 158 458 46 92 268 335 463 759 5 34 15 719 284 28 74 42 22 614 14 34 829 359 3742 527 284 384 2969 718 2 8463 75 35 398 54 211 25 11 968 356 52 23 17 71 63 54 854 423 728 4371 763 979 268 268 215 785 939 48 692 61 723 3296 24 2 49 735 42 395 83 7 82 8 49 62 487 981 753 51 35 597 569 428 78 9252 79 73 864 59 47 788 544 58 55 83 29 44 891 579 12 782 52 746 36 83 81 79 9577 471 215 337 87 33 17 972 967 2623 174 144 974 369 13 5 698 564 67 84 11 59 44 8326 95 543 676 142 46 94 3835 676 6692 995 26 529 725 53 277 37 222 5336 52 34 876 545 3954 961 297 847 8642 25 52 1277 5 42 61 67 6889 2133 848 311 882 847 841 35 98 3 82 43 6336 5493 57 67 91 82 7561 564 4158 756 612 938 57 1 54 73 296 598 238 422 69 933 94 71 47 34 79 73 68 83 765 39 657 39 5215 54 155 68 79 893 58 92 88 147 345 9 645 56 95 157 9 24 289 53 398 126 128 53 45 457 3 85 523 419 75 542 22 6 16 16 2999 525 6 317 732 13 7322 6 253 77 681 898 71 437 57 568 274 28 43 156 174 756 5 37 8959 39 76 344 47 66 88 82 19 285 69 373 11 35 163 68 786 727 19 994 4461 42 85 25 462 861 18 5554 792 473 7561 71 1 9399 73 6173 7 61 51 7235 987 229 862 5495 799 75 171 731 76 1 213 324 79 47 772 33 35 49 46 74 87 16 67 987 61 33 13 793 7783 7 3 362 61 84 36 5 8 46 268 88 667 94 456 24 31 1 117 2 8 51 11 41 84 74 527 17 31 339 162 31 54 61 46 59 42 63 73 18 9 357 12 173 35 439 4859 5415 263 38 53 386 53 867 688 25 3 665 814 26 76 422 45 67 1 26 1464 89 265 377 61 735 551 86 9336 346 61 873 975 661 5 68 67 14 549 1465 12 43 24 682 417 84 3226 67 4 275 873 1 67 8179 943 51 1 991 42 6233 284 92 666 76 43 159 417 419 92 59 2378 547 96 24 832 4 685 97 11 274 617 37 44 81 6 652 169 49 945 3 582 553 97 75 75 94 26 31 366 688 15 588 82 21 514 427 5164 4527 84 5614 3392 92 69 69 438 18 324 5718 14 939 5 92 77 44 49 254 28 53 96 5 69 97 18 69 31 3 838 18 4995 164 842 64 94 939 464 48 425 115 764 81 68 931 12 54 832 96 52 18 55 878 53 2948 99 9 99 56 43 44 985 98 347 588 97 787 63 931 6512 739 465 61 77 161 51 83 87 211 439 23 51 439 81 1874 996 12 56 76 87 19 64 97 79 86 64 3729 28 599 527 18 99 498 469 743 49 94 99 363 86 84 25 171 21 485 67 55 837 987 1322 697 56 7455 653 9864 292 48 77 276 939 68 32 843 431 1 1283 211 492 3213 97 489 19 733 428 37 653 783 352 5 71 293 524 87 699 14 98 77 67 44 488 8875 67 294 76 5 571 86 74 42 6 11 1368 218 8 389 228 27 956 53 46 27 882 591 98 872 77 39 65 6873 632 62 98 992 477 41 42 54 338 9514 99 29 89 6437 71 771 8 37 365 54 49 82 5 21 77 51 676 9 36 57 224 76 1365 5 766 74 12 216 295 32 21 253 42 98 95 +53 2541 2 264 46 685 76 2432 884 19 1 2341 91 28 29 428 29 298 8469 43 36 512 218 82 9 4 31 83 15 286 9327 23 262 6717 329 64 853 94 2 98 85 58 857 4 56 37 44 656 6989 4 4 1461 71 62 53 5541 21 323 84 676 28 671 61 9646 51 65 62 89 68 96 4423 855 386 88 1342 2 127 9356 42 155 38 81 149 224 17 54 73 532 286 76 64 576 538 92 3384 826 18 617 24 84 961 649 76 79 26 34 57 71 61 8 89 962 973 79 971 386 5 74 18 5445 78 394 286 13 776 39 78 26 4846 665 45 925 224 871 234 256 2463 2422 88 1898 111 53 85 9 47 66 325 5278 69 27 69 32 81 68 82 11 82 58 63 28 51 69 51 629 41 184 3 56 47 9563 3725 85 645 334 3 2264 95 9 3 2 71 316 91 91 221 89 37 684 977 543 62 77 721 84 98 76 33 847 2923 858 663 681 96 32 89 851 81 54 34 8 831 57 732 91 282 81 11 4 72 1 116 756 3 313 4926 74 272 13 955 41 231 44 4 79 571 71 671 66 956 18 127 443 9 563 97 2 771 9663 68 195 855 515 28 951 88 85 276 752 4923 5 873 93 6 348 6 14 857 4427 912 1871 62 28 62 816 175 199 97 45 59 4 334 799 395 5191 5 29 939 6296 645 23 49 29 12 376 27 48 841 46 4861 1246 27 26 7233 55 83 5559 75 81 822 21 863 37 72 64 344 87 16 11 61 78 81 269 178 248 182 473 218 66 685 684 436 893 63 7526 85 514 32 56 89 68 336 58 749 26 38 5 61 752 64 68 597 539 35 42 756 957 535 867 2542 35 57 853 89 5 3 55 16 87 74 19 3 398 985 189 259 46 3886 75 2 74 36 2378 778 978 518 89 499 15 316 718 2111 783 479 885 892 54 3 1235 6464 85 29 431 68 78 2955 77 169 757 734 49 11 578 182 1789 717 99 26 5 83 28 247 825 1286 1 31 2331 449 3158 222 151 612 8651 67 7 547 242 32 41 95 775 9426 4168 426 168 517 783 76 99 83 87 39 311 518 181 8435 88 262 3879 726 642 45 81 5147 427 589 74 77 954 451 981 3444 653 795 46 16 87 67 59 93 15 297 534 58 725 23 5513 83 964 48 29 168 69 18 53 572 898 6 546 62 13 94 12 31 831 524 873 3462 925 73 51 62 81 72 584 749 89 95 883 65 73 36 9 872 64 328 84 62 5731 838 754 85 315 655 57 2 72 479 937 94 47 875 62 67 741 5 6347 9 489 784 54 95 92 24 98 625 586 136 6 4 598 51 376 1583 19 293 464 94 32 54 794 987 68 671 878 845 181 65 7 82 13 5414 15 551 59 7236 221 95 238 54 14 8 424 834 52 8 433 2834 18 63 49 87 6 34 9 215 74 99 5 314 463 282 87 741 694 29 53 75 95 12 85 56 19 23 748 62 997 24 741 62 3 62 353 8 27 164 2 491 39 42 755 62 6 429 565 6 16 94 63 79 48 199 47 14 5 396 44 633 17 868 3531 4182 858 34 65 9 11 582 36 25 88 516 164 1 61 337 83 62 45 79 2442 17 137 61 58 6888 332 578 345 869 1436 866 349 536 636 87 12 58 822 9513 1 18 38 867 141 95 175 29 3 738 61 55 27 2988 916 37 19 672 93 7174 93 45 521 44 556 276 5924 699 815 69 1371 81 76 23 6499 98 15 42 41 975 136 76 373 77 8 6624 318 389 133 6 255 43 23 33 95 36 8 59 93 179 91 328 586 18 432 41 874 7741 59 343 9218 681 96 56 47 483 912 2425 25 8917 66 83 72 48 51 466 97 89 76 3 72 24 99 43 15 3 88 19 995 699 314 39 98 698 985 96 534 494 116 7 63 651 69 48 5 29 49 54 595 334 46 1564 72 56 544 476 12 83 143 24 57 195 648 15 79 3 8487 897 911 48 97 77 4 12 293 477 488 33 54 14 24 5937 84 68 96 23 12 58 557 986 7 72 34 6384 41 375 269 792 38 212 771 81 98 21 34 531 23 463 39 156 17 75 91 126 337 3866 1889 327 521 571 327 3142 328 71 12 48 637 39 42 794 687 46 7783 827 827 1544 52 187 44 379 159 581 125 144 425 73 85 221 185 45 55 64 75 24 28 11 767 3176 646 45 78 85 7954 58 69 7 6 23 3335 28 56 2 7956 851 18 6 41 2 327 747 54 66 62 8 32 2875 942 5 56 288 582 43 71 85 764 847 197 39 3 283 754 444 5 44 691 99 96 87 67 96 86 71 377 68 7 387 892 11 5336 4 71 71 71 83 45 53 15 849 838 82 3 +76 5215 8 793 79 477 28 7882 662 92 4 1928 6 94 16 211 67 174 8933 48 78 936 561 14 7 8 23 91 58 894 885 12 674 6211 591 92 873 27 9 752 65 1 332 5 54 82 35 296 9871 55 1 9171 83 93 3 3785 65 22 29 426 12 24 39 2852 22 23 251 49 94 17 2673 195 648 92 473 193 25 269 1 453 31 3 816 127 12 71 53 15 745 78 14 511 931 54 5326 73 74 325 35 66 755 782 97 21 1 79 311 82 69 3 866 546 185 2 663 183 8 22 36 2689 68 578 854 62 18 97 69 63 5546 998 62 541 79 287 47 768 8444 63 66 8344 864 66 2 6 98 61 835 3739 171 15 18 89 44 1 89 82 2 74 28 99 88 86 69 255 45 28 9 27 48 7 3335 1 181 812 39 7245 74 8 26 2 8 775 49 24 464 84 44 9 556 182 45 9 819 4 74 74 453 72 294 977 44 465 55 39 61 356 1 57 4 21 77 59 674 15 519 45 6 5 17 5 165 7 6 113 1432 92 6678 82 777 47 875 8 8 95 956 3 8 83 171 73 276 59 3 424 9 8 691 6997 48 726 794 68 4 3258 17 38 73 3 2736 7 733 49 4 844 22 33 925 4519 7 69 22 11 21 121 659 36 25 4 55 3 449 16 487 2584 6 44 871 1527 634 91 42 291 28 89 17 58 187 12 4857 8198 85 56 981 11 59 466 4 54 823 41 46 23 78 22 3672 1 26 68 16 95 887 419 618 894 99 345 28 3 19 32 947 352 12 8558 22 4 6 73 68 717 48 94 46 3 15 4 29 113 89 1 378 523 9 17 45 188 82 671 1356 9 73 465 3 6 4 1 9 95 7 36 7 454 732 698 914 22 5527 81 2 14 118 85 574 286 476 79 923 86 882 48 9616 999 468 25 7 89 7 7441 1463 52 12 158 18 8 2848 31 1 317 81 99 12 19 365 169 926 9 81 5 82 77 618 64 279 2 8 6795 551 8551 836 531 6988 36 1 5 9 331 19 154 63 469 6864 7677 64 51 217 631 962 36 21 97 78 14 27 459 8756 2 963 732 115 243 1 5 4823 933 266 82 1 458 67 538 8237 552 634 58 81 98 58 66 69 49 485 266 32 264 5 531 24 9 15 45 414 51 51 62 498 92 38 123 37 7 5 42 1 14 524 494 5351 552 34 93 4 812 79 754 88 6 74 1968 68 56 15 6 17 88 7 74 154 9864 422 447 51 376 424 8 7 89 812 195 5 1 892 94 73 648 3 67 6 999 636 59 71 85 51 2 3 373 238 9 9 952 94 514 9392 98 132 253 13 32 43 645 699 83 86 369 8 1 91 6 32 52 8461 68 391 7 6377 64 18 986 9 4 5 91 6 72 1 55 5181 67 18 78 76 2 23 1 189 56 5 2 999 551 711 3 587 134 99 55 96 72 398 33 352 93 31 172 1 847 7 166 43 7 51 712 19 28 169 6 595 71 53 91 48 9 996 72 2 32 51 33 11 8 569 88 73 4 82 1 36 8 37 95 7557 529 5 92 7 11 494 66 18 83 6 68 3 143 368 36 17 66 97 511 92 539 55 297 8983 335 6236 96 351 3513 959 914 996 698 87 3 92 9254 553 9 84 69 198 959 35 516 95 132 586 2 21 21 2328 377 59 16 7 16 299 38 7 887 7 898 837 2155 847 595 83 985 3 79 9 2977 63 51 48 2131 223 959 25 599 85 51 4855 3596 383 423 14 77 9 42 86 1 82 8 7 79 9 345 591 613 578 113 27 32 5466 54 92 4688 653 87 575 19 333 164 53 42 5932 98 94 64 444 5 38 738 63 53 3 53 22 68 13 92 35 63 1 2 129 748 93 55 356 123 86 959 79 99 1 67 876 72 9 9 46 22 51 782 25 5 3 69 77 8872 666 21 29 27 41 88 985 865 23 6 9 9725 178 84 61 47 5 2 92 4527 723 755 6 37 76 76 228 72 36 54 39 19 62 686 544 3 6 36 8276 96 86 2 714 23 556 551 5 82 87 44 859 9 564 59 347 63 23 93 627 62 9932 13 389 5282 2 4596 9456 597 5 57 1 7659 44 34 378 558 98 1989 328 9 5358 1 17 78 453 69 429 4278 36 311 83 64 947 577 95 2 9 25 26 3 17 585 5458 353 36 76 32 5337 76 22 4 98 13 4342 9 97 6 9134 715 6 7 5 9 189 7 19 5 34 4 1 52 683 8 765 83 54 99 45 7 622 75 275 34 4 31 575 8 3 71 291 19 27 12 99 73 17 82 675 29 5 558 416 28 3842 4 54 91 4 55 18 14 66 58 338 2 1 ++ + * + * * + + + + + + + * * * * * + * * * + * + + * * * * + + * + + * + * + + + * + * + + * * + + + + + * * + + * + + * * * + * * * * * + + + + * + + * + + * * + + * * * * + + + + + + * + + * * * + * * + + + * * + + * + + + * + * * * * + + * + * + * + + + + * * * * * * + + * + * + * * * + + + + * + * + * + + + * * + * * * * + + + + * + + * + + * + + * + * * * + * * + * * + * * * * + + * + + + + * + * * * * + * * * + * * * * * + * + * * + + * + * + * + + * + * + * + + * * + + + * * * * + + * * + * * + + * + + + + * * * + + * * + + + + + * * * + + * * * + * * + * * * + * * + * * + + * + + + + + + + * + + * * * * + * * * + * * + + * + + * + + * + * + * + * * + + + + * + * + * + + * * * * + + * + * + * * * * + * + * + + * + + * * * + + * * * + + + + * + + * * * + + * * + + * + * * * + + + * * * + * + * * + * + + + * + * * * + * * * + + * * + * + * * + + + * + * + * * + + + * + + + + + * * * + + + + * + + + + * * + * * + + + * * + + + * * + + * + * * + + * * + * * + * + + * * + * * + * * * * + + + + + * + * * + + + + + + + * * * + * * * * * + * * * * * + + + + + + + * * * + * + * + * + * * * + * * * + + + + * + + * + + * * + * + + * * + + * + + + + * * + + * * + * * + * + * * + + + + * + + + * * * * * * + * * + * * + * + * * * + + + * * + * * * * * * + * * * * * * * * * * + * * * * + + * * * * * + * + + * * + * * * + * * * + * * * * * * * + * + + + + * + + + + + * * + + * * + + + * * * * + + + * + + * * + + + * * * + + + * * * + + * * * + + + + + + * * + + * + * * * + + + * + + * * + + * + + * + * + * * + * + + + + + + * * + * + + * + * + * * * * * * + + + + * + * + * + + * + * * * + + + * + * + + + + * * + * * * * + * + + + + + * + + + + * * * + * * + * + * * + * * * * * * + + * + * + + + * * + * + * * * * * + * * * * * + + + + * * * * * * + + + + + + + + * + + + * + * + * + + * + * + * + * * + * * + * + * * * * * * * + * + * + + * + * + + * * + * * * + + * + + * * * * + * * * + * + + + * + * * * + * + * + * * + + + * * * * * + * * * + * * + + * + * * + * + * * * + * \ No newline at end of file diff --git a/input/day06_test1 b/input/day06_test1 index e69de29..81c7af2 100644 --- a/input/day06_test1 +++ b/input/day06_test1 @@ -0,0 +1,4 @@ +123 328 51 64 + 45 64 387 23 + 6 98 215 314 +* + * + \ No newline at end of file diff --git a/input/day06_test2 b/input/day06_test2 index e69de29..81c7af2 100644 --- a/input/day06_test2 +++ b/input/day06_test2 @@ -0,0 +1,4 @@ +123 328 51 64 + 45 64 387 23 + 6 98 215 314 +* + * + \ No newline at end of file diff --git a/src/solutions/day06.rs b/src/solutions/day06.rs index a874f45..bc515e5 100644 --- a/src/solutions/day06.rs +++ b/src/solutions/day06.rs @@ -5,16 +5,143 @@ pub struct Day06 {} impl Solution for Day06 { fn part1( &self, - _input: &mut Vec, + input: &mut Vec, ) -> Result, Box> { - Ok(Box::new("Ready")) + if input.is_empty() { + println!("No data found."); + return Ok(Box::new("No data")); + } + + // Determine the number of columns by the length of the first line + let width = input[0].len(); + + // Collect numbers for each column (problem) + let mut problems: Vec> = Vec::new(); + + // Initialize empty vectors for each potential problem + for _ in 0..width { + problems.push(Vec::new()); + } + + // Fill the problems with numbers and operations + for line in input { + for (i, n) in line.split_whitespace().enumerate() { + problems[i].push(n.to_string()); + } + } + + // Clean up columns and convert them into proper problems + let mut final_problems: Vec<(Vec, char)> = Vec::new(); + + for col in problems { + let mut numbers = Vec::new(); + let mut op = None; + + for token in col { + if token == "+" || token == "*" { + op = Some(token.chars().next().unwrap()); + } else if !token.is_empty() { + numbers.push(token.parse::().unwrap()); + } + } + + if let Some(op) = op { + if !numbers.is_empty() { + final_problems.push((numbers, op)); + } + } + } + + // Solve each problem + let mut grand_total = 0; + for (numbers, op) in final_problems { + let result: i64 = match op { + '+' => numbers.iter().sum(), + '*' => numbers.iter().product(), + _ => unreachable!(), + }; + + println!("Problem: {:?} {}, Result: {}", numbers, op, result); + grand_total += result; + } + Ok(Box::new(grand_total)) } fn part2( &self, - _input: &mut Vec, + input: &mut Vec, ) -> Result, Box> { - Ok(Box::new("Ready")) + let width = input[0].len(); + let height = input.len(); + + // Convert input into a grid of chars + let grid: Vec> = input.iter().map(|line| line.chars().collect()).collect(); + + let mut problems: Vec> = Vec::new(); + for col in 0..width { + let mut column_chars = Vec::new(); + for row in 0..height { + column_chars.push(grid[row][col]); + } + problems.push(column_chars); + } + + // Split columns into groups separated by all-space columns + let mut grouped_columns: Vec>> = Vec::new(); + let mut current_group: Vec> = Vec::new(); + + for col in problems { + if col.iter().all(|c| c.is_whitespace()) { + if !current_group.is_empty() { + grouped_columns.push(current_group); + current_group = Vec::new(); + } + } else { + current_group.push(col); + } + } + if !current_group.is_empty() { + grouped_columns.push(current_group); + } + + // Right-to-left: reverse the groups + grouped_columns.reverse(); + + let mut grand_total = 0; + + for group in grouped_columns { + let mut numbers: Vec = Vec::new(); + let mut op = '+'; + + for col in group { + let mut num_str = String::new(); + for &c in &col[..height - 1] { + // all but the last row + if c.is_digit(10) { + num_str.push(c); + } + } + if !num_str.is_empty() { + numbers.push(num_str.parse::().unwrap()); + } + + // Last row contains operator + let last_char = col[height - 1]; + if last_char == '+' || last_char == '*' { + op = last_char; + } + } + + let result: i64 = match op { + '+' => numbers.iter().sum(), + '*' => numbers.iter().product(), + _ => unreachable!(), + }; + + grand_total += result; + } + + Ok(Box::new(grand_total)) } fn get_day(&self) -> u8 { @@ -44,7 +171,7 @@ mod test { .unwrap() .to_string(); - assert_eq!(answer, "Ready"); + assert_eq!(answer, "4277556"); } #[test] @@ -61,6 +188,6 @@ mod test { .unwrap() .to_string(); - assert_eq!(answer, "Ready"); + assert_eq!(answer, "3263827"); } }