diff --git a/day1/solution.c b/day1/solution.c index bfed9b8..265a630 100644 --- a/day1/solution.c +++ b/day1/solution.c @@ -1,3 +1,5 @@ +#include + #include "parse.h" #include "heapsort.h" #include "abs.h" @@ -23,7 +25,7 @@ static int parse_input(const char * input, int length, struct list * list) return i; } -int day1_part1(const char * input, int length) +int64_t day1_part1(const char * input, int length) { struct list list; int list_length = parse_input(input, length, &list); @@ -40,7 +42,7 @@ int day1_part1(const char * input, int length) return sum; } -int day1_part2(const char * input, int length) +int64_t day1_part2(const char * input, int length) { struct list list; int list_length = parse_input(input, length, &list); diff --git a/day2/solution.c b/day2/solution.c index f2f2610..aa39937 100644 --- a/day2/solution.c +++ b/day2/solution.c @@ -1,3 +1,4 @@ +#include #include #include "parse.h" @@ -64,7 +65,7 @@ static bool report_safe(struct report * report, int skip) return true; } -int day2_part1(const char * input, int length) +int64_t day2_part1(const char * input, int length) { struct report report[1000]; @@ -78,7 +79,7 @@ int day2_part1(const char * input, int length) return sum; } -int day2_part2(const char * input, int length) +int64_t day2_part2(const char * input, int length) { struct report report[1000]; diff --git a/day3/solution.c b/day3/solution.c index 20695f9..224b7ef 100644 --- a/day3/solution.c +++ b/day3/solution.c @@ -1,3 +1,4 @@ +#include #include #include @@ -88,7 +89,7 @@ int parse_input(const char * input, int length, struct instruction * ins) return i; } -int day3_part1(const char * input, int length) +int64_t day3_part1(const char * input, int length) { struct instruction ins[1000]; @@ -103,7 +104,7 @@ int day3_part1(const char * input, int length) return sum; } -int day3_part2(const char * input, int length) +int64_t day3_part2(const char * input, int length) { struct instruction ins[1000]; diff --git a/day4/solution.c b/day4/solution.c index c2c4f18..1d5724b 100644 --- a/day4/solution.c +++ b/day4/solution.c @@ -1,3 +1,4 @@ +#include #include #include "printf.h" @@ -131,7 +132,7 @@ static bool offset_match_cross(const char * input, return match1 || match2; } -int day4_part1(const char * input, int length) +int64_t day4_part1(const char * input, int length) { int stride = parse_stride(input, length); int height = parse_height(input, length); @@ -159,7 +160,7 @@ int day4_part1(const char * input, int length) return match_count; } -int day4_part2(const char * input, int length) +int64_t day4_part2(const char * input, int length) { int stride = parse_stride(input, length); int height = parse_height(input, length); diff --git a/day5/solution.c b/day5/solution.c index 080fe36..03dfd02 100644 --- a/day5/solution.c +++ b/day5/solution.c @@ -1,3 +1,4 @@ +#include #include #include "parse.h" @@ -115,12 +116,12 @@ static int solve(const char * input, int length, bool correctly_ordered) return sum; } -int day5_part1(const char * input, int length) +int64_t day5_part1(const char * input, int length) { return solve(input, length, true); } -int day5_part2(const char * input, int length) +int64_t day5_part2(const char * input, int length) { return solve(input, length, false); } diff --git a/day6/solution.c b/day6/solution.c index b4732e1..4891821 100644 --- a/day6/solution.c +++ b/day6/solution.c @@ -1,5 +1,7 @@ +#include #include #include + #include "printf.h" #include "parse.h" @@ -128,7 +130,7 @@ void state_init(int part, day6_state.guard[0] = guard; } -int day6_part1(const char * input, int length) +int64_t day6_part1(const char * input, int length) { int stride = parse_stride(input, length); int height = parse_height(input, length); @@ -203,7 +205,7 @@ static bool speculative_obstacle_causes_loop(const char * input, return false; } -int day6_part2(const char * input, int length) +int64_t day6_part2(const char * input, int length) { int stride = parse_stride(input, length); int height = parse_height(input, length); diff --git a/day7/input.txt b/day7/input.txt new file mode 100644 index 0000000..d2e9db3 --- /dev/null +++ b/day7/input.txt @@ -0,0 +1,850 @@ +12615: 804 5 2 1 5 7 7 7 1 3 3 5 +33925: 7 7 4 3 2 1 7 36 4 8 881 3 +1046107888: 263 576 34 8 863 +700274: 700 15 3 33 88 +16420652: 202 241 8 74 3 5 35 +660814849: 569 509 613 847 1 +29746: 33 498 56 9 1 +763511: 7 442 17 2 11 +19200948413: 4 2 6 9 9 3 33 1 896 8 2 5 +1833667: 240 764 4 2 8 +19457968: 1 741 691 38 6 781 +1136: 7 1 3 31 5 +1874160190: 8 8 22 2 8 4 64 5 5 5 133 +13721299: 48 44 354 386 8 +1899744: 85 458 648 8 6 +554415: 46 9 435 6 5 +91193289: 1 4 5 7 301 91 81 6 96 8 +36776916040: 9 4 42 4 75 3 5 561 4 43 +128828: 61 9 456 787 5 69 8 +5273196: 633 9 9 81 97 +10935737837: 6 5 7 612 5 3 73 1 78 36 +902461: 45 122 1 4 5 +1327804638093: 2 3 8 597 7 8 8 883 463 +102018: 277 91 94 8 550 20 +8951006747: 843 6 880 4 421 599 2 +407827: 814 1 66 1 5 +3181026: 1 9 704 6 251 50 84 89 +2254430: 7 1 45 8 7 302 +614187: 4 644 306 19 6 5 57 7 3 +4820287: 11 7 43 93 692 4 3 19 6 +2695156093882: 23 7 558 535 8 6 6 3 84 +61814410: 35 44 1 2 8 7 1 1 6 2 9 3 +14769966: 2 7 2 5 5 8 7 5 1 995 1 4 +87113: 3 829 35 5 64 +209723664824: 2 9 5 4 556 2 23 1 3 826 +6522: 28 86 54 32 334 +7552020582: 63 81 3 609 301 2 81 +4507014: 3 3 3 1 9 77 7 9 6 5 71 3 +12923202: 1 4 90 8 5 2 8 3 3 6 572 6 +12392: 4 95 898 9 91 799 +294789341: 25 7 35 94 4 7 6 3 7 +72913: 34 17 22 882 6 49 +69385571: 85 660 6 6 81 +4575: 96 53 7 3 9 74 +704039583: 80 9 2 40 9 87 +8481251708752: 268 5 3 56 2 6 4 47 75 1 +595700: 12 6 443 635 518 +4381885420: 1 7 1 8 3 5 369 2 5 408 9 +18639667: 6 4 9 981 667 +121169760: 46 3 279 2 9 81 2 4 3 82 +45035: 176 248 482 900 5 +923326: 5 917 34 9 234 746 +53784612: 2 6 6 1 4 23 2 7 41 4 609 +524271640: 43 15 927 71 637 +30631969: 895 33 24 55 6 38 9 +583593561: 83 9 14 5 93 58 96 4 6 +204744990: 846 6 5 1 8 1 8 7 16 3 9 3 +12817652: 2 64 1 67 10 942 +142228: 3 3 91 5 7 4 215 1 7 2 74 +2952720220097: 9 1 3 4 45 60 5 501 7 8 4 +1281605970: 801 200 7 46 8 2 +205858: 76 4 34 45 5 9 4 2 5 581 +26828150: 11 34 3 3 706 93 56 1 1 +819158: 9 40 46 1 8 3 712 158 +19395810: 8 1 142 88 8 7 81 2 3 6 +220127627: 90 6 2 2 4 7 1 6 286 6 +58968: 464 2 2 9 14 +6881901879985: 996 638 57 2 1 19 87 +22484140: 70 753 9 435 423 +3634605: 3 484 60 7 17 6 9 4 1 7 4 +1585232880: 2 6 9 7 7 4 851 1 6 11 8 7 +20496290: 658 3 76 408 2 +73616: 3 8 37 39 92 2 8 +800: 709 3 47 41 1 +1340484319: 1 556 3 5 71 8 3 1 2 4 7 8 +2198657172: 5 196 17 6 72 45 56 4 3 +254513: 318 1 1 3 8 9 +37479836067: 945 16 39 78 5 60 64 +24112988: 61 19 376 63 3 +1492811: 75 9 70 34 18 +405446931: 5 9 2 2 901 924 7 5 7 4 9 +1619555207: 75 5 4 6 4 45 7 7 7 7 205 +22187314586045: 9 8 9 5 71 85 8 8 6 51 1 4 +1395487: 857 4 4 95 1 495 1 4 +626025: 59 9 1 78 849 398 4 5 +414830: 93 4 404 69 4 3 +382136: 2 6 62 9 2 2 5 533 3 7 8 +147217631372: 1 99 3 6 7 6 9 45 1 716 7 +303509: 105 798 3 7 2 1 7 8 45 +772677938: 760 6 6 677 935 +549726257651: 3 9 9 8 3 9 2 3 3 3 14 725 +1252317150: 2 19 535 58 1 4 40 225 +616863634: 84 90 139 35 587 9 +17404425260: 870 2 1 21 2 5 248 9 1 +5717542240278: 9 6 5 159 96 987 9 102 +31826589849: 3 1 826 5 851 9 466 1 +1576284: 5 7 4 1 4 1 1 5 320 5 3 6 +6077335228: 59 79 98 334 5 7 30 +550434: 38 6 4 9 23 114 280 3 +10227883: 5 9 7 3 721 6 1 3 5 6 5 9 +3314108926: 87 9 851 2 3 52 338 3 +25523070: 5 51 22 176 892 +25781933829: 257 818 942 389 7 26 +5517196720: 4 70 71 473 3 2 35 +39957: 98 30 965 2 93 815 +489483804: 593 4 491 168 10 +333230997: 1 32 7 410 2 144 308 +29526863042: 5 724 478 237 72 +2316083879755: 687 265 337 82 9 7 5 6 +2867208: 71 75 308 509 8 6 +1593944414484: 253 63 444 144 87 +2516562: 8 1 6 7 41 2 429 7 34 7 7 +39215953: 4 976 39 89 4 +408331: 2 314 176 985 84 +68483: 2 9 96 414 9 2 13 7 9 +76532283502: 7 64 48 1 837 4 83 50 4 +367445644: 32 5 7 5 71 6 2 8 7 8 8 81 +970551: 506 95 418 4 1 9 5 746 +1931531: 3 9 7 9 12 9 631 480 10 +6920242: 1 4 65 20 239 +4262: 4 79 46 73 17 354 +5307445: 5 30 7 441 1 +126430: 8 59 59 42 7 +246780: 264 44 114 7 1 7 7 898 +19980364464: 9 387 705 7 1 16 9 71 +221570: 4 2 314 331 70 +5996087: 6 8 62 46 41 +1996930097: 6 20 19 385 1 8 523 4 2 +170504569: 276 8 1 31 43 2 5 6 3 +116291719335: 6 9 782 505 5 3 442 33 +932253926: 971 320 3 93 926 +118: 76 8 31 +860850091000: 48 427 4 2 1 5 369 84 4 +131: 6 2 56 2 61 4 +15234086180: 84 8 8 456 3 8 61 7 4 2 9 +86790443: 919 20 787 6 83 +923888: 1 635 939 7 292 2 1 +1130341: 292 79 7 1 7 +205860750: 99 501 4 1 47 7 5 3 7 83 +1077: 82 898 97 +704222: 703 858 366 +1674169: 50 95 8 49 44 6 7 +1718200487: 2 7 917 5 331 364 +4630570616793: 3 2 9 4 798 471 7 8 792 +514295124840: 1 929 77 76 8 101 840 +65231559928: 407 4 2 972 4 9 4 1 16 9 +17814590: 5 328 62 451 85 6 +15130530: 5 29 741 4 3 2 488 87 2 +1026969: 142 1 7 877 969 +40230464: 18 27 894 463 1 +3443736: 321 9 149 6 8 +402: 49 5 8 143 5 +452065: 1 797 311 1 408 +8069098637: 806 89 1 97 9 7 66 1 8 +16129969360: 700 887 416 23 35 7 +1002697947384: 4 6 4 9 9 96 59 388 3 2 7 +1379379617088: 5 507 9 559 3 85 7 63 1 +2346403: 4 7 5 74 2 4 3 7 6 6 8 20 +7509412: 4 27 7 5 8 68 6 6 510 7 4 +29093479449: 1 16 77 229 40 4 6 68 +259998: 4 71 1 19 6 6 8 6 5 691 +2436234977277: 68 64 260 566 4 951 +189021992340: 193 67 976 6 66 3 40 +1492448: 24 8 7 41 6 +61581011: 9 9 9 54 5 51 9 103 87 7 +16976: 1 55 5 9 3 +799980: 744 4 1 51 977 +386155: 58 76 810 74 23 +102708121: 4 5 6 26 8 195 7 9 6 2 6 1 +9053097: 2 80 7 47 8 90 4 3 6 519 +2844455328: 37 6 945 7 533 1 +326750483: 7 18 7 169 3 4 1 548 4 3 +99445021898: 9 3 41 8 2 5 1 9 2 907 25 +83874: 238 42 296 6 988 +171779: 4 412 65 4 78 4 +5150458425: 1 4 9 39 8 39 66 83 842 +91887843756: 980 137 5 625 3 4 +144563844: 727 1 4 788 8 3 3 7 12 +6369361600: 65 14 306 3 8 320 823 +372861: 981 2 38 7 +20610: 205 99 9 1 4 +101170: 5 4 6 5 775 3 64 344 1 8 +3256828274195: 650 5 7 79 56 54 839 5 +23531: 80 224 6 702 85 3 9 2 5 +862035: 75 778 85 818 5 +337124: 4 1 9 2 2 5 2 3 3 1 6 725 +21207288: 154 7 9 5 3 370 7 8 46 +118311418: 98 34 89 83 1 4 21 +19027710: 2 466 88 58 4 +50793: 33 9 5 6 1 6 17 +1788068073: 388 9 3 4 8 6 4 7 7 7 9 4 +7274340: 993 70 5 76 9 +3598942581: 24 250 291 51 5 74 +14696: 7 1 8 82 94 +2960064560: 1 1 83 6 90 1 6 6 6 8 490 +31493133: 157 4 1 6 5 4 3 5 8 1 9 2 +48391: 3 6 94 432 7 +1508923: 1 831 676 92 3 +264640: 817 10 8 8 5 +31331: 5 7 57 22 2 26 470 739 +52034312079: 577 5 79 580 9 207 1 9 +4085878333: 8 910 61 61 92 +208153292: 3 1 239 4 72 7 9 3 7 6 4 8 +54112: 483 1 7 1 16 +3254589: 945 574 6 5 4 +1833763942: 7 63 180 42 463 61 4 5 +48168908: 7 2 1 75 7 375 2 7 148 +782858072: 5 245 13 639 2 +753: 2 5 20 2 14 243 96 +2422200: 519 2 690 100 2 +26470844: 348 3 76 4 2 +107164: 1 153 93 86 8 +55198753: 1 2 11 3 14 3 9 7 9 2 56 +46459108: 5 31 479 9 931 7 111 +514568039289: 52 37 3 982 390 2 92 +100240: 6 13 547 501 5 +2922092248: 2 9 2 52 94 769 1 5 9 10 +894623027: 6 6 3 77 9 30 6 3 5 35 24 +1917027689: 83 22 5 824 163 722 +20040668: 194 4 68 9 258 +284: 1 56 3 225 +4169656344672: 909 5 57 502 4 91 438 +16386749280: 8 784 2 145 506 141 +352590058: 75 322 2 73 45 4 6 +622: 98 1 433 10 40 41 +2681459: 65 4 41 2 5 37 +98997: 2 65 835 24 94 +57160224: 5 720 5 17 2 8 8 8 396 8 +56454895448: 740 762 668 954 49 +86649004: 892 70 7 608 9 530 +625876561: 5 744 8 5 261 765 1 5 3 +210366055: 6 4 5 7 756 9 7 27 115 5 +16118332454: 3 537 8 332 45 1 +355104016943: 930 34 39 8 545 278 7 +207781038: 6 14 2 83 81 153 +5792: 49 1 396 504 6 7 85 +5926579: 2 6 3 85 92 8 6 4 8 45 4 +284043: 9 690 95 7 45 +88053: 170 33 54 8 357 +15155250292: 19 222 374 5 330 292 +733049: 7 1 7 53 3 1 6 7 246 80 9 +71237: 1 7 11 8 797 9 +1830332579: 7 366 537 2 6 49 2 3 +7159: 70 77 80 1 +2376095553: 10 264 9 95 5 36 2 9 6 +1835802115814: 9 1 73 8 4 9 571 35 814 +2090: 9 7 920 574 533 +35511093854: 9 65 6 8 4 7 4 563 3 8 1 6 +156103282940: 9 90 730 38 8 3 54 10 5 +212632938: 187 130 377 21 54 +29870448143: 768 791 400 17 479 1 +147832353: 1 41 27 35 309 323 53 +2021423350: 1 1 5 4 214 2 3 341 2 4 1 +460956608: 3 1 609 56 6 10 +1638166: 8 1 216 3 2 87 9 8 7 74 5 +6633: 29 691 13 4 9 +20155519: 83 1 94 8 258 43 +16983: 1 4 6 4 27 3 136 255 +3518081: 1 4 692 1 8 63 8 6 6 4 14 +48682976952: 2 7 7 2 3 42 6 5 88 91 83 +301108105: 170 8 8 6 732 22 +1047200: 54 1 34 20 28 +26847028: 4 4 70 7 6 2 4 9 1 4 4 132 +296820495: 2 90 29 702 8 9 6 8 1 8 9 +37792579871: 7 558 515 972 5 6 8 +5669: 62 25 6 9 973 +723: 35 2 5 3 3 2 +10140: 575 8 4 2 932 +462704969: 214 2 4 6 6 9 35 8 523 +2920: 8 3 4 1 20 +1348498: 17 2 392 7 2 4 +4874650231: 879 22 36 549 9 1 28 +2105066: 7 48 93 1 25 6 4 +115907: 7 7 336 7 7 2 546 91 2 8 +16120: 87 2 766 17 44 1 96 +463130000: 37 5 7 7 45 8 8 5 5 5 5 8 +1095006743000: 15 6 9 809 8 763 177 +303005195: 2 4 63 986 8 14 66 6 +14968802772: 7 5 3 4 308 5 3 4 3 9 6 9 +103385920: 1 116 5 2 7 6 92 1 +3398720: 70 23 2 688 52 +14747: 8 4 63 46 +52529797495: 9 6 606 4 935 8 8 1 2 3 9 +40788: 60 112 12 66 6 +8842: 2 4 1 9 5 54 62 277 257 +9400381: 2 35 17 6 98 2 379 +185753015: 6 3 8 6 425 66 8 36 3 34 +40155140909: 9 53 74 1 9 5 8 6 8 98 11 +29883814563: 62 3 34 54 7 3 814 561 +36538630: 943 8 8 4 48 3 5 1 1 4 7 9 +913186: 909 4 1 18 3 +101093763: 8 3 568 873 1 82 2 1 +44928082617: 1 56 7 77 8 7 3 2 3 5 4 27 +2866145985: 573 2 39 6 25 20 96 2 2 +207199: 3 50 592 +1940208: 86 3 94 6 8 +20161960: 42 658 5 9 40 35 764 +7055560512: 9 90 98 9 5 2 3 6 9 1 862 +5730: 1 938 2 6 90 +1655835: 28 5 963 1 8 5 3 6 346 3 +61: 7 5 39 10 +8624: 2 13 3 319 9 +14912: 9 69 8 3 8 +1906734465: 6 334 666 301 1 +26919: 5 263 1 1 9 +12351333: 511 59 233 93 3 +370053: 73 6 40 58 9 7 3 640 86 +6262819971675: 61 5 8 4 8 562 8 457 2 8 +937: 4 40 778 +38056042: 4 2 2 9 1 3 9 732 5 58 9 +3159994: 4 1 62 95 78 9 9 4 +100831554: 6 17 4 966 3 7 5 3 2 28 1 +2499841609: 279 128 70 871 738 +1708000: 20 2 45 2 7 995 5 +57451: 25 27 23 11 +759531135984: 21 7 271 7 311 3 5 981 +54868732: 35 15 3 8 3 4 6 6 3 725 7 +1807682561: 443 88 67 5 67 68 2 4 +86820: 7 69 1 1 8 1 91 19 4 699 +643731360482: 96 87 95 293 3 923 +11610: 61 4 915 5 15 +14699068836: 1 16 7 1 776 936 1 1 82 +485652428459: 4 8 1 4 6 5 2 428 1 45 2 7 +329778361: 471 7 783 62 +3778353594: 68 7 56 707 5 94 +1724810170: 35 712 5 692 9 8 1 +19430525: 969 1 2 48 5 23 +81808470513: 82 6 348 187 99 +4697640107: 7 897 9 7 460 8 7 849 +43814941850: 2 7 48 3 338 1 848 +374336: 37 4 249 9 81 +3296279207282: 5 5 824 697 7 3 18 21 4 +40335487: 67 2 5 60 76 83 62 2 +14167602: 4 788 9 83 54 +4830: 3 7 7 4 2 3 7 +511441831: 4 3 744 9 955 1 560 9 7 +758358826: 1 7 463 962 4 8 9 8 26 1 +32787846640229: 7 5 836 944 4 4 5 2 916 +137966524: 9 5 67 9 9 67 5 8 6 94 7 9 +64761: 57 592 5 701 9 +9279331: 86 203 97 9 32 +11837726: 62 303 3 5 7 7 29 3 6 6 2 +101355067: 1 6 7 5 12 9 940 2 3 1 6 8 +5192667: 402 411 6 314 666 +4727525083: 14 5 3 2 9 9 7 3 6 105 5 8 +2332455: 4 20 41 29 5 51 4 +61721503606: 8 8 5 4 2 95 5 89 360 5 1 +11181297204: 1 7 80 2 97 475 6 3 5 7 9 +442396981: 45 807 519 208 982 +43896: 2 379 363 59 +7181588325: 5 2 18 15 8 8 1 5 8 9 7 1 +2129084: 7 7 1 47 62 4 4 9 12 9 +1016: 277 3 672 1 64 +2635441777609: 416 4 731 8 791 2 6 10 +6016677: 4 5 31 2 538 619 9 2 3 7 +4283029: 4 2 8 20 1 2 88 647 96 +39861504: 3 3 4 4 73 6 948 +3169130: 7 149 49 2 6 62 +3367293818524: 115 8 6 1 1 5 3 8 61 52 4 +38130: 33 4 37 55 972 +48389990: 48 388 1 662 328 +779654659: 77 9 5 1 5 9 3 5 731 2 3 9 +11913060875: 325 866 30 608 75 +1061004: 37 924 16 227 68 +389270: 80 694 90 7 +1157: 1 6 9 4 9 5 804 6 2 +5516918: 854 646 3 4 44 +2015: 62 8 8 325 5 +146: 1 25 80 36 5 +2586431375: 8 910 1 5 7 2 5 4 9 7 4 5 +554: 45 6 3 1 4 +901722160: 8 3 65 892 9 232 6 9 8 8 +1508259: 128 60 33 8 8 97 6 +1860109094171: 644 476 370 6 23 164 +7606509: 10 159 45 61 89 9 +195906: 30 9 170 5 52 3 +382857: 73 3 558 14 5 +24471778: 9 3 5 320 4 7 59 4 7 7 7 8 +125: 19 54 37 12 3 +80376: 5 574 28 8 8 +75172044: 27 15 8 75 706 5 6 334 +1810587: 4 8 1 2 4 862 4 5 32 3 7 2 +33096068: 8 985 3 14 69 +461181: 38 8 1 183 +8235895: 7 3 74 9 3 7 903 4 8 2 9 9 +319422733: 360 9 59 5 12 5 3 7 25 6 +11735009: 39 1 66 8 8 3 6 9 6 5 7 7 +250447: 832 88 3 580 4 +116751: 8 5 2 24 187 3 54 1 6 +1605684: 7 527 47 8 48 701 3 6 +65584601: 43 88 4 6 5 93 2 151 4 +72951226: 527 24 61 10 2 7 5 82 8 +47920948206: 532 454 978 1 1 1 9 +333509945118: 6 1 1 7 2 72 990 8 5 3 3 2 +29133: 2 97 6 25 30 +73818409561: 1 5 455 4 27 40 9 5 5 1 8 +688251860: 93 72 807 91 294 +20176506: 875 21 183 126 6 +878: 145 38 543 79 73 +1537363: 1 1 470 67 288 77 +844227: 7 7 603 1 7 10 +2186499: 5 25 33 92 21 6 1 4 75 +282773964526: 6 300 6 85 57 51 66 8 +9737: 9 1 1 62 9 +1814424: 202 9 4 3 82 9 603 +618982: 6 612 97 1 3 +144229: 1 9 3 12 231 +280844455: 3 973 39 7 4 451 1 +93053313: 758 17 54 799 197 9 +16848: 4 8 2 4 3 39 +9831864: 5 454 9 8 2 4 38 60 63 8 +9216: 8 20 7 32 30 +83915: 63 24 625 39 572 +1324812384828: 91 886 178 9 4 9 81 6 9 +9807944: 6 41 9 38 17 +1011990: 5 95 97 22 89 +3854: 61 3 9 9 47 +56253507981121: 97 997 841 711 960 +424316: 64 3 79 441 74 +117272977: 6 67 6 475 2 71 878 44 +2256: 92 9 628 264 435 +11981841: 443 73 27 112 9 +1787: 63 5 3 51 7 +3659864172: 7 398 54 3 2 8 94 8 3 5 2 +248085895127: 65 7 584 45 68 59 8 +16660853402: 326 68 3 400 51 +41592384: 57 761 6 2 9 8 +9459986: 13 3 4 93 6 97 2 271 2 2 +13616829: 9 54 20 5 2 12 7 7 6 1 2 +166598199: 6 5 8 38 7 4 30 899 5 8 1 +377586995: 751 4 5 869 2 2 72 +320173: 62 4 70 48 8 3 +963099536: 188 908 93 81 9 534 +331336: 143 683 401 5 99 6 +50535518: 9 6 6 5 1 1 4 61 26 7 4 87 +477: 14 8 7 4 1 +11968171: 9 85 9 316 2 7 4 104 15 +495519: 791 419 339 81 76 4 +12480: 2 929 485 213 562 2 4 +1307445699: 1 8 4 1 4 28 476 9 8 3 3 9 +1435: 7 32 2 7 6 40 +25913272: 43 2 7 1 67 22 59 31 4 +7266511816: 3 269 925 5 97 9 466 +59303392302: 5 74 6 427 5 6 88 3 5 6 5 +11455248: 3 98 9 42 1 285 2 7 662 +2404154: 9 3 371 3 24 +190728476: 2 8 3 2 596 39 9 447 6 8 +40749652398: 9 3 3 497 5 6 5 5 2 392 5 +2283838454: 1 4 3 7 5 9 4 1 7 8 9 828 +9239008: 769 28 2 161 3 6 4 8 6 4 +2848880061: 9 5 42 3 5 2 8 476 204 5 +615780855301: 4 4 1 8 23 404 9 1 2 5 5 6 +6044: 9 5 8 4 1 28 54 7 6 1 563 +49295691: 161 62 1 373 59 9 +116571994: 8 7 9 7 200 58 7 354 77 +88343824059: 724 5 41 7 8 9 2 7 744 6 +29725: 2 13 3 66 2 4 +7000627200: 5 54 206 8 50 24 4 383 +19577668368: 73 352 7 894 2 852 +22491: 84 654 2 116 3 +398373: 219 4 9 5 33 6 +509953: 53 89 75 235 3 +27740: 1 320 5 94 76 8 736 5 +850240482: 8 4 9 70 3 5 2 530 1 4 8 5 +208: 6 7 7 43 74 +99824431656: 450 8 711 8 78 5 45 1 9 +693095506: 90 77 9 550 6 +4414: 8 9 5 6 461 8 +760653718: 84 4 3 8 4 3 9 2 50 464 1 +16871764: 5 450 142 2 1 36 5 7 3 5 +34513: 6 99 13 7 48 +807678432: 39 992 374 54 +116870416: 93 23 870 356 61 +65653: 698 1 433 58 55 +2176: 9 25 64 1 +6520574: 3 3 6 13 2 389 8 945 4 +8062111: 83 5 758 762 54 5 9 1 +4690: 479 4 8 822 1 7 +600: 50 3 4 +30237: 914 89 36 4 28 994 39 +60639: 670 13 5 9 29 3 +833482: 2 9 4 39 299 16 33 2 +62188602: 30 94 1 2 8 277 3 60 5 +646272: 83 38 5 5 2 22 48 +7797254949: 448 10 4 3 5 87 666 9 +182106834186: 3 71 7 899 78 1 89 +204713987: 27 967 76 73 25 61 +65062185851: 8 406 2 9 9 3 1 8 5 85 2 1 +2442779235476: 2 4 42 779 235 476 +1101541404783: 5 494 8 784 1 8 63 2 9 6 +20022139050: 6 577 756 51 55 150 +9334693099: 93 3 469 309 7 +43468360: 90 1 15 3 6 5 26 6 6 86 4 +53125168450: 2 1 14 90 81 2 9 21 4 50 +1675: 50 2 86 7 79 6 192 1 95 +44954008: 726 86 18 4 8 6 +1855: 84 2 5 97 6 706 2 953 +3398: 3 911 6 93 5 561 +240590073: 840 612 234 4 312 2 +45648251: 36 3 2 9 22 747 481 54 +31494224: 501 6 62 60 224 +19022: 3 1 4 2 48 1 53 4 +470975: 54 2 62 65 704 +83169544: 7 4 840 998 9 562 +42134273: 1 819 585 37 3 31 73 +1332: 96 5 366 +207764: 4 98 53 4 +35716660368: 420 1 96 85 368 +154816372258: 2 6 8 1 523 7 8 1 709 6 4 +47658307: 35 1 1 983 1 8 42 70 85 +1285582: 5 89 4 218 691 +8449218636: 92 4 8 151 4 879 6 639 +811125: 9 9 91 9 6 312 +6540: 5 67 8 492 367 +248227642: 3 755 686 807 80 213 +178168925418: 134 7 8 4 7 8 4 6 745 9 2 +40272366834: 4 63 657 954 959 +752285864242: 940 3 5 7 330 3 80 1 +57089214: 1 8 753 4 9 91 91 +254401: 5 5 5 9 2 706 12 4 191 1 +289690622: 438 6 7 96 6 669 1 240 +64649: 73 7 8 8 9 1 +7651: 85 9 65 48 19 +1821: 2 2 1 8 9 42 +193243: 2 5 5 9 1 1 1 20 8 788 2 4 +39264864: 6 9 9 73 25 1 54 8 2 552 +5618264957: 81 261 4 16 88 70 659 +27290: 8 98 693 280 15 935 +35742721: 8 716 78 8 4 +9360: 18 8 65 +229680792: 11 72 1 1 2 3 533 6 2 9 6 +1395376: 9 9 34 5 7 98 739 7 +425812869100: 266 12 667 345 2 2 5 8 +116284: 6 37 36 9 232 65 +227233559: 51 1 93 43 167 51 5 +25013651680: 710 615 44 60 1 399 8 +12783096: 8 7 5 6 5 2 745 85 96 +122796: 6 2 9 2 8 200 2 6 27 1 36 +3201265: 714 94 4 6 66 +13432931938: 961 173 73 5 5 12 673 +1491958: 586 67 38 +307760: 12 26 4 70 8 +127538520: 6 6 511 435 536 +3804190: 439 1 3 9 96 +10528777518: 7 94 55 373 77 75 15 +3950245: 3 631 89 6 7 4 +11351826131: 47 89 8 237 134 +1371750: 42 14 2 93 25 +10089793: 34 970 87 410 90 +135793394: 5 7 2 1 6 14 8 62 7 17 4 7 +5467360: 25 4 31 190 45 32 +49150761097: 98 85 1 4 892 5 4 7 667 +25020907: 53 281 6 10 1 2 14 639 +20376257: 97 21 59 10 349 +25198543: 8 8 2 129 6 98 6 4 3 3 5 5 +8740866: 87 202 205 1 65 +765976644056: 979 509 775 782 5 +211736: 882 5 8 6 56 +172867358762: 67 258 7 358 760 +27021769152: 270 99 6 752 9 2 7 6 8 4 +6486: 64 8 6 +16370794990653: 715 795 5 3 8 162 4 72 +75950: 8 8 1 2 7 1 102 74 7 50 +1890962164: 3 75 9 8 9 7 6 8 53 2 4 1 +36552: 7 155 9 4 25 2 +528976841: 459 69 971 82 501 9 +12617168724: 4 9 6 8 686 427 322 5 5 +21463150097: 7 3 4 63 150 10 97 +1291956: 5 6 78 2 6 30 93 31 2 2 +2767401: 1 2 1 9 5 8 5 1 951 403 +654853: 94 2 466 353 492 5 +8482556: 1 69 75 585 56 +776226044: 2 3 275 2 4 69 9 4 41 +2897117690022: 9 29 50 5 5 77 2 8 3 9 9 2 +20834: 209 65 74 4 557 +53683: 4 3 7 2 9 9 3 538 959 6 5 +1072822036014: 25 763 7 83 592 1 95 +28470973867: 1 807 6 98 6 9 4 8 60 5 5 +4730450: 5 666 6 834 +38783138: 38 7 1 82 20 93 5 5 +1229280: 296 477 343 66 16 65 +2105673483: 66 997 4 218 967 8 +99285: 3 669 7 49 9 69 512 9 +9135: 5 4 4 4 92 3 481 828 95 +418720: 16 26 24 248 2 +41660694: 6 132 868 98 3 +79461422: 799 64 711 92 8 +78900784: 164 879 9 75 785 +321783039886: 5 7 7 5 366 3 8 9 8 51 35 +44238422: 9 1 3 767 2 8 3 1 7 4 4 22 +4052: 19 1 7 2 75 +4241515618: 7 6 415 156 20 +172815106: 78 3 6 4 3 5 37 7 8 662 6 +12961912: 629 7 733 7 53 6 9 1 9 6 +3221260: 5 324 99 6 99 +69252725603: 961 840 3 409 72 155 +64606511: 6 3 5 7 96 7 2 5 2 1 6 2 +2712508: 1 7 795 3 3 9 3 426 4 2 6 +96279559: 7 1 907 6 463 8 955 9 +17382804784: 71 1 3 6 19 37 8 57 42 2 +608: 355 84 58 3 108 +22788516579714: 8 2 2 77 51 2 3 685 3 7 5 +10413092463: 61 9 8 261 8 3 84 9 2 7 2 +493395: 5 341 35 5 7 37 +1110: 45 8 53 5 914 85 +290494566: 10 9 78 9 590 6 6 9 5 69 +217807638: 5 1 599 3 7 85 55 63 6 +553644516: 553 6 445 15 +2494: 25 202 85 8 1 +1130126068: 891 317 53 31 517 4 +580462601: 6 4 99 8 4 8 4 72 8 32 8 9 +94899600: 99 2 6 9 696 25 +7180338: 14 3 5 1 5 48 41 +17883: 992 3 3 9 2 5 4 +298960: 3 6 3 3 78 9 904 16 5 16 +1256036: 4 60 5 522 626 +10056175920: 7 77 9 1 135 102 46 3 7 +214394: 9 85 6 1 28 +222768: 93 2 2 26 9 +70896: 47 4 139 3 1 +828727414020: 56 810 70 82 870 3 2 +2726478861: 6 2 953 28 2 509 70 +3661356469: 10 951 5 770 64 68 +3093697: 61 11 82 524 1 +1581223: 2 399 29 478 4 +144528: 2 6 70 66 832 7 8 308 8 +1560089796: 8 9 724 8 10 999 3 7 7 +524867255: 7 91 4 6 3 4 68 8 4 74 5 5 +6546332840318: 9 58 10 3 6 6 6 7 209 1 9 +340267842041: 48 3 3 35 4 44 2 2 5 6 4 1 +106619048: 56 411 41 99 424 5 6 2 +11007: 35 523 4 74 587 9 +3448675: 3 1 5 1 1 172 1 3 2 7 4 +3232805727: 4 30 3 898 5 730 +286485725986: 65 9 4 4 63 4 6 3 7 332 9 +68357520: 28 8 55 7 822 6 +5328894: 565 316 8 7 6 3 3 85 7 6 +271298568: 83 813 8 402 82 9 +71406: 92 621 87 3 6 8 +3850084094: 5 5 700 795 43 1 7 277 +2647261804: 8 7 3 1 93 73 84 3 60 2 4 +39655042363: 6 66 550 42 363 +6826456: 31 8 19 8 1 8 5 202 2 65 +207376577273: 665 3 9 565 2 31 2 5 2 1 +84617: 7 2 22 9 16 +2508164334: 71 3 8 4 800 164 336 +8846609: 5 51 55 67 70 71 7 +817389001526: 47 8 19 1 9 900 1 528 1 +231543: 6 78 494 23 328 +2704854957: 3 20 2 28 3 1 549 55 +87792: 1 8 7 792 +728526617: 6 2 5 816 8 5 4 9 5 4 3 8 +4467157029: 7 9 4 6 3 8 1 335 9 3 7 70 +119125482: 5 9 1 9 2 8 7 1 77 3 86 +606124: 24 25 9 46 5 26 1 99 +36952541624: 5 39 1 379 5 1 3 161 6 7 +3065247: 7 3 1 4 30 258 19 2 2 9 +971579: 480 869 72 29 9 +1891834: 16 525 5 40 45 34 +17800903630: 232 6 9 4 9 2 7 74 7 8 9 7 +39253993319: 32 10 7 9 2 46 8 6 85 9 +4808394700: 56 779 3 883 11 8 702 +7543: 5 3 50 4 4 1 9 9 6 8 618 8 +6152242: 1 8 6 74 1 9 94 760 38 2 +21560435: 904 53 5 18 7 5 +6452: 78 5 14 8 917 67 +34492964: 54 46 53 262 47 91 +6143: 8 1 4 76 69 +2650433: 3 503 638 3 64 +32608539392: 1 4 2 485 4 8 88 13 694 +996914: 8 8 11 6 9 15 +7491434: 7 1 490 53 1 10 1 79 2 4 +1444787: 268 93 4 531 254 +1699218797: 1 3 91 40 9 93 5 2 9 9 +125: 45 2 14 2 3 +1560635136942: 312 5 635 13 694 5 +1364803895: 988 77 2 138 7 65 +185892174: 5 108 8 7 51 8 8 1 90 4 9 +4909: 9 63 68 6 7 +125698: 77 265 535 6 59 +539863272: 2 3 9 536 6 7 1 37 51 72 +703320: 4 6 8 6 9 4 213 5 3 9 410 +1171: 1 9 122 2 71 +87545446: 4 1 8 9 71 90 92 2 87 +3454542861344: 3 33 26 399 861 3 44 1 +198829067: 6 8 64 5 4 2 14 9 152 7 +3637527: 69 4 9 61 6 24 67 740 +115169108: 59 3 3 39 449 9 8 4 50 8 +52105: 1 9 3 2 62 137 5 45 +9997: 386 772 91 2 4 5 +1698163241434: 288 41 8 7 736 1 9 436 +13954511681: 852 8 59 2 3 303 18 +62128443: 49 3 7 51 3 9 6 1 187 3 +33963194: 2 3 8 5 5 1 8 4 6 388 9 5 +166733310603: 9 5 24 4 91 6 9 6 969 4 6 +4742402: 7 614 7 582 53 10 3 32 +1205991360: 34 6 32 9 4 56 45 734 +92363911263: 3 57 9 2 1 9 2 6 521 6 2 +404026558: 816 2 63 8 980 +4114042047: 9 1 6 6 4 8 7 2 20 7 204 7 +187800: 2 8 6 7 2 385 503 3 6 4 5 +773000606511: 480 5 623 92 7 5 2 48 9 +4575227: 4 2 1 21 6 9 73 5 6 8 3 24 +24437686: 5 541 71 37 64 88 +7024283808: 707 545 6 603 935 +15541937280: 605 657 7 391 75 8 +1588304669: 8 1 5 1 8 7 7 4 700 6 66 +55582288572: 3 70 94 5 9 4 9 4 8 45 3 9 +1258520904: 1 569 4 151 10 7 6 2 4 +194000: 210 22 42 708 5 +1004532: 2 9 977 9 532 +28242055: 31 9 7 387 71 255 40 +2497162: 3 80 27 1 39 383 2 +2113202995948: 132 512 599 58 83 9 +4169396: 45 4 1 6 895 9 211 247 +4167651: 783 9 3 5 7 4 5 8 5 757 2 +62430315: 6 39 977 1 8 +145045721765: 38 3 3 9 8 92 204 863 4 +1713620: 85 681 20 +8652047: 4 8 61 2 719 204 5 2 +83092616: 25 73 5 247 3 5 77 8 +298683: 44 22 9 2 492 1 524 3 +209527771530: 737 25 465 58 49 +5348998: 891 4 8 8 75 +102566433: 7 9 5 1 2 8 2 7 31 91 3 2 +16159: 6 5 8 839 218 +116652639: 12 8 4 97 9 911 +1177258162: 21 8 6 5 317 8 18 955 +88785: 7 413 68 6 1 3 +24757333: 745 4 27 2 5 2 9 68 97 +12893032: 11 865 5 271 152 55 +4150408646: 8 63 904 532 5 +1424648: 7 747 339 179 4 35 8 8 +639080: 78 315 10 2 13 +64638140111: 140 29 11 2 537 78 +23239: 83 74 148 +22735784: 5 39 42 97 78 4 +1776931595: 6 633 704 5 5 79 +420869739792: 601 2 42 2 2 8 4 8 6 7 3 6 +300460: 5 9 4 7 4 7 626 5 8 +49077: 23 75 41 72 12 +5846791: 58 467 7 1 9 +128174255: 2 101 71 445 59 +9548470573: 2 795 95 46 1 762 6 +1200810: 704 568 3 888 306 +8268178: 3 984 92 28 5 +1251: 3 57 64 8 1 1 +36297: 8 551 59 2 6 52 8 81 +26920458: 9 89 40 97 55 8 6 +63313: 6 6 7 866 93 +41711425: 21 36 53 3 725 +1266480065088: 578 8 1 2 547 627 4 4 2 +1256275: 4 4 6 6 6 8 3 3 9 24 7 25 +351751992: 272 9 8 1 5 1 24 6 52 7 4 +1141050240: 506 4 87 8 810 +2732172398: 4 3 8 16 3 59 65 2 69 98 +496204: 82 2 1 7 89 54 +2351040677: 4 7 4 505 60 24 67 8 +20361680: 9 376 8 6 9 681 +19565: 93 795 90 2 5 +157: 6 4 8 39 39 +55066: 3 923 75 55 10 +678078: 9 53 37 539 1 4 7 5 +2068976356: 17 8 48 812 254 99 +1167049647: 476 7 141 1 4 9 531 69 +47340932167: 493 644 4 42 70 991 +3176645: 5 59 2 157 8 1 6 9 48 4 +363525896226: 6 8 861 930 7 8 225 +15948: 214 31 7 940 3 6 +2167814926453: 78 887 687 4 5 807 2 4 +2218: 2 6 5 469 18 956 687 +294158590: 18 12 382 56 9 976 +23101312: 181 9 2 635 9 +9109854003: 87 587 9 78 375 456 +13759: 9 140 70 6 453 +410519041983: 3 3 9 9 4 5 4 36 8 8 1 981 +38631736: 52 807 10 950 15 9 +19389630: 4 884 87 7 390 +2353160400888: 4 744 275 496 888 +4620: 33 1 84 1 31 3 5 5 5 6 +74595: 745 20 78 +1007311921628: 4 880 6 440 8 4 4 647 +553: 1 9 506 3 4 30 +2879: 3 74 7 258 5 +9755: 23 10 88 9 8 +1283480: 2 2 90 5 8 67 8 1 33 1 5 7 +5221132: 15 866 62 6 40 84 8 +2077360320: 8 4 8 805 1 6 8 7 1 42 8 4 +1215068: 651 266 275 7 982 +21160956866: 41 935 12 8 46 66 +265482518844: 301 882 5 188 44 +4337814321: 43 93 84 493 643 2 +363048346: 747 9 6 617 74 8 9 4 50 +368017137496: 99 59 541 865 63 +118224970527: 3 2 4 8 14 25 5 8 2 5 5 71 +95338728: 30 92 9 571 6 +719154430: 996 526 6 8 72 82 +61229835: 6 425 2 8 5 7 7 3 9 150 8 +1308850290566: 156 711 9 29 580 4 8 6 +131674: 4 94 935 5 69 3 3 +1720: 4 8 22 3 39 3 9 127 4 5 +54321382: 97 56 12 70 46 65 +578: 55 1 8 133 5 +17120: 2 9 6 12 8 685 4 3 8 656 +56014516: 55 72 27 2 41 13 403 +1031940: 65 2 73 32 7 49 61 84 7 +3480490: 2 5 70 3 497 +109494584: 8 964 302 621 27 47 +6624870401: 6 46 9 61 88 6 870 401 +1932590647866: 41 45 3 1 1 9 7 6 8 3 6 74 +4251407: 25 1 2 31 1 5 521 5 43 +6370650: 57 83 1 835 99 66 +1424752683: 212 56 932 7 4 3 3 +2047788: 98 5 1 2 6 346 2 40 812 +2135380: 9 62 5 5 764 +16782872260: 44 873 99 4 935 +529647: 1 980 79 29 5 +1034281: 72 214 20 52 65 +1481605493: 57 65 257 49 4 +26823: 244 8 88 797 2 731 2 3 +294907969: 8 88 9 5 3 738 956 +258989: 71 4 6 91 +17858: 6 4 3 248 +263467053076: 62 82 7 3 5 509 342 76 +13779755961: 7 3 573 7 5 5 6 365 22 +370: 35 5 4 1 9 +167010: 30 6 59 3 586 +500009855775: 1 7 16 3 3 399 5 3 577 8 +8470455: 28 52 495 2 6 +16770537: 69 4 6 319 305 19 14 +10543: 15 4 57 7 85 3 +237976754: 5 718 2 5 19 52 4 +115325496456: 6 3 31 253 8 9 382 75 +8571959: 8 6 8 39 9 79 8 7 673 6 +556951135688: 6 10 8 404 743 9 859 9 +282684: 3 2 7 58 6 82 +249472: 2 48 5 9 70 +8295: 82 4 5 2 3 +21988671258: 2 443 9 1 671 17 9 1 +2737827433: 3 2 6 507 3 457 6 4 8 +638692: 189 39 7 73 4 +2939773270: 584 5 19 773 270 +761567: 92 5 7 8 4 5 4 291 1 4 +12640207: 3 1 5 6 3 1 13 5 6 9 692 3 +417802012: 2 37 78 1 21 654 +10995267: 4 1 9 1 4 2 3 1 84 9 6 +902703291: 580 308 7 31 163 +371907: 871 6 84 387 +55152844588: 90 965 973 4 157 587 +2831012450: 57 757 1 81 81 diff --git a/day7/input.txt.h b/day7/input.txt.h new file mode 100644 index 0000000..9c1d0e1 --- /dev/null +++ b/day7/input.txt.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_day7_input_txt_start __asm("_binary_day7_input_txt_start"); +extern uint32_t _binary_day7_input_txt_end __asm("_binary_day7_input_txt_end"); +extern uint32_t _binary_day7_input_txt_size __asm("_binary_day7_input_txt_size"); + +#ifdef __cplusplus +} +#endif diff --git a/day7/sample1.txt b/day7/sample1.txt new file mode 100644 index 0000000..fc6e099 --- /dev/null +++ b/day7/sample1.txt @@ -0,0 +1,9 @@ +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 diff --git a/day7/sample1.txt.h b/day7/sample1.txt.h new file mode 100644 index 0000000..c79152d --- /dev/null +++ b/day7/sample1.txt.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_day7_sample1_txt_start __asm("_binary_day7_sample1_txt_start"); +extern uint32_t _binary_day7_sample1_txt_end __asm("_binary_day7_sample1_txt_end"); +extern uint32_t _binary_day7_sample1_txt_size __asm("_binary_day7_sample1_txt_size"); + +#ifdef __cplusplus +} +#endif diff --git a/day7/solution.c b/day7/solution.c new file mode 100644 index 0000000..e477a9c --- /dev/null +++ b/day7/solution.c @@ -0,0 +1,121 @@ +#include +#include + +#include "parse.h" +#include "printf.h" +#include "unparse.h" + +struct equation { + int64_t value; + int operand[32]; + int operand_count; +}; + +const char * parse_equation(const char * input, const char * end, struct equation * equation) +{ + input = parse_base10_64(input, &equation->value); + input = parse_skip(input, ':'); + input = parse_skip(input, ' '); + + equation->operand_count = 0; + while (*input != '\n') { + input = parse_base10(input, &equation->operand[equation->operand_count++]); + input = parse_skip(input, ' '); + } + + return parse_skip(input, '\n'); +} + +static bool evaluate_equation1(struct equation * equation, int64_t acc, int depth) +{ + if (depth >= equation->operand_count) + return acc == equation->value; + + int64_t operand = equation->operand[depth]; + + int64_t acc1 = acc * operand; + int64_t acc2 = acc + operand; + return + evaluate_equation1(equation, acc1, depth + 1) + || evaluate_equation1(equation, acc2, depth + 1); +} + +int64_t day7_part1(const char * input, int length) +{ + const char * end = input + length; + + int64_t sum = 0; + while (input < end) { + struct equation equation; + input = parse_equation(input, end, &equation); + + bool possible = evaluate_equation1(&equation, equation.operand[0], 1); + if (possible) + sum += equation.value; + } + + return sum; +} + +static int64_t pow10[20] = { + 1ull, + 10ull, + 100ull, + 1000ull, + 10000ull, + 100000ull, + 1000000ull, + 10000000ull, + 100000000ull, + 1000000000ull, + 10000000000ull, + 100000000000ull, + 1000000000000ull, + 10000000000000ull, + 100000000000000ull, + 1000000000000000ull, + 10000000000000000ull, + 100000000000000000ull, + 1000000000000000000ull, + 10000000000000000000ull, +}; + +int64_t concatenate(int64_t a, int64_t b) +{ + int digits = digits_base10_64(b); + a *= pow10[digits]; + return a + b; +} + +static bool evaluate_equation2(struct equation * equation, int64_t acc, int depth) +{ + if (depth >= equation->operand_count) + return acc == equation->value; + + int64_t operand = equation->operand[depth]; + + int64_t acc1 = acc * operand; + int64_t acc2 = acc + operand; + int64_t acc3 = concatenate(acc, operand); + return + evaluate_equation2(equation, acc1, depth + 1) + || evaluate_equation2(equation, acc2, depth + 1) + || evaluate_equation2(equation, acc3, depth + 1); +} + +int64_t day7_part2(const char * input, int length) +{ + const char * end = input + length; + + int64_t sum = 0; + while (input < end) { + struct equation equation; + input = parse_equation(input, end, &equation); + + bool possible = evaluate_equation2(&equation, equation.operand[0], 1); + if (possible) + sum += equation.value; + } + + return sum; +} diff --git a/gen.sh b/gen.sh index 187bd36..72012df 100755 --- a/gen.sh +++ b/gen.sh @@ -13,6 +13,8 @@ if [ ! -z "$day" ]; then mkdir -p day${day} cat < day${day}/solution.c +#include + int day${day}_part1(const char * input, int length) { return -1; @@ -96,8 +98,8 @@ echo >> solutions.mk truncate -s0 runner.inc for i in day* ; do - echo "int ${i}_part1(const char * input, int length);" >> runner.inc - echo "int ${i}_part2(const char * input, int length);" >> runner.inc + echo "int64_t ${i}_part1(const char * input, int length);" >> runner.inc + echo "int64_t ${i}_part2(const char * input, int length);" >> runner.inc if [ -f ${i}/render.cpp ]; then echo "void ${i}_render(const struct font * font," >> runner.inc echo " const struct glyph * glyphs," >> runner.inc diff --git a/input_dreamcast.inc b/input_dreamcast.inc index f870450..294768c 100644 --- a/input_dreamcast.inc +++ b/input_dreamcast.inc @@ -11,6 +11,8 @@ #include "day5/input.txt.h" #include "day6/sample1.txt.h" #include "day6/input.txt.h" +#include "day7/sample1.txt.h" +#include "day7/input.txt.h" static struct start_size sample[][2] = { { @@ -49,6 +51,12 @@ static struct start_size sample[][2] = { { ( char *)&_binary_day6_sample1_txt_start, (uint32_t)&_binary_day6_sample1_txt_size }, }, + { + { ( char *)&_binary_day7_sample1_txt_start, + (uint32_t)&_binary_day7_sample1_txt_size }, + { ( char *)&_binary_day7_sample1_txt_start, + (uint32_t)&_binary_day7_sample1_txt_size }, + }, }; static struct start_size input[] = { @@ -64,4 +72,6 @@ static struct start_size input[] = { (uint32_t)&_binary_day5_input_txt_size }, { ( char *)&_binary_day6_input_txt_start, (uint32_t)&_binary_day6_input_txt_size }, + { ( char *)&_binary_day7_input_txt_start, + (uint32_t)&_binary_day7_input_txt_size }, }; diff --git a/parse.c b/parse.c index 516d092..87a0767 100644 --- a/parse.c +++ b/parse.c @@ -45,6 +45,23 @@ const char * parse_base10(const char * s, int * n) return s; } +const char * parse_base10_64(const char * s, int64_t * n) +{ + *n = 0; + + while (true) { + int digit = base10_digit(*s); + if (digit == -1) + break; + + *n *= 10; + *n += digit; + s++; + } + + return s; +} + const char * parse_match(const char * s, const char * m) { while (*m != 0) { diff --git a/parse.h b/parse.h index a246ea3..4eb5541 100644 --- a/parse.h +++ b/parse.h @@ -1,11 +1,14 @@ #pragma once +#include + #ifdef __cplusplus extern "C" { #endif const char * parse_skip(const char * s, char c); const char * parse_base10(const char * s, int * n); +const char * parse_base10_64(const char * s, int64_t * n); const char * parse_match(const char * s, const char * m); int parse_stride(const char * s, int length); int parse_height(const char * s, int length); diff --git a/printf.c b/printf.c index f90dbd8..2f51539 100644 --- a/printf.c +++ b/printf.c @@ -8,6 +8,7 @@ enum format_type { FORMAT_BASE10, + FORMAT_BASE10_64, FORMAT_BASE16, FORMAT_STRING, FORMAT_PERCENT, @@ -38,6 +39,9 @@ static const char * parse_escape(const char * format, struct format * ft) case 'd': ft->type = FORMAT_BASE10; return format + 1; + case 'l': + ft->type = FORMAT_BASE10_64; + return format + 1; case 'x': ft->type = FORMAT_BASE16; return format + 1; @@ -77,6 +81,14 @@ void _printf(const char * format, ...) global_output_buffer.buf_ix += offset; } break; + case FORMAT_BASE10_64: + { + int64_t num = va_arg(args, int64_t); + char * s = &global_output_buffer.buf[global_output_buffer.buf_ix]; + int offset = unparse_base10_64(s, num, ft.pad_length, ft.fill_char); + global_output_buffer.buf_ix += offset; + } + break; case FORMAT_BASE16: { uint32_t num = va_arg(args, uint32_t); diff --git a/runner.c b/runner.c index 2a74b80..e81c807 100644 --- a/runner.c +++ b/runner.c @@ -1,11 +1,12 @@ #include #include +#include #include "printf.h" #include "input.h" #include "runner.h" -typedef int (* part_func)(const char * input, int length); +typedef int64_t (* part_func)(const char * input, int length); typedef void (* render_func)(const struct font * font, const struct glyph * glyphs, const void * maple_ft0_data); @@ -34,9 +35,9 @@ bool runner_tick(struct runner_state * runner_state) int length; //open_sample(day + 1, part + 1, &buf, &length); open_input(day + 1, &buf, &length); - int answer = solution[day].part[part](buf, length); + int64_t answer = solution[day].part[part](buf, length); - printf("day %d part %d: %d\n", day + 1, part + 1, answer); + printf("day %d part %d: %l\n", day + 1, part + 1, answer); runner_state->tick += 1; diff --git a/runner.inc b/runner.inc index 8a4707a..5968df7 100644 --- a/runner.inc +++ b/runner.inc @@ -1,18 +1,20 @@ -int day1_part1(const char * input, int length); -int day1_part2(const char * input, int length); -int day2_part1(const char * input, int length); -int day2_part2(const char * input, int length); -int day3_part1(const char * input, int length); -int day3_part2(const char * input, int length); -int day4_part1(const char * input, int length); -int day4_part2(const char * input, int length); -int day5_part1(const char * input, int length); -int day5_part2(const char * input, int length); -int day6_part1(const char * input, int length); -int day6_part2(const char * input, int length); +int64_t day1_part1(const char * input, int length); +int64_t day1_part2(const char * input, int length); +int64_t day2_part1(const char * input, int length); +int64_t day2_part2(const char * input, int length); +int64_t day3_part1(const char * input, int length); +int64_t day3_part2(const char * input, int length); +int64_t day4_part1(const char * input, int length); +int64_t day4_part2(const char * input, int length); +int64_t day5_part1(const char * input, int length); +int64_t day5_part2(const char * input, int length); +int64_t day6_part1(const char * input, int length); +int64_t day6_part2(const char * input, int length); void day6_render(const struct font * font, const struct glyph * glyphs, const void * maple_ft0_data); +int64_t day7_part1(const char * input, int length); +int64_t day7_part2(const char * input, int length); struct day_funcs solution[] = { { @@ -39,4 +41,8 @@ struct day_funcs solution[] = { {day6_part1, day6_part2}, day6_render, }, + { + {day7_part1, day7_part2}, + NULL, + }, }; diff --git a/solutions.mk b/solutions.mk index 944a9e4..6023483 100644 --- a/solutions.mk +++ b/solutions.mk @@ -18,4 +18,7 @@ DAY_OBJ = \ day6/sample1.txt.o \ day6/input.txt.o \ day6/render.o \ - day6/solution.o + day6/solution.o \ + day7/sample1.txt.o \ + day7/input.txt.o \ + day7/solution.o diff --git a/unparse.c b/unparse.c index 5fd4ec7..f04eb94 100644 --- a/unparse.c +++ b/unparse.c @@ -2,18 +2,19 @@ #include #include "minmax.h" +#include "unparse.h" -static int digits_base10(uint32_t n) +int digits_base10(uint32_t n) { - if (n >= 1000000000) return 10; - if (n >= 100000000) return 9; - if (n >= 10000000) return 8; - if (n >= 1000000) return 7; - if (n >= 100000) return 6; - if (n >= 10000) return 5; - if (n >= 1000) return 4; - if (n >= 100) return 3; - if (n >= 10) return 2; + if (n >= 1000000000ul) return 10; + if (n >= 100000000ul) return 9; + if (n >= 10000000ul) return 8; + if (n >= 1000000ul) return 7; + if (n >= 100000ul) return 6; + if (n >= 10000ul) return 5; + if (n >= 1000ul) return 4; + if (n >= 100ul) return 3; + if (n >= 10ul) return 2; return 1; } @@ -50,6 +51,63 @@ int unparse_base10(char * s, int32_t n, int len, char fill) return ret; } +int digits_base10_64(uint64_t n) +{ + if (n >= 10000000000000000000ull) return 20; + if (n >= 1000000000000000000ull) return 19; + if (n >= 100000000000000000ull) return 18; + if (n >= 10000000000000000ull) return 17; + if (n >= 1000000000000000ull) return 16; + if (n >= 100000000000000ull) return 15; + if (n >= 10000000000000ull) return 14; + if (n >= 1000000000000ull) return 13; + if (n >= 100000000000ull) return 12; + if (n >= 10000000000ull) return 11; + if (n >= 1000000000ull) return 10; + if (n >= 100000000ull) return 9; + if (n >= 10000000ull) return 8; + if (n >= 1000000ull) return 7; + if (n >= 100000ull) return 6; + if (n >= 10000ull) return 5; + if (n >= 1000ull) return 4; + if (n >= 100ull) return 3; + if (n >= 10ull) return 2; + return 1; +} + +int unparse_base10_64(char * s, int64_t n, int len, char fill) +{ + bool negative = false; + int digits = 0; + if (n < 0) { + digits += 1; + n = -n; + negative = true; + } + + digits += digits_base10_64(n); + len = max(digits, len); + int ret = len; + + while (len > digits) { + *s++ = fill; + --len; + } + + if (negative) { + *s++ = '-'; + len--; + } + + while (len > 0) { + const uint32_t digit = n % 10; + n = n / 10; + s[--len] = digit + 48; + } + + return ret; +} + static int digits_base16(uint32_t n) { if (n <= 0xf) return 1; diff --git a/unparse.h b/unparse.h index 2df3d49..fb588c9 100644 --- a/unparse.h +++ b/unparse.h @@ -4,9 +4,13 @@ extern "C" { #endif -int unparse_base10(char * s, uint32_t n, int len, char fill); +int unparse_base10(char * s, int32_t n, int len, char fill); +int unparse_base10_64(char * s, int64_t n, int len, char fill); int unparse_base16(char * s, uint32_t n, int len, char fill); +int digits_base_64(uint64_t n); +int digits_base10_64(uint64_t n); + #ifdef __cplusplus } #endif