summaryrefslogtreecommitdiff
path: root/2024_rust
diff options
context:
space:
mode:
Diffstat (limited to '2024_rust')
-rw-r--r--2024_rust/Cargo.lock18
-rw-r--r--2024_rust/Cargo.toml1
-rw-r--r--2024_rust/inputs/7850
-rw-r--r--2024_rust/src/bin/day7.rs129
4 files changed, 997 insertions, 1 deletions
diff --git a/2024_rust/Cargo.lock b/2024_rust/Cargo.lock
index 3a80814..99398ce 100644
--- a/2024_rust/Cargo.lock
+++ b/2024_rust/Cargo.lock
@@ -1,6 +1,6 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
-version = 3
+version = 4
[[package]]
name = "aho-corasick"
@@ -15,10 +15,26 @@ dependencies = [
name = "aoc2024"
version = "0.1.0"
dependencies = [
+ "itertools",
"regex",
]
[[package]]
+name = "either"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
+
+[[package]]
+name = "itertools"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
+dependencies = [
+ "either",
+]
+
+[[package]]
name = "memchr"
version = "2.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/2024_rust/Cargo.toml b/2024_rust/Cargo.toml
index d8258dc..2259305 100644
--- a/2024_rust/Cargo.toml
+++ b/2024_rust/Cargo.toml
@@ -6,4 +6,5 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
+itertools = "0.13.0"
regex = "1.11.1"
diff --git a/2024_rust/inputs/7 b/2024_rust/inputs/7
new file mode 100644
index 0000000..79e32c2
--- /dev/null
+++ b/2024_rust/inputs/7
@@ -0,0 +1,850 @@
+18158404487: 2 3 15 7 4 72 2 61 4 6 7 4
+4953377: 7 3 5 3 91 47
+165652833: 876 47 21 9 3
+204579: 9 1 57 71 2 53 9 7 6 9
+723406398264: 48 2 8 625 8 87 421 79
+18740629707: 1 3 1 465 7 8 6 2 5 8 65 6
+130109004: 8 8 40 88 51 963 556
+123648: 7 9 1 76 3 2 4 7 8
+72461593299: 62 79 5 69 329 7 1 29 7
+138059268: 4 8 824 3 218 938 64 4
+131670273: 880 9 19 875 273
+271921957476: 2 755 6 7 753 1 9 1 2 7 8
+47440: 6 2 645 6 2 288 49 939
+1641: 650 52 1 33 3 2 8 6 886
+112350: 24 5 55 6 107
+468: 23 16 97
+106676: 3 47 2 159 241 4 391
+8075810240219: 702 719 14 160 219
+1198884102: 1 62 55 54 234 84 104
+9036249210: 225 62 42 45 89
+4148698: 1 44 4 5 4 5 2 97 35 8
+8930994897: 721 8 46 60 97 561
+110420860: 275 73 169 181 59 4 5
+7110: 24 29 1 9 837
+191019: 641 298 1
+20553: 8 8 6 22 2 5 22 97 7 79
+4590784273: 93 69 188 445 695
+23322705: 752 5 689 25 755 21
+84953452: 45 804 530 94 357
+558190557: 620 21 3 6 3 5 57
+82089037: 553 69 429 553 307
+800: 5 72 4 347 89
+994181760: 57 5 2 4 3 3 4 8 9 208 85
+657: 46 1 12 3 74
+4588777: 779 3 1 6 978
+45501764: 6 822 8 610 66 9 47
+338460: 3 12 940 2 3 37
+4653730: 84 115 2 16 532 30 6 4
+894426563: 86 71 273 26 560
+1596: 80 80 72 6 204
+223051445: 9 8 95 53 3 49 3 2 74 28
+137161: 1 2 3 3 6 6 2 357 4 5 2 55
+10530510974: 165 2 71 897 7 74
+19311328: 7 19 312 2 5 476 8
+38203200: 1 33 621 9 8 4 6 3 8 5 9 1
+4298: 26 38 1 1 536 13 7
+9: 6 3 1
+476716593: 94 4 8 21 85 9 65 91
+15346751: 2 281 778 44 985 6 5 1
+136465624800: 23 844 5 5 87 4 101 40
+4339392: 5 263 61 3 429 1 3 24 8
+1867: 207 8 9 9 65 6 1 8 7 60 4
+48096: 6 4 58 69 318 76
+7462: 6 288 5 766 7 7
+219840: 29 7 74 3 57
+4570854: 4 3 2 8 1 371 5 1 5 22 2 1
+1916314120: 3 7 8 50 8 5 3 5 7 952 5
+313476158: 5 5 3 3 57 274 6 8 1 3 2 6
+4031537: 3 224 8 313 486 537
+5296527: 6 216 84 284 63 432
+17618176: 49 4 113 387 75
+106593: 1 99 7 1 591
+3544982: 4 9 6 310 3 5 3 3 839 6 7
+55786031: 619 844 5 3 9
+6681369: 86 6 492 492 7
+2081649: 1 24 108 3 758 3 3 51
+583401: 20 68 67 515 91
+765: 21 11 1 683 49
+35008: 981 35 672
+6139056: 9 358 2 8 633 496 3
+218772: 604 14 354
+79272427444: 5 157 943 97 6 4 46 4
+7476: 6 197 4 9 92 21 55
+3743524: 75 6 259 66 4 20 4
+308: 7 2 28 50 6
+109200: 431 5 4 37 79 48
+27530432: 5 4 9 1 586 87 9 1 75 2 2
+5186: 7 31 22 410
+10671946: 83 751 74 2 57 3 7
+18535: 9 92 25 3 4 7 794 8 2 7
+15185318019: 2 4 3 98 389 8 2 7 8 4 8 2
+13434460: 489 723 426 398 1 26
+61092: 7 4 94 663 36
+7864: 3 782 147 51 8
+88664: 6 5 5 77 8 3 5
+26730891710: 2 97 3 3 1 6 5 8 9 170 8
+1980742227: 4 2 21 257 64 677
+535250: 9 69 54 5 68 836 2
+71500: 9 7 44 3 650
+79492328: 9 14 597 53 79 73
+55528207: 6 3 88 7 5 7 2 2 9 391 5 3
+19406: 501 418 8 561 13 62
+593120289: 7 1 257 480 9 601
+217368: 304 1 2 5 580 243 855
+1025388000: 494 9 50 7 3 650 939
+5395177603750: 61 6 644 235 49 8 8 17
+15645: 707 38 819 7
+94248: 88 2 29 72 11
+203694: 746 91 4 8 3
+868: 11 68 4 1 705 39 6 35
+531224732911: 3 92 3 8 7 2 5 685 34 8
+149: 34 1 4 9 4
+483907237: 1 17 5 83 2 16 6 2 56 37
+4114852: 9 76 7 6 46 20 1 55
+683715220019: 6 836 9 2 521 99 8 3 7
+790005: 52 15 9 9 4 6 2
+1545547688: 954 9 199 5 172 2 9 6
+39830132628: 291 62 682 83 39
+33244: 401 81 128 1 1 635
+464640: 6 5 44 735 49 2 5 2 1 2 6
+3161: 17 277 9 494 8 13
+3214813568: 8 8 3 579 22 136 609 8
+186447921: 4 97 6 8 154 41 9 9 8 4 1
+122487979072: 8 81 763 8 59 9 35 6 8 4
+96765: 676 5 2 71 63
+5349340: 6 4 502 2 37 6 28
+507905413443: 21 96 651 9 9 801 43
+2018101584: 68 633 98 971 300 81
+863191323: 2 1 8 898 2 4 4 87 13 24
+152008: 3 1 13 3 666 2 2 53 3 1 1
+12296671608: 649 2 12 387 34 276
+11523: 114 443 843 8 317 6
+6337929312: 565 817 74 66 208
+61160822: 6 7 8 1 2 297 6 30 7 7 60
+141740131: 2 1 4 4 118 5 2 7 76 64 2
+241: 79 62 6 4 92
+354284804: 3 5 8 6 74 610 8 7 1 9 8 4
+2327334: 736 31 2 2 51
+3880868: 70 9 187 9 7 6 48 9 7 5
+1575: 2 78 281 47 1 3 4 344
+281620664: 700 6 4 4 68 9 2 5 5 8 3 8
+12931286: 5 840 1 34 6 75 5 2 7 6 2
+100986920: 68 7 5 3 6 3 3 648 1 9 4 8
+153681726432: 640 340 52 39 3 87 8
+48136: 38 2 8 135 1
+34660800: 2 598 8 87 83
+274002549666: 5 477 5 9 6 25 42 7 6 69
+15363562: 2 19 4 8 4 5 54 8 9 49 2 2
+7814976: 311 75 4 2 9 4 7 58 992
+1350: 6 1 8 859 2
+6868: 40 4 4 5 1 3 1 22 4
+9499727921208: 2 5 48 82 4 678 564 49
+520716091392: 82 4 42 32 8 12 7 838 8
+20184982588: 746 92 758 5 90 97 4
+392931: 24 3 96 1 5 7 7 5 54 7 81
+4708422: 1 6 88 90 4 47 23 306
+151931: 4 18 88 56 592 8 6 5 31
+29256: 7 8 9 48 53
+914310: 3 9 2 4 3 557 79 8 3 3 9
+22631: 2 5 6 377 8
+903959: 82 97 505 10 9
+942256553: 2 9 700 32 6 478 8 9
+262941: 16 12 9 44 105 23 6 3
+33522495: 68 6 453 1 492
+9175017864: 400 9 5 97 4 8 2 5 7 3 3 8
+6309005750: 2 4 5 7 270 30 3 5 74 4 7
+2612: 1 50 50 62
+2516743480: 6 30 84 4 6 5 9 63 7 5 80
+78682: 6 8 562 3
+15851677: 378 19 286 8 52
+29341396: 581 505 8 85 4 8
+3767822: 7 666 1 8 101 926
+6786: 5 930 9 9 5 835
+1770121: 19 77 687 820 596
+107800: 3 50 56 40 6 20 381 2
+4419608: 6 7 2 32 1 7 4 677 6 7 6 8
+178319968: 158 188 60 950 1 8 66
+530834448: 132 8 229 345 274 8
+21216360: 261 430 3 66 63 732
+85499671935: 871 3 168 678 926 82
+18754: 78 5 2 24 34
+4809952: 4 7 4 67 6 11 736 920 8
+37366682320: 6 8 417 48 6 4 8 4 4 8 2 8
+7201996: 1 5 6 84 6 20 929 69 1 2
+440448: 50 96 1 597 592
+1788: 3 544 1 97 59
+42723450: 5 8 10 7 18 45 385
+45030: 3 2 4 67 5 41 74 79
+1124: 574 398 99 8 45
+769473939579: 85 497 9 939 56 1 19
+12981784: 23 67 78 9 20 6 6 2 88
+86400: 3 21 9 80 5
+376288: 5 6 9 2 771 3 5 3 8 7 4 88
+2270030: 5 8 22 9 77 1 5 2 67 68 2
+544983176: 28 3 879 2 317 6
+1274903: 16 8 10 996 6 17
+10296: 9 6 7 98 6
+2162553626: 4 5 29 4 62 6 1 1 484 6 5
+1270768: 324 41 835 15 6 58
+4814730: 3 24 42 4 2 469 2 877
+454974: 1 6 422 65 921
+1393343: 5 84 4 4 978 671
+1771: 1 17 1 98 7
+830772: 8 56 650 3 462 55 3 55
+932431500: 9 1 3 2 4 9 23 5 2 286 9 7
+193413774: 3 1 11 957 7 62
+10685783: 2 7 2 15 53 84 10 983
+7351: 6 466 5 2 41 8 390 8 1 7
+464223454: 5 61 38 40 19 604 45 4
+272458152: 5 8 8 7 554 9 7 8 6 9 17 5
+3267: 6 749 3 41 82 56 823
+10900: 6 918 3 432 1 4 6 2 2 2
+1553154: 9 301 479 5 762
+10520160: 93 12 20 1 60
+1356661105: 710 1 674 7 9 45 205
+66658788: 45 26 7 7 13 3 7 909
+40637814: 14 2 7 8 4 92 37 1 2 5 1 4
+5092551: 605 662 6 4 551
+1409558: 292 165 7 3 8 55 677 1
+725720: 5 38 8 262 367 220 8
+1486131288667: 7 879 4 966 834 335 2
+1086454512: 38 6 96 9 3 11 5 482
+78490168: 80 91 75 2 97
+9961171584: 4 8 55 189 15 98 772 8
+50675: 50 494 63 34 84
+64593360: 460 6 4 780 3
+977697748: 4 2 134 3 70 1 4 4 3 398
+14992362: 314 4 1 373 126
+325065: 730 24 431 83 5
+2552431540: 535 62 270 95 3 3 31
+7751121992: 933 87 83 932 61
+15824720: 68 15 6 580 4
+2027489: 202 74 82 5 2
+8272897202: 6 7 300 110 776 3 53 5
+400998852: 6 89 3 194 802 5 44
+32459698: 983 619 33 268 3
+197395471: 3 9 4 153 6 3 18 4 775
+67072: 14 595 45 9 8
+606915: 595 64 589 3 530 2 53
+290532373: 5 8 10 1 9 5 9 8 6 9 373
+3653928: 6 888 2 4 8 684
+926590: 54 92 8 70 748 566
+1501440: 1 912 917 2 41 75 9 5 2
+2635908: 1 30 21 6 418
+125664622: 7 3 66 269 6 3 7 8 73 5 8
+9503081: 82 1 772 45 89 148 1
+401428: 90 49 91 6 112
+175579335: 9 63 893 724 204
+2337090: 176 21 9 3 6 4 4 7 10 3
+933120000: 5 200 2 93 9 150 8 8 4 9
+1534376844000: 47 5 950 252 3 913 45
+209253870: 94 15 573 7 37
+21946956: 6 12 8 6 84 269 89 5
+485698: 67 7 6 41 698
+34742623: 2 5 8 1 556 44 5 23 8
+67806: 9 793 329 68 9
+2888317: 8 6 6 8 3 1 7
+84351: 751 6 4 860 8
+3126: 148 372 1 1 6
+881650: 151 502 54 4 25
+71904563: 5 8 4 1 684 6 9 9 51 9 9 2
+3232302: 43 18 58 24 26 3
+1099735275: 89 6 8 6 665 152 7 7
+7535827: 34 4 81 66 17 40 67
+53907909: 573 488 94 29 7
+2920243911818: 549 63 67 6 793 818
+13047072: 85 64 7 457 5 4 1 46 3 4
+7857900967: 4 7 1 80 7 24 3 26 8 1 1 7
+6530516834440: 85 9 810 7 41 41 48 8 5
+30394646: 2 234 9 136 6
+1591: 2 2 5 9 40 22 7 656 686
+138965476: 3 33 2 61 14 76
+98757889: 98 42 33 7 857 34
+832: 262 499 71
+5780218335: 28 196 168 19 205
+980440: 1 6 26 8 5 607 3 508
+196551061: 4 356 4 7 1 96 11 9 5 6 1
+102501: 238 20 5 107 9 21
+244548617: 82 191 211 29 74 3
+14126: 3 880 2 8
+21217980: 245 42 20 42 49
+1539: 71 979 489
+24072727: 24 9 20 966 5
+122829: 7 688 36 1 28 2 7 3
+33880: 4 1 9 4 20 31 8 5 6 34 2 4
+693689: 78 12 597 6 687
+166667001: 5 2 9 3 1 1 3 6 13 35 46 1
+26021672: 3 17 51 5 6 636 7 29
+3778316: 8 4 5 9 2 552 6 1 4 9 1 3
+1989521: 6 460 190 69 659
+426461: 98 9 69 65 7
+10535: 550 941 8 7 7 7 9 8 6 2 3
+7325230: 539 906 1 1 3 5 3 6 9 2 5
+95972184: 590 9 58 4 354 28
+19888329524: 5 5 486 8 7 2 4 93 524
+80458032: 6 3 8 6 2 2 5 1 931 72 9
+14979061080: 9 50 4 3 3 9 17 453 40
+12310204: 8 7 919 1 4 4 210 15 5
+27168: 325 9 80 420 7 8 8 1 4
+283810: 4 26 7 59 130 20
+15288: 6 98 21 7
+39578752: 537 11 488 4 37
+119414499: 67 522 7 7 3 72 2 18 81
+1229760: 427 60 6 8
+114853: 5 89 7 51 8 7 7 12 3 85
+1776888: 225 51 575 3 696
+446732: 4 896 7 78 4 7 6 6 121
+115473: 2 692 4 40 41 17
+413982: 29 77 302 5 52 9 455
+760: 23 53 2 5
+262818: 4 59 322 747 172
+137256: 3 250 4 87 399
+833499072: 72 3 103 669 4 14
+162764: 66 922 638 1 67
+37031358: 436 4 3 774 108 98 4
+29303143: 5 5 268 14 142 23
+8295930890478: 489 261 700 6 65 478
+13823: 691 3 688 3
+4418409: 2 54 85 5 9 39 918 75
+9233863862: 273 8 6 61 8 33 1 7 5 8 4
+915967437: 2 9 6 1 7 391 1 3 8 83 3 7
+96714: 9 671 3
+47480011: 90 4 683 46 1 739
+3756576: 6 9 9 119 5 41 8 84 2 2 8
+28389687: 45 7 2 8 82 45
+1616436160: 367 643 64 428 16
+11109740628: 2 611 4 92 5 9 549 948
+101791850: 66 8 9 74 84 12 32 3 71
+8024040087: 314 586 124 719 87
+60552501: 8 688 87 504
+75469: 3 4 6 536 4 1 5 79 8 3 6 7
+210312: 187 6 59 8 7 285 381
+11960603: 112 1 5 90 2 39 3 59 5 1
+747758: 18 9 749 9 82
+314046: 9 4 9 6 5 8 7 5 3 3 189 73
+8180462893: 4 284 1 753 9 72 42 43
+10471428086: 29 90 674 2 573 950 7
+228472767691: 4 30 59 15 86 3 90 6 91
+4519945122: 21 5 177 3 7 1 1 8 8 9 98
+1438503: 5 3 6 3 54 79 3 94 6 7 8
+8281412: 522 4 5 49 9 179 1 316
+34987680: 8 9 432 91 1 1
+50863962662376: 61 8 783 822 61 9 4 77
+3729174244285: 25 69 8 443 4 61 283
+6925762: 6 908 9 168 62
+565: 19 8 224 137 3
+3223138940: 3 82 96 78 6 5 844
+38857812: 2 9 6 2 910 899 42 502
+2757927: 2 75 79 30
+1839195820: 2 836 75 5 1 1 1 44 665
+4656: 3 25 6 5 16
+919605: 3 2 241 69 607
+100101144: 833 1 6 73 7 7 56 6 4
+26196: 54 6 6 8 229 2 4 6
+35070050551: 55 1 78 272 850 3
+177408: 528 8 42
+11159680: 828 363 937 1 1
+35744096: 1 1 8 4 9 66 85 7 2 7 461
+1673147: 151 9 2 5 7 473 1 48 1
+2056860: 53 993 8 7 96 39
+3430: 1 2 7 28 70
+4779622: 9 590 64 5 9
+145: 5 7 40 93
+2260565309: 8 7 4 5 6 49 9 13 4 8 5 21
+8628050: 64 23 422 47 52 5
+680746: 74 9 35 8 97
+83966400: 56 7 45 7 170 4
+697271660: 2 311 70 3 185 4 43
+29168583: 415 925 769 7 3
+1065893: 5 36 41 4 85 6 9 1 2 3 53
+2946005244: 387 3 32 8 2 59 1 2 84
+1711742: 418 5 117 7 32
+1359793873: 6 187 28 2 929 6 1 307
+1095: 8 1 2 7 95 8 2 7 2 2 99
+208060: 9 7 4 485 412
+909765: 5 7 1 24 5 1 3 802 49 6 3
+14510: 8 9 75 131 15 9 3 9 9 5 2
+4008: 94 4 356 4 6 978 96
+4106: 1 8 1 8 7 4 3 6 468 23 6 8
+17827481: 6 939 84 1 9 1 275 7 56
+6342730: 4 45 60 98 53 38 54
+5453100: 974 91 70 69 55 26 73
+831364551: 8 307 6 6 45 52
+189590: 10 9 5 4 777
+198227: 7 54 6 12 5 38 184 8
+1250: 5 2 125
+318: 2 8 2 298
+1019408104: 8 3 4 5 940 810 4
+7533962: 753 3 851 65 5 42
+17001651: 92 12 73 1 2 8 6 48
+2133720: 3 7 5 8 3 127 1 7 45 5 3 2
+566036: 3 1 6 867 8 5 2 16 69 1 4
+226538: 36 9 4 1 1 9 9 4 3 43 57
+116722310: 86 46 45 2 3 80 15 68
+39860: 3 985 9
+202068: 140 5 637 534 108
+104638: 1 552 90 403 1 38
+927943470: 386 3 9 3 6 55 3 8 934 8
+506844: 56 3 1 6 9
+1498176000: 450 85 51 96 8
+44: 8 8 15 6 7
+44031702: 694 9 949 33 2
+642: 2 22 3 538 77
+1688221895927: 996 226 184 68 79 75
+6901652: 2 7 6 19 44 99 2 315 5
+11591991: 8 4 1 958 95 992
+89696: 73 61 2 5 4 11 801 7 5
+712031: 6 126 9 1 2 8 69 587
+1127376: 4 28 72 1 73
+80440: 287 7 5 4 60
+376450: 6 11 6 29 817 82 5 9 5
+15075: 7 8 3 5 67
+25320: 5 149 99 2 10
+2853538: 5 7 5 35 38
+213: 2 2 4 7 198
+591: 15 4 9 9 339
+7237: 3 1 45 8 232 6 5 1 6 4 9 4
+914908: 84 71 54 2 40
+61742738: 7 102 26 316 34 264
+1521900: 814 20 1 624 5 9 9 5 2
+1339089052: 10 7 976 4 5 42 7 7 4
+1284: 4 51 3 1 5 63 6 5 5 5 1 53
+372674: 62 10 6 8 62 2
+5861424: 69 193 46 496 19
+1509202: 2 6 604 49 50
+57354947: 7 210 622 39 596 93
+235193400: 7 897 587 3 260
+28320: 534 8 1 7 737 182 4 3 6
+989: 580 9 43 357
+702: 631 59 5 7
+673897660: 62 99 600 97 658
+86962659: 391 552 493 402 9
+496776908: 8 10 16 1 813 8 9 53 9 2
+95673204678: 9 56 7 313 7 2 5 4 678
+139138884: 4 7 64 6 3 14 5 4 9 129 3
+8175474: 4 23 918 4 7 4 34 67 9
+12548890054: 69 7 6 8 2 9 5 6 710 5 5 2
+122191598229: 243 1 383 196 40 5 5 5
+794402: 4 1 1 7 8 3 34 9 7 634 7
+1978122947: 4 4 6 8 4 6 8 1 52 6 4 116
+89494: 34 62 928 406
+42631: 423 24 6 232 69
+70753: 90 8 722
+18287: 66 4 3 26 9
+1083: 68 172 4 83 32 8
+1564515: 4 8 8 3 4 9 1 819 525 6 9
+16192: 647 24 664
+98101543: 190 51 3 839 82 4 7 9 6
+44550: 5 6 9 18 25
+2866080412828: 9 951 6 67 1 1 1 8 9 4 2 8
+13868515: 969 26 47 2 738 6 6 3 1
+2687180: 93 5 7 28 14 4 5 9 8 35 4
+43379: 905 148 5 41 1
+341242: 6 5 517 1 22
+24101: 4 82 61 3 90 6 550 7 1 6
+28321583041: 7 8 5 8 124 5 1 83 8 6 6 2
+7504788: 487 4 259 478 7
+7859: 40 194 95 4
+12320: 7 526 23 44 2 5 6 4
+81954: 9 9 9 51
+209138024: 3 50 518 28 761 7
+98783524: 5 839 303 9 4 13 21
+64637: 10 9 1 233 303 38 1 3 2
+24247: 647 8 4 7 6 42 6 1 9 9
+2383: 7 1 7 30 1 72
+23101374661: 87 162 6 28 7 404 915
+5184351861268: 23 9 7 499 53 58 68 6 4
+51634198600: 496 9 9 7 1 9 6 1 5 8 17 5
+5885880: 3 4 448 392 33
+3530255: 43 1 9 7 8 5 4 56 5 1 7 3
+10868904637: 2 905 9 3 7 547 6 63 9
+176470: 17 548 8 672 5 305
+48834240: 3 69 37 9 92 86 338 8
+3328: 3 19 7 8 60
+4615188176: 53 5 966 60 5 861 4 7
+1547656897: 329 6 14 1 73 8 7 7 8
+43660278: 9 8 96 872 15 298
+7896481: 17 6 551 77 54
+1550825: 1 707 6 73 5 1 6 284 7 7
+57459046: 8 88 2 31 408
+241290167: 1 1 83 9 3 7 45 1 7 8 8 9
+22656: 11 3 3 9 6 2 98 20 64 2
+4908: 638 65 5 344 994 55
+39755528165: 321 85 323 8 6 3 816 5
+25872: 7 299 1 7 4 3 4 1 49 563
+7539644: 79 942 56 7 644
+2045840: 214 10 956
+1463127: 43 859 478 33 6
+1857547: 7 613 224 34 22
+816791: 6 75 58 16 4 969 2
+700722688: 9 22 76 26 85
+1771875: 607 82 845 6 35
+213149: 8 4 4 240 8 8 96 412 1 1
+691410: 9 546 96 562 570
+12749528853: 7 589 4 42 88 53
+52359048550: 2 289 21 714 5 3 6 8 7 2
+6594: 2 78 57 19 229
+40421: 81 9 449 5 6
+69625: 2 8 1 9 96 5 48 8 9 58 8 6
+93888: 96 7 811 553 64
+175033602122656: 6 5 74 730 54 78 265 3
+214578062: 1 563 9 5 273 62
+6838549: 519 27 9 74 457 3 1
+88818850: 5 6 8 818 850
+79622678830: 79 622 678 830
+1994857: 50 992 253 40 649 88
+2669552124448: 3 2 101 716 391 92 44
+8703131580: 32 64 606 45 44
+639: 1 9 7 8 9
+6875757346: 6 7 5 5 7 111 60 9 4 13 7
+28734: 9 558 862 4 1 5 89 65 1
+1199377242: 1 2 58 105 2 454 5 34
+14583595697: 7 7 6 1 6 2 98 1 42 5 6 95
+255514: 8 29 90 7 57 2
+1332787639: 222 13 127 3 6
+1025: 2 70 4 603 346
+690201600: 1 797 63 3 836 320
+237040: 247 954 619 295 488
+264831001: 899 3 3 2 569 2 86 19 2
+11250442: 41 8 343 39 3
+3652264: 28 69 9 791 30 44 49
+4464134560: 9 62 8 134 560
+705927: 3 19 706 31 7 127 61
+1974983661686: 72 2 8 9 7 7 9 89 8 438 3
+1501191224: 6 570 85 9 75 913 2 52
+1786959: 2 6 92 6 3 6 19 5 5 1 8
+48484841: 21 1 26 888 41
+948478: 4 4 65 228 8
+739: 3 3 72 1 7 6 8 6 129 5 9 2
+46278712: 764 7 3 1 1 8 2 705 7
+89487345: 3 808 41 40 6 57 9 7 5
+281705: 375 4 741 697 163 6
+58010526: 2 7 5 709 964 9 5 9 8 1 6
+30219: 8 787 19 2 9
+2349312: 9 525 82 6 7 29 6 9 7 69
+112416877: 269 9 406 996 52 297
+177048: 7 39 950 553 9 4
+430821506: 5 593 860 912 324
+47921412: 49 774 5 742 1 78 6
+32809470: 13 28 96 1 335 930
+76602985: 5 760 1 4 4 9 2 8 5 358 5
+225225: 65 93 8 664 25
+1304618199432: 9 1 4 1 1 6 9 597 6 9 429
+16545426921: 97 5 9 7 34 4 6 980 9 23
+5950032: 7 205 60 7 117
+67245: 210 15 9 1 32 7 2 69 3
+59200: 46 2 6 50 4 4 25
+67245776: 44 50 5 8 365 761 11
+25506908: 3 943 98 7 92
+9938151: 3 32 64 38 151
+180615: 43 70 4 1 15
+1290: 22 9 5 8 50
+50484: 46 1 5 967 200
+17390: 1 4 682 68 5
+343299: 2 168 21 6 96
+5395194: 589 107 430 2 906 9
+2434784: 36 2 76 840 88 4 49 7 9
+23359266: 3 1 2 823 9 28 5 75 4 54
+2246422: 4 2 7 28 3 85 8 2 2 9 346
+150500: 9 4 1 4 5 49 8 97 25 1 28
+334491518024: 95 47 6 3 8 5 5 7 180 2 2
+153958608: 3 325 178 293 9
+13183703: 547 241 6 9 934
+9984: 358 58 3 8
+2245578472: 7 693 9 689 465 8
+51759048: 1 5 5 5 6 9 142 3 25 8 6
+113093211430: 72 6 4 7 842 39 1 523 5
+29570820: 6 6 232 748 3 1 9 637 6
+22789998049: 8 4 72 957 3 27 500 7 7
+1592: 8 8 5 8 6 5 4 5 352 320 5
+574464: 72 79 54 700 17 99 4
+854482682: 591 2 93 346 3 4 9 10
+1266: 2 2 40 7 6 7 40 93
+102720: 4 143 1 89 76 6 3 2 8 5 4
+5498420: 2 62 735 86 5 80 4 5 4
+484: 3 75 55 193 6 5
+136445415: 71 369 21 4 62 928 95
+5852046: 4 251 2 7 831 6 4 97 36
+7987: 53 93 5 50 3 1 434
+978280: 7 1 35 534 23
+3830858: 65 60 982 73 985
+17605849: 48 5 85 4 977 309
+1129178: 57 63 36 71 6 12 868
+977977286: 1 8 6 3 1 6 8 25 9 6 643 6
+1091440: 7 432 9 93 2 9 7 2 8 7 1
+827200: 7 731 63 79 940
+234110306: 6 9 6 1 5 2 779 521 7 5 4
+54409: 7 543 54 90 49
+11342875: 406 776 6 6 560 290 9
+907120096: 23 580 170 4 93
+20087379: 8 9 5 63 2 2 211 96 83
+19843216: 1 8 31 1 4 8 8 265 8 1 9
+7074: 80 85 5 41 8 85 61
+1467: 11 80 53 544 2 51 40
+3529335806: 1 38 1 880 87 6 35 80 6
+4955: 535 279 86 91 5
+8982: 64 6 7 3 9 811 6 7 80 1 5
+119100: 2 5 7 9 516 13 933 75 1
+1247424: 42 3 5 12 11 2 7 3 4 9 8 3
+295010: 4 342 85 77 8 5 7 3
+13999936: 54 270 4 6 3 72 2 5 1 6 8
+3781425858: 8 17 8 7 19 1 52 435 3
+1199226: 48 99 6 3 30 8 42
+430403: 5 436 515 890 3 5 4 2
+1727218080: 9 10 973 7 4 474
+19699486: 8 88 1 8 8 8 85 76 3 9 6 9
+8026262658: 3 8 7 3 82 8 5 2 823 9 8 1
+60419990: 7 1 96 1 569 36 1 158
+2279204603145: 7 370 88 4 2 2 38 3 1 4 6
+273070163: 650 167 14 8 3
+1139895: 28 8 30 21 3 41 95
+1651777: 73 4 9 51 1 3 8 438 8 9 7
+1109: 347 668 4 1 7 83
+73400145: 548 98 1 68 7 39 5
+3816: 90 4 71 523 2 2
+2267: 4 7 28 2 9
+1298154: 4 94 6 9 6 319 3 9 2 444
+831: 831 1 1
+417144: 9 6 38 3 728
+39570: 721 292 39 1 62
+14878260: 8 60 246 9 9 14 49 1 5
+2479: 250 5 798 431
+38663243: 863 560 5 48 16 75
+9924155381: 1 68 1 2 4 2 97 8 19 578
+1548537: 802 965 2 655 22
+123649399765658: 30 7 968 6 1 7 5 5 803 9
+314502250: 6 2 567 299 254 2 907
+28209725: 66 2 5 631 26 8 9 4 21 5
+382: 2 24 1 159
+1771797: 6 98 2 599 3
+4898: 676 7 166
+120108: 626 21 3 1 596 3
+2823486937551: 403 355 276 7 8 9 4 7
+855964: 419 9 80 81 2
+15161: 938 738 9 63 14
+20228072: 372 7 971 25 8
+586656028: 6 7 8 4 1 72 970 25 7 4
+66833: 35 8 848 75 8
+14670386: 8 99 5 185 1 492 421 6
+25172148: 71 364 974 84 8
+71486758: 7 39 6 8 4 7 8 35 8 69 9
+7682701203: 59 16 201 3 771 543
+5119056: 164 5 66 2 99 6 8 57
+848: 89 8 5 737 9
+72088830: 3 164 296 2 5 99
+1358173656: 54 721 51 684
+30095: 6 4 3 233 95
+41634059: 256 6 16 493 540 59
+689088438553: 3 5 8 9 8 8 6 877 5 56
+7385274: 1 56 350 5 51 74
+7808702860: 780 5 84 6 2 540 5 92
+1567: 5 2 210 34 63
+68805: 1 60 541 93 99 1
+11914782024: 517 4 835 69 24
+45284754972: 9 9 73 9 2 2 1 609 9 4 2 6
+231415128: 8 6 5 3 4 9 994 36 29
+23285: 9 443 559 23 32
+68950: 9 97 25 524 298 6
+59942416: 2 7 717 82 14 6 14 7 5
+3670236685: 5 66 5 1 8 9 5 9 278 6 2 5
+248914206999: 5 815 75 11 3 3 8 428 2
+9314886094: 3 1 939 8 4 577 32 4
+114310: 2 8 85 60 710
+42194693449880: 282 42 766 7 249 6 80
+591177: 590 7 4 7 6
+26791128: 26 3 6 6 3 294 39 7 3 58
+4787484: 7 9 227 89 78 2
+7230433: 39 35 4 4 528
+61361: 895 62 470 43 1
+219013: 345 89 541 35 7 2 44
+9396082199: 29 540 13 70 60
+3098: 21 7 55 9 5 3 3 824 9
+58612: 52 5 66 57 4 378
+620440: 32 22 881 2 214
+142784: 9 712 50 5 184
+16847: 8 9 991
+480676824: 989 6 19 2 3 3 3 9 500 7
+102928571: 4 9 76 8 7 3 6 1 6 4 4 5
+6638639: 9 4 4 83 7 6 8 8 6 2 45 7
+253052285: 2 2 5 1 7 58 3 1 6 9 2 2
+975460: 7 82 79 29 5 6 2 41 20 1
+40550439160: 640 720 44 5 88
+72: 7 2 8 4 7
+35286456807: 741 7 2 936 2 6 6 6 6 9 7
+1115956: 5 78 291 246 956
+5940: 1 22 3 9 1
+10970372: 8 2 3 3 970 1 3 2 257 70
+3831314: 509 7 3 825 4 3 2
+1466166947230: 6 880 5 97 90 719 23
+70047556: 55 5 933 3 6 7
+266562: 7 20 2 3 8 5 5 100 27 6
+3330156: 5 5 4 2 2 84 1 1 540 6 4 1
+337800204702: 777 410 68 9 9 9 71
+904201431: 597 18 7 5 2 14 2 5 1 7 3
+6020880949: 16 4 731 9 8 5 6 9 2 5 7 2
+100287: 8 6 7 9 5 780 2 40 7
+254232399: 101 2 737 38 6 33
+172767: 2 73 9 58 1 99 4 19
+124605: 6 1 1 5 7 18 5 82 75 5
+19308674: 412 55 1 468 866
+138834456: 48 204 61 8 687
+974: 6 7 91 867 3
+16829693: 9 8 2 345 49 2 643
+2447295: 9 906 76 3 867
+223900: 75 3 61 47 1 4 269
+204439892: 204 185 87 70 97 890
+129960: 722 6 30
+7818: 7 5 26 239 56
+543160: 41 856 1 3 5 1 2 3 73 5 8
+1280973: 47 19 2 782 503 904 5
+1491061: 292 6 173 5 6 5 93 49
+444: 53 8 8 8 4
+1246270: 92 65 7 52 4 974
+37587631546: 45 8 6 96 61 645 4 7
+727833628271: 6 8 648 780 942 3 3
+37672: 4 120 7 49 2 5 111 3 8 1
+328305: 319 114 13 9 887 6 1
+1119972: 56 1 5 3 6 751 6 3 3 12 7
+38556736: 547 55 421 28 64
+4139: 19 1 34 6 59
+51304908: 2 36 686 8 92 6 70 88
+415654482512: 59 6 5 71 68 78 69 51 2
+337: 4 89 2 1 241
+488198112803: 7 945 1 499 6 8 123 6 1
+7926649: 32 67 696 2 650
+838798528515: 9 7 7 3 61 599 4 8 192 2
+2070: 76 30 2 122 9
+43560: 9 968 5
+1396614: 700 69 1 4 94 440 54
+729830: 48 8 1 2 9 5 4 901 7 2 6
+278208: 6 3 46 1 96
+7377552: 86 5 3 48 563
+2770488: 1 61 8 56 717
+79166: 935 6 7 312 1 1 2
+146929752: 74 42 10 36 787 6
+3506742: 2 6 96 761 9 6
+327149: 130 4 40 583 669
+3897857531254: 834 659 467 12 53
+1485: 3 1 2 3 67 7 10 904 39
+8008782: 4 77 26 780
+5025: 8 1 4 309 6 5 7 8 2 9 72
+48064516748: 2 9 155 7 8 7 9 61 7 5 9 8
+36965024: 7 940 26 6 464
+19829: 629 5 6 2 934 1 4 8 9 1
+312630: 263 9 2 11 6 1 182 1 4
+151281: 3 7 3 9 9 431
+86093: 36 814 9 74 116
+3543575729: 3 543 508 67 729
+2031: 8 931 7 397 1 688
+127620: 57 2 58 6 90 441 60 3
+20114468: 80 9 226 468
+83861098: 5 8 1 752 7 9 5 4 6 2 5 58
+3851559: 7 842 81 56 495
+11570: 2 2 283 41 35 9 9 9 63
+19356050: 63 756 1 47 406
+26201556: 5 279 9 201 51
+131400: 80 8 1 32 3 73 5
+69779914: 8 209 79 6 534
+56385249: 9 2 8 9 31 1 6 7 1 8 41 81
+391488: 97 97 3 359 4 2 646
+1752: 54 5 2 3 793 418
+25788: 5 35 7 6 2 19 84
+1065460: 42 6 62 334 29
+75864: 19 756 526 1 6 1 58
+496098: 5 992 8 4 14
+18468976: 159 801 9 145 616
+816779: 2 770 3 462 992 89 24
+397937709179: 45 3 1 8 2 41 549 1 76
+24504942: 6 1 4 8 86 796 37 406 3
+70432: 4 31 663 6 34
+972028615: 75 6 8 9 8 99 2 516 3 91
+202732: 503 403 23
+8703049: 1 65 551 243 4
+3887530: 696 6 31 127 1 1 6 5 10
+1321400406190: 949 2 56 372 2 80 696
+4874: 2 3 3 539 23
+49203073: 273 82 9 154 73
+22784013270: 1 73 82 87 3 743 758
+42247702: 8 4 421 4 9 3 3 608 1 5
+178386975: 435 701 585
+113606: 7 811 957 8 8 6
+15336: 1 709 986 9 81
+6509224: 1 68 387 76 24
+1875648: 11 197 3 9 3 91 8
+148130: 1 9 4 811 429 1 5
+103482: 39 27 3 26 6 55
+5626: 2 477 9 690 600 16 9
+13603: 1 1 657 314 65 8 50 9
+53037923: 9 66 744 9 31 26
+919476802: 4 3 7 39 28 5 8 8 979 2
+220104: 223 987 3
+23182: 1 8 27 660 8 74
+64056: 9 854 37 877 6 5 7 1 1 6
+4768943: 47 6 8 843 18 82
+13254: 20 8 3 845 7
+19404: 97 99 99
+453535797: 587 887 35 3 871 1
+913681954: 5 9 5 37 83 8 21 6 97 7 2
+16186022: 59 860 83 4 3 9 3 9 3 2
+75601495: 2 536 6 7 5 65 2 69 497
+10657768: 8 93 8 835 3 1 5 6 281 8
+91327: 1 7 1 74 329
+78946520: 9 2 2 4 9 2 1 19 5 2 2 953
+9691100842: 2 191 815 7 25 2 842
+474567324: 6 4 1 7 755 5 6 2 3 7 44
+8313522975: 9 6 68 5 676 2 287 3 7 5
+67186926: 6 71 85 1 688 238
+2216004: 7 49 82 434 37
+193344: 14 16 55 4 325 6 53
+3290793: 861 6 637 8 43
+539123: 4 582 4 23 3
+3147660: 7 177 9 57 6 402
+112897114: 6 8 5 8 5 5 8 1 7 9 42 442
+165241: 235 874 149
+58151055: 81 5 5 6 683 13 3 11 1 5
+660: 7 3 6 390 1 29 2 86 93
+340760: 85 5 7 6 1 1 47 8 7 7 5 8
+262782: 55 7 24 641 612
+81: 6 4 7 3 7
+215864: 1 79 91 4 27
+9073661334: 37 1 7 993 71 5 2 2 4 9 6
+1132824588143: 92 4 613 287 7 20 8 6 4
+1644381394578: 86 33 22 2 41 9 962
+716: 3 210 7 72 4
+5448631847459: 908 1 6 3 1 847 459
+19943638176: 1 950 284 3 7 44 24
+2656075: 3 4 8 639 78 1 9 5 49 81
+22379659674: 74 598 844 3 7 1 640 4
+60202233542: 172 5 7 22 3 3 538 5
+9319755: 931 96 9 3 60
+74266987: 2 740 6 6 9 61 26
+214333: 6 287 837 7 7 27 571 3
+843329750: 724 5 2 419 278 70
+3812769: 99 534 8 4 44 46 619 9
+500290686: 6 11 7 5 1 4 752 2 3 4 2 9
+1724509710: 246 2 53 761 3 198 7
+178688: 8 1 456 6 2 64
+1321716: 682 34 1 19 3
+581691040: 3 6 6 5 6 1 5 2 548 446 2
+535080: 70 28 3 13 7
+35446296: 36 211 6 4 55 7 37 892
+22672416: 3 87 720 1 444 52
+434127238: 2 2 8 560 70 303 1 346
+75857310: 5 4 285 318 93
+996042600: 4 426 90 5 7 491 92 6
+9752049: 45 2 8 5 903 15 70
+844706961: 74 6 8 8 17 852 5 4 9
+530832796: 1 4 49 98 94 5 84 8 77
+156134: 2 8 5 5 1 9 70 1 636 9 94
+443270: 684 42 22 321 935 6
+7068261: 1 3 518 4 62 6 551 26 7
+19278860274: 3 78 51 8 60 274
+1664: 9 3 7 8 816
+14995412715: 29 1 5 9 7 7 6 7 8 3 27 15
+33101213513: 61 84 827 8 29 669 6 2
+1577: 882 135 561
+1095: 8 5 9 3 231
+159498825: 36 777 60 7 531 77 95
+60627: 19 17 411 26 99
+1941: 5 39 7 808 931
diff --git a/2024_rust/src/bin/day7.rs b/2024_rust/src/bin/day7.rs
new file mode 100644
index 0000000..d81ad1e
--- /dev/null
+++ b/2024_rust/src/bin/day7.rs
@@ -0,0 +1,129 @@
+use itertools::Itertools;
+use regex::Regex;
+use std::fmt;
+
+struct Operator {
+ name: char,
+ f: Box<dyn Fn(u64, u64) -> u64>,
+}
+
+impl fmt::Display for Operator {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "{}", self.name)
+ }
+}
+
+#[allow(dead_code)]
+fn op_chain_to_string(chain: &Vec<&Operator>) -> String {
+ format!("[{}]", chain.iter().map(|o| o.to_string()).join(", "))
+}
+
+#[derive(Debug)]
+struct Equation {
+ result: u64,
+ values: Vec<u64>,
+}
+
+impl Equation {
+ fn parse(s: &str) -> Self {
+ let re = Regex::new("^([0-9]+): ((?:[0-9]+ ?)+)$").unwrap();
+ let caps = re.captures(s).unwrap();
+ let (_full, [result, values]) = caps.extract();
+ Equation {
+ result: result.parse().unwrap(),
+ values: values.split(' ').map(|n| n.parse().unwrap()).collect(),
+ }
+ }
+
+ fn is_solution(&self, chain: &Vec<&Operator>) -> bool {
+ let mut chain_it = chain.iter();
+ let mut self_it = self.values.iter();
+ let mut acc: u64 = *self_it.next().unwrap();
+ for value in self_it {
+ let Some(op) = chain_it.next() else {
+ panic!("Impossible")
+ };
+ acc = (op.f)(acc, *value);
+ if acc > self.result {
+ return false;
+ }
+ }
+ // // TODO why does this not work?
+ // self.values.iter()
+ // .reduce(|v1, v2| {
+ // let Some(op) = chain_it.next() else { panic!("Impossible") };
+ // (op.f)(v1, v2)
+ // });
+ acc == self.result
+ }
+
+ fn find_solution<'a>(&self, ops: &'a [Operator]) -> Option<Vec<&'a Operator>> {
+ // println!("Finding solution for {self:?}...");
+ let op_chains = itertools::repeat_n(ops, self.values.len() - 1).multi_cartesian_product();
+ for chain in op_chains {
+ // print!(" Trying chain {}... ", op_chain_to_string(&chain));
+ if self.is_solution(&chain) {
+ // println!("YES!");
+ return Some(chain.clone());
+ }
+ // println!("nope");
+ }
+ None
+ }
+
+ fn has_solution(&self, ops: &[Operator]) -> bool {
+ self.find_solution(ops).is_some()
+ }
+}
+
+fn sum_solutions(input: &str, ops: &[Operator]) -> u64 {
+ let equations: Vec<Equation> = input.lines().map(|l| Equation::parse(l)).collect();
+ // println!("Equations: {equations:?}");
+ equations
+ .iter()
+ .filter(|e| e.has_solution(&ops))
+ .map(|e| e.result)
+ .sum()
+}
+
+fn p1(input: &str) -> String {
+ let ops: [Operator; 2] = [
+ Operator {
+ name: '+',
+ f: Box::new(|x, y| x + y),
+ },
+ Operator {
+ name: '*',
+ f: Box::new(|x, y| x * y),
+ },
+ ];
+
+ sum_solutions(input, &ops).to_string()
+}
+
+fn p2(input: &str) -> String {
+ let ops: [Operator; 3] = [
+ Operator {
+ name: '+',
+ f: Box::new(|x, y| x + y),
+ },
+ Operator {
+ name: '*',
+ f: Box::new(|x, y| x * y),
+ },
+ Operator {
+ name: '|',
+ f: Box::new(|x, y| {
+ format!("{}{}", x.to_string(), y.to_string())
+ .parse()
+ .unwrap()
+ }),
+ },
+ ];
+
+ sum_solutions(input, &ops).to_string()
+}
+
+fn main() {
+ aoc2024::run_day("7", p1, p2);
+}