adventofcode

git clone https://git.ce9e.org/adventofcode.git

commit
f6fbfe72586151fb9c42bb1cf86f7e66f0e85c77
parent
466594eb53070c607637491ae1ddf43a0a229012
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2025-12-06 13:10
2025-12-07

Diffstat

A 2025/06/input.txt 5 +++++
A 2025/06/solution.zig 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A 2025/06/test.txt 4 ++++

3 files changed, 138 insertions, 0 deletions


diff --git a/2025/06/input.txt b/2025/06/input.txt

@@ -0,0 +1,5 @@
   -1     1 366   27 228 617 753 14  146    5  1 83 92 885 64  41 8   952 75 23   26 43 229 478 633 5347 192 64   595 496 644 1  74 119 94  9   1 55   7  2 1269 13  128 368 75 18 32 664 15  4 57 7665 277   2 75 17 722 622 6   91 52 293 23 1  1611 267  1 47 458 469 9521 872  23 2     9 1669 971 77  26 4   17 491 972 354 5  964 438 873 65  432  81 75 71 334 17  6 92 28 888 966 82  98 4  38 5  69  74 754  38 872 349 93 74 12  151 319 332 35 313  8 12 55 295 781 1686  74 997 282 54 382 4881 4655 367 95   7  89 18 23 344   9 53  19 5749 486 72  687 27 29 92 55 15 54 17  85 237 7151 3  2573 6     9  363 623 972 16 9  71 64 741 111 91 3  662 779 65 7  14 23 56  1414 7517 2   41 754 515  32 6326 763  86 2625 83 78 75   9 6159 83 57  25 6989 949 2  2967 1   8  919 45 88 52 74 49 885 41 4  25 7333 185 65 83 327  96 5793 32 457 3  783 244 86 85    18  2 331 52 658 12 85   72  18 42 12 267 33 768 628 78 42 4816 264  17 765 758 9  678 12   45 67 432 447 37 8474 645  2   85 183 79  28  1  96 73  4   572 171 44 59 9787 47  4   46  15 126 3446 459 726 578 9   8 649 144 71 8     6 39 844  554    79 696 58 823 78 51  19 142 64 86 97 1   438   68 8   5746 19 498 323 2  438 3287 649 56 29 79  35 486 361 928 47 51 313  9 7   53 46   76  3 6862 14 24 2   2  44 23 142 28 82 756 2931 643 18 9  12 39 599 43 25  91  29 648 924 81  89 8315 713 88 375   3 894 25 427 938 54   2 967 11 947 97 574 989 215  413 31  59 238 92  24 75 6  966    3 63   252 826 397 9  6223 9957 55 96  89    2 54 589  41  12 327  3 15 295 2   34 366  972 24 89 224  34 68 691  3 5  94  6798 2  2354 891 913 6868 46 53  1 9164 8   6  444 47  5   19 448 5    12 3773 5494 13   76 24 583 4   475 783 951 62 2    44 921 96 251  84 896 58  87 343 75 61 9  661 31  24    6 17   873  163   4 78 45 28    67 42 92  232    3  183 1  879 81    17 98 571 23   7 225 7954 74 82   5   31 949 518 154   67 32   55 1    69  6  95 52 383 216 458 4  482 96 8494 72 275  9 41 52  37 279 51  39 396 57 89  588 32  524 17  6645  9 534 289 9  59 89 1  71 5345 561 3   5   565 93 6389 97  124 3   94 249 86 36 611  9 6299 7329 195  1 389   7 33 988 28 596 84  1 392 9846 364 82 6385  8 5  8482 48 914   4 417 534 59 64 751 7567 129 46 42  25 153 315  988  93   46 336 41    6 91 67  451 426 84 6  8155  3 6  53 4  399 178 53 13 668 4687 76 44 49 673 97  253 41 83 49 853 741  418   3 78 466 896 24 55 15     15  3 195 329  19 78   89   4   6 619 791 62 64 86  89 583 327 752 77 32  2    675 54 78  621 57 5976 18 33   9 441 9   52 828   51  39   2 15 338 4322 2  175 2473 555 69 1  722 28  5    43 59 4  732 656   32 67 147 74 399 1  764 34  69 97  91 46 43  82 85  11 5   376  11 65 2  9371 11 159 463 93 32  263 5     4 2794 1   21   42 199 937 8  168 8  337 17  753 28 46  9 866 4   27 42 144 622  6   9 34  89 73  282  32 14 58   946  91 71  2 8   64 277 18  59 99 4311 5  676 916 773 24    96   24 293 28 5856 227 452 53   5   8 79 5944  357 731    82  56 6787 75 569  8 854 4136 12 95 81 84 6848 2  72  1 86  986 492 13 17 5  32 967   1  27 124  6 82 135 11  73  62 81   3 81 9   61 865 48  5 62   16 963  8 52 71  93  4 529 7291  2 84  8 86 56 3727 14  157 64 74  377   694 275 21 2615 18   9 59 577 7811 839  67 24 3558 246 528 89 368 924 752  685 49 522 61 75 5735 8     4  37 745  56 815 38  9 247 53  6 1844 3   1   531 971 735 9  21 99 9413 89  8657 39 514 565  42 6724 2    23 443 37 85 117 63 14 35 3466 934 57 79  2  116  63   95  2 51 46 47  5535  28 6  38 81 898 93   3 871  3 9468 432 224 91 24 85 891  2 78 568 26 45   23 8  85 57 8   51 82 859 929 65 5   458 5456 752 96 47 264 86 76  24 67 87    8 622 9912 357 38 62 1   17 53 899 3  3977 97 6135  1 33 44 153 37  435 63 674 27 394 86 7696 119  1 77 94   69 417 7    917 53 831 4   62 314 794 17  78 268   8 58 465 6  969 59  39 44
   -1     2 2893  23 156 756 335 46  8446  45  5 83 57  16 641 43 1   275 56 3517 44 68 386 955 412 2855 155 64   641 489 199 4  17 589 99 99  15 25  73 62 1746 32  643 215 58 38 74 849 89  9 48 6538 178 735 13 26 719 991 714 85 43 956 44 4  6637 833 86 38 144 948 2943 786  21 2   829 8547 846 21 723 325 35 561 965 569 8  954 571 174 621 5163 93 42 66 953 52 24 59 13 487 778 26 789 74 84 34 98  97 836 944 218  11 98 32 727 731 258 269 18 798 14 15 94 773 227 2385 994 888 528 24 928 6311 9789 678 95   7 415 81 8  864   3 75  14 6375 756 17  589 82  9 99 15 47 94 631 99 254 1682 1  4196 32    8 7344 225 517 97 1  37 68 372 424 94 3  791 446 32 67 79 36 91  2515 7279 8   32 418 597 869 184  797 624 1492 44 83 73   2 1567 95 662 27 9258 798 2  8517 6   7  893 63 33 44 82 16 389 28 2  37 7143 697 69 33 744  44 9763 28 532 5  546 785 96 74   438 34 246 49 887 47 9635 148 33 99 83 361 38 643 363 69 58   93 459 164 548 659 3  388 62  493 89 478 431 11 587  298  99  39 168 573 856 56 51 772 35  938 639 61 59 4897 92  5   825 81 668 6531 241 168 252 88 27  65 381 86 39   54 23 7696 169   927 452 14 732 48 67  97 119 45 67 18 3   728  392 727 6797 36 613 357 4  197 9565 229 17 8  98 263 938 677 524 33 82 745 62 8   17 26  711  3 7725 37 37 92  9  68 37 233 18 66  63 1272 984 99 7  57 68 462 91 31 165  45 533 667 885 52 7378 81  28 923  11 975 62 945 367 23  96 381 51 249 66 833 669 8538 243 633 96 22  894 71 62 61 7369  26 271  718 41  269 5  5175 1161 15 39 888    7 98 593  52  46 423 68 33 981 27  47 3555 386 15 72 825  47 73 527  3 51 621 7416 11 8976  59 695  899 63 43  8 7564 78  22 285 92 57 2947 616 3   193 387  3633 241 573 74 182 33  694 589 728 53 3   249 62  58 579  26 576 58  38 422 65 24 89 411 59  67   61 1981 681 3767  14 67 33 725  523 83 878 713    2  716 26 16  287  982 65 648 96  47 731 1426 86 72  64 4369  99 757 8748 197 57  968 799  73  7 251 21 626 742 114 9  645 26 7211  5 345  9 95 445 73 584 19  39 175 58 63  592 49  979 469 1887 68 335 846 3  69 67 89 21 2186 435 734 4   483 84 1574 787 598 89   9 556 44 61 52  38 8941 4321 369  3 942  87 46 256 22 642 5  23 883 6479 965 14  216  4 88 214  59 173  57 937 912 63 18 654 7595 743 62 277 24 661 739  632 875 5164 829 56  637 38 839  56 75  4  8  1369  5 8  41 53 642 773 89 37 526 2696 67 65 57 37  476  85 14 94 6  853 8839 639   8 73  53 448 38 29 39     32 45 254 443  75 26  795  26 982  71 658 41 39 97 989 19  272 749 68 751 22   159 29 789 918 69 4287 83 18 859 518 31  74 449  418  96 495 56 854 8471 9  551  728 84  67 2  894 339 64   44 88 68 646 3232 493 72 353 11 833 72 711 97 147 67  22 56 412 11 46  86 47  249 976 55 3  7253 15 51  532 32 34   65 51  415 4241 53 344  182 165 389 58 377 6  398 231 311 26 56  6 568 95  23 78 434 392 71  76 697  5 125 486  5  23 3918 819  84 86  8 283 98 654 49 987 42 9794 7  72  569 143 742 4594  182 565 25 9658 546 4   27 831  25 68 8848  137 4321 2572 927 8545 99 923 52 424 6371 89 86 47 93 8895 1  49  1 99 9281 172 18 69 77 83 221  47 863 938 73 77  34 311 617 94 79 876 68 322 22 931 22  2 32 1787 828  1 75 52  25  8 632 5567 12 62  7 44 69 5892 81  812 32 317 726  1196 927 21 8555 39   3 62 559 1835 9679 31 58 446  931 858 61 247 917 161 4457 88 798 27 84   52 453  32 728 691 499 887 68 95 742 17 39 7951 51  16  823 664 483 1   4 51 754  313 9495 77 132 421 766 3315 176  93  58 37 86 433 42 66 15 9322 551 49 914 96 3215 11   88  2 22 11 13  7469 219 37 19 39 667 14  79 453 31   63 548 421 96 53 39 719  6 4   85 67 834  63 64 12 15 86 669 16  43 125 99 39  547 1666 372 11 74 875 59 381 89 86 99   68 176 452  537  3 34 886 49 87 621 32  236 64 6154 26 46 16 797 141 465 19 233 16 443 89 1322 37  42 47 25  715 613 188  236 78 592 485 67 699 919 39  37 583 728 64 373 5  156 388 76 29
   -1     3 5447  89 387 842  49 388 8423 814 93 2  17   2 288 92 5   45  77 9841 28 58 463 91  657 8732 899 525  1   74  928 74 27 186 72 78 386 51 853 34 6447 553 9   397 29 95 77 654  6 94  4 3949 985 873 6   8 57  732 438 81 6   98 72 14  136 864 73 17 948 128 2574 819  14 43  467  316 965 67 594 436 11 697   1 285 39 267 285  99 436 5384 28 83 11 568 45 41 67 94 664 775 53 644 69 75 51 347  7 62  556 415   2 41 71 718 58  299 194 34 5   52 56  6  63  46 95   569 922 25  36 643 6557 1685  85 87 566 161 92 1  25  332 43 239   53 418 675  98 87  9 76 67 57 22 687 38 291 4964 46 1211 658 163 6126 837 149 12 1  21 18 271  48  5 85 577  48  6 16 59 92 853 335  7311 22  87 879 567 165 762  843 765 9163 65 39 86 147 9749 84 614 95  649 743 68 9515 85  98 263 49 67  1 82 77 8   33 72 98 8562 38  56 46 165 627  532 27 131 1   85 519 99 463  284 18 265 99  88 69 9716 259 18  1 6  71  73 944 555 51 18    3 845 145 229  47 6  419 45  953 38 234 451 28 62   6937 592 71 267 998 895 21 4  634 188 15  758 78 79  946 38  46  219 67 735   56 836 784 824 45 55  16 791 29 853  73 83 4867 5254 6523 75  74 266 18 1   99 268 19 76  4 58  747 2392 521  398 22 887 131 3  379  855 527 75 5  24 882  69 938 257  1  1  98 44 7   72 12 3282 74 8446 37  7 84  12 58 61 866 3  83   1   74 513 59 2  76 62 667 53 74 587  55 626 7   768 14 1984 2   46  22 789 142 39 775 711 86  44 162 35 369 86 795 235 7833 172 543 82 59  381 18 31 33 3758  35 7626   1 46  82  77 575  4442 73 79 332  137 14 88  984  72 528 87 11   4 32  77 8142 32  28  9   4 293 22 979  8 72 495 1319 39 999   81 715  982 87 65 86 6563 693 25 952 54 86 8537 892 7  3145 337  991  882 256 97 13  293 42  249 533 68 91  733 74  41 167 295 222  2 976 252 42  9 69 134 3  761 9391 7723 515 1836 524 16 32 912 3775 74 391 177  135 8141 92 77  8335 139 72  21 39  94 66  4944 3  14 894 3411  17  75 4368 499 496 724 7259 6  27 317 18 182 574  84 3  758 18  574  4 78  78 69 831 87 331 17 464 112 19 11  354 93 9481 428 4432 15 476  67 7  6  83 13 31 6637 216 149 31  24  93 622  438 755 41   6 44  66 35 78  97 8919 3559 641  4 469  54 84 249 3  136 4  81 393 6263 149  5  838 71 83 78   22 813  41 95  245 61 17 27  619  835 25 891 72 863 7639 922 521 2126 437 58 8567 64 375  92 8   4  8  665   2 44 8  44 782 614 71 81 626 632  17 85 45 5   615  38 11 51 5  862 2717 4776 96 47  17 171 83 33 9385  597 92 585 653 825 99 3724  92 727   1  77 75 26 93 666 24   81 77  21 236 5938 422 66 113  66 43 8992 23 58 193 148 95  85  44 2252  22 336  2 793 2935 51 716  685 71  66 7  595 942 5755 56 62 43 732 3911 169 64   5 18 71  16 634 71 149 173 77 98 227 67 456  8 37 3287 832 65 1  8536 88 95  53  27 517   8 39  512 1264 81 496  886 76  846 17 456 71 529 358 958 95 86 41 217 372 83 67  58  24 95 229 167  3 611 6666 6  26 6394 44   37 97 15 693 53 159 31 273 86 6282 53 43  881 518 265 7965 7358 762 87 866   76 5   49 793 499 87 5339  779 6527 3278 517 6474 97 773 49 236 6713 67 54 55 15 152  6  89  2 41 4163 224 71 48 93 99 51  366 351 892 78  6  53 238 282 92 76 532 11 194 6   64 73 93 86 7588 815 25 13 949 97  7  76 3581 56 82 66 88  7 2413 74   41 26 997 5763 6164  51 93 185  469 86 38 793 7966 9935  7 31 997  7   283 85 674 295 955 9349 59 78  74 85   21 185 975 325 81  715 269 58 44 986 66 77 8718 261 821 684 963 211 61  4 63 212  691 2275 57 765 264 149  856 686  58  33 1  44 258 17  2 24 274  266  6 954 41 4924 14 3156 54 52 45 649 4247 583 99 65 68 449 66 358 664 41   14 789 625 17 11 55 174 67 8   37 34 1815 74 58 96 3  18 792 91  62  99 95 66  82  659  271 56 69 264  6 861 56 6  54 5579 336 566  5    8 5  417 21 76 256 76  726 6  3455 69 79 21 75  522 974 75 687  5 649 53 8932 84  33 78 75  814 52  412 7132 72 268 667 69 498 991 14  61 13  624 97 396 98 787 693 96 15
   -1     4 6541 525 919 57   35 465 2588 525 73 9  69   1 767 5  223 2   55 4553  5 26  26 31  29    57 999 9419 9   4   764 81 84 435 49 48 414 52 214 96 3372 128 8   748 51  7 99 89   3 83  6 13   887 219 1   8 7   589 139  3 8   15  3 42   57 329 58 41 13  12     2  56 458 651 783   99 558 34 395 843 74   3   7 65  46 4   3     3 613 8815 53 77 56 372 4  44 85 88 762 79  3  797 33 55 99 746  2 4   321 959   5 77 79 461 39  434  72  3 2   72 3   9   1   9 21   625 221 88  67 18  222   428   4 99 723 774 12 8  14  249 13 685    7 619 246  25 57  5 88 15 22 93 335 69   7  597 54 5    239 367 4373  85 72  4  37  5 59 172  53  1 46 136  85  6 61  8 21 166 9    99   927 95  71 162 227 698    9 684 2936 6  5  14 232 3271 11 118 67  713 16  78  946 754 51   5 98  8  4 65 73 1   66 22 48 4298 97  5  49 1   511   67 68  63 35   4  99 38 767 7295 74 535 42   9 44 2266 167  6  9 6  1   75 469 573 43  2    4 288 369  45  92 33 34  65 7323 66 84  339 86 8    3418 912 95 65  534 571 55 7  347 916 98  525 79 76   53 179 868 641 62  46   21 328  96 569 59 74  31 748 75 4226 23 33 4956 5484 8379 67   3   2 24 2  274 595  3 23  8 941  98 9326 931   17 27 31  854 47 293  667 22  18 6  32 225   1 982 196  4  4   4 33 583 46  4 6614 17 37   11  7 727 65 15 23 39  7  81   9   89  55 27 29 9  85 18  19 4  532 855   4 4   432  7 627  2   82  15 779 428 25  49   4 94 771   8 24  71 31 1   124 8544 878 924 32 45  793 2  92 11 4697 536 8998   9 88  78  16 93     95 55 56 685 4663 16 8   989 475 181 97 97   2 925 28 7439 7   19  5   9 383 81 339 39 27 995  381 86 68     2 861   13 87 16 91 4    671 36 54  24 72 9474   3 65 5712 95   393  581 978 35 68  356 28  154  99 39 51 8787 6   16 98  491 595  8 635 8    3  5 45  12 6  697 8141 4634 734 1189 639 75 95 127 4166  3 188 559 9214 3794 28 32  2436 283 5   11 12 637 75   818 5  27 226 2653  37  18 5517 262 583 843 1692 2  78 748 5    3 529   9 47  23 4    71  2 72  83 22 774 58 297 55 443 853 43 836 43   8 4633 796 4457 58 749  19 88 2  99 55 57   84  89 959 787 55  43 14   292  62 789  3 79  35 94 84  19 1445 1399 364 66   6 532 22 818 9  717 9  42 562  282 225  9   25 29 58 59    6 392 345 71  42  44 93 74  4    131 58 454 62 327 3564 675 638 4942  29 72 6424 3  545   7 7   9  59 951  65 18 3  49 364 1   71 77 627 7    77 15 87 3   198   4 65 18 4  837 3535 4837 11 38  32 185 87 8  5348 3612 51  83  33 725 99 6495 393 537   7  28 24 88  5 399 33   84 32  19 544 1192 723  7 496   7 96   62 52 92 962 863 835 96  94 8555 929 478  2 26  6582 67 497   47 9   87 36 52  169 4924 79 9  92 886 8948 722 8    2 6  16  79 56  58 558 256 93 49 351 62 996  1 54 4473 556 11 74 8835 42 33  4    6 978   6 25 8128 54   73 988 7983 73  864 23 132 64 688 747 183 58 24 21 631 469 92 95  47  11 85 195 714  8 786 7177 3  49 5727 41  474 19 66 261 74 26  45 194 91 9331 31 8   95  792 323 5649 9529  32 39 37    46 9    9 119 582  8 868  2893 7217 3284 576 1669 68 773 13 6   6739 91 4  22 45 61   71  1 98 63 7212 767  5 93 34 96 49  396 186 53  24  3  66 449 626 5   9 689 53 932 4   81 9  59 19 6946  25 74 97 767 68 97  21 3754 19 46 47  7  4  617 681  12 5  235 5543 2688   2 92 14   974 53 19 839 4444 8543  2 53 78   3     5 3  26  96  712 9234 86 11  65 22   15 594 636 922 12  466 992 12 69 74  31 14 3378 225 359  11 77  598 12  1 36 32   255  382 38  19 747 979  824 455 676   2 3  71  51 87  1 26 12   273  2 863 65 8761 2  4543 42 64 82 226 8952 639 62 81 15 367 87 872 173 46    5  43  84 68 34 59  38 93 5   15 96 3882 33 77 12 3  28 426 48  16   1 9  749 6   81    73 45 33  24  6 987 68 9   6 8677   7 38   5    6 9  544  9 21  39 61  512 6   615 68  8 2  72  871 625 91 242  1 223  6   72 5   73  1 14 5328 38  718 1348 17 799 282 99  81 283 27 539 1   523  2   7 89 21  876 3  55
   -1     5 +    *   +   *   +   *   +    +   *  *  *  +   *   *  +   *   *  +    +  *  *   +   *   +    *   +    *   +   *   *  *  +   *  +  +   +  *   +  +    +   *   *   *  *  *  +   *  *  *  +    +   *   *  *  *   *   *   +  *  *   *  *  +    *   *  +  +   *   +    +   *   *   *   +    +   *  *   *   *  *   +   +   *  *   *   *   *   +    +  *  +  +   *  *  *  *  +   *   +  +   +  *  *  *   +  +   *   *   *   *  *  +   *   *   *   +  *   +  *  +  +   *   +    *   *   *   +  *   +    +    *   *  +   *   *  *  +   *   *  *   +    +   *   *   +  *  +  *  *  *  *   *  +   +    *  +    +   *   +    *   *   *  *  +  +  *   *   *  *  *   +   *  *  +  *  *   +    +    *   +  +   *   +   +    +   +   +    *  +  +  *   +    *  +   +  +    *   *  +    +   +  *   *  +  *  *  +  *   +  *  *  +    +   *  *  +   +   +    +  *   +  +   *   +  *   +    +  *   +  +   *  +    *   +  *  *  *   +  +   *   *  *  +    *   +   *   *   +  *   +  +    *  *   *   +  +    +    *   *  *   +   *   +  *  *   *   *   +   *  *  +    *   *   *   *  *   +    *   +   *   +  *  +   *   +  +    +  *  +    +    +    *   +  *   +  +  *   +   *  *  *  *   +   +    *   +    +  *   *   *  +   +    +   +  *  +  *   *   *   +   +  +  *   *  +   *  *  +    *  +    *  *  *   +  +  *  +   *  *  *   +    *   +  +  +  +  +   *  *  +   +   +   +   *   *  +    *   *  *   +   *   +  *   *   *  +   +   +  *   *  *   *   +    +   *   *  *   +   *  +  +  +    *   +    +   *   +   *  +    +    *  +  *   +    *  +   *   +   *   *  +  *   *   *  +    *   *  *  +   +   *  *   +  +  +   +    *  +    *   *   +    *  +  *  +    *   +  *   +  *  +    *   *  +    +    +    +   *   +  *   *   *   +   *   *  +  +    *   +  +   +   +   +  *   +   *  +  *  +   *  *   +    +    +   +    +   +  +  *   +    +  +   *   +    +    *  *   +    *   +  *   *  +   +   +    +  *  *   +    *   *   +    *   +   *   +    *  +  *   *  *   +   *   *  +   +  +    *  +   *  *  *   *  *   +  +   +   *  *   *   *  +    *   +    +  *   +   *  *  *  +  *  +    +   +   *   *   *  +    *   +   +   +  *   *  *  *   +  +    +    +   *  *   +   *  *   *  +   +  *  *   +    +   +  +    +  +  +    *  +   +   +   *   *  +  *   +    *   *  +   *  +   +    *   +   +    *   *  +    +  *   *   +   *  *  +    *  *  *  *  *   +   *  *  *   +    *  *  *  +   *   +   *  +  *  *   +    +    *  +  +   +   *  *  +    +    *  *   *   +   *  +    *   *   *   *   +  *  *  +   +   *   +   *  *   +    *   +  *   +   *  +    *  *  +   *   +   *  *   +    +   +   +  +   +    *  *   +    *   +  *  *   *   +    *  *  *  +   +    *   *  *   *  +   +  +   *  +   *   *  *  +   +  +   *  +  +    +   *  *  +    *  *   *   *  *   *   *  +    +    +  *   +    *   *   *  +   +  +   +   +   *  *  *  +   *   +  *  +   +   +  +   +   *  *   +    *  +  +    *   *   +  +  *   +  *   +  *   +  +    +  *   *   *   *   +    +    +   +  +    *   *   *  *   +   *  +    +    +    +    *   +    *  +   *  *   +    +  *  *  *  +    *  +  +  +  +    *   *  +  +  +  *   *   *   +   +  *  +   *   +   *  +  *   +  +   +  *   +  *  *  +    *   *  +  *   +  +  *   +    *  *  *  *  +  +    *   *   *  *   +    +    *   +  +    +   *  +  +   +    +    *  +  +    +   *   *  +   *   *   +    *  +   +  +  +    +   *   +   +   *   *   *  *  +   +  +  +    *   +   *   *   *   *  *  +  +    *   +    *  *   *   *   +    *   *   *   +  *  *   +  +  +  +    *   +  *   +  +    *  +    +  +  +  *   +    +   *  +  +  *   *  *   *   +  +    *   *   *  +  +  *   *  +  +   *  +    +  *  *  +  +  *   *  *   *   *  +   *   +    +   +  *  +   +  *   +  +  *  +    +   +    *   *  *  *   +  *  *   +  +    +  +    *  *  *  +   *   +   *  *   +  *   +  +    +   +  *  +  +    *   *   +    +  *   +   +  *   +   *  *   *   *   +  *   +  *   +   +  + 

