]> aoc.elinar.fr Git - aoc_2025/commitdiff
day06: part1 + input
authoralex <>
Sat, 6 Dec 2025 08:17:22 +0000 (09:17 +0100)
committeralex <>
Sat, 6 Dec 2025 08:17:22 +0000 (09:17 +0100)
input/day06.txt [new file with mode: 0644]
src/day06.rs [new file with mode: 0644]
src/main.rs

diff --git a/input/day06.txt b/input/day06.txt
new file mode 100644 (file)
index 0000000..aff0adf
--- /dev/null
@@ -0,0 +1,5 @@
+68  17 77   451 2997 658 138 51 261   75 61 1218 212 238  35 56  877 211 967  82  98  2 7    1 48 137 643   25 489 62 699 782   45 29 67  957 584 5637 3    9 96  45 29 8      6   4   9   2 49 39 779 729 16  123 24 75  69  18  2199 89 195 296 73   6  274 1   93 44 17 37  897 32 6953 48 2736 62 6   7  97 63 81  525   1  22 13  9  68 4624 67 5547 984 764 392   6 32 319 8567 7487 8762 52 2    181 19  771 2333   9 682    7 988 81 511 552 75 6995   7 47 75  2 419 532    7 63  825 189 89  5  16 49 577 767 21 38 6   77 449 47 289 311  19 3916   5 7   6 2   46 6   46 6878 52   5 45 56 496  29 6    456 19 4351 777 64 58 21   638 11  67 83 39 566 62 4  38   5 626 4    42   1 141 88   32 8   95     3 6742 932 359  4 74 575 88 61 65 1    2 1     8 8  646 893 78 99  94 328   37 64 782 68 98  2 238   74 377 719 2    93 64 38  3 199  2 3183 44 56   37 67 869 744 749 36   9   15 276 15 8  94  324 62 3  679 19 94 65 266 88 916 57  68  5  31 371 236 79  1 8   14  82 81 1651  55  49 881 314 923 6   92 43 5   747 65 2195 35 832 9283  62  64  5 4  498 27 25 274 9  21 9  633 49  59  25 82 591  28 5336 62 819 87 9  975 92 2    6 24 998 393 34 885 76 891 64   7 48  548 3845 4  8  98 92 9347  447 296 74   7 135 22 4  4   97 23 386  813 41 645  8 75 42 98 62  74 243 3    49 359   5 113 546 6975 68 95  5    12 43 85    1 8  64 172 98 5  59  88 15  51  1 641 27 27   931 9    372 969 8955 5297 82 3577   1 36 4926 77  94  3 238 49  47 868 1  3    2 84 79 76 199 26 3  44 79 8    516 51  87 4  11  672 33   1  14 18 13  3 466 39 3764 681 65 11 1  96  9974 41 48 5224 24 46 7   85   87 3   83 327 633 65 94  856 281 978  39 157 2871  32 9  81 1458  96 1  44  26   2  5 9  456 49 62 568 4   41 66 69 41 594 431   5 56  7 99   7   9 75  82 659 6141 639 316  575 7388 365 55   471 8676 37 8932 3378 76 21   884   9 3  44 8438  99    1 4528 496 78 317  2    9 69 6     66 99 49 235 632 382  54 83 58 79  48 515 75 55  63 88 6    43  81 677 68 3    45 194   7 696 4484 7   83 89 99 972 761 25 855 461 14 53  3   81 74   969 47  31 25 1437 89 92    2 2    7118 2555 233 7    6 9   1   7247 2515   2 5   37  8 6334 399 36  7  2 42 9  2769 9   59 86 21 579 99 4  861 654 95 95 574  74 98 861 77 516 94 56  99 19   13 89 35 66 38 11 189 1   15 575 54 769  6 28    4 287  7  88 73 82 564 764 3  3366 1   34 8721 734 1512 57 38   72 47 2181 9   37 99  88 345 77  47 87 731  5 157  233  16 59 93   6 3184 291 55 27  637 74 63 56 8836 632  4761 7  94 41 71 7313 93  45 937 2311  2 957 8797  7 4     1 669 53 9   3    84 31 73  29 1   611 61   3 962 5135 681 83  693 483   2  2 483 1797 771 77 381 38 1459 24 731 156 827 69 8  7264   46 82  297 9534 569  2 835  18 433 881 26  527  4 9  86 6  25   7 697  9 27 2    22  72 739  53 1632   86  2 13 16 595 5   77   68 7193  42 18 238    2  7 4   93 7591 98  634 8  9  359 569 191  853 37 687 58    69 9  8925 88 45 156 6539 31   2 966 66 86 3  1   765 62 7   71  8 5   63 86 125  89  91 3572 623 8217 794 81  629    5  6 13 234 9457 749  32 599  6 39 798 66 783  96 6  2445 28 888 86 685 93 739 714 1368 2352 949 446 2  95  3 6   734 369 23 38   5 3286  85 4552 5882 58  87 158  391  9 3834 98 814   2 148 817  74 27 556  4 78 65 373 797 99 97 14 987 95 76  31  516 481 121 29  2  82  22 33 94 399 914 956 947 3236 344 46 87  32 392 6   579 21 739  6647 47 611 8283 81 96  548  17   2 86  21 794  1 33 1  37 51 43  2426 61 2751 82   798  6 94   76 374 141 88 88  145 7696 85   74 14 27 1  2534 418  67 721 25 1969 986 3   427  72 3   7 14 118 142 68 88 18  898 3346 44 61 438 69  18   973  8 426 892 126   43 23  22 914 684 62 1742 63  5 891 31    5  9 45 429 63 34 432 3   574 1686 23 534  9 845 26 3   235 449 4   52 775 35  19 72 8978 16 9145 58 5  22 183    7  7 766 99   69    4 82 6   65  93 337 82 99 44 1921 3  2   19 36
+76  62 43   256 6985 181 273 44 265  288 93 843  812 894  86 34 7882 642 536  24 625 76 77   8 42 314 921 5828 656 44 813 468   22 43 28  113 43  5596 3  148 95  56 5  75    78  98  84  47 56 52 866 666 463 784 27 458 52  89  581  94 242 469 694 82 9923 91  42 45 17 37  239 57  917 98 9544 54 84  23 39 28 298 561  22  24 91 84 634 9813 63 2799 752 737  88  42 53 266 5697 4412 2387 23 3    445 22  484 1214  39 757   66 551 38 725 494 71 8879  27 63 86 39 143 393  436 511 688  13 22  99 94 85 992 86  18 95 74  46 661 99 936 826  49 3594  81 21  7 16  24 28  52 7123 79  61 11 86 9871 82 85   496 27 5392 968 79 27 14   829 83  55 56 56 622 71 27 64  74 743 451  23   1 877 75  653 99  3238  88 7718 883 325 47 14 248 43 82 73 7   23 34    9 5  668  96 57 98  86 144 3686 62 767 91 56 56 944  568 988 875 7   974 64 76  3 234 16 1947 11 33   19  3 755 166 531 83  45  268  53 89 93 43  259 32 92 696 71 56 69 265 54 256 31  14  1 847 516 449 21  2 963 331 91 14 2738 977 291 427 497 278 9   56 66 83  958 19 5681 11 863 1336 992  73 54 4  539 52 61 398 9  28 55 655 26 789 436 5  624 795 2738 19 368 13 79 211 45 67  42 95 958 737 54 233 62 543 74 542 62  636 7232 79 7  64 48 8957 1652 629 25   5 562 27 8  5  756 14 221 7522 33 828  8 93 16 61 76  66 326 12  571 26   65 168 659 5893 76 18  72   36 82 48   85 2  94 266 89 1  13  44 354 38  7 759 42 9565 146 542  513 974 6973  484 26 6229   5 12 8757 176 35 67 244 75 949 432 8  92   8 36 21 4  531 24 34 28  5 699  31  228 11 83 612 467 55   6  91 43 95 12 385 47 8969 666 74 74 5  214 8894 58 34 3521 74 67 4   24  387 9  644 495 343 18 12  316 966 429 412 924 2126  87 7  36 8797 395 46 851 34  13 76 16   3 37 42 174 8   65 17 51 95  69 891 915 23 45 85  64  43 48 262 155 7448 373 1724 347 846  954 295  922 3495 13 3219 6832 71 79  7744  73 43 96 8996 533   58 5273 781 52 847  8  282 26 654  792 89 79 683 896 521 572 79 95 681 49 748 14 85 462 31 6    88 838 7   25 18   12 939  64 342  412 227 35 11 69 28  629 26 799 34  16 928 4  818 433 5583 68 432 42 5961 87 39  833 852  3366 2963 958 2    9 84  1   8161 9956  52 47  18 26  474 658 97  2  6 72 85 7656 66 834 77 43 355 52 3  362 212  7 54 48  994 14 536 44 879 94 387 24 625  39 96 88 71 47 37 941 9   48 145 38 63  95 12 9579 135 94 345 18 23 216 897 9  6286 13  13 8827 964 2926 91 124  22 99 5976 889 52 856 56 211 299 32 95 849  5 864  473 257 37 76  97  225 666 59 31  768 45 32 18 7372 3987 5335 4  89 62 41 5362 12 817 948 3392  5 943 6281  6 65    3 537 53 5   732  47 66 63 546 149 264 387  3 921 6328 543 733 427 84   36  7 18  2116 698 51 697 47 684  15 171 837  58 81 17  913 4485 394  73 7595 975 56 558  88 472 998 15  916  9 56 63 1  884 17 165  1 26 86  894 225 664 367 2933 5322 31 75 15 762 398 31 8818 3672 488 58 396  746 57 5  448 4681 15  722 38 8  596 985 1263 542 58 191 79  1762 95 9179 38 66 992 5672 75 125 438 31 31 45 635 429 57 2   41 41 4   83 97 3866 63  37 1462 671 6729 585 66  711   59 27 27 344 3222 539  23 165  7 32 399 74 425  37 11 874  21 332 14 434 47 864 922 4391 2835 978 962 78 24 96 585  22 427 96 38   6 9694 838 5817 5513 736 46 232  819  9 5513 97 547  63 422 947  73 58 662  5 55 47 495 777 64 34 23 466 81 23  329 729 426 816 676 99 436 89 66 85 731 441 964 766  823 439 64 197 79 992 25  287 76 653   525 53 433 1818 82 995 649  76 319 198 56 842 58 15 48 98 41 92  642  32 44   545  232 45 92   23 121 714 83 63  48  6281 546  14 76 43 44 5798 863 216 987 89 3868 934 67  615  35 6   3 15  99 757 76 93 55  521 6791 49 33 657 71  5268 961 66 374 232 919 9332 481 11 575 243 57 4643 33  7 212 88    4 85 38 476 31 59 811 9   126 2255 71 562 39  73 19 344 275 239 7  721 894 66  11 53 3191 43 4525 49 17 23 632 1391  7 691 69   96  192 33 758 42  95 217 77 16 29  729 4  99  94  9
+48 746 3513 3   7584 381 779 18 674 1514 26 78    57 749 254 13 3166 217 299 932 435 97 453 18 14 888 693 6559  13  6 763 8927  55 22 665 358 71  2854 27 399 969 88 3  7292 447  45 982 222 51 89  41 882 642 358 96 819 411 426 961   3 959 52  761 66 5134 48  84 1  56 194 555 11  552 23  742 68 87  32 94 84 864 467 991  15 3  57 547 596   4 9518 842 734  77 299 24 395 956    21  644  9 12  4661 96  42   277 525 7683 374 54  34   1 176 89 7394  84 78 83 73 722 736 4664 137 449  61 916 27 14 64 84  61  39  1 43 157  81 16 11  7983 36  917 795 52 79 295 63 849 82 8636 97 939 74 13 5863 32 57  3976 75 7392 314 5  15 6647 948 76  13 56 32  24  7 89 54  35 679 4522  7   8 896 82 9972 31  6439 455 6847 676 949 48 91 459 22 96 51 2  689 2872  2 5  372  33 7  33  66 791 3222  2 719 28 37 99 855 8136 888 59  789 725 68 33  6 753 78 1831  8 831  79  5 432 78   54 68 886 1131  24 93 53 538 457 59 51  76 46 48  1 838 25 216 13 137 29 467 361 483 74 81 428 284 77 54 9312 862 359  98 836 942 29 663 74 15  574 43  122 22 927  289 479 347 53 59 658 73 88 359 1  41 12 2   31 943 542 5  152 298 456  58 851 21 21 461 76 496 26 16 697  22 96  25 13 858 5  514 67   61 868  97 85 17 56  396 3968 564 14  96 57  2  71 19 889 77 292 5541 57 494 27 74 78 98 578 37 228 23  891 89  352 999 421 3725 68 556 4432  2 19 18   19 79 2  654 12 69 74 879 584 72 57  81 29 8581  85 1137 867 147  281  826 54 2123   1 85 7391 671 77 28 428 76 256 964 53 29  38 59 64 5  242 29 46 64  7 5555 38  495 56 62 731 185 73  16 923 21 15 77 865 46 9674  52 49 83 75 539  749 86 42 97   25 22 27  11  735 46 417   5 62  91 777 244 387 739 363 379  621 311 41 45 1734 467 88 974 89 336 55 37   2 75 8  342 19 549 42 96 29  55 112 541 36 79 38  92  67 61 451 736 8715 54  4285 791 292  558 5861  64  682 35 9634 2134 19 941 5723 829 43 53  671 832   64 9463 738 98 833 81  161 29 456 7687  3 28 933  83 366 992 87 28 189 89 463 61 62 236 92 1  8764 929 3   88 967 389 623 715 156   25 242 97 1  18 93   32 26 512 63  55 961 92 717 243 9982 96 125 16 3142 91 99  629 664   785 2375 117 255 85 932 441 866  85   834 82  51 98   15 661 78 51 12 45 65 6982 43 478 58 23  62 81 3  471 292  3  9 42  491 48 658 81 226 8  631 72 1796 38 58 98 68 1  45 76  8  926 854 87 18  55 32 1499 148 23 127 63 39 277 121 21 561  811 86 1466 531 574  98 328  79 19 7225 929 18 433 75 53  396 45 47 456 67 1    456 479 65 643 79   92 984 51 75  81   7 94 59 9121 7541 6261 21  3 92 75 533  78 215 259 2536 76 275 9898 78 781 164  93 86 6   715  26 68 65 578 888 119 295 82 273 684  916 828 68  84  773 66 59  8677 282 31 287 16 83   61 857 438  33 94 12   39 5557 373  15 254  471 17 2678  4  99 765 45 6954  6 41 47 51 258 43 455  4 93 993 898 176  29 297 5799 1766 98 57 65 863 266 71 6448 953  829 94 53  9495 53 29 377 386  37   81 19 3  28  938 8158 977 49 341 397 5654 53 2393 9  76 998  522 46 149 74  43 66 55 864  81 61 197 59 82 47 467 66 4334 87 249 8524 655 1622 987 27  123  148 14 85 716 1277 313 997 267 71 39 47  37 7647 85 34 99    3 436 75 96  12 491 333 2798 2411 62  464 38 48 84 928  91 253 38 99 559 7956 611 8838 2487 936 5  71  4431  6 3531 28 797 123 42  6574 42 98 698 52 84 13 435 561 75 24 2  628  4 596 575 37  6   461 955 67 828 58  3 68 859 213 173 562  455 947 7  345 78 286 75 8385 83 6296  449 74  69 632   3 983 4982 55 616 374 38 848 51 68 74  2 41 15  771  58 35   572 6457 78 27 2573 2   73  62 283 84  1856 1568 74  5 71 31  681 226 284 23  74   74 684 358 863 973 29 89 81  58 952 26 29 274 314  423 12 23 869 529 5613 936 11 962 777 182 2316 947 1  415 778 71 4813  3  2 348 317  84 89 82 173 35 83 914 251 431 166  53 71  82  44 53 181 232 37  88 821 457 13 725 9   687 45 1629 17 56 78 597 4555 44 34  84  376 3174 59 729  7 851 122 92 73 84  861 97 173 25  9
+81 562 2271 5     67 37  28  1    1 3882 36 2      1 175 624 63 1545 7    23 936 728 46 128 16 43  81 426 1736   6  3 71  3777 827  4 711  21 13  423  88 235 744 14 9  1513 628 127 143 231 18 21  65 22  121 495 3  182 334 354 897   1  54 32  313 94 2535 28 819 4  28 312 6    6    7 57    5  1 556 47 6  48 528 432 977 717 8  15 172 49    5  673 552  56  56 844 64 898 55     26  159  6 893 9682 134 19   211 933 3743 523 68  36   3 414 88 2742 399 45 7  37  92 238 5881 721 947  52 383 11 6  23 5   4   67  8 26 659   5 53 27  1843 74   19 336 49 77 661 6  936 55 2812 96 836 77  5 9863 22 915 4287  4 9866 94  1  1  1873 6   51 746 87 96  97  5 48 56 495 713 9723  9 684 661 37 5556 616 3566 966 7885  48 91  48 71 614  8 95 93 58 419 1671 51 53 24    1 9  366  8  96 3185  7 986 4  2  18  27 6573   2 97  229 668 27 38 76 57  64 354   2 955 938  2 738 67    8 37 945 7946  61 33 22 252 129 46 68   7 9  93  7 36  65 569 32 653 33 314  44   4 14 11 554 917 49 58 6893 763 264  69  46 383 69 824 97 417 487 99    8 27 685  866 391 366 78 42  21 6  71 213 62 47 75 7   28 713 376 4   84 558 17    8  71 34 61 235 56 988 76 85 13    4 3   17 17 652 9  795 749   3 55   89 15 48 13   15 8165  83  8 675 42  3  68 41 235 83  34 4637 6  195 73 6  5  33 924 32 42  12 9568 4   995 893 368 141  81 378 9279  4 32 169 835 66 9  577 43 55 89 425 685 34 63  29 42 6483  86 6292 25   54   36    6 96    2 686 52 9284 566 61 94 32  4  427 398 57 47 986 98 76 3    4 37 63 18  6 2398 28  143 97 29 596  22 6  353 285 65 44 23 1   97  981  94 96 71 83 654  294 33 1  86   32 33 663 23 6686 97 573   2 47  69 479  65  75 173 451 149  961 229 15 62 3952 278 44 577 13 344 98 73   8 93 8  687 73 618 15 91 52  38 476 565 44 57 93 262 594  3 714   3    7 45  1355 212 6      4 5723   7   77 36 7411 8534 16 964 8669 982 54 54   76 897 9661 26    52 58  33 83 4875 41 172 6681  9 62 181  93 326 328 61  3 651 1  386 35 36 844 46 33 8395 797 8   94 463 266  46 197 754   19 755  9 3  9  96    8  5 37  23  87 418 58 335 715 7522 23 153 36 58   61 77 6469 5662    6  789 462 794 18 555 589 95   4    933 512 58 37   94 328 32 52 31 63 98 85   82 777  6 52  89 31 31 318 23   7  3 55  958 99  13 24 52  9  397  3 3154 88 19 12 72 8  96 88  68 314 169 34 16  17 44 2816 154 95 258 22 41 21  779 97 56   394 18   52 42  12   7  3558 69 32 72   427 4  458 19 56  125 32 84 6   21 5   5273 635 92 835 24   11  65 6  574 57   6 25 65  811 2655 17   82  1 3  82 82    4 127 38  646  66 15   511 67 736 421   7 74 254 5922 36  1 85 951 325  55 962 27 717 473   97 326 91  7   677 19 41  3457 151 29 61  45 91   52 723 467  74 13 67    6 5352 555  73 36   113 29 8383  1   9 449 38 7119 58 57 8  84 165 13 531 42 65 212 742 992  25 838 3275 5622 52 34  5 824 116 19 6354 71   579 11 6   6916 61 76 951 68   446  42 96 32 2    57 5576  24 35 991 926 7863 63 93   6   2   4   16 84 725 22   2 99 23 915   2  9 977 4  55 21 998 65 8498 4  868 8777 364  165 377 11 1797 3646 84 3  695  617 733 531 476 86 98 5   29 5385 47 39 3     8 66  44 46  43  65 173  161  815 48  78  21 34 26 353   8   1 23 92 797 675  766 617  6629 868 2  5   7194 19 5146 21 916 765 26  9114 58 51 57  16 54 43 21  345 74 27 6  778  4 685 788 94  8   876 467 61 985 64  3 97 866 95  29  944   16  78 6  988 69  77 49 8577 62 8355   23 56  73 22    5 869 8637 1  862 584 94 74  73 81 61  8 74 916 15   56 5    628 8873 15 68 5346 3   1   16 119 76  3585 9941  3  3 38 59   87  13 821 63  91    7 435 351   5 842 25 51 61   9 959 72  4 316  52    2 83  5   5 138 3156 955 53 22   41 77  3418 155 2  631 899  4 59    1 14 42  4485 94 63  4 736 9  18 913 774 999 37   55 3   67   4 6  476  22 73  49 467  36 91 478 4    58 46 6245  1 38 9   84 8836 43 3   4  5334 7615 99 542  2 595 619 92 24 52   24 97 125 45  6
++  +   +    *   +    +   +   *  +   +    *  +    *   *   +   *  +    *   +   +   *   *  *   *  +  +   *   +    +   *  *   +    *   +  *   *   *   +    *  *   *   *  *  +    +   +   *   +   *  +  +   *   +   *   *  *   *   *   +    +  *   *   +   +  +    +  *   +  *  *   *   *  +    *  +    +  *   *  *  +  +   +   *   *   *  +  *   +    +  +    *   *   *   *   *  +   +    +    +    *  *   +    +   *   +    +   +    *   *   +  +   *   *  +    *   *  *  *  *   +   +    +   +   *   *   +  *  +  *   +   +  +  *  *   +   *  *   +    +  +    *   *  *  +   *  +   *  +    +  *   *  +  +    *  +   +    *  +    *   *  +  +    *   *  *   *  +  *   *  *  *  +   *   +    +  *   *   +  +    *   +    +   +    +   *   *  +  *   +  +  +  *  *   +    *  +  +   +   +  +   +  *   +    *  *   +  *  *  +   +    +   +   *   *   +  +  *  +   +  +    *  +   *   +  *   *   *   *  +   +    *   *  +  +   +   +  *  *   +  +  *  *   *  +   +  *   *  *   +   *   +  +  +   *   *  *  +    +   *   +   +   *   +  *   +  +   +   +  +    *  *   +    +   +   +  *  +   *  *  *   +  *  *  *   *  *   *   *  +   *   +    +  +   +  *  *   +  +   *  *  *   *   *  *   +  +   +  *   *   +   +    *  *  *  +  +    +    *   *  +   *   *  +  *  *   +  *   +    *  *   +  +  *  *  *   +  +   +  +    +   +   +   +   +    *  +   +    *  *  *   *   *  +  *   *  *  +  *   *   +  *  *   *  +    *   +    +   *   +    +    +  +    *   *  +    *   *  +  *   *  *   +   *  +  +   *  *  +  *   *  *  +  +  +    +   +   *  +  +   +   +  *   +   *  +  +  *   +  +    +   *  +  +  *   +    *  *  +    +  *  +   +  +    *  +   *   *   +  +   +   *   *   *   +   +    *   *  *  +    *   *  +   *  *   *  *  +   +  *  +   +  *   *  *  *  +   *   +   +  *  +  +   *   *  +   +   +    *   +    +   +    *   +    +   +    *  +    +    *  *   +    *   *  *  +    +   +    +    *   +  *   +  +    +  *   +    *  *  *   +   *   +   *  +  +   *  *   +  +  *   +  *  +    +   +   +  *   *   *   +   *   +    *   *  *  +  *   *   *  +   +   +  +   *  *   *   +    *  +   *  +    *  *  +    +    +    +    *   +   *  +   +   +    +    +   *   *  *  +    *   +  +  +  *  *  +    *  +   +  *  *   *  +  +   *   *  *  *   +   *  *   +  *   +  +   +  +    *  +  *  +  *  +  +   +  *   *   *  +   *  +  +    +   +  +   *  +  +   *   +  +    *   *  +    +   +    +  +    +  *  +    +   *  *   +  +   *   +  +  *   *  *   +    *   +  +   *  +    *   *  +   +   *  *  *  +    +    +    +  *  +  *  +    *  +   *   +    *  *   +    +  +   +   *   *  +   +    *  *  *  *   +   *   *   +  *   +    +   +   *   +   +   +  +   +    *   +  +   *  +    +  *   *   +   *  *  +    +    +   *   +    +   *  +    +  +   *   +  +    +  +  *  *  +   +  +   *  *  +   *   *   +   +   +    +    *  *  *  *   +   *  +    +    *   *  *   +    *  +  *   +    *   *   *  +  *   *   +    *   *  +   +   +    +  +    *  *  +   +    +  +   *   *  +  +  *   +   +  *   *  *  +  *   *  +    *  *   +    *   +    +   *  +    +    *  *  *   +    *   +   *   *  +  *   +  +    *  +  +    +  +   *  +   +  +   *   +    +    *   *   *  +  *  *   *   *   +  +  +   +    +   +    +    +   *  *   +    *  +    *  *   *   +   +    +  *  *   *  *  +  +   *   *  +  *  *   *  *   +   +   +   *   *   +  +   +  *  +  *   +   +   *   +    +   +  +   *  *   *  +    +  +    +    +  *   +    *  +   +    +  +   *   *  *   *  +  *  +  *  *   +    *  +    +   +    +  *  +    *   +   *  +   *   +    +    +  *  *  *  +    *   *   +   +  +    +   *   *   *   +  *  +  *   *   +  *  *   *   +    *  *  +   *   +    *   *  *   +   *   +    *   +  *   *   *  +    *  *  +   +    *  *  +  *   +  +  *   +   *   +    +  *   +  *   *  +   +   *   +  *   +   +  +   +  +    +  +    *  *  *  +   +    *  *   +  +    +    *  +   *  *   +   *  *  *  +    *  +   *  + 
diff --git a/src/day06.rs b/src/day06.rs
new file mode 100644 (file)
index 0000000..3f3fbac
--- /dev/null
@@ -0,0 +1,66 @@
+use std::error::Error;
+
+struct Puzzle {
+    operands: Vec<Vec<u64>>,
+    operators: Vec<char>,
+}
+
+impl Puzzle {
+    fn new(input: &str) -> Self {
+        let mut operands: Vec<Vec<u64>> = Vec::new();
+        let mut operators: Vec<char> = Vec::new();
+        let mut it = input.lines().peekable();
+        while let Some(line) = it.next() {
+            if it.peek().is_none() { // last line
+                operators = line.split_whitespace()
+                    .map(|word| word.chars().next().unwrap())
+                    .collect();
+            } else {
+                line.split_whitespace()
+                    .enumerate()
+                    .for_each(|(i, word)| {
+                        if operands.get(i).is_none() {
+                            operands.push(Vec::new());
+                        }
+                        operands[i].push(word.parse::<u64>().unwrap())
+                    });
+            }
+        }
+        Puzzle { operands, operators }
+    }
+
+    fn part1(&self) -> u64 {
+        self.operators.iter().enumerate().map(|(i, op)| {
+            let res: u64 = match op {
+                '+' => self.operands[i].iter().sum(),
+                '*' => self.operands[i].iter().product(),
+                _ => unreachable!(),
+            };
+            res
+        })
+        .sum()
+    }
+}
+
+pub fn run(input: &str) -> Result<(), Box<dyn Error>> {
+    let p = Puzzle::new(input);
+    println!("part1: {}", p.part1());
+    Ok(())
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    static TEST_INPUT: &str = "\
+123 328  51 64 
+ 45 64  387 23 
+  6 98  215 314
+*   +   *   +  
+";
+
+    #[test]
+    fn test_part1() {
+        assert_eq!(4277556, Puzzle::new(TEST_INPUT).part1());
+    }
+}
index c1710eefa26920c571123676d7f005bc68599440..1d043c3cea57b4f14f01c9e7b244339c4db89404 100644 (file)
@@ -9,6 +9,7 @@ pub mod day02;
 pub mod day03;
 pub mod day04;
 pub mod day05;
+pub mod day06;
 
 fn main() {
     let args: Vec<String> = env::args().collect();
@@ -29,6 +30,7 @@ fn run(day: &str, input_file: &str) -> Result<(), Box<dyn Error>> {
         "day03" => day03::run(&input)?,
         "day04" => day04::run(&input)?,
         "day05" => day05::run(&input)?,
+        "day06" => day06::run(&input)?,
         _ => return Err(format!("unknown or unimplemented day \"{day}\"").into()),
     }
     Ok(())