commit 58c83f8af7c4abc47f02dc051fd17da85272eb0d parent b70c7b2a5c6627168ec3652c3841e54b97f55bc5 Author: Lukas Henkel <lh@entf.net> Date: Sat, 7 Dec 2024 06:43:18 +0100 Day 7 Diffstat:
A | input/7.txt | | | 850 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | src/day-7.lisp | | | 44 | ++++++++++++++++++++++++++++++++++++++++++++ |
A | t/day-7.lisp | | | 19 | +++++++++++++++++++ |
3 files changed, 913 insertions(+), 0 deletions(-)
diff --git a/input/7.txt b/input/7.txt @@ -0,0 +1,850 @@ +20069: 49 98 4 6 81 774 +32487400: 750 71 8 61 1 9 +48639094: 6 7 3 9 438 390 94 +51587106: 859 71 7 51 6 +3672960: 20 3 6 527 21 240 +609210: 91 2 85 798 5 14 3 +38998774089: 1 9 3 9 3 5 2 417 8 63 7 2 +72095400778: 1 7 4 1 5 6 6 79 3 5 2 780 +59193807: 4 2 6 7 93 5 2 5 92 2 623 +994866: 5 7 6 9 9 1 337 6 6 24 18 +120929459: 83 4 2 60 7 8 8 6 397 83 +7618089: 5 7 8 6 286 40 542 821 +10399960: 4 4 4 9 84 1 8 53 6 9 7 4 +277851: 49 70 27 7 3 +1434188434: 669 94 17 38 60 3 4 +4709528: 58 799 70 1 8 +1183720: 1 6 19 89 20 +1080799208: 4 16 304 479 7 9 8 65 8 +37909994: 3 4 1 1 72 1 7 90 2 6 643 +6148: 6 95 376 8 9 58 6 16 6 1 +14289972907: 238 165 4 8 6 907 +20290900: 928 544 578 14 707 +59866: 108 889 6 5 41 +5278166023: 1 17 7 95 8 3 1 44 8 18 5 +1970205: 891 737 48 3 60 +51625467: 4 4 7 559 49 366 4 3 +1257282: 3 5 6 5 9 22 68 5 1 5 9 54 +6110: 9 676 3 3 20 +15204233: 7 60 2 2 234 +154315118: 43 6 6 265 5 9 4 6 8 49 6 +238188315: 21 8 892 9 2 8 78 4 8 27 +442298: 6 817 8 76 3 15 7 4 7 2 1 +4830: 9 1 6 64 30 +177606: 175 3 75 33 621 +272730: 74 9 51 7 620 9 8 7 7 9 8 +169752825694: 628 62 9 2 2 169 3 7 9 +2008290036: 5 5 8 1 8 63 4 6 8 91 9 36 +28191424142: 38 72 8 982 80 36 4 +114729841: 15 93 470 72 1 +43589671674: 7 6 1 99 59 96 716 74 +2029: 25 81 3 1 1 +7255912: 270 7 4 880 781 248 8 +243778560: 83 982 2 9 118 480 4 +301107935: 9 878 899 6 3 8 7 3 7 1 3 +330: 9 9 9 2 6 +30847500: 497 4 44 94 2 62 9 8 +4599: 41 65 23 67 315 9 +51599: 3 294 89 207 87 1 6 2 +17824505: 7 9 448 3 4 17 631 9 6 2 +151946690: 18 9 5 8 7 1 3 11 976 82 +73752: 79 9 7 6 124 653 4 7 3 +10185: 6 6 87 411 7 +57039520: 7 4 496 3 247 700 5 2 +3396: 2 129 37 8 1 7 653 374 +3556538: 889 4 517 14 3 4 +4260: 114 23 289 10 +377830219290: 438 73 9 6 1 2 861 93 +17445965060: 9 5 94 63 92 4 2 58 803 +154120940: 4 82 2 7 1 546 5 8 940 +6264691823: 50 72 5 1 9 88 58 6 +17074122568: 2 9 9 7 165 1 5 6 2 8 106 +23075718615: 7 657 77 749 18 29 3 +22847337622: 6 8 7 3 8 6 24 283 42 8 2 +2261: 55 85 2 36 6 298 67 +1742868: 1 91 6 4 9 2 87 195 4 +5430: 16 9 29 8 565 635 46 +1815667: 85 20 213 898 9 +640011968: 50 80 5 374 4 8 +1877860445: 2 4 89 9 52 56 293 3 2 +537568: 2 4 1 64 933 1 34 125 1 +314705: 9 7 5 218 32 557 +591893: 59 128 52 8 85 +1182764689: 36 2 7 2 7 97 8 7 9 4 4 6 +257302664: 43 2 1 2 78 2 3 6 996 2 6 +3653208: 84 57 676 40 8 +85495: 26 9 5 3 44 7 140 7 23 9 +22863672: 9 4 5 52 438 7 5 +48637688: 3 265 7 5 2 74 5 59 153 +20950: 761 27 39 5 4 6 982 +1211846: 75 27 161 +141259: 1 19 261 9 7 3 9 87 3 1 +2335338: 1 9 6 7 4 7 6 2 94 2 6 733 +182736553845: 1 215 705 3 5 6 9 23 8 5 +4481114619: 5 439 7 180 89 9 9 9 57 +20952: 61 333 48 586 5 +84201598: 780 1 4 300 358 +57058360380: 4 5 5 65 8 8 9 7 8 868 5 7 +842520237139: 3 8 8 2 75 68 3 38 77 7 +3479489: 434 9 15 8 169 +455616000: 74 1 4 4 565 8 4 21 +3116820: 8 2 38 818 2 +32902179617: 5 5 3 1 8 88 8 87 92 776 +212372816: 798 2 266 515 1 16 +1676790: 68 43 63 18 558 +88015051: 9 74 214 150 49 +32815837331: 25 30 6 3 6 87 19 149 +4176: 74 11 4 8 12 +8856666: 907 50 5 344 39 +17530866: 3 24 944 30 687 +115597439: 7 96 610 47 6 +59978: 6 5 678 87 35 +2529602475: 951 603 153 5 882 8 7 +2733976483: 7 9 41 75 261 565 918 +342498826656: 258 994 6 687 54 6 +52920: 4 9 6 16 699 1 6 6 2 +42574479: 4 771 5 4 9 5 5 3 6 146 3 +39398867885: 6 638 79 6 147 1 1 9 8 7 +35720: 663 97 47 +242251: 96 9 25 4 +237373235: 63 238 73 6 6 5 9 8 6 5 5 +41911385211: 98 6 3 2 6 651 5 860 9 6 +370930563: 6 618 1 30 508 55 +64746000: 181 6 3 99 96 3 8 75 +208599437: 5 6 9 18 1 9 3 910 7 9 72 +14164484: 30 5 7 368 3 47 97 4 9 5 +3608: 900 4 8 +1361: 6 2 86 7 8 6 939 49 258 +549611: 21 1 8 56 372 12 12 +314435322: 3 49 305 65 5 6 76 6 8 3 +674550: 7 4 610 340 9 +42329897821: 66 6 1 15 64 9 78 69 1 +582868038: 84 5 672 65 38 +1728: 4 8 16 1 9 +74952470475: 8 64 2 9 5 246 2 8 4 75 +1392006: 50 232 15 8 6 +761: 62 3 341 352 3 +48556951: 207 3 92 3 53 31 27 71 +3482293519: 976 8 115 49 31 +102873921024: 4 56 49 43 19 478 6 4 +19766: 984 9 34 1 2 +431516227150: 8 458 926 2 2 7 147 3 +5356: 5 5 95 35 93 +143937: 2 7 316 8 769 +2104720: 3 214 835 360 2 +69616848: 8 8 9 879 38 9 +2130: 5 202 1 53 6 +8747338330: 332 206 266 3 877 9 +1041844: 874 6 9 119 1 +207373691985: 81 457 9 3 2 56 919 85 +1829717: 203 3 9 1 7 +328689: 2 6 520 43 14 +83232: 4 1 866 4 4 6 +354301209: 71 6 67 41 4 67 5 2 25 9 +74368692: 94 199 59 239 18 18 +11635096619412: 8 77 776 36 5 263 8 14 +42726890: 427 26 8 68 22 +960390: 2 1 4 3 80 35 4 3 33 9 6 6 +398159179: 3 981 5 91 78 +56305: 6 9 4 492 4 6 93 1 9 90 1 +162651970: 1 79 88 64 20 440 9 3 7 +1549225440: 499 1 5 616 2 8 7 9 4 4 +654695: 2 4 27 6 440 255 +68838516277: 85 1 9 449 879 2 57 4 1 +2099: 9 607 497 972 5 9 +558468640: 246 5 4 440 556 +15868: 4 69 5 7 799 8 +70180938: 949 14 96 85 82 92 9 +549830219405: 5 95 532 3 74 363 3 9 5 +11182: 1 1 172 5 5 +1475180: 66 399 7 8 6 6 7 +42017863: 6 317 8 3 628 5 55 338 +135921014: 702 8 481 398 34 +72458737096: 316 19 45 7 4 9 4 1 83 6 +8900: 1 9 1 445 1 +18089960: 81 1 8 697 1 1 590 2 40 +4309220520: 9 93 627 53 4 792 85 +3640164: 30 6 937 74 56 1 8 8 44 +1867319341: 9 4 7 71 571 7 7 5 800 6 +1632: 5 29 7 2 615 +13490: 428 904 68 5 11 9 746 +279248: 81 58 2 2 7 496 +2172272: 30 996 7 90 163 9 14 +17347758: 7 77 716 9 232 775 5 +17160: 7 157 7 3 1 35 4 3 1 71 5 +333343: 27 5 99 13 6 195 3 85 +8989031: 3 4 8 5 85 7 7 863 4 1 22 +1761499130: 93 3 9 1 7 2 2 8 1 152 1 8 +975657048520: 6 7 26 2 4 89 41 4 9 7 5 8 +139579800: 28 9 7 4 54 7 8 3 76 3 1 6 +2482480123: 572 62 700 8 4 39 +85846472460: 85 2 1 9 507 6 9 2 7 9 3 4 +2502000: 1 856 8 94 8 45 +3787217460: 8 46 1 52 9 1 1 22 9 10 6 +439999496028: 3 64 91 7 2 23 51 38 6 +4095: 4 55 9 +35011: 41 20 4 285 11 +10685: 91 6 79 7 2 3 288 607 +35578601926: 9 2 5 80 6 308 522 383 +662375767: 602 56 4 375 769 +15404697: 2 499 85 4 4 889 89 9 7 +11267043: 184 2 86 1 356 +24465619: 3 662 2 4 655 14 8 51 +539704843: 441 98 704 8 43 +555385: 2 3 544 6 30 8 5 +1043: 38 660 4 94 244 3 +1878237927: 23 206 4 9 959 806 7 +1251687: 92 17 6 8 9 +2345399977: 7 2 72 1 2 2 3 87 52 29 7 +165458073908: 2 5 713 652 8 9 4 7 3 7 8 +7374228: 871 828 434 56 8 +381388999203: 484 22 30 46 29 895 3 +109360: 58 69 86 7 133 +250904195: 2 1 4 787 316 194 +1965347: 6 55 3 324 23 +35445735: 674 6 89 71 39 15 +95043: 89 5 6 9 767 222 2 7 4 +34424017918: 66 2 520 1 7 918 +14968866015: 7 560 9 30 11 5 3 4 +148080: 4 383 9 96 144 +1605016490: 98 27 289 737 742 +1589: 853 729 7 +5957103105: 914 5 5 3 4 8 31 6 7 4 5 +9277990: 363 5 5 7 1 5 9 80 785 5 +6352990: 3 7 4 8 5 500 7 1 6 7 47 5 +37320978: 43 23 424 89 74 +29637: 85 3 3 75 89 +2302: 613 2 630 1 162 280 3 +3248879: 35 3 35 322 5 4 811 5 8 +1300503637440: 284 553 744 530 21 +46840: 13 46 792 62 2 20 20 8 +14889232: 4 7 111 35 529 +40792766: 6 84 9 6 351 8 849 142 +183080878: 303 2 2 3 808 78 +2642434807267: 324 2 78 973 4 818 67 +250272769: 283 9 5 88 769 +20393268: 285 265 2 270 978 +7584298: 1 39 5 9 5 1 30 376 +57874: 456 122 74 +358: 9 7 28 4 2 6 +7503273: 119 38 59 3 81 +1010814576: 9 3 87 113 8 7 544 3 8 5 +147251520: 7 94 535 2 6 38 20 81 +804846: 59 7 4 609 29 2 1 5 811 +49: 26 4 19 +4281957: 320 357 527 3 4 4 605 +11705: 9 19 64 9 752 +7339912: 3 998 4 7 98 4 8 74 +1149195: 342 7 96 5 75 +2742448: 493 871 7 224 2 +893282: 362 6 6 2 9 172 28 34 +11017745: 23 9 4 46 3 531 4 +10289209: 5 9 1 969 90 1 27 3 78 +97182212: 4 1 399 18 213 +3885618429: 37 7 3 5 618 429 +145649: 2 1 503 40 4 603 7 +1994244325926: 9 6 98 8 3 2 4 8 6 612 7 6 +753358: 170 8 337 1 4 365 +34725415: 178 6 5 9 1 29 5 281 13 +4752181: 61 6 8 2 48 46 4 565 1 +83075: 1 1 59 16 176 8 1 3 23 +1568: 384 9 6 58 670 441 +568: 2 4 92 1 15 +3057604703: 33 737 20 7 65 7 56 33 +75583503: 3 4 1 3 82 8 8 2 6 8 3 453 +535701: 5 35 703 +868646: 8 5 55 98 6 63 2 +15938: 6 65 33 9 81 861 8 914 +9587736: 3 6 7 1 64 600 1 3 9 122 +26545365: 6 522 98 83 5 548 65 +806: 80 34 29 628 35 +7440411: 147 7 5 5 529 13 1 +5767327837: 856 3 9 746 612 3 +760463: 748 2 7 3 460 +1198: 2 66 9 4 890 +24090: 2 165 73 +2039: 61 37 7 6 9 84 1 +1252773413800: 260 6 3 944 612 1 6 5 8 +5076: 3 1 22 7 65 2 1 70 705 4 +1666: 8 99 874 +38680: 5 85 2 4 2 740 826 4 5 +4018260980733: 166 8 79 4 7 36 6 911 3 +694586: 9 3 24 3 3 75 1 5 31 +560147: 853 995 49 295 532 +952110: 233 867 241 2 355 +4351466888: 777 9 2 4 3 9 3 8 5 3 48 8 +235411298: 59 399 12 72 26 +26883288: 8 575 3 832 574 +1410522: 6 13 66 5 186 906 7 6 +1129949506: 120 4 545 1 91 938 +3872354737: 459 4 6 3 98 86 573 +16562310435: 36 2 41 8 38 38 6 3 33 +689204: 9 864 233 5 86 +341716: 73 1 468 7 6 +6564: 998 96 3 2 +44417884568: 1 655 27 1 7 71 28 4 2 +7705702: 242 9 10 307 3 +11207000: 31 56 46 875 4 +24160559: 3 21 158 99 63 93 6 +49078: 2 1 25 3 837 5 1 53 +1236600: 5 828 33 1 4 45 30 45 +513: 18 4 444 +3978571982: 7 578 899 584 734 +13354145: 48 378 736 97 2 62 +14527: 6 8 1 3 91 36 +21447: 79 12 69 54 47 +267775223: 575 84 12 462 21 +5775: 8 7 72 2 4 932 3 6 8 498 +1497878269: 5 7 4 2 586 9 1 2 5 82 6 9 +23121860: 48 7 5 57 8 71 95 +10857369642: 4 6 384 8 88 75 3 4 6 6 7 +932783488: 5 5 1 3 8 6 1 9 582 2 56 4 +2903896064: 597 38 125 86 32 32 +215370686: 588 4 8 402 9 686 +59671754: 764 781 8 327 1 +63863: 80 558 63 +4257: 33 707 5 554 3 +78005462388: 299 1 5 4 2 62 914 42 +2975681: 7 2 3 2 5 153 62 35 681 +2348387090: 2 5 3 5 88 6 47 649 2 58 +6444257: 644 31 10 1 5 5 +127456199: 83 1 344 8 2 93 3 3 62 6 +12835539: 8 444 2 4 589 6 7 5 4 3 1 +576660903: 445 957 4 45 4 5 82 6 +231782: 6 9 25 7 3 8 14 3 8 1 589 +20185: 6 96 687 8 589 4 384 +73624: 846 87 8 6 8 +365768460: 865 58 2 2 9 15 9 6 +5651705392737: 9 2 46 9 764 4 10 8 738 +1445852: 7 7 4 8 1 4 7 931 847 3 +47748768: 419 4 9 45 3 8 6 4 76 8 +1530: 7 16 802 576 40 +369276831: 8 5 4 8 8 6 6 5 293 9 9 +362884: 756 48 4 +9764381: 5 57 612 79 438 1 +38172072960: 7 5 46 5 9 7 8 6 487 64 +182419: 40 86 68 52 +5391208: 77 16 32 609 396 7 4 +1858775369: 6 79 4 6 64 2 7 3 5 361 8 +272349334: 7 70 8 5 6 919 7 7 7 803 +524812358925: 772 5 499 791 675 +60225360: 119 4 97 130 4 +610483: 615 32 7 6 31 +140445400: 8 9 513 6 5 6 2 6 5 335 8 +33807: 74 7 31 869 7 +564: 1 53 41 1 6 +85569: 9 4 68 4 5 69 +7538038: 2 742 9 72 72 762 5 +33801065: 655 5 15 522 508 267 +1327354: 57 1 3 64 7 6 619 4 731 +9971885: 7 539 8 6 6 93 6 98 55 +157591051: 3 8 667 729 1 758 4 4 3 +8155139942: 3 5 8 9 8 9 1 6 608 9 470 +3196408936: 3 93 6 6 3 130 530 17 8 +696844: 177 9 1 456 85 46 4 +237: 6 54 74 87 16 +2884: 7 4 81 +817751: 7 18 64 32 860 53 41 6 +15132: 7 96 2 3 6 8 2 98 2 4 8 +40182: 31 8 1 18 3 +42915027: 6 7 91 491 6 6 5 62 38 +6454770: 1 4 912 2 49 9 2 86 2 5 7 +1791058833: 482 1 63 4 5 327 877 9 +21778440: 8 877 32 8 97 +1432635869: 73 70 263 5 870 +3516361578: 95 7 8 17 59 38 9 +10185774: 1 4 291 7 774 +48363374: 41 388 1 95 16 4 3 2 +414087530: 7 8 3 44 6 4 4 5 91 226 5 +1684394: 42 260 6 7 926 +391844044883: 94 2 96 8 864 3 8 77 6 +68679528: 212 455 89 4 4 2 +35327: 1 33 8 83 129 7 +78688519: 54 6 5 3 7 1 574 6 2 3 8 7 +254803543: 2 830 6 5 4 6 6 708 3 7 +8328: 3 7 379 4 2 +1665845626: 2 524 66 5 6 26 +20496: 25 61 83 275 9 7 +51135: 811 1 9 6 7 +19624: 19 538 83 +9320808: 1 53 4 2 84 509 +665835117: 3 2 121 8 13 1 116 +47370468: 3 942 12 65 717 749 +95256840: 30 1 5 14 378 7 60 2 +72396891: 1 6 56 3 9 6 88 8 +233543453: 3 822 93 66 944 595 +14852498: 355 5 7 57 71 8 +1699424384371: 9 42 6 7 3 58 448 371 +3216560517: 899 20 35 605 17 +2947861799159: 310 8 927 179 914 1 9 +1074493: 2 71 84 6 6 45 8 15 88 +22856160: 501 3 401 68 5 24 +46150657: 475 8 975 805 6 +294566194466: 9 1 11 607 6 7 8 43 8 67 +1906225: 188 16 246 2 5 +697073797: 968 6 1 9 5 5 5 381 7 5 2 +8446: 603 14 4 +623712: 6 3 990 7 5 +1175760: 1 59 4 7 6 6 4 17 791 6 3 +108029: 6 7 21 16 493 +2737934408: 700 60 5 373 5 9 4 8 94 +962793351: 4 7 2 9 8 8 81 459 509 +340298846: 232 13 6 5 188 4 9 +22352423: 6 59 5 3 63 2 3 +158129: 3 92 52 32 8 8 8 2 9 1 7 6 +27342360: 61 5 617 559 40 +388943333: 988 8 6 481 807 +349404941: 6 59 987 6 941 +2453435076: 48 34 6 815 43 507 5 1 +2459968: 64 4 532 68 +112240201: 7 2 60 7 97 167 +2794261: 467 128 968 46 26 11 +1591404240: 12 7 88 1 2 5 530 8 +685271: 748 1 34 5 5 5 6 7 1 7 96 +125129: 3 7 61 8 864 129 +8977363: 419 593 900 4 9 1 4 6 1 +5285802882: 73 333 6 26 5 28 82 +2754039386: 7 10 6 12 6 105 375 4 7 +7714: 904 51 8 5 69 +13696188: 201 24 2 43 66 +356: 1 65 278 9 3 +1552880: 6 64 20 7 2 4 518 472 +726: 6 9 4 88 3 +2571102: 4 1 1 992 779 1 8 7 3 8 6 +12357408: 2 12 71 6 28 74 1 +16311762: 570 78 7 83 7 54 3 +1945492386: 105 1 894 49 238 6 +12663: 120 1 9 57 3 +3948815: 615 2 8 8 13 2 +35568: 3 6 4 86 278 3 76 78 +84256728501: 389 3 977 4 7 22 6 501 +823262: 2 239 6 2 17 2 8 15 93 7 +1922397970538: 409 47 8 4 13 9 705 3 9 +487878: 1 3 37 686 542 17 522 +12149430428: 2 596 26 5 15 3 962 1 6 +53923822174: 5 3 4 5 2 372 3 6 9 3 1 74 +475320446: 57 2 8 3 1 26 6 45 9 446 +53313120: 3 78 820 86 2 +41209672: 7 6 7 7 967 8 +1096059: 868 5 6 3 252 70 39 +8981270437: 255 2 1 7 3 4 6 6 293 3 7 +2819374: 5 99 1 1 65 59 2 82 8 7 5 +59366538: 795 78 24 87 11 +17158148125: 66 67 2 8 25 485 +5104238: 642 1 441 6 8 3 7 50 23 +726652028: 9 8 196 22 74 +17442628: 415 3 6 7 28 +71927491: 5 2 5 953 947 +378: 12 8 4 9 9 9 +143620: 24 5 39 58 9 +1043159045: 924 56 4 6 1 15 4 7 2 1 4 +11605: 2 6 1 5 3 1 40 4 2 275 5 +110873998: 590 1 67 55 28 860 +11366115: 33 2 7 7 8 9 5 34 87 +782061: 75 46 3 809 95 383 7 +1800: 4 803 92 2 +640616724329: 634 4 2 5 1 1 67 2 4 329 +80725522: 954 2 47 2 9 76 1 6 2 +3638325089: 498 4 73 50 86 6 +1298: 65 6 553 75 277 +1767: 3 6 7 14 3 +1015662: 880 12 9 8 4 2 79 82 4 6 +63646: 326 302 1 5 829 +3068658291: 73 2 21 2 65 82 20 71 +15947888527: 632 341 74 16 2 365 +84891057: 9 3 9 96 4 282 74 8 3 9 +64512058: 8 80 168 3 2 58 +2369411264: 14 7 241 1 8 76 88 +2149: 7 9 19 4 948 +490410: 6 6 7 1 3 7 796 5 1 66 3 +63693072702: 772 6 86 45 3 721 5 9 9 +131248727: 63 1 52 4 727 +2017216: 64 9 34 7 355 25 3 4 43 +31570503: 8 9 7 2 4 7 593 99 5 8 +12286406: 7 679 40 4 6 +13258167603154: 220 969 46 60 3 156 +145989: 1 14 343 262 27 +17418519: 73 8 852 94 35 349 +8780960: 5 37 7 9 45 644 6 5 1 8 +15582563: 106 147 54 9 13 1 +302719950: 7 5 528 1 1 7 4 1 1 117 5 +27078: 5 9 2 2 63 28 +1341462168: 67 7 7 84 32 705 2 2 38 +47837667: 4 4 89 536 5 43 4 7 7 50 +3218800322172: 829 5 87 71 19 388 +9487: 49 3 24 7 655 8 6 8 65 9 +511530: 86 90 335 5 30 +37776704: 82 4 4 6 59 638 2 43 +1516669: 6 8 73 212 1 1 1 1 7 4 1 9 +2976000: 6 861 96 15 49 6 +2250547200: 48 814 160 4 90 +287703313: 9 31 8 703 313 +164099: 6 266 201 3 83 +333048: 437 7 111 6 40 8 +465768: 6 69 72 88 1 3 6 2 70 2 +220981018752: 52 8 901 954 618 +3127780532529: 4 991 8 8 946 9 83 32 4 +1064536: 905 98 7 8 1 3 5 14 4 +21752: 8 6 6 8 2 3 46 8 642 3 1 3 +8310: 54 26 840 1 9 1 30 +16196934098: 9 198 65 3 780 98 +2160: 1 5 2 3 24 +112353: 2 89 5 1 4 7 1 333 2 8 17 +8516: 2 7 8 28 7 12 939 2 96 3 +386713691: 478 809 3 8 691 +939440420428: 1 306 30 2 51 1 5 4 4 2 8 +81838: 9 9 761 77 +13775572: 4 21 53 755 72 +132: 42 60 30 +676221: 59 617 2 2 1 +4291208: 2 4 2 5 459 2 74 80 8 5 8 +1558088784: 3 15 2 638 662 97 8 6 6 +191059: 3 182 58 547 9 +2093071741: 6 933 1 6 94 84 47 61 +7165: 1 3 4 7 4 8 3 4 86 1 726 5 +37760: 6 7 7 52 373 1 3 23 4 56 +46798645: 6 7 4 7 8 4 36 2 2 7 965 5 +51543100: 49 4 4 3 409 785 1 5 4 7 +4723119765: 9 6 7 603 1 9 8 1 86 9 +36258390: 6 534 484 383 859 5 6 +1064: 45 2 522 454 +4021732: 57 30 9 335 979 2 +1202: 4 6 1 91 8 +1018471272: 534 3 761 733 8 7 588 +1145208162: 99 769 608 5 8 62 30 7 +32751667271: 9 885 3 80 734 70 5 66 +42116984167: 494 325 5 8 852 7 +2698900: 9 4 49 45 20 +12015: 513 225 6 16 61 50 +547007: 1 460 29 41 66 1 +438450: 20 388 17 992 50 +29582225: 1 1 277 5 72 8 4 2 27 +26610922655: 315 1 5 829 22 6 55 +898290075: 8 98 2 8 97 8 3 3 7 16 5 +25678224: 2 86 26 99 58 +8368417979: 8 4 211 866 60 3 +100799: 700 473 3 81 8 7 16 9 +421835040: 26 631 80 33 6 +91295955: 45 7 83 4 90 2 3 915 79 +130271676: 24 69 5 3 9 34 426 8 3 +1253504: 7 743 241 3 51 9 +3987863381: 9 91 629 919 54 7 4 9 +473941: 4 48 3 15 7 9 382 +22287368: 681 75 94 95 6 8 46 +9234220: 8 8 1 4 6 5 382 43 73 5 8 +85349: 378 9 9 25 74 +6555283: 9 36 469 7 +279138660: 1 2 5 487 932 41 +291432573718: 291 432 573 715 3 +445193: 4 5 9 9 33 8 4 460 7 7 28 +4065: 4 10 65 +20472: 1 94 62 893 41 3 +28878635: 18 7 385 909 294 3 26 +54981: 64 11 6 1 13 56 +14122: 6 5 2 5 46 +266843: 77 82 6 5 600 97 38 7 +314423826: 40 692 89 3 771 +5789580075: 594 4 5 5 303 5 321 +209024064: 241 2 1 85 2 432 +11882: 32 196 44 886 964 +49864: 5 5 22 9 166 +924665242: 3 4 80 466 524 2 +130149: 2 4 8 889 5 4 23 674 5 3 +71274451365: 3 45 1 1 6 6 888 746 7 5 +8816477: 91 48 218 42 588 5 +631041934248: 27 681 312 85 68 11 +39396888: 7 578 970 41 619 612 +80199600: 56 645 79 530 2 97 +22088: 309 3 8 134 5 6 5 8 7 6 3 +434604809: 3 71 8 869 224 5 89 4 9 +20044999032: 94 9 1 88 4 6 6 51 1 6 6 +2666519: 2 7 95 2 58 2 588 3 1 8 +5163719738854: 9 96 857 7 647 1 37 2 +44045: 8 35 1 689 6 7 36 23 +37806900: 1 7 250 2 6 6 9 9 4 1 5 60 +777753619876: 324 8 5 5 603 3 8 9 2 9 7 +53812: 515 22 97 5 4 6 +148622545393: 5 9 87 1 9 7 7 36 5 8 92 3 +54179: 38 4 185 237 380 +90743: 92 975 390 42 611 +20583: 57 361 1 6 +1613374438: 49 774 19 2 853 +80455846: 1 872 18 4 4 4 4 8 5 4 2 4 +27720: 663 76 53 7 5 +7079722751: 70 53 18 8 722 6 77 74 +444271196058300: 6 827 58 869 964 675 +266183007: 899 209 1 9 9 3 1 7 6 8 +84506094: 6 4 780 993 65 99 195 +599644: 7 4 44 987 1 9 1 7 6 5 4 +8160651: 8 159 8 99 747 7 +266326391300: 7 198 37 3 905 8 4 718 +4552311570: 1 2 8 4 4 101 8 8 7 3 262 +2676: 7 6 5 6 9 2 539 61 4 2 1 9 +19462: 5 735 71 3 8 +36876: 83 9 4 76 +1768120275648: 5 52 4 97 6 7 75 648 +4592: 95 48 33 +219223043: 2 54 9 1 77 8 94 320 +2678097: 98 5 4 65 97 +2882547: 44 5 768 8 7 7 5 8 9 54 +154405578: 53 483 13 96 9 37 3 +96526192842: 8 719 4 2 59 6 22 22 2 +713592: 4 8 5 11 6 636 +63693177: 1 399 97 9 6 3 7 3 1 177 +201358: 30 6 65 245 8 +2254767: 49 82 84 73 90 1 2 89 3 +977764227: 48 3 679 4 226 +10015215: 4 930 3 1 8 8 2 6 713 4 7 +26323690657: 367 8 1 7 3 6 904 1 2 58 +61061190261: 7 7 793 183 8 64 61 +1286: 6 96 5 771 3 2 +447: 5 440 2 +785633: 982 8 33 +1137947: 2 316 3 58 6 +958321225: 3 8 6 1 1 14 7 183 366 1 +1800631: 9 9 439 4 2 46 3 6 1 81 1 +449328: 387 5 5 613 176 +6354: 794 6 5 5 687 893 +44233: 78 7 81 5 +5252: 3 2 41 4 3 +3381915: 2 63 720 7 6 849 15 +661467674: 7 3 9 3 86 8 599 6 1 73 1 +6271014: 1 9 97 2 22 340 77 750 +6034: 685 1 81 96 7 +770523445: 80 214 2 7 9 2 5 1 363 5 +25002746133: 31 248 8 43 461 2 1 3 +7024754: 876 578 4 69 7 +289920: 302 8 4 6 5 +994896840: 4 813 3 945 564 2 84 5 +2429887: 90 5 4 459 767 803 9 +9438924: 94 3 1 892 4 +50505: 79 5 2 19 481 +770559050: 377 550 4 50 929 +217464992352: 23 468 12 143 8 8 9 9 +3009273: 29 989 8 999 30 3 +3028939095282: 3 264 5 28 3 3 7 65 2 8 2 +9264583: 3 6 68 8 5 2 6 9 782 7 +9998123: 3 20 9 7 69 21 +522580967: 7 3 53 986 967 +9052256: 60 7 6 9 9 8 23 58 2 914 +495661: 203 5 6 21 81 577 93 +365030675: 77 3 9 119 77 59 25 25 +455763: 3 85 15 4 422 3 +554688: 69 223 16 97 8 +4579: 1 5 21 5 7 1 69 6 1 93 +8698353: 55 2 4 3 3 7 187 7 2 5 3 +626000891: 894 28 698 7 5 +667837: 2 8 212 3 9 8 7 3 4 8 25 +34484: 368 98 74 +2580: 58 2 43 +17105994641: 3 4 418 5 1 7 71 9 4 7 4 +48528: 2 96 61 88 8 +387978366062: 7 917 12 80 583 1 7 7 7 +6170742: 7 565 4 3 899 6 +77987948: 7 33 2 37 7 879 48 +184645: 475 8 76 221 5 +415893: 64 7 9 8 8 88 5 452 49 4 +5727312: 12 45 188 85 1 2 1 +992315: 9 91 38 93 2 +15165: 84 4 1 5 9 +961813017: 57 1 7 5 1 4 5 542 6 4 8 1 +220594828: 5 4 84 5 605 87 40 479 +8752280: 13 698 889 6 80 +755373444668: 645 6 183 3 6 6 9 6 8 65 +15172877612: 436 348 73 4 612 +7385177837: 9 7 7 59 51 7 72 7 9 558 +1568973129: 6 1 3 6 6 6 575 45 2 96 9 +15789456: 26 7 614 76 261 +3038250054: 2 297 1 4 825 5 5 1 4 5 8 +16833: 977 506 47 11 3 +39578980942: 19 789 490 47 2 2 +151692862: 90 3 67 21 7 8 62 +530864308107: 4 1 2 3 6 527 6 7 7 7 81 +52263: 963 9 2 3 260 +864: 9 62 7 8 772 6 +816484929: 6 6 15 56 41 2 1 6 4 4 1 +67327203626: 131 95 23 6 90 3 626 +60: 8 4 28 +36276789519: 4 453 25 615 99 81 +8809691: 2 3 2 193 429 71 80 92 +2052036449131: 569 74 513 5 675 95 6 +8690327: 8 592 97 395 931 +18866: 261 9 8 70 4 +5024917335: 506 906 97 3 113 +2545759132: 6 199 30 2 6 1 1 20 62 7 +5544619441: 92 410 3 6 6 8 41 +12856: 2 837 390 378 8 +4109448: 26 9 80 4 7 3 8 6 4 366 +706240349: 7 5 5 6 8 6 2 3 5 67 4 9 +143401: 1 6 8 3 634 5 707 1 1 42 +3312: 4 19 6 8 3 +200795: 7 2 37 8 386 7 775 65 +597788756: 41 43 8 31 8 9 2 9 4 8 5 9 +43057980: 5 5 3 913 9 7 8 58 6 945 +815894331: 39 2 774 894 329 +5392576857: 5 447 9 3 5 6 22 3 8 619 +279728949679: 113 1 71 6 8 4 3 9 8 7 2 6 +2729370: 71 7 242 692 1 4 6 317 +875: 345 15 8 4 7 41 9 439 7 +14985224: 5 3 317 311 19 +8825568: 702 47 9 97 9 9 5 8 4 6 4 +29595: 9 12 269 3 395 52 91 2 +294474951464: 3 2 718 8 6 3 90 9 1 4 6 4 +3371940: 5 858 131 6 +1563509: 6 26 2 942 567 +424: 38 2 77 271 +14050260: 25 75 14 8 6 8 49 413 4 +120499894680: 11 32 6 49 8 861 9 7 9 +4298688: 28 24 68 136 6 +197892: 77 86 76 9 92 +13400: 55 69 2 262 282 20 +4745778313: 2 1 47 7 10 3 114 16 7 3 +2314: 51 27 62 869 6 +3635936: 4 7 1 9 9 6 6 10 8 6 362 8 +137760: 5 4 26 656 6 +7645820: 2 2 5 3 21 3 4 9 621 63 5 +21660918: 890 566 43 3 95 +722711: 4 68 152 25 5 879 57 +7368978355: 7 368 697 281 355 +2875726825740: 9 3 2 4 9 5 391 424 5 60 +37640889: 8 30 1 5 8 9 305 9 5 5 8 8 +6746614164: 4 5 321 127 332 +4094176223: 9 8 2 3 2 1 544 4 2 1 1 1 +1732: 2 21 9 5 64 9 687 1 27 +2880088: 6 5 93 6 87 813 9 9 9 2 8 +619447169: 879 714 987 46 1 +3197458: 415 30 653 84 1 1 8 11 +2219707: 51 335 3 2 7 811 +234: 7 5 5 9 50 +30353824910: 71 91 870 54 469 10 +1081106212608: 8 959 559 1 50 3 15 4 8 +273013437132: 6 964 6 98 27 9 277 6 4 +1960058: 984 8 1 957 3 74 1 9 6 5 +19648872: 5 14 64 887 2 +19853451: 34 80 10 5 42 32 8 +48399142213: 3 6 3 640 4 2 6 2 8 9 6 14 +107420: 4 27 989 533 9 8 55 3 +34921: 5 92 9 4 4 +8857632: 15 8 580 573 269 28 +190448064: 1 6 4 2 1 7 47 614 2 6 4 3 +15562696212: 593 20 9 9 50 11 2 324 +44634703572: 4 69 838 98 5 95 +2712945205: 677 1 5 2 5 3 57 6 20 2 5 +127609477: 9 6 3 651 99 8 2 218 2 +10118634: 1 862 26 72 90 5 834 +131012422: 80 5 4 8 3 76 9 807 7 +23814144: 3 57 3 4 9 41 4 34 1 96 8 +227387160: 568 6 210 44 9 +6520531715: 333 61 3 548 107 79 +1097244: 545 2 76 768 10 174 +23639802750: 367 4 7 78 2 91 9 41 9 5 +335172916: 56 7 24 53 919 +30: 2 3 7 +3521: 15 336 4 3 1 +319968: 66 8 606 +873380: 1 44 60 93 79 +809700: 8 4 8 702 83 12 +58684: 54 3 1 69 485 96 28 +846269: 4 10 41 516 5 2 22 +51000: 5 136 75 +62599252: 677 94 38 5 983 829 +227717591: 61 56 6 8 3 617 6 167 +19508244: 83 77 72 8 3 204 9 994 +1970830: 39 41 66 5 1 +17424: 6 5 4 32 1 5 9 2 5 24 +52655292: 648 70 89 824 44 +16632105137: 572 5 5 9 4 8 5 8 1 6 97 7 +871: 734 66 71 +176335914: 817 22 1 694 1 6 7 9 3 +24947480114: 8 7 32 1 1 87 3 507 8 2 +606671: 464 75 886 17 8 1 +1383836: 795 1 5 8 347 +2380006962: 8 9 89 7 794 82 141 +2190132: 3 444 578 987 756 +14178: 70 72 2 10 15 9 +1036479406050: 481 4 533 90 495 81 1 +358952220: 177 818 1 9 44 911 +51333269: 47 155 7 337 568 701 +617394060: 348 22 6 3 985 +38196778112: 85 627 16 446 110 +5547327: 616 260 99 9 96 +51231068: 68 894 6 3 9 19 28 +1861484625: 3 548 351 125 77 +3771603234999: 4 7 747 459 234 996 +21430404: 521 8 305 3 388 +26427: 8 4 29 5 8 50 9 5 5 2 4 2 +3371697205: 374 6 330 17 1 4 1 9 1 +11332496952: 1 86 480 8 85 1 76 3 2 7 +73031629: 90 4 5 149 9 2 24 5 +613434: 9 939 6 6 3 4 1 2 741 1 6 +70836214: 271 4 9 19 9 29 +3431889: 442 3 7 77 2 +34170854019: 4 4 961 1 5 6 9 760 1 3 6 +167263: 893 696 81 67 185 9 +273904873: 2 7 3 900 4 44 71 +1365: 25 9 56 4 6 4 2 3 45 5 3 +120350462: 22 547 99 5 62 +32866800: 9 2 7 237 1 174 6 898 1 +28164517: 7 2 520 14 6 517 +108996: 10 1 89 193 93 +313563656: 171 6 272 895 2 5 6 56 +4430029187: 517 9 354 38 952 +59205190: 982 94 488 29 61 22 +8827747002: 13 57 7 42 8 3 7 1 6 1 6 6 +360744024: 9 5 5 433 32 1 16 24 +2473591: 3 762 187 591 1 +29482630: 8 8 67 526 5 +166320055: 313 3 34 6 792 55 +1898094: 31 6 3 49 6 +15911812: 23 8 2 7 8 213 74 937 3 +13734292: 9 254 21 16 286 +177935: 51 7 1 532 6 13 7 5 7 3 8 +128331: 79 274 98 872 97 +537606: 53 7 606 +17655: 5 6 7 81 645 +93780: 525 89 86 8 71 2 +2911393686391: 485 232 273 4 4 6 3 88 +89071041: 7 5 430 838 7 3 +97904: 968 78 45 984 +149112769: 78 48 19 76 9 +968: 9 3 5 3 3 785 +26945100865: 9 4 9 5 455 2 7 85 1 8 5 2 +1744: 27 8 6 8 8 +1011786: 75 79 9 730 6 +326082: 172 87 73 387 7 726 3 +5205200: 34 60 8 98 8 385 65 +65552004: 6 98 687 665 21 2 81 +64161615: 6 4 4 8 2 4 38 2 4 9 7 5 +925274: 299 2 56 4 449 9 301 +152757620568: 6 46 833 3 3 14 61 778 +478023271136: 59 980 759 93 2 8 787 +827867669576: 943 853 78 166 62 +1057: 21 8 41 3 5 7 +3732: 3 9 99 32 2 3 4 9 3 4 1 14 +306435: 7 837 13 2 357 252 3 +95374: 254 3 371 25 +323784: 136 144 5 2 72 7 3 9 8 +79583804468: 3 8 303 66 7 80 4 4 68 +2641410234552: 737 8 8 7 279 2 634 4 4 +4482239: 5 1 3 41 6 54 239 +20539: 4 1 433 48 7 17 6 14 7 4 +1140273895: 35 6 9 5 1 56 46 53 93 2 +138470: 62 4 99 399 17 +13060887: 6 31 58 41 7 +518770: 88 601 5 6 69 8 5 5 95 +1407: 374 883 70 71 9 +350771: 7 350 51 14 54 7 1 8 8 4 +9713019312: 224 83 810 31 432 +33823: 3 38 11 6 6 +322257308: 1 94 8 94 53 2 712 86 +864: 1 3 3 16 9 +137659: 50 87 600 18 41 +47070741: 66 83 8 1 858 +22062: 240 116 5 8 6 1 6 297 2 +1710106191: 134 4 52 1 9 9 3 999 1 9 +1382639297404: 383 1 6 390 8 829 60 4 +77707: 12 58 598 20 3 67 +1678500: 12 31 98 2 45 +349860: 237 1 374 9 9 91 317 7 +77170: 767 6 168 82 8 +994003: 22 954 1 155 5 47 diff --git a/src/day-7.lisp b/src/day-7.lisp @@ -0,0 +1,44 @@ +(defpackage #:aoc/day-7 + (:use #:cl #:aoc/utils) + (:export #:day-7)) +(in-package #:aoc/day-7) + +(defparameter *operators-task-1* '(+ *)) +(defparameter *operators-task-2* '(+ * combine)) + +(defun map-operation-combinations (function length operators) + (apply #'map-product function (loop for n from 1 below length + collect operators))) + +(defun number-digits (number) + (if (zerop number) + 1 + (1+ (floor (log number 10))))) + +(defun combine (num-1 num-2) + (+ (* num-1 (expt 10 (number-digits num-2))) num-2)) + +(defun calculate (operators numbers) + (loop with current = (car numbers) + for operator in operators + for next in (cdr numbers) + do (setf current (funcall operator current next)) + finally (return current))) + +(defun test-value-valid-p (test-value numbers operators) + (map-operation-combinations (lambda (&rest operators) + (when (= test-value (calculate operators numbers)) + (return-from test-value-valid-p t))) + (length numbers) + operators) + nil) + +(defun day-7 (input) + (loop for line = (read-line input nil) + until (null line) + for (test-value . numbers) = (read-number-list line) + when (test-value-valid-p test-value numbers *operators-task-1*) + sum test-value into task-1 + when (test-value-valid-p test-value numbers *operators-task-2*) + sum test-value into task-2 + finally (return (values task-1 task-2)))) diff --git a/t/day-7.lisp b/t/day-7.lisp @@ -0,0 +1,19 @@ +(defpackage #:aoc-test/day-7 + (:use #:cl #:lisp-unit2) + (:import-from #:aoc/day-7)) +(in-package #:aoc-test/day-7) + +(define-test test-day-7 + () + (multiple-value-bind (task-1 task-2) + (aoc:run-day 7 "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") + (assert= 3749 task-1) + (assert= 11387 task-2)))