diff --git a/2025/06/solution.zig b/2025/06/solution.zig

@@ -0,0 +1,129 @@
   -1     1 const std = @import("std");
   -1     2 
   -1     3 const Op = enum(u64) {
   -1     4     add = 0,
   -1     5     mult = 1,
   -1     6 };
   -1     7 
   -1     8 fn readItem(reader: *std.io.Reader) !struct { []u8, bool } {
   -1     9     var s = try reader.peekDelimiterExclusive(' ');
   -1    10     if (std.mem.indexOfScalar(u8, s, '\n')) |len| {
   -1    11         reader.toss(len + 1);
   -1    12         return .{ s[0..len], true };
   -1    13     } else {
   -1    14         reader.toss(s.len + 1);
   -1    15         return .{ s, false };
   -1    16     }
   -1    17 }
   -1    18 
   -1    19 fn reduce(values: []u64, start: usize, skip: usize, op: Op) u64 {
   -1    20     var i: usize = start;
   -1    21     var result: u64 = @intFromEnum(op);
   -1    22     while (i < values.len) {
   -1    23         result = switch (op) {
   -1    24             Op.add => result + values[i],
   -1    25             Op.mult => result * values[i],
   -1    26         };
   -1    27         i += skip;
   -1    28     }
   -1    29     return result;
   -1    30 }
   -1    31 
   -1    32 fn reduceColumns(
   -1    33     gpa: std.mem.Allocator,
   -1    34     columns: *std.array_list.Aligned(u64, null),
   -1    35     values: []u64,
   -1    36     offsets: []usize,
   -1    37     start: usize,
   -1    38     skip: usize,
   -1    39     op: Op,
   -1    40 ) !u64 {
   -1    41     std.debug.assert(values.len == offsets.len);
   -1    42 
   -1    43     var i: usize = start;
   -1    44     var maxOffset: usize = offsets[i];
   -1    45     defer columns.clearRetainingCapacity();
   -1    46 
   -1    47     while (i < values.len) {
   -1    48         while (maxOffset < offsets[i]) {
   -1    49             try columns.insert(gpa, 0, 0);
   -1    50             maxOffset += 1;
   -1    51         }
   -1    52 
   -1    53         var j = maxOffset - offsets[i];
   -1    54         var value = values[i];
   -1    55 
   -1    56         while (value != 0) {
   -1    57             if (j < columns.items.len) {
   -1    58                 columns.items[j] *= 10;
   -1    59                 columns.items[j] += value % 10;
   -1    60             } else {
   -1    61                 try columns.append(gpa, value % 10);
   -1    62             }
   -1    63 
   -1    64             value /= 10;
   -1    65             j += 1;
   -1    66         }
   -1    67 
   -1    68         i += skip;
   -1    69     }
   -1    70 
   -1    71     return reduce(columns.items, 0, 1, op);
   -1    72 }
   -1    73 
   -1    74 pub fn main() !void {
   -1    75     const gpa = std.heap.smp_allocator;
   -1    76 
   -1    77     const path: [:0]const u8 = std.mem.span(std.os.argv[1]);
   -1    78     var file = try std.fs.cwd().openFile(path, .{});
   -1    79     defer file.close();
   -1    80 
   -1    81     var buffer: [1024]u8 = undefined;
   -1    82     var reader = file.reader(&buffer);
   -1    83 
   -1    84     var i: usize = 0;
   -1    85     var offset: usize = 0;
   -1    86     var width: usize = 0;
   -1    87 
   -1    88     var values = std.ArrayList(u64).empty;
   -1    89     defer values.deinit(gpa);
   -1    90 
   -1    91     var offsets = std.ArrayList(usize).empty;
   -1    92     defer offsets.deinit(gpa);
   -1    93 
   -1    94     var columns = std.ArrayList(u64).empty;
   -1    95     defer columns.deinit(gpa);
   -1    96 
   -1    97     var part1: u64 = 0;
   -1    98     var part2: u64 = 0;
   -1    99 
   -1   100     while (readItem(&reader.interface)) |item| {
   -1   101         const s, const lineEnd = item;
   -1   102         offset += s.len + 1;
   -1   103         if (s.len != 0) {
   -1   104             if (s[0] == '+') {
   -1   105                 part1 += reduce(values.items, i, width, Op.add);
   -1   106                 part2 += try reduceColumns(gpa, &columns, values.items, offsets.items, i, width, Op.add);
   -1   107             } else if (s[0] == '*') {
   -1   108                 part1 += reduce(values.items, i, width, Op.mult);
   -1   109                 part2 += try reduceColumns(gpa, &columns, values.items, offsets.items, i, width, Op.mult);
   -1   110             } else {
   -1   111                 const value = try std.fmt.parseInt(u64, s, 10);
   -1   112                 try values.append(gpa, value);
   -1   113                 try offsets.append(gpa, offset);
   -1   114             }
   -1   115             i += 1;
   -1   116         }
   -1   117         if (lineEnd) {
   -1   118             width = i;
   -1   119             i = 0;
   -1   120             offset = 0;
   -1   121         }
   -1   122     } else |err| switch (err) {
   -1   123         error.EndOfStream => {},
   -1   124         else => |e| return e,
   -1   125     }
   -1   126 
   -1   127     std.debug.print("part1: {}\n", .{part1});
   -1   128     std.debug.print("part2: {}\n", .{part2});
   -1   129 }

diff --git a/2025/06/test.txt b/2025/06/test.txt

@@ -0,0 +1,4 @@
   -1     1 123 328  51 64 
   -1     2  45 64  387 23 
   -1     3   6 98  215 314
   -1     4 *   +   *   +