diff --git a/README.md b/README.md index f564d0f..50e1d3d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ https://adventofcode.com/2024 | 04 | Ceres Search | :pushpin: | :pushpin: | Matrix multidirectional search | | 05 | Print Queue | :pushpin: | :pushpin: | Queue order | | 06 | Guard Gallivant | :pushpin: | :pushpin: | 2D navigation | -| 07 | Bridge Repair | | | Equation parsing | +| 07 | Bridge Repair | :pushpin: | | Equation parsing | | 08 | | | | | | 09 | | | | | | 10 | | | | | diff --git a/assets/day_7_calibrations_input b/assets/day_7_calibrations_input index fc6e099..8b25e7d 100644 --- a/assets/day_7_calibrations_input +++ b/assets/day_7_calibrations_input @@ -1,9 +1,850 @@ -190: 10 19 -3267: 81 40 27 -83: 17 5 -156: 15 6 -7290: 6 8 6 15 -161011: 16 10 13 -192: 17 8 14 -21037: 9 7 18 13 -292: 11 6 16 20 +7628244: 4 6 99 4 321 +1961493912: 729 232 83 28 46 1 9 +79325232924618: 907 466 857 34 3 618 +5036760: 5 647 4 2 79 274 8 3 3 8 +152117: 5 75 9 3 46 162 +63846: 341 9 239 239 6 3 +6073704: 8 6 93 562 6 9 91 +7044340: 98 302 7 34 492 +5044440960: 15 31 520 3 606 2 58 +1802308: 18 5 596 6 81 1 8 6 428 +12312698599: 598 5 99 548 372 52 3 +519237: 79 718 3 849 118 9 9 +7898: 5 7 34 8 86 49 63 +4609664: 67 688 64 +6247040: 560 61 3 704 10 +23641455: 656 120 84 8 5 3 +1781: 79 954 699 49 +90005760047112: 9 37 560 2 480 471 12 +726: 8 24 47 7 92 63 9 1 8 +1449585: 38 147 38 +5434836: 9 3 9 6 7 35 1 8 8 2 8 66 +5819: 3 94 2 3 1 +1276: 31 41 5 +513617: 5 13 61 9 1 +14810186: 7 80 7 910 3 1 3 7 881 8 +23860876: 568 7 675 6 783 41 +1231955: 11 5 64 401 3 2 1 80 +5901: 9 300 107 2 204 83 +3880: 63 698 5 2 73 +1598732: 12 84 314 732 +5843810: 8 8 823 108 18 5 1 6 5 8 +1680456932: 8 5 30 5 7 3 5 799 3 2 4 4 +36509324: 2 3 159 795 9 4 70 404 +790: 47 6 9 20 479 +859825355255: 6 2 1 8 88 3 5 1 936 7 5 4 +5417549724: 82 6 5 55 20 49 637 85 +14040: 835 3 24 6 8 4 6 4 +1250752368: 657 4 2 361 524 +7603: 72 9 79 33 3 +1532040444: 15 876 965 58 42 600 +3754036: 2 5 938 3 4 5 2 5 4 3 16 6 +468913968: 762 6 941 6 938 9 6 8 9 +12435103: 1 3 9 7 6 4 47 2 636 31 +132300: 42 3 6 35 5 +963: 4 887 72 +519567: 84 7 1 882 54 15 +137040: 5 6 571 2 4 +222433510494: 436 696 352 6 733 80 +765312: 7 664 41 760 4 +59571471369: 6 3 267 5 7 41 6 97 8 1 6 +7014: 4 7 786 8 54 584 +391006260: 312 139 98 92 372 +32613: 438 5 231 72 766 3 20 +93835690: 1 407 32 4 626 65 +15280749: 49 77 450 11 9 +34840: 9 19 37 536 +11336382: 3 1 23 901 466 +243945: 9 174 75 9 94 579 +437035: 3 24 8 3 2 7 4 76 43 9 3 1 +485832600: 7 5 192 6 6 7 9 75 8 11 +1974037092: 6 9 743 70 492 223 29 +1567: 1 521 3 56 917 2 5 62 +10703137: 9 9 2 165 6 9 8 4 1 9 2 56 +8762640: 1 2 73 248 4 84 71 +34935769: 3 970 1 95 661 458 12 +2217248: 71 549 119 3 2 45 +6154457130: 6 6 7 4 8 48 4 8 3 84 236 +1388613996: 9 9 281 5 14 999 +150745343: 2 5 843 8 32 6 59 2 4 3 +9665473: 56 644 268 321 +1011: 9 601 15 251 83 52 +50736683095: 6 5 40 604 9 7 585 1 7 +8159: 6 25 6 9 59 +6658270: 68 1 419 5 33 230 +416909: 4 4 883 2 59 15 +1493958: 5 9 914 5 9 8 8 4 8 266 +20162515464: 7 4 73 83 8 6 993 4 91 +7914954204: 511 492 583 30 6 9 +1499: 8 8 7 115 8 8 3 +5389101971: 4 5 5 84 611 9 9 971 +50436416: 784 33 373 9 64 +2116490397: 7 6 407 4 49 35 6 1 397 +434013: 43 33 6 15 97 +2612480: 86 300 846 8 32 +41195571: 41 18 9 6 571 +23934733065605: 53 9 8 7 8 7 1 7 2 5 448 5 +241944: 47 1 63 3 8 +47496055: 44 8 366 907 3 90 +56741859: 2 81 547 27 3 2 8 +702780: 83 24 9 57 689 +19221408: 7 593 66 9 32 +21672: 769 5 28 +314230743840: 5 2 37 1 781 9 5 6 7 5 5 6 +24449: 773 916 9 2 1 7 7 7 656 +732965386752: 2 4 743 881 36 81 64 1 +68914900: 190 874 415 +2856: 7 8 51 +47874339: 6 8 326 45 20 7 9 54 9 +185955891: 1 77 5 161 290 4 3 9 +13714303: 10 9 90 2 52 94 839 1 9 +251585: 1 52 5 948 365 +66232894480: 827 911 176 5 80 +4606: 2 3 641 760 +3278601798877: 8 6 145 9 38 471 3 5 77 +401510972734: 8 561 469 72 6 1 34 +30366: 4 2 541 10 7 +18213170448: 6 8 6 155 3 5 24 4 6 3 4 2 +70977643971: 4 16 93 265 975 45 96 +5130797: 854 16 84 60 798 +12449484: 8 9 3 9 860 524 482 6 3 +71752928: 717 520 34 2 892 +43587539265: 676 466 65 826 78 +13737950968: 5 6 263 9 147 7 8 443 +2405: 559 480 2 647 717 +6084144204: 734 8 4 207 20 3 1 +245372235167: 59 9 73 385 633 811 7 +8361522: 28 14 395 3 54 +35168581: 21 98 16 5 81 +108824100: 664 7 4 2 2 9 3 6 5 7 77 +736232: 2 5 963 759 2 +4641174: 4 62 48 57 388 306 +408931: 866 8 77 43 1 +785386738: 9 1 2 7 1 923 9 67 6 1 2 1 +72960: 20 6 608 +16586390: 5 8 5 9 898 3 9 4 57 68 6 +32760: 25 14 4 51 6 223 5 4 1 +54859: 1 348 6 26 571 +601806: 5 90 51 2 6 +6977744: 5 6 75 25 6 443 489 5 +982: 10 6 5 3 919 +8490: 40 430 297 11 56 +28257501930: 63 2 4 10 8 1 8 4 8 9 7 6 +1033274880: 792 8 72 453 5 +1403475: 1 6 38 803 8 9 5 3 5 7 5 +64692: 11 9 1 11 9 167 341 9 +1877778226: 7 505 59 9 4 64 9 226 +54344: 67 199 17 24 1 8 +297324210: 86 3 31 42 3 82 +6843: 81 113 5 2 1 17 1 2 1 6 2 +32185612: 55 45 811 13 69 +3806: 24 76 42 2 1 74 +19584: 400 5 3 8 6 +7766: 7 7 133 390 851 8 +1747: 1 66 8 7 +30782706: 80 583 382 +1178995664: 882 62 4 7 308 +2971254: 1 62 87 542 50 1 9 492 +1326251962: 8 5 2 612 7 114 8 2 962 +3685243: 363 86 466 35 8 +46474134867: 6 2 146 905 8 7 8 3 867 +5886: 7 84 6 +2174880121: 81 655 591 5 11 8 +217122543: 625 7 919 6 972 1 4 9 +5943912: 1 1 297 25 2 3 8 9 1 6 6 +142148: 2 8 4 2 6 62 6 8 5 88 9 9 +13662183920: 793 447 390 92 385 +590330: 13 50 351 592 26 +639240: 91 282 36 2 7 +23843783: 3 250 6 53 4 94 25 +1499827: 153 7 3 14 6 +3249689: 406 21 8 5 2 +312771946: 3 6 36 87 761 945 +35920: 29 2 1 1 1 4 5 9 2 88 4 4 +11069543: 139 828 207 96 839 +527: 4 37 90 +334429: 233 2 690 36 29 12 +63997: 9 649 8 5 12 762 1 6 +22112631112: 9 87 3 183 5 2 53 8 643 +39496298282: 74 1 12 7 9 1 6 5 4 4 87 2 +8490587615: 983 80 992 87 95 +70: 11 52 7 +996: 2 48 31 583 88 46 +72845623715: 342 5 2 851 1 1 4 743 5 +142721: 2 5 7 299 8 6 1 86 8 337 +832334735232: 9 8 9 8 871 49 9 2 209 +1791792: 8 43 9 2 7 258 4 51 9 4 +414011688224: 9 460 116 8 8 2 2 3 1 +54386: 7 9 6 700 3 9 8 728 3 2 +1489144: 8 15 687 75 8 15 97 19 +620286: 6 613 7 28 558 +85262: 34 41 189 6 212 +2528944317: 69 1 2 3 2 6 5 6 7 42 5 96 +13739364530: 87 42 94 3 20 58 4 530 +686055: 4 96 27 2 1 6 802 37 7 5 +18045269206: 776 283 9 99 71 83 +816: 1 32 14 760 9 +196594196: 1 3 7 69 876 4 7 6 188 8 +1756: 556 6 1 604 493 96 +99960: 80 5 6 49 4 +370507746: 433 9 266 89 746 +7199850: 52 923 3 25 6 +1218: 8 4 3 574 2 +61785: 56 11 2 461 14 +84988680888: 996 46 35 53 299 586 +157: 65 89 5 +239270618016: 7 2 67 4 310 5 4 504 2 2 +1289792: 81 34 81 44 7 8 8 +1699: 47 6 6 4 3 +3482334: 8 41 12 345 5 587 1 +1397025430: 399 15 35 43 2 +1432861735: 434 33 7 52 7 17 3 5 +125760: 1 4 7 3 993 20 266 8 2 6 +16: 9 2 5 +394574: 7 8 789 8 5 718 2 6 32 6 +80539: 474 23 308 32 7 +184086756: 5 409 408 4 9 +304: 38 2 4 +139051: 3 9 1 515 1 +945937135: 995 646 77 3 95 +45245: 8 9 3 1 4 3 7 27 8 444 +8268: 68 26 4 26 32 53 +133455942999: 93 35 41 94 2 994 5 +306: 5 2 1 6 18 +3090503113: 169 827 614 7 7 443 +1042306: 3 9 47 8 7 5 6 150 6 2 94 +84744212490: 1 754 7 89 4 3 6 10 9 35 +596066572: 2 5 4 119 9 2 3 626 5 9 +45229035: 8 641 84 105 75 +7782935043: 70 8 3 1 60 1 20 8 9 1 16 +55788560: 367 1 16 48 95 +35084: 3 9 37 79 8 +63100683: 630 92 3 5 680 +7030640: 5 329 30 860 7 62 5 4 +1109595612: 6 6 8 2 7 9 4 39 9 903 8 6 +395: 1 66 1 328 +11619243: 58 335 598 9 94 +302075983151: 594 708 218 7 233 +806387208192: 32 24 471 678 8 411 +13503236: 9 5 51 228 8 462 4 36 +1012: 74 8 2 78 348 417 5 +168190: 31 864 717 544 78 22 +1817161: 1 4 2 9 1 428 12 28 +370985697: 62 8 8 8 3 2 1 2 23 7 8 20 +11573184: 589 94 92 97 2 158 6 7 +2043091: 72 6 56 7 35 414 1 +24732: 671 2 18 576 +2947000759: 64 8 95 612 99 3 7 429 +88275285: 19 61 673 9 5 +6326156: 7 77 753 9 56 +8140209: 74 390 6 94 3 +39962565: 2 3 4 990 4 8 8 9 6 1 4 1 +27605: 739 4 492 2 8 1 4 +46573451957: 776 8 937 62 957 +4921024: 7 6 8 91 64 +1079: 78 4 985 7 5 +4302: 85 81 5 5 467 69 6 1 30 +470: 2 24 8 27 59 +674438: 42 37 7 62 2 +602621404: 97 84 465 716 7 +1226633730: 1 9 52 665 211 141 +11424163: 4 9 3 4 8 2 75 1 5 65 88 3 +6877: 115 5 1 2 9 52 5 8 +6841448: 986 652 29 8 48 3 8 +40625: 3 810 20 792 25 +97026834777306: 98 106 989 777 305 +2853460825: 9 317 4 608 20 5 +134027: 9 3 6 7 9 5 910 6 5 62 15 +91489893: 9 2 73 1 71 943 7 1 1 2 3 +152850676: 4 382 1 49 6 24 53 999 +29628319686353: 5 143 8 8 44 5 2 9 7 9 4 8 +30289: 5 554 55 4 49 7 +162228: 208 54 459 5 45 +9705: 4 7 7 7 2 9 3 +514321952: 9 2 166 5 6 5 8 54 7 1 4 8 +34944632485: 713 10 5 5 755 10 49 +7248: 9 717 83 152 560 +119106: 5 5 961 47 39 3 +18800509: 545 9 2 64 37 53 84 +34056167: 86 2 387 170 +18611306123: 2 615 3 1 9 1 306 114 9 +47880450: 4 13 77 1 9 113 7 1 58 +73491264701: 88 949 791 2 7 71 88 +642395781: 90 518 74 649 22 5 +1053209376: 7 2 1 1 3 98 9 7 6 8 414 +37970: 3 4 63 5 1 7 6 2 313 29 9 +65455: 1 4 935 1 5 +1835652: 664 4 98 3 2 79 9 1 1 7 4 +281581440: 5 21 581 962 4 6 730 4 +2057518: 9 320 3 238 433 2 763 +238892724: 280 53 995 721 181 8 +68125389: 52 6 59 4 37 87 902 +191675618: 44 9 882 6 484 2 +5072: 86 49 439 320 99 +1387360: 92 2 290 26 +271585: 4 6 73 4 8 168 44 2 9 1 1 +5726462257: 95 44 6 54 5 77 57 +35862548: 377 5 95 39 9 +59890: 59 8 31 7 3 49 +112277248842: 9 8 54 323 9 2 8 4 8 43 +771052778: 981 5 782 770 6 +1682005: 3 18 4 44 8 9 7 7 9 9 86 +3330530202: 2 2 970 9 123 283 67 +5318481802: 360 303 82 587 83 +11351229814: 433 6 73 5 506 7 531 1 +16099247493: 7 59 7 283 6 1 505 +5519: 490 2 2 37 5 2 203 6 +218279020896: 90 7 7 573 6 68 6 95 +3382524921: 218 7 501 15 9 921 +178528677: 8 27 9 970 818 177 +429: 3 4 3 3 2 4 +4788723: 6 3 76 63 5 9 79 +16000: 3 655 1 8 280 +17782908472: 13 482 66 43 4 72 +5809186: 8 29 883 7 2 +80900240: 92 925 7 5 8 100 1 4 71 +15954: 43 371 1 +7642: 57 9 67 9 7 6 1 59 6 28 1 +9713429792: 784 815 531 7 13 4 88 +70703: 7 6 8 1 779 4 5 4 53 2 6 2 +1251960: 69 9 57 509 2 9 9 4 8 3 +533136923: 784 17 4 231 4 +2395798440: 138 166 68 85 3 +319332: 8 755 95 6 52 +59868: 554 220 77 58 208 4 +8382: 93 9 2 4 6 +4836783615: 6 76 795 4 3 3 1 5 +38798186: 26 251 12 99 14 +3270811: 3 205 7 9 571 8 11 +162284236: 99 591 57 235 28 4 +30545424: 1 252 78 7 222 +22070450: 220 704 4 6 4 +1810806355: 3 2 7 7 1 3 7 75 99 443 1 +14680313091: 31 8 29 486 6 4 42 +84892457: 50 773 4 38 11 +731862: 2 26 7 2 4 2 91 7 8 70 6 9 +172956: 2 4 1 497 58 +2750194: 5 502 65 2 89 6 3 9 75 7 +312245527861: 2 4 499 6 11 5 6 9 8 3 4 2 +546028722287: 7 7 6 8 98 63 5 4 3 289 +6151: 81 4 61 15 24 352 +235005413376: 6 4 5 2 39 8 1 652 8 192 +397667590323: 9 850 820 4 987 143 3 +580871: 7 5 16 59 20 69 64 4 7 +1516898: 2 96 790 10 1 +215916: 360 4 51 6 8 397 3 1 20 +887: 9 1 7 5 9 4 7 792 +41342963: 516 124 1 661 1 8 3 +54624: 6 943 384 22 764 8 +11940: 66 3 433 95 20 +1057506: 7 764 271 8 7 4 67 9 30 +96: 6 3 4 4 44 +19218: 126 38 794 824 3 +217222512968: 95 1 273 5 6 2 7 6 76 8 +28255035: 3 8 4 39 65 38 708 +1003838: 9 2 250 55 88 +30169689: 66 9 217 9 69 689 +10711992: 452 8 71 41 82 5 6 99 6 +3599049: 850 17 625 573 23 5 4 +59101341155: 775 43 2 51 3 286 62 +807: 2 82 2 3 265 38 +1315001: 157 1 42 83 38 77 +17704470: 890 8 8 1 9 59 8 444 7 6 +171041: 9 4 9 4 5 39 2 2 2 2 150 3 +14700: 4 6 88 30 5 +23703: 8 434 3 29 1 5 4 436 6 9 +9910: 95 82 218 65 45 +1154811340864: 9 1 6 1 464 4 92 4 6 8 6 2 +47924760: 1 24 766 310 6 +4: 4 1 1 +6361817398: 1 1 6 2 56 1 5 56 77 3 98 +140670067: 18 216 450 6 68 +3390660: 763 87 45 7 9 1 5 108 5 +395782124220: 41 9 469 7 285 7 9 940 +1559760360: 64 204 2 970 120 3 +126005873: 78 2 5 811 5 1 965 33 +1782779: 79 59 40 277 9 +37865018527: 7 6 5 7 7 3 41 5 3 7 617 9 +14177825966: 5 8 38 287 1 8 5 74 1 5 6 +104222547: 94 3 9 546 1 24 2 83 9 +973: 107 2 127 1 9 622 +2278: 94 83 872 861 368 +35600958: 7 305 796 7 2 9 51 +459258: 2 4 897 9 6 42 4 6 5 +87602135424: 6 328 720 69 7 4 12 8 4 +27075749: 54 5 135 8 46 149 +108129417: 406 822 1 6 9 36 2 9 2 3 +5960388: 5 5 5 4 5 9 883 16 1 1 6 6 +180646200: 3 8 3 46 48 1 6 540 59 +2890355710: 89 38 5 8 47 727 5 +767: 1 6 8 5 5 4 80 283 8 5 6 5 +1852823: 18 28 3 4 823 +13881672: 68 81 6 4 63 +10077616: 65 8 969 8 2 +2131: 57 8 35 5 10 4 64 16 9 2 +6105615: 76 536 24 96 12 +1536527: 1 5 4 4 9 4 5 8 979 78 5 +7238: 7 779 813 1 110 861 +838908: 2 9 786 509 36 +1776731726: 58 83 302 65 726 +826: 27 383 366 41 6 +26244: 2 690 9 28 6 6 +464492028: 977 28 3 90 4 462 +811939893140: 52 65 33 23 545 692 +9206127960950: 63 29 5 98 532 6 558 +9689856: 5 6 95 82 305 6 +81935: 9 19 4 5 861 6 35 8 9 1 7 +457029988: 96 2 4 635 7 204 9 1 7 8 +748569604861: 2 7 4 6 6 5 8 2 54 8 48 61 +46508382: 92 856 34 4 5 608 5 82 +8971614: 674 87 153 +24640: 39 520 1 44 +572800: 5 727 18 82 2 +117084858: 456 5 91 477 9 563 +250349: 193 5 77 5 3 6 8 38 79 8 +4578: 3 636 7 67 38 +9144283471: 2 2 9 9 617 4 8 39 2 7 2 +7240: 8 994 731 4 308 +358075: 7 658 8 15 6 3 81 85 55 +4674: 152 3 11 5 +7285254: 63 10 899 111 657 +83072: 1 11 693 2 59 +7766407164: 7 10 99 960 7 161 +3318: 61 1 31 9 367 7 73 5 6 +218017: 9 508 6 8 3 10 5 1 8 7 1 8 +304646586: 2 4 1 5 886 8 5 7 8 9 89 +628528278: 94 7 6 861 766 +1035489599: 7 595 63 4 273 5 6 4 35 +2606418: 7 432 86 4 837 1 +3559196635: 3 8 8 2 6 9 9 1 1 966 3 5 +67687032: 4 36 1 1 5 4 829 2 6 9 8 7 +165345: 6 1 644 97 7 219 +72759: 28 22 596 7 6 +3356540791: 6 1 86 2 91 7 3 42 198 4 +1426951: 8 3 7 3 63 6 9 4 9 1 951 1 +745148376: 5 81 157 657 84 +72389658061: 722 9 3 6 1 1 6 5 1 66 61 +8191368: 9 5 302 40 1 12 9 6 +161160210: 87 12 8 9 536 3 4 6 +11225007: 14 401 741 3 9 +3633: 40 68 948 78 68 9 3 +1178: 79 279 58 754 8 +1525415041: 37 4 1 5 906 3 5 8 9 8 4 3 +290180: 18 217 423 9 49 +800368: 750 6 497 63 5 +137702873738: 12 35 514 398 90 57 6 +2389657539: 5 367 2 8 87 32 749 1 3 +15525: 8 214 13 9 +381151400: 295 23 4 89 190 70 +9407440: 9 9 900 89 14 2 314 +43209085: 48 495 7 202 9 679 +70535713743: 7 1 24 8 13 6 5 7 11 9 +83729: 45 4 465 1 28 1 +7371648: 808 419 2 26 9 972 6 +531779040: 9 8 288 195 557 +628988980: 27 760 8 7 8 9 21 2 33 4 +109237369: 6 38 7 7 4 7 556 6 1 5 4 5 +15447348: 178 7 5 6 343 6 +2382536010: 63 84 8 5 8 403 10 +3149079: 5 766 1 822 +56274036: 8 21 825 6 406 +500198: 88 378 9 25 198 +232560: 9 5 48 51 +1566: 29 183 61 40 5 1 +34675100275: 4 7 5 52 64 64 9 8 37 9 +49538475: 22 30 510 3 75 +1778977: 2 54 27 370 9 7 32 3 5 7 +256583641: 5 7 7 9 5 591 89 1 641 +6610: 1 182 35 212 28 +195724: 35 2 480 11 29 329 6 +3582340: 11 476 76 9 916 +13328649: 8 6 5 38 4 66 8 780 3 4 9 +34929378: 9 43 1 62 4 9 737 +721920: 14 738 960 +2719694: 6 440 5 791 96 1 +380547: 2 9 4 9 2 757 2 90 4 35 3 +254888388: 250 909 87 33 361 7 6 +14052058: 839 12 869 2 61 19 +207720: 5 577 72 +3778432: 2 59 35 1 2 56 61 4 1 88 +82363922: 5 9 182 1 8 989 694 4 1 +38529: 929 1 26 8 4 9 +1048356: 2 854 5 6 102 +46036298: 55 837 7 5 96 +96309360: 1 591 56 5 6 97 +713076000: 78 70 1 653 8 25 +72047: 7 64 965 79 3 +29162428: 9 7 611 8 35 45 66 +3256: 767 4 15 80 2 91 1 1 +18738: 2 7 4 82 8 7 2 9 293 9 3 3 +108218: 349 310 9 19 +94420385: 60 9 9 3 1 1 45 4 5 3 8 +14900511360: 3 941 437 43 840 +103687: 5 93 943 78 8 92 3 +35714: 8 476 9 9 879 554 +5249: 9 4 2 519 60 8 313 +93493: 471 5 92 38 507 +6088434: 998 61 77 356 201 +804104703: 528 9 6 271 7 49 57 3 +2655475040: 57 477 8 462 68 3 +28148: 59 8 7 1 6 2 +41936003: 4 8 42 9 8 7 1 5 935 68 +249637: 5 2 239 63 7 +4230464: 34 2 546 689 4 1 +71878680: 760 80 6 1 236 7 45 8 +9576: 78 2 93 3 38 +26054280: 628 5 6 7 980 +38549406: 88 65 313 43 42 +3858244: 7 55 74 37 804 +282194985: 70 1 32 4 37 5 85 +281341314: 287 2 5 829 98 72 +270309: 83 549 85 13 29 +37002: 614 3 4 2 7 6 337 7 +97277: 560 6 1 4 443 7 68 28 +410204: 40 62 9 391 4 +44618004: 6 166 703 41 9 +9221169: 1 44 166 22 323 8 7 41 +990: 6 5 3 41 1 863 8 1 6 58 1 +12141: 12 59 171 +2211627792: 7 9 5 2 4 8 93 325 7 4 8 6 +1810: 33 54 28 +7916373: 5 3 2 338 1 399 5 6 161 +3724: 3 1 72 4 +2945043428: 9 3 3 40 8 9 8 756 4 8 5 9 +538204665098: 498 87 92 46 650 9 8 +16165: 4 2 61 232 157 +4561621424015: 91 1 595 834 7 336 6 +197196: 19 6 750 90 356 +288814688: 7 1 90 5 23 69 44 755 8 +4082: 91 4 9 73 733 +15440733: 367 5 699 5 7 58 7 7 3 +67321: 23 78 95 22 7 +403877820: 85 602 6 46 2 6 355 +14375914: 7 8 75 67 2 149 8 392 2 +11903425657663: 247 47 8 77 7 489 389 +970: 1 2 81 +2096: 32 8 6 95 30 +188039: 1 5 872 43 557 +68393082: 683 80 6 37 87 82 +2603531: 2 465 4 476 9 2 2 79 1 7 +26929768603: 7 8 8 6 70 97 8 2 9 6 35 3 +5098291: 501 8 3 7 6 5 93 355 1 +43362: 4 39 5 4 33 6 +2194015117: 5 12 36 4 4 4 151 20 +421625: 138 66 56 1 46 4 77 +79584: 3 52 4 482 1 2 254 2 8 3 +51496: 86 12 83 447 82 +181692: 4 77 6 6 98 +17312103623: 51 71 64 5 4 278 5 478 +8383226: 7 554 45 5 3 42 918 50 +110029590: 5 7 80 1 335 954 +1140135705562: 2 3 2 7 4 7 6 52 9 364 2 7 +200533206: 4 59 5 99 7 7 10 7 3 5 8 6 +3987100064643: 4 256 2 30 42 656 34 +559083: 3 52 81 9 81 +200: 6 1 18 8 +114098823: 8 3 404 2 6 9 4 114 669 +2500926: 25 3 986 634 5 +2000: 5 100 4 +409905025: 12 53 65 825 97 +33027482: 5 6 30 273 1 76 5 +157428488: 9 80 229 1 432 2 6 64 8 +58293021891: 607 3 5 5 2 15 959 706 +58809: 57 860 2 9 935 +59640: 4 5 2 695 81 105 +22863176507: 46 9 93 968 1 551 141 +3041: 6 5 41 +1359960569: 4 7 61 1 8 57 41 20 568 +23055: 261 88 7 71 9 +181720713: 539 629 67 8 97 +1896250752: 61 2 208 6 1 1 5 1 745 7 +2673309912: 8 108 17 42 8 1 7 9 182 +39811688: 995 29 4 80 5 +105771: 8 1 6 22 30 6 9 29 842 7 +2073038730: 95 7 12 29 39 70 +21728414730: 95 4 953 1 5 9 6 7 25 6 4 +53048: 5 19 65 587 15 790 +3297: 4 9 32 7 2 5 9 3 6 321 6 +3200805752: 5 6 909 662 406 4 +12652964: 9 2 213 5 913 1 248 6 4 +91958709: 676 167 8 17 +26204955: 15 1 6 5 6 7 9 2 60 154 7 +267156820305: 434 158 822 44 5 549 +260136: 8 9 4 5 5 49 9 +3149512960: 135 58 76 610 88 4 +7308659: 400 761 3 377 8 7 1 36 +265080: 1 7 336 77 20 10 +28529: 2 471 635 5 5 3 1 818 8 +43284: 76 5 4 522 9 5 5 5 +4115: 3 672 695 3 5 +62027728598: 77 5 26 5 385 10 23 7 2 +5708751227: 253 2 665 27 4 5 1 827 +97146778: 942 4 4 284 2 676 9 9 +285790478551499: 646 790 7 9 8 1 8 9 37 8 +35899: 4 7 641 2 3 +371250954: 6 2 76 13 5 5 455 528 2 +171506263050: 75 1 5 7 8 2 647 1 448 9 +7200: 96 5 5 3 +432961203: 7 9 7 415 54 92 3 3 +29589051: 5 422 5 7 56 697 4 3 3 1 +18462: 9 69 7 599 5 3 5 1 4 6 1 3 +80124620: 80 12 4 619 1 +365168841: 5 2 14 9 9 9 4 8 1 4 8 841 +848065795: 95 113 79 118 677 +125903415: 82 66 2 9 41 5 407 +642075660000: 58 2 60 750 79 3 519 +128544494: 2 6 6 251 5 8 15 1 4 5 26 +81: 50 14 8 8 3 +2191919: 263 690 23 15 4 +1175127: 65 4 77 37 547 57 699 +174240: 277 1 4 24 3 46 7 6 30 +35866999: 712 3 5 3 5 5 68 3 9 99 +1753: 6 73 22 64 793 5 431 +356132: 91 33 62 54 46 +14699468: 1 6 93 439 6 7 3 20 968 +4146: 1 2 805 5 88 5 10 3 +250950336: 27 1 26 96 371 +36829515843: 2 5 2 2 8 8 8 755 4 37 8 3 +2087702599: 8 26 760 4 6 2 572 27 +1303172640: 17 19 7 16 1 784 365 2 +52452167: 4 308 1 8 50 846 1 166 +8035319: 51 232 7 4 97 3 8 5 987 +12216: 97 61 2 4 378 +12041593632177: 7 964 56 9 4 93 4 270 +54372975: 2 6 6 6 7 447 61 3 8 1 6 8 +7118010: 198 9 77 84 66 41 +9604728: 1 6 4 1 323 95 51 4 6 +3664488: 3 2 9 5 98 5 3 779 8 2 2 4 +10510080: 85 46 7 4 96 +30035992: 67 138 58 1 89 56 +12109554: 8 5 2 1 9 2 6 68 7 390 9 6 +42668283: 282 8 419 238 4 56 9 4 +3073: 9 6 55 5 319 1 9 7 252 +2847588: 89 44 48 2 718 +331718625: 805 67 78 5 457 575 9 +1131788: 1 1 28 83 487 +976: 5 4 9 64 4 +8490960281479: 8 490 9 60 281 479 +199074: 15 4 794 5 55 765 310 +2668845915: 2 8 416 26 707 327 99 +1071: 8 1 7 47 988 17 +179608319782: 2 442 3 4 7 203 97 82 +14568: 543 58 6 8 3 +65201: 16 39 20 7 97 5 +3677695041908: 459 607 26 6 45 22 3 5 +125599719: 712 70 45 49 8 25 7 +8883: 12 41 5 1 426 284 4 7 9 +4660962: 8 8 320 6 7 61 37 8 2 41 +26998: 7 1 830 4 6 2 4 8 1 5 78 3 +510670: 829 616 6 +12393: 37 4 8 932 5 747 7 262 +159096: 1 574 5 289 624 6 7 +1478: 869 539 66 4 +759537: 518 10 6 288 4 7 33 9 +5263168: 3 289 4 6 2 4 8 +104011572: 619 4 462 4 42 +731449125: 231 9 7 3 439 5 99 +182484252: 2 740 3 5 685 5 5 8 3 9 4 +78846: 3 2 41 2 4 1 68 74 6 5 6 +1572: 4 381 3 5 4 +333247970: 928 95 6 5 630 20 +75132300: 80 646 6 49 4 88 12 1 +9834: 2 4 47 97 62 409 1 +4938765: 883 2 1 5 559 +1548777315236: 6 88 9 5 4 732 809 4 +483: 61 14 403 2 3 +1760724: 6 305 6 959 +193285026: 1 5 7 67 2 49 4 3 8 1 29 +563811395: 1 1 6 264 571 9 5 +1567808: 6 11 36 829 2 544 +4958217: 6 891 7 745 510 +5617976: 1 4 4 1 179 76 +538484700: 7 19 5 9 1 605 5 38 86 5 +183189779102: 7 1 5 61 1 2 4 7 981 4 6 2 +63183495: 2 807 9 2 7 5 4 5 2 6 6 95 +153065039: 672 469 419 7 4 5 97 9 +65688: 6 9 2 92 42 +4774867: 9 82 647 5 1 +8640244907: 9 80 5 6 61 2 4 4 9 2 9 +47576754: 177 4 2 3 2 123 78 12 9 +655503408: 560 9 5 68 18 933 +58457016: 7 7 8 2 2 7 4 2 8 64 586 9 +115026014: 639 18 600 9 5 +25337188: 3 8 8 2 10 1 889 902 8 +1829: 18 5 931 808 1 +1093456: 44 8 312 4 751 +3848605: 8 60 8 8 605 +779: 6 681 1 10 76 5 +11024031: 706 2 819 360 19 +1995966176: 1 8 6 943 788 4 661 +729325241: 7 2 1 8 2 3 1 9 4 9 3 41 +2087295: 68 4 307 515 7 +324728: 6 9 43 692 62 4 389 1 8 +1411187: 770 4 24 353 19 +756456: 1 258 4 2 1 7 6 51 36 6 +10546140: 72 479 2 145 66 +747622289: 56 1 78 57 11 3 70 1 28 +154318358: 9 6 9 8 2 6 3 6 6 6 425 7 +9540564: 20 692 461 993 562 +1596727650724: 997 954 78 4 681 4 +283932: 9 2 3 64 42 62 33 +688226956: 96 2 318 7 956 +233645: 7 8 6 528 3 7 9 1 775 5 8 +3361664212228: 35 7 3 8 9 6 8 8 3 7 604 7 +101782: 2 365 2 43 3 +2220: 4 76 2 5 5 2 79 435 1 56 +1629: 8 1 2 3 6 +64811754: 4 81 2 117 54 +690: 46 4 4 562 71 +296670: 5 45 28 77 899 +1992844: 465 8 9 277 9 4 7 59 1 +18767: 67 14 2 6 1 +23172241: 38 62 6 233 8 +227350319: 768 8 6 37 6 5 7 39 8 +65: 5 32 7 18 3 +255964: 61 493 72 93 356 +94321509: 94 321 509 +231572184: 836 5 554 98 86 +1810868: 1 5 3 10 868 +2375: 324 7 2 61 44 +24885: 71 881 5 217 5 +1247: 84 70 5 645 443 +116644617: 703 2 66 419 8 7 3 +794: 3 52 436 202 +212912504: 895 8 87 1 384 25 56 +523217705: 969 845 2 71 9 32 +1868: 68 7 384 8 4 +1128: 76 3 5 886 9 +387599: 29 9 66 9 99 +9499: 337 2 7 1 4 +4580010: 455 2 8 629 890 +102314604: 96 24 7 39 5 737 47 28 +1192992480: 6 5 5 4 34 43 4 85 4 3 5 8 +31540903265: 76 415 903 193 72 +634801: 9 2 690 1 +36295575: 49 50 9 94 813 +26294408: 9 2 87 87 7 1 495 4 8 3 5 +5965770: 32 35 42 265 8 90 +4314150275: 3 1 3 4 6 8 148 388 3 +9366968768: 9 4 90 8 9 60 687 66 +183862716: 424 406 5 89 632 12 +58755208796: 5 8 7 55 1 99 9 7 9 6 +270309109824: 5 29 8 9 9 34 4 767 248 +1020392: 711 305 76 339 1 23 2 +17886: 4 7 3 164 86 +89977: 8 1 93 13 664 +18537: 5 35 9 5 98 15 +985: 72 2 911 +649173616: 4 7 86 145 6 3 9 28 169 +351: 4 9 2 247 17 30 1 3 8 8 +1492: 690 15 787 +962649: 954 8 3 9 8 3 4 7 6 1 1 9 +1808352: 4 8 8 483 39 +1415985480: 1 757 8 565 5 9 364 +902836: 48 28 187 +53913600: 3 4 4 2 688 4 360 52 +11373431: 418 3 9 9 6 431 +95091817588: 4 3 474 33 15 7 363 2 +330876: 542 1 294 21 456 252 +1480836: 14 833 633 8 35 +79262534: 251 627 63 5 29 +622058951: 454 161 7 63 55 3 951 +2226: 2 8 4 9 1 4 3 2 639 2 3 +264829: 7 1 5 14 799 55 2 7 9 96 +235060978: 6 1 29 4 8 331 13 866 +1104948901631: 3 234 787 2 88 2 16 2 9 +1915733: 3 983 35 642 5 +738900: 41 2 3 7 78 3 656 4 5 60 +34792531: 69 585 5 24 7 +9843246: 50 3 8 10 9 4 2 5 7 7 7 9 +130585: 4 24 919 297 88 5 +31415994: 3 8 5 43 17 4 8 8 7 89 5 +1888165: 743 5 36 1 4 6 6 8 3 3 5 +332332: 49 1 119 69 277 28 +2541948: 5 506 5 34 79 57 91 +5672925: 6 378 2 833 65 3 +8965662209: 2 539 2 2 83 2 194 7 8 +484709075: 8 132 85 94 54 +133850216: 410 19 78 4 80 4 298 +7856274: 8 52 5 5 4 8 1 4 93 1 7 1 +5181660: 69 6 104 51 660 +3680381: 4 6 3 5 3 307 80 3 76 5 +3489172525: 8 81 995 46 86 305 +258968211264: 823 46 18 6 3 84 646 7 +3527203: 61 938 598 7 61 +1116643: 9 551 997 2 3 +41300: 33 3 8 69 8 1 9 7 595 2 +71601827: 638 7 9 8 4 6 2 2 30 876 +120: 9 11 21 +56621: 7 7 21 55 6 20 +88843640: 2 3 5 42 21 67 877 32 +3588455952: 2 660 42 69 2 6 1 43 74 +7000920: 3 747 27 880 9 +45208150452: 62 3 785 886 452 +1166883432: 1 8 642 85 4 66 52 +29193454: 2 2 4 4 35 2 5 558 74 5 5 +1793933: 251 712 177 504 3 +1627005: 3 23 7 214 25 7 559 9 6 +8058301365155: 2 818 2 543 907 3 156 +77806: 3 8 935 1 68 1 7 76 1 58 +1206: 2 4 29 83 6 +69883979378: 4 328 7 8 3 256 7 8 9 8 +39591121104: 7 6 9 80 6 5 23 9 3 3 57 8 +1458662: 90 56 3 2 4 577 9 9 4 3 2 +946590: 57 461 5 1 6 67 6 +34760252192: 3 3 62 1 75 7 1 4 7 87 6 +169212803: 10 88 273 461 703 +5975856: 8 4 1 1 3 92 4 42 6 159 +53581: 16 49 18 92 59 835 1 +634284006: 4 193 2 70 72 2 3 +770: 17 20 4 8 5 51 49 5 +1230460: 4 787 8 7 4 55 +7714000: 29 95 4 700 +401184: 5 691 679 45 3 32 +1374464: 47 3 8 3 654 1 9 3 2 944 +1247: 7 84 28 1 630 +516849: 511 5 8 33 3 11 2 +26278489293: 93 57 4 109 3 6 98 99 7 +16583292: 7 7 8 8 8 5 3 182 6 33 4 +1691940: 2 4 2 91 9 40 +21656: 8 42 62 1 824 +129896760492: 4 5 2 6 781 6 67 7 4 9 1 2 +1328683: 5 86 898 681 2 +127431241: 121 4 8 78 51 329 +2849218639: 9 13 211 8 39 4 305 13 +323612: 938 43 8 940 +12224700: 65 659 508 7 282 +2521425784: 1 7 826 8 237 39 9 8 23 +312973: 4 18 9 2 9 73 +14841794: 436 3 8 54 21 +56606953: 89 10 31 57 39 214 +2357974: 108 903 4 583 322 +11831972301: 135 7 8 465 6 50 9 89 +3157607: 2 252 7 2 6 2 26 39 3 8 3 +103650632: 7 754 869 97 5 6 632 +8536428: 218 5 5 4 65 1 4 2 4 4 9 1 +721: 7 6 10 29 560 +7806474452: 344 2 90 68 9 41 2 4 28 +57400851: 308 9 6 394 5 5 8 1 4 1 +2636: 848 24 4 3 6 +46656: 3 6 7 5 8 191 1 7 8 64 +25697659: 473 25 516 8 59 +1572227928: 3 2 5 5 2 6 7 4 393 6 28 2 +1673: 5 233 19 6 30 40 54 7 +28247259: 8 8 2 639 37 8 72 1 15 4 +11580161805: 4 5 2 6 1 4 2 2 986 7 1 9 +33458532: 1 548 5 61 29 +4279405: 73 585 37 65 +32242849: 322 38 4 818 31 +1184807370: 197 368 3 4 92 895 6 +5422401655: 979 6 757 923 941 +3037886777: 2 9 54 56 7 5 7 2 26 3 79 +3247485595: 32 468 69 616 595 +12160274: 602 837 64 234 182 7 +40672828: 730 9 68 504 28 +415000056: 74 701 9 22 5 80 4 2 +55225476873: 685 1 7 806 9 765 873 +1721520: 456 6 78 4 797 +1454758: 16 96 5 944 4 50 +476343: 4 466 6 3 9 2 5 1 14 9 6 9 +6825448: 94 2 896 860 44 17 8 diff --git a/src/advent_of_code/sat_07.rs b/src/advent_of_code/sat_07.rs index b52c885..2e839cc 100644 --- a/src/advent_of_code/sat_07.rs +++ b/src/advent_of_code/sat_07.rs @@ -1,5 +1,3 @@ -use primes::{PrimeSet, Sieve}; - use super::*; pub fn bridge_repair(input: &str) -> CalibrationResult { @@ -12,17 +10,11 @@ pub fn bridge_repair(input: &str) -> CalibrationResult { } } - println!("TEST"); - for v in generate_operation_variants(3) { - println!("{:?}", v); - } - println!("===="); - sum_result } pub fn is_equation_true(equation: &Calibration) -> bool { - let operation_variants = generate_operation_variants(equation.1.len() as u32 - 1); + let operation_variants = generate_operation_variants(equation.1.len() - 1); for variant in operation_variants { let mut local_operands = equation.1.clone(); @@ -36,58 +28,29 @@ pub fn is_equation_true(equation: &Calibration) -> bool { false } -// FIXME: this goes wrong on large numbers -pub fn generate_operation_variants(count: u32) -> Vec> { - let mut variant_list: Vec> = vec![]; - - let mut pset = Sieve::new(); // get prime numbers - - let variant_max = 2i32.pow(count); - - let square_free_list = generate_n_square_free_numbers(variant_max as usize); - - for square_free_n in square_free_list { - let mut new_vec: Vec = vec![]; - for new_operand_index in 0..count { - match square_free_n as u64 % pset.get(new_operand_index as usize) { - 0 => new_vec.push(Operation::MUL), - _ => new_vec.push(Operation::SUM), - } - } - variant_list.push(new_vec); - } +pub fn generate_operation_variants(count: usize) -> Vec> { + let variants = vec![Operation::MUL, Operation::SUM]; + let variant_list: Vec> = generate_combinations(&variants, count); variant_list } -pub fn generate_n_square_free_numbers(n: usize) -> Vec { - let mut list: Vec = vec![]; - - let mut current_n: u128 = 1234; - loop { - if list.len() == n { - break; - } - - if is_square_free(current_n) { - list.push(current_n); - } - - current_n += 1; +fn generate_combinations(values: &[Operation], length: usize) -> Vec> { + if length == 0 { + return vec![vec![]]; } - return list; -} + let mut result = vec![]; -pub fn is_square_free(number: u128) -> bool { - let mut i = 2; - while i * i <= number { - if number % (i * i) == 0 { - return false; + for &value in values { + let smaller_combinations = generate_combinations(values, length - 1); + for mut smaller in smaller_combinations { + smaller.push(value); + result.push(smaller); } - i += 1 } - return true; + + result } pub fn calc_operation( @@ -119,3 +82,34 @@ pub fn operate( } } } + +// Old strategy, big fail +// pub fn generate_n_square_free_numbers(n: usize) -> Vec { +// let mut list: Vec = vec![]; + +// let mut current_n: u128 = 1234; +// loop { +// if list.len() == n { +// break; +// } + +// if is_square_free(current_n) { +// list.push(current_n); +// } + +// current_n += 1; +// } + +// return list; +// } + +// pub fn is_square_free(number: u128) -> bool { +// let mut i = 2; +// while i * i <= number { +// if number % (i * i) == 0 { +// return false; +// } +// i += 1 +// } +// return true; +// }