diff --git a/benchmark.zig b/benchmark.zig index d05bdcd..c5a8781 100644 --- a/benchmark.zig +++ b/benchmark.zig @@ -12,6 +12,8 @@ const d42 = @import("day4/part2.zig"); const d51 = @import("day5/part1.zig"); const d52 = @import("day5/part2.zig"); const d61 = @import("day6/part1.zig"); +const d71 = @import("day7/part1.zig"); +const d72 = @import("day7/part2.zig"); const NUMBER_OF_RUN = 1000; @@ -40,7 +42,10 @@ pub fn main() !void { try benchmark(d52.main, 5, 2); separator(); try benchmark(d61.main, 6, 1); - print("| 6 | 2 | Too long | 0 | 0 |\n", .{}); + print("| 6 | 2 | Too long ~60s | 0 | 0 |\n", .{}); + separator(); + try benchmark(d71.main, 7, 1); + print("| 7 | 2 | Too long ~0.2s | 0 | 0 |\n", .{}); separator(); print("| Total | {d: >8} ± {d: <6.2} | {d:>8} | {d:>8} |\n", .{ total_mean, total_std_dev, total_min, total_max }); separator(); diff --git a/day7/input b/day7/input new file mode 100644 index 0000000..11adc90 --- /dev/null +++ b/day7/input @@ -0,0 +1,850 @@ +18021496390543: 5 90 53 6 1 40 976 36 4 +2086523366407: 520 2 9 30 29 8 864 7 +544370: 39 52 9 31 163 244 3 3 +48033216: 1 11 2 4 11 6 8 266 19 +6718: 4 8 6 93 22 +5370732117: 89 2 669 9 116 +20766044216: 92 7 4 2 4 88 1 6 2 2 7 6 +1217651: 7 9 489 456 7 2 21 449 +388850: 31 70 5 14 55 +188553679: 73 2 8 98 26 4 99 6 646 +1171: 273 92 59 2 7 732 4 2 +470690664: 7 84 47 9 37 507 6 +792247601: 6 110 2 2 11 2 3 4 3 4 5 5 +105431: 5 36 9 553 912 +1027273995: 439 585 9 24 33 4 663 +104940: 50 277 855 6 2 9 44 +1417824: 957 1 39 158 54 114 9 +179848364: 20 706 675 367 4 3 7 +18823: 58 9 6 6 31 +129: 8 13 2 7 4 9 +45430487028: 90 860 974 5 28 +286520: 9 6 9 8 5 116 +32423085115: 519 6 52 3 70 5 9 4 3 9 +621002: 1 15 6 15 60 +124725313: 4 59 3 654 7 4 4 6 44 1 6 +1274048: 727 1 350 5 39 9 1 +55: 1 7 49 +1151013496: 3 3 5 7 4 5 3 2 81 344 5 6 +53037956: 902 84 5 7 9 +6666948: 372 9 702 228 27 +289116230877: 317 8 9 484 887 77 +340265: 838 16 6 1 7 7 343 1 8 9 +3538: 11 2 272 +2731929254: 64 7 376 6 422 +10588315: 215 7 490 4 313 2 +432636003574: 6 51 6 8 48 75 1 3 5 7 6 +114057540: 1 7 2 6 269 1 5 8 2 22 5 4 +231831129: 2 4 2 2 362 5 8 369 8 2 4 +9747833: 643 440 9 791 4 39 +33419160654: 5 7 7 1 663 6 601 6 54 +4445: 8 543 65 1 37 +281864190: 780 552 425 654 +1997341: 9 558 20 396 711 +411249271: 446 1 92 92 73 +5601260482: 28 92 3 33 9 12 431 +287372172: 47 895 194 6 845 161 +14532463720: 84 4 3 2 16 55 583 720 +38419465501: 1 3 94 5 2 229 3 65 4 5 5 +18371401024: 8 2 35 8 5 9 474 9 3 1 2 1 +147446853278: 6 450 4 6 4 1 50 9 91 9 1 +143526672: 408 82 429 43 2 +26153: 6 4 89 5 36 4 3 1 7 3 61 +3776055360: 7 1 79 2 8 4 8 506 7 6 2 5 +11811490: 850 5 9 2 4 77 9 +77823549: 42 3 9 222 53 78 3 6 9 +224989523328: 651 54 55 6 302 64 +1549498: 4 56 45 4 1 3 74 802 73 +761340: 8 34 3 395 6 7 575 348 +13784576: 666 862 73 192 24 8 +2185: 7 56 1 5 42 25 16 9 +1976719997: 328 95 42 8 2 665 6 9 5 +2080: 4 48 40 +1336862724894: 905 6 4 4 41 5 4 1 149 6 +5785704: 1 8 461 551 642 +1720244700: 9 8 9 3 2 9 5 5 86 5 3 555 +354240: 4 41 8 90 3 +574792635: 841 2 8 6 5 9 6 8 9 69 4 3 +35946: 977 373 579 68 3 6 +2247: 96 4 2 15 7 87 +45609780265: 112 625 772 24 844 9 +4368253707: 588 874 2 850 7 +7855604: 3 5 6 51 404 164 5 +537152506674: 746 8 360 9 7 3 6 6 1 7 1 +77157775668: 5 65 6 24 909 8 7 6 43 +26736: 9 5 7 51 6 2 4 8 4 4 7 965 +89509052: 21 18 85 6 9 5 90 2 +17349: 59 8 567 26 149 716 +5675: 4 46 6 75 +14916197: 7 4 3 916 198 +37970007: 9 492 18 4 50 7 71 5 2 +8232: 77 4 78 6 1 47 +42928740590: 5 6 657 9 5 1 3 5 9 242 8 +5085136997: 5 911 2 40 9 555 +543629407: 7 8 865 956 9 +2358987: 1 10 65 14 493 2 +99960305: 144 870 69 6 1 +188928182: 6 82 384 184 +678627667: 52 603 23 627 667 +78: 1 1 1 6 67 +102880131: 300 34 2 416 74 +44218020295786: 650 265 68 29 5 786 +1470717: 60 1 2 813 3 +11779: 1 222 76 9 98 +139602837204: 2 5 3 8 7 8 9 2 6 3 229 14 +2227434: 12 41 40 479 5 3 5 10 4 +228660583: 9 245 90 4 9 7 4 5 7 3 7 3 +50903831: 52 962 879 833 +90052: 2 828 3 1 9 1 61 5 6 61 9 +669334: 5 17 1 44 9 3 33 +2530998: 43 5 8 753 14 60 78 +48973623134: 48 973 623 130 4 +63638238625: 3 29 417 227 8 82 5 13 +146030544: 58 8 71 580 44 99 +4767952: 678 78 77 63 304 +329654729: 289 17 1 38 3 9 15 12 +25986: 19 40 2 426 +443015016: 25 32 6 22 22 8 6 4 699 +1687: 4 8 894 28 730 +612413257: 400 27 153 66 91 +163745536509: 6 1 4 6 9 1 7 779 2 7 9 38 +208900: 5 68 5 1 12 2 3 110 6 4 +11788: 40 7 64 33 656 +22246980: 42 359 56 21 70 +39499306: 493 73 98 15 8 +70272584: 5 8 9 120 97 6 +118523: 7 6 2 48 940 78 5 +101790: 1 54 377 5 +152830544703: 1 6 98 9 773 281 470 5 +225809014: 124 2 139 13 36 7 4 +12484922: 2 3 9 5 40 486 8 5 2 3 4 3 +164788: 5 2 58 8 9 3 506 4 1 89 4 +51921: 6 98 2 1 84 5 41 56 +846514: 885 56 8 892 6 +8902: 1 788 3 98 1 +572518254: 57 638 3 77 43 +3420598584255: 33 4 279 6 9 9 8 57 5 43 +3662888: 925 44 9 420 66 +141022: 98 19 6 2 337 670 1 7 7 +1673342096: 16 61 4 8 341 616 480 +16241040: 618 657 1 5 8 +1012709: 32 668 31 +5671500: 1 4 7 4 995 25 +2296837937: 1 25 715 274 87 851 +108533952: 14 77 690 19 9 32 6 +95566943: 95 5 66 936 6 +31185: 7 483 9 7 2 310 +320: 29 2 274 14 +7902562: 328 1 330 8 73 6 452 +277669: 85 6 68 2 48 45 5 4 +1576919304: 9 8 5 55 8 8 8 5 5 16 4 20 +640: 506 22 75 4 33 +457940: 750 6 19 1 593 4 84 9 +719: 94 86 8 3 527 1 1 +9880743381: 1 58 7 87 5 8 11 3 30 48 +56367620048: 8 2 1 56 535 2 3 6 62 45 +14864899: 9 734 2 4 48 2 +5202498: 98 8 984 8 1 777 21 97 +146056142: 4 5 2 1 3 8 9 58 2 8 1 516 +12067: 8 150 3 9 977 5 2 7 590 +2192730725: 797 3 56 3 178 92 701 +351559031: 2 767 9 8 7 8 9 5 727 3 3 +5776524495: 696 593 2 913 35 399 +8148: 6 5 560 768 6 +2315810: 29 313 79 63 21 +67023569: 2 2 5 63 9 14 843 1 3 5 1 +325413762: 69 5 943 78 7 63 +5585351440: 657 5 50 17 1 440 +26422455: 797 104 991 5 8 7 9 66 +972125: 15 3 5 4 12 3 1 1 6 9 +773605: 391 38 8 8 52 59 7 9 82 +9915: 564 536 3 5 3 +5386017: 9 88 70 572 8 291 13 7 +175807: 435 403 502 +37739684: 7 940 7 3 4 3 2 7 817 1 3 +875722974018: 583 815 269 47 15 21 +11647788152: 35 767 3 986 5 589 88 +26177000220: 1 92 3 6 45 41 7 692 29 +17806862819: 72 209 5 9 274 10 5 5 8 +2124: 25 75 6 148 95 +1788090: 13 5 8 2 8 7 8 3 8 2 95 1 +1234133887: 19 2 2 82 4 1 9 63 7 87 +868348282: 37 832 67 57 421 +103659: 5 691 6 5 9 1 +2672352: 8 4 7 549 4 6 5 1 6 8 1 3 +14282884: 81 9 68 2 470 8 865 4 +126339: 3 7 32 94 2 +77571648185: 7 1 85 4 848 99 182 +13928434302: 49 8 79 94 241 80 302 +264642415: 3 88 64 237 4 3 1 +8319707: 1 3 17 786 56 9 683 +94667151: 2 427 91 7 66 174 10 5 +99838064: 517 563 343 708 3 +382956: 5 8 2 94 7 2 +9168734322: 7 801 4 51 9 2 725 8 9 +12031: 6 71 5 7 17 416 3 +1365859: 1 6 1 195 859 +5251176194: 30 9 755 2 92 9 14 68 +10730374368272: 78 4 9 93 44 7 7 3 268 4 +46362: 53 6 9 4 9 398 3 5 9 9 3 +705824000: 338 462 5 548 46 7 +612212: 8 2 5 2 3 624 5 1 8 7 7 6 +703071: 4 6 7 1 2 7 9 999 72 573 +16686922: 5 8 4 1 13 13 4 4 2 2 98 +2379967: 787 14 36 6 75 4 +60555188: 8 91 35 6 66 2 9 60 35 4 +831803074394: 8 4 6 795 6 2 13 4 7 353 +7984320: 8 4 82 72 3 3 7 6 3 898 6 +109848972: 23 88 46 9 7 2 +369704: 80 5 7 443 114 +442394585: 939 9 94 8 6 8 97 8 6 41 +155917448545: 4 23 618 9 8 852 21 1 7 +309069408: 75 96 7 6 3 9 279 129 +4195488: 17 6 393 7 3 1 2 58 4 2 3 +619593520: 66 8 545 590 3 518 +19446945: 21 926 8 80 63 +7454239462: 470 617 218 83 379 +10120010486: 6 3 8 806 60 4 42 82 +240439: 73 28 4 99 68 6 55 +6502927: 13 50 1 1 927 +6778213: 4 6 2 8 9 20 455 23 3 +498: 63 59 31 96 2 +47592: 33 34 71 5 17 +382163: 180 16 1 7 227 239 2 +4259324: 195 202 40 9 1 3 67 4 +664859: 73 3 95 92 619 +1532339807429: 788 8 8 8 85 2 7 7 8 4 9 8 +4872595: 2 8 5 52 6 5 11 560 1 4 7 +5938: 5 726 1 8 203 +2574548832: 4 823 7 2 38 58 2 533 +340565132873: 5 1 6 66 511 8 3 9 2 8 7 3 +1380384: 3 7 3 1 95 8 113 6 9 6 3 8 +7055: 4 1 9 478 363 +22360: 45 6 5 89 65 +8305: 31 7 4 4 4 5 8 7 2 1 6 19 +4066020: 9 220 21 21 +16994670: 688 6 98 91 42 +61722484080: 617 1 153 4 1 61 5 1 8 3 +3926223000: 19 24 5 164 6 10 75 2 7 +482949: 42 26 224 415 279 +29304082987: 8 7 853 639 16 7 522 8 +231791: 99 78 30 87 44 +109123: 40 160 5 14 17 +1370291966: 4 544 3 239 2 503 878 +317435399666: 1 933 8 4 6 9 44 4 8 843 +249096: 16 8 23 67 96 +534888: 9 4 92 171 969 2 +330561: 66 8 2 7 4 84 987 32 7 9 +1058328: 78 1 186 5 72 +19863103269155: 6 621 6 5 9 1 3 269 155 +192473: 4 32 922 53 8 8 172 5 +9964853: 9 6 3 543 2 8 18 882 8 9 +914777: 1 93 5 5 6 90 762 62 6 5 +6674626: 9 5 336 20 5 349 51 1 +1467648: 3 781 4 3 12 13 +358436: 3 41 328 1 793 +3249061205: 5 9 1 2 2 1 1 1 51 60 1 7 +443331: 223 924 31 864 1 31 7 +8914: 39 8 72 9 609 2 +746239: 2 72 6 2 37 1 +30692390852: 287 557 644 743 76 4 +1410138970: 1 2 8 5 9 859 2 76 6 2 5 +60824610611: 990 917 67 608 +197922: 6 685 8 55 67 241 1 60 +193714: 3 654 821 3 455 77 38 +393809: 46 3 3 85 4 +630929: 6 249 54 6 27 +34577400: 7 5 6 638 898 6 2 550 6 +47677154: 99 3 229 701 41 +113537: 8 9 3 2 59 55 47 29 3 +25570045256: 702 1 6 642 4 6 4 394 8 +25886664: 94 6 4 4 2 684 +1297470: 38 82 83 866 5 +6566435530: 7 46 6 2 6 3 1 35 53 1 2 +22217: 1 41 75 7 14 77 76 +55548: 4 1 9 53 724 124 3 3 36 +22463485382409: 5 44 1 73 5 8 344 5 4 6 9 +31494: 4 3 533 2 1 58 +38855974747814: 95 409 974 747 813 +151415040: 52 6 7 4 8 8 994 5 4 8 84 +647241: 9 8 6 3 6 7 6 214 7 3 64 9 +13651: 3 325 387 991 8 +20753886: 4 94 189 73 8 785 5 4 6 +12180: 94 59 2 62 9 77 6 +11734: 6 2 6 9 4 6 +5286689: 66 267 3 89 +70399843: 52 752 7 18 43 +33454491: 2 6 4 305 1 1 12 54 490 +33645: 986 2 40 7 5 81 6 1 1 2 5 +344724: 27 14 84 9 9 225 +219902: 286 4 4 8 6 257 +347594089: 1 3 7 7 8 7 50 1 88 18 5 +10022921418: 6 843 2 6 2 590 75 66 6 +40221216: 8 7 3 9 29 7 6 1 3 562 9 4 +7258096: 7 8 6 4 7 3 4 4 8 84 63 65 +7055033: 5 8 4 7 8 6 500 41 8 2 3 3 +683645451: 162 65 969 93 67 27 +53255109: 8 26 91 8 821 12 173 +99306067251: 20 6 8 8 253 511 8 6 54 +597: 2 64 9 +1699469163: 810 9 73 259 9 +2526336473318: 8 7 9 7 9 8 6 8 3 1 733 18 +266072040670: 9 46 570 9 72 195 670 +238000: 53 7 10 3 2 1 9 1 8 7 5 4 +15105200: 2 2 9 264 44 26 5 90 20 +117369679: 8 4 4 4 8 7 74 4 4 1 373 7 +2332432166963: 219 8 6 243 2 166 963 +501665: 37 2 67 8 101 99 +1208448: 8 158 9 9 696 7 27 8 +72259171743: 8 233 4 8 45 2 6 79 79 6 +432632: 366 49 7 6 5 489 4 9 63 +2426562: 3 4 66 12 3 5 48 339 +37428024: 1 76 41 3 4 300 2 4 5 3 1 +383040: 6 2 7 570 3 4 +371676818: 4 8 67 9 2 53 5 89 168 +22556878: 34 6 48 3 44 89 718 +55944: 186 3 3 5 6 +11216124: 49 78 2 82 8 9 6 738 +71521: 7 151 5 5 3 +13903891770: 57 123 5 51 4 45 386 +12369252: 214 2 289 51 3 +58569: 4 27 955 55 93 7 3 1 +332274: 1 32 224 9 23 +12722: 652 596 19 5 5 +43679: 347 5 4 1 31 +1595470462: 22 15 736 8 603 +2194260: 7 5 3 9 1 2 671 7 4 2 8 6 +1596: 4 99 13 4 2 770 +225545: 74 6 4 1 7 1 4 61 3 279 2 +658476046: 709 656 72 67 44 +6165: 2 8 6 3 2 4 7 20 2 2 589 8 +618: 3 100 456 57 5 +1053084707: 338 3 5 4 950 88 8 9 8 4 +592327096: 69 5 304 3 549 2 6 3 8 8 +9335700: 93 8 6 407 8 2 1 28 575 +64797: 127 2 57 5 13 +189826163856: 74 73 6 588 98 72 +2731030: 7 34 231 283 7 8 +7380687245: 3 90 7 4 28 3 7 33 67 1 6 +1512819: 525 6 118 777 3 +17287: 4 30 47 58 529 +1967500225: 49 4 6 1 308 191 9 3 27 +42666: 41 739 95 826 9 +261014686: 452 7 2 4 28 974 144 +74423580: 79 354 31 6 7 154 6 +55355965: 265 5 205 5 2 62 7 698 +40893650: 9 534 97 95 775 +1549: 5 1 2 65 8 8 939 7 1 7 1 3 +1184407: 34 3 8 584 846 7 +5135: 17 3 87 697 1 +207485759: 4 2 3 7 1 798 573 9 16 1 +154158189: 8 9 50 2 1 7 8 4 82 25 3 2 +383660590502: 9 5 9 1 1 4 14 7 603 4 90 +1345428: 3 5 86 7 7 3 1 2 5 477 9 +6034701341: 1 9 20 9 561 3 4 8 7 +927332206: 97 956 448 772 8 +1076: 96 5 975 +1636204: 4 8 104 5 84 62 5 8 4 7 4 +71630: 1 6 1 1 627 +197044152: 6 9 2 2 6 905 7 8 1 5 8 3 +139574: 9 9 200 1 1 72 38 +5653416: 6 6 35 7 2 4 5 194 1 9 54 +49169744: 2 61 8 1 57 67 4 5 2 95 +978107626: 65 4 3 2 2 52 41 9 3 5 91 +1290492: 1 3 5 7 2 2 8 6 6 9 882 7 +1762960: 6 5 6 9 40 118 9 4 7 23 6 +2037: 931 6 1 54 7 8 3 2 18 +2917787528916: 729 36 7 1 6 8 82 229 4 +35163588145: 2 3 7 5 817 9 4 2 138 9 +1862190267508: 467 55 327 56 725 11 +2150912: 6 4 5 9 531 9 7 20 4 9 1 2 +351899259: 77 622 3 79 93 +103500: 987 4 26 376 476 +72873677: 5 6 1 5 6 42 1 6 5 5 567 2 +45229132872: 9 5 6 7 6 9 2 3 8 33 564 7 +76286: 3 2 7 3 2 469 575 7 8 4 4 +1041: 9 1 5 45 2 74 3 6 8 5 8 6 +55860: 5 114 98 +51346: 51 3 46 +1895941: 955 97 33 97 18 +1914515660570: 201 72 5 7 156 60 570 +2139033: 5 7 52 341 6 987 203 +92917: 8 45 2 869 4 779 20 +119738568: 71 69 97 167 69 +75903131: 2 61 424 4 62 +1107: 48 5 58 4 707 1 7 90 +8245: 97 206 27 19 47 +3963024: 854 3 49 211 9 6 4 39 +40241: 53 349 1 43 1 +56256944: 48 6 494 195 607 7 +82344882719: 5 818 44 882 647 70 +53876: 5 260 41 4 40 76 +30512724: 4 9 9 7 774 91 94 5 417 +207304492566: 3 61 236 4 3 58 4 6 3 4 9 +434: 32 391 8 +1055910539: 838 7 60 7 3 5 6 1 52 8 +106305210: 49 4 7 362 4 8 123 495 +152823815: 4 882 5 5 313 +21575913047: 96 41 442 9 2 7 689 +16613: 790 8 9 846 1 67 212 2 +105800464145: 43 3 943 33 814 142 +297600396: 600 4 124 386 8 1 +6596: 34 88 5 49 3 +1394745994: 872 1 6 4 1 7 2 6 1 2 7 19 +134235: 7 97 938 446 65 57 83 +2794918390: 6 6 5 63 5 8 7 7 8 27 532 +8811360: 571 62 80 2 87 +1636945110: 52 9 2 2 1 703 367 6 22 +15343177: 1 8 212 2 7 402 42 +21423326: 9 1 2 5 3 5 1 1 6 719 78 2 +38880: 9 92 383 3 1 32 +15998: 4 1 1 404 4 813 13 60 +118360: 4 2 677 500 60 +2475367: 53 1 6 237 3 155 1 3 6 4 +269632: 7 8 2 1 9 6 1 1 6 503 176 +1192072602671: 238 41 45 2 5 26 68 3 +118494: 9 303 33 57 41 38 5 6 +4232: 5 7 3 1 53 46 +678567168: 3 986 81 9 472 24 6 +222660756481: 2 899 2 28 6 5 8 192 +9728: 274 68 60 6 4 77 3 +80430997: 33 616 9 299 8 +2138304: 1 4 1 496 6 3 9 8 720 86 +55805047014: 861 5 742 7 9 97 +3694: 9 6 28 3 6 5 4 2 8 8 38 +5743756: 4 7 6 98 3 755 +1246: 9 5 8 511 2 +8450: 6 31 41 419 85 4 310 6 +31095209: 4 73 9 8 7 1 7 9 3 800 7 2 +299641521: 6 48 578 38 752 8 +459: 5 3 8 86 1 36 248 +75120: 6 8 29 11 +1831: 6 7 41 74 35 +61745032: 2 7 3 58 6 7 2 835 6 78 3 +4021986876: 9 57 2 9 5 6 4 3 35 8 222 +3574321692: 426 9 91 3 3 8 627 58 6 +468793: 66 94 3 7 2 +1334: 3 15 7 5 639 435 +13298: 2 664 7 8 +173553609: 269 3 9 50 10 692 1 12 +2088395: 81 1 670 38 675 +9552979: 553 7 168 2 4 2 591 55 +14599679: 6 92 968 8 960 +31489: 52 4 749 83 2 926 16 1 +321206458929: 7 777 3 961 2 7 295 +182252008: 28 972 46 566 7 8 +632595: 77 55 44 1 7 59 35 14 4 +12426943590019: 2 5 3 6 110 7 6 55 7 1 7 7 +2392374: 1 5 42 24 91 365 894 +1240277: 234 53 77 +569031155: 473 4 77 805 359 +15421920: 9 7 5 4 6 5 1 8 56 2 48 5 +306800: 53 396 591 5 59 +1612590: 5 17 3 1 5 886 7 9 61 +1059890184780: 44 6 866 3 173 457 1 +14879035: 403 330 548 452 37 6 +1014226200: 52 923 487 356 6 +2150201: 430 98 51 610 407 44 +778: 7 2 62 3 63 61 579 1 +22007: 9 20 7 766 65 62 2 3 +62833: 698 50 4 21 1 +157014216: 12 1 3 1 7 8 351 2 4 4 9 2 +4145592469: 36 57 488 592 469 +6582: 34 8 24 9 45 +10971282: 9 152 6 599 2 +37807: 1 9 62 525 8 +15114: 52 99 14 +834556: 834 54 6 6 4 +3959983: 627 315 64 42 898 +5080: 50 79 1 +3406747978: 340 674 7 290 689 +28575282221: 44 3 3 1 6 8 5 5 2 822 1 9 +16708: 166 1 10 91 4 2 +3004947540: 751 4 90 4 7 54 2 +659360: 7 322 9 33 9 +312528264908: 834 9 451 995 787 83 +5283869: 84 925 4 68 +670472: 978 85 533 146 8 +386013978: 7 33 5 2 31 54 9 366 7 +1772140: 9 52 2 8 93 676 +325033: 7 45 9 64 39 3 +24035: 4 83 64 11 883 23 +108190: 59 303 6 9 915 4 +2269768960: 8 93 256 181 485 +2748938142: 2 31 833 38 142 +624990231: 624 983 7 2 31 +1337: 4 3 17 4 617 +39612: 66 5 7 56 7 22 8 5 9 +244627395604: 4 2 971 8 1 1 5 731 8 6 1 +34544163: 844 50 5 56 23 6 +15220: 8 353 3 5 942 57 1 85 +3059655172: 1 124 7 83 179 89 476 +48061665: 5 961 70 46 68 +2391409: 660 1 38 2 6 9 3 5 4 2 3 1 +57155348: 8 3 2 3 4 849 66 666 1 +416590387491: 6 49 907 641 489 +1527392: 6 5 7 3 29 228 3 4 5 4 4 +1091808154: 1 9 272 446 1 3 9 11 6 +37391: 349 105 149 7 590 +6890452424: 5 3 9 5 9 6 647 8 3 8 +7129901: 8 7 9 5 6 6 39 258 45 7 4 +699989688: 320 39 68 59 486 +1836865: 7 985 23 7 307 +398601: 1 81 573 48 567 +26510863: 381 962 6 658 8 5 +97686095: 976 8 50 99 995 +764: 92 7 3 67 50 +283716: 899 4 1 238 74 +146947: 10 49 593 386 47 +1530961: 3 3 3 85 961 +38446800: 684 18 237 7 80 +1234965: 3 26 816 1 9 138 +44567052418: 7 8 85 2 14 4 5 4 6 7 4 18 +4196119: 5 8 9 9 9 3 9 30 714 4 6 7 +992466: 4 277 3 893 343 +212733: 917 96 3 70 3 +95330342: 953 291 12 4 10 +75300993240: 630 624 5 5 1 6 5 5 4 60 +1987944: 78 8 63 93 229 7 31 7 +9276986787: 70 31 36 6 274 26 +8523781786: 1 9 26 83 1 2 76 81 7 88 +1088647: 84 32 5 81 7 +2321154: 8 4 89 564 34 855 4 +67150: 53 6 91 8 425 +1080675100: 38 2 5 4 5 1 675 4 4 9 7 5 +3445478400: 417 85 8 16 91 29 160 +250103: 6 7 6 521 2 5 +984: 7 4 16 7 9 5 +15955: 35 7 63 49 863 +43350: 5 6 1 14 1 39 2 665 6 6 +38137871: 657 53 4 58 7 892 +39253: 30 188 52 771 6 475 +1704524448: 607 2 78 2 7 5 3 9 5 5 6 8 +2549685: 97 68 64 1 38 293 +9486: 5 30 6 56 6 4 629 111 +548478797: 53 27 82 850 8 421 +504712: 53 75 52 93 1 +126878364815: 84 91 95 9 6 2 522 814 +12259962: 6 95 9 7 3 2 7 9 9 4 69 66 +58276214: 3 92 4 92 6 17 7 124 4 3 +34507: 10 641 39 50 8 +12102396: 84 66 207 339 98 +235329344: 46 4 10 6 67 7 788 1 4 7 +63068: 9 1 7 7 9 71 +2524164869: 986 256 48 66 5 +6048067791920: 97 5 209 869 530 56 +140022: 237 2 29 5 2 694 1 3 2 8 +477924112: 177 90 4 4 3 112 +49875: 6 9 2 3 87 2 26 9 2 5 3 35 +487189629: 76 123 38 8 8 +9356682: 50 9 4 63 9 5 1 5 949 +426607: 76 14 1 2 7 4 896 +2477: 4 600 77 +5848008671: 96 488 800 860 7 4 +7677: 699 6 17 48 83 9 +63317518: 6 622 43 95 20 +17724: 43 65 164 11 1 +475446: 242 191 122 9 12 +138320: 81 6 8 2 728 +3137577806356: 738 476 9 1 56 10 843 +3184066: 810 185 32 66 +53735537: 1 8 37 642 53 82 +159261025: 241 136 9 491 539 +595647343: 660 552 979 502 247 +9144: 9 7 561 21 74 73 +53857884: 686 8 2 1 981 2 1 +460165: 3 637 964 65 +245932544: 2 3 8 7 2 855 4 3 4 85 4 +220608: 4 89 27 576 +2106: 124 23 2 99 535 +39504807: 4 2 1 68 5 7 6 3 80 95 8 5 +89816: 86 697 500 7 1 8 +4582393: 5 904 4 7 2 2 5 8 4 9 925 +222154: 3 7 1 215 1 +10028340: 65 61 5 7 3 758 1 +461538: 8 99 194 24 2 8 164 3 +90431: 1 629 2 47 351 7 79 3 8 +15561840: 8 5 2 55 3 8 840 +3416200: 3 56 4 8 1 8 490 50 58 +354126630: 5 6 3 28 1 1 1 55 851 3 1 +16365503774: 65 454 5 5 200 3 7 74 +1095: 73 5 3 +4084294: 8 9 31 22 3 9 5 5 3 4 6 22 +98829270: 1 3 9 8 581 6 9 4 9 45 2 +702176629176: 111 456 6 9 1 6 7 169 7 +23566123: 31 933 497 75 725 +84938672013: 1 2 629 524 2 5 223 9 7 +475577819: 48 28 6 983 7 1 773 62 +1051142656: 8 303 9 9 3 1 6 8 7 2 5 6 +1062: 2 2 6 21 41 +2953671112: 67 76 5 364 58 +418247: 4 76 169 54 798 8 423 +5751: 718 8 7 +36105960: 7 7 64 7 98 51 1 2 48 2 4 +380612: 6 3 4 8 79 718 9 9 7 5 6 2 +81267511123: 812 675 106 9 43 3 +4751948141: 7 676 15 4 884 64 141 +414792: 96 8 55 504 +4202454967754: 310 3 9 684 22 775 6 +2776423104: 67 5 47 22 728 644 6 7 +143040: 30 2 6 2 2 6 37 +60132807: 601 31 10 170 5 +178954614023: 4 3 318 8 1 4 5 3 6 89 23 +112817: 81 951 5 935 7 9 201 +5409: 601 9 3 +4728: 9 95 90 5 3 +1238720: 9 80 2 632 +15886406: 2 1 64 495 18 9 9 6 6 2 +4107708: 9 8 46 7 7 9 3 4 22 41 9 +133418239920: 207 85 632 857 14 +178212824643: 8 89 55 57 220 12 276 +3906433966: 744 3 69 373 52 6 +93587: 1 1 85 8 9 +11969903900: 182 7 8 77 3 43 1 4 797 +266594: 5 53 9 6 96 +1287720: 7 433 5 5 584 +803268: 52 155 963 89 218 +48240498: 8 8 92 268 498 +58059135: 34 7 3 30 87 13 9 135 +842385885: 6 3 1 219 9 2 83 2 271 +13862495791: 95 5 3 82 304 86 117 +128042008: 3 911 5 2 9 4 1 70 10 8 +57325200: 48 324 50 46 67 +1417469272496: 753 973 94 85 77 2 9 3 +443409045015: 92 4 1 53 772 94 51 12 +1558187646: 9 728 6 660 9 5 5 360 6 +20088860: 1 512 577 68 28 +20736: 41 8 47 1 9 +1696285: 5 5 3 7 4 44 6 36 5 1 8 3 +5556: 1 462 6 2 +2449154459227: 4 94 5 827 38 6 7 461 7 +726448570210: 54 82 8 7 4 2 5 7 8 1 82 5 +38511541: 2 238 9 6 70 254 61 +479: 2 6 18 7 3 +798588: 996 87 89 8 378 +3021: 92 8 3 640 67 7 97 1 2 +21513332: 3 46 6 6 4 7 5 7 222 614 +1643075: 1 9 4 833 19 6 635 25 +7920529: 9 7 878 1 93 1 +695906: 128 7 776 7 603 +1300764632: 448 852 764 375 257 +6928: 1 780 86 8 +12806787: 9 9 2 346 5 5 6 8 57 2 9 +7017204519: 5 448 357 3 4 325 91 9 +13363: 2 71 3 16 83 +8393802557: 839 29 8 99 2 858 701 +3063287848: 5 3 11 48 34 525 +83599: 1 632 3 1 44 +286223136392: 894 40 4 730 4 8 3 94 +10279: 9 6 2 65 2 4 +271110595831: 3 83 4 5 62 252 21 773 +4670586: 93 8 78 9 4 6 617 57 9 +425836081: 4 6 9 86 6 5 37 8 28 8 30 +39726270638: 77 1 95 579 49 2 1 52 +119: 9 94 4 9 3 +2178202496: 726 3 20 2 496 +3151040: 6 424 4 8 229 +3651: 2 985 31 4 628 +481146907488: 293 442 628 87 68 +1271: 6 204 19 30 +70942858: 11 52 4 190 9 86 14 55 +69172400: 398 55 5 8 79 +7158560: 7 4 6 53 504 914 644 +20160809712: 3 66 7 999 33 874 9 +47596680: 3 9 8 465 4 63 64 6 80 +1301065: 2 45 7 6 431 16 4 3 6 5 +552410: 19 375 49 77 1 12 +228871: 3 1 564 851 90 +10873: 1 2 9 988 5 +4130731: 3 22 1 3 6 4 8 227 6 2 6 +225170: 1 510 4 438 32 6 +29917: 6 8 20 5 31 +66041382: 88 19 8 4 4 78 3 9 8 949 +361819319: 2 5 23 45 5 93 622 700 +1309569: 3 2 4 8 2 2 90 5 2 429 9 +712657000: 588 7 21 231 8 7 999 +844041: 14 54 370 412 5 33 +56808: 3 5 7 78 550 726 668 9 +78850: 7 6 64 466 25 +40012: 16 3 833 7 8 7 6 +18517671: 3 553 3 189 76 7 1 +76146832: 343 684 55 926 76 +34521436: 4 1 792 6 7 924 8 3 43 6 +132536: 5 6 5 24 5 36 +816: 8 4 9 9 766 +45813: 8 949 2 84 3 9 +390467: 31 6 5 7 2 6 2 86 87 95 +2262640: 2 6 677 82 68 20 2 +346343: 532 21 31 4 7 +50382107496: 98 7 6 5 811 40 533 3 6 +175010794562: 781 2 98 8 54 7 973 28 +244861014: 74 388 53 101 4 +105751674434: 1 495 54 18 767 89 9 3 +969984876: 81 70 8 61 84 873 +648222764085: 3 5 2 9 6 5 569 1 5 8 82 5 +1393: 15 3 2 6 7 42 29 7 346 +39739464: 436 5 2 2 44 4 4 2 2 1 9 8 +4482588069: 679 180 66 7 1 +19920: 4 38 61 754 6 24 +995400: 15 292 9 7 450 +6479208: 77 27 1 623 5 8 +19402: 2 22 22 19 916 94 +511501: 211 78 442 138 4 +14255: 1 80 1 4 44 +19777283: 19 777 284 +1343359380: 7 18 1 4 1 897 9 4 737 1 +12534: 69 8 21 90 852 +95324: 59 16 44 605 265 7 +75183761: 9 3 8 5 9 2 6 74 39 84 8 5 +12162674: 4 9 98 87 29 45 +38399760: 22 5 8 34 6 401 105 +68: 7 9 51 +1898069202441: 885 92 4 62 678 79 +722478: 65 1 7 1 277 8 6 701 6 +158539711: 5 3 150 539 714 +2905129: 392 4 74 133 3 8 +924604: 924 5 94 4 9 +190170: 7 4 29 2 7 1 5 69 66 486 +5879095: 275 96 8 8 198 868 5 +1464075: 7 4 22 37 2 67 1 9 75 3 +4384800: 1 87 48 50 21 +894358547: 6 3 153 1 523 2 85 43 6 +39935541907: 14 379 7 347 738 8 +527: 6 3 6 498 5 +14860584: 1 5 2 96 3 4 1 9 1 8 6 852 +4433: 2 622 9 7 2 +92102561: 8 282 6 459 4 2 553 8 +72968083742: 2 689 3 5 2 73 828 85 +52367: 28 5 374 5 2 +4362486640: 675 47 26 60 604 +1234525497: 1 7 7 4 626 5 3 60 4 6 52 +5976: 2 17 623 9 63 +409778: 282 2 5 3 2 358 51 175 +2445840597: 6 608 9 1 7 6 5 9 31 740 +505058931043: 123 80 7 523 84 78 4 3 +8740890: 1 79 1 413 45 394 1 +47880841: 6 568 729 6 117 +34506: 1 179 6 77 8 2 8 8 461 2 +329: 9 1 21 6 1 9 7 21 90 8 7 +6625: 89 5 217 8 +23630995337590: 20 2 599 4 4 5 6 7 6 93 9 +6711336828: 301 1 593 8 94 5 5 4 +412184965: 4 8 99 7 8 230 7 5 7 994 +3247113: 472 71 312 96 9 +788096881: 3 656 9 3 4 517 7 8 7 7 4 +261052: 40 1 93 7 +639146: 2 66 18 8 12 4 2 1 663 3 +777556979: 2 19 36 7 6 8 82 6 9 9 1 2 +66880: 3 5 1 6 7 4 919 7 3 2 795 +34523818: 6 409 34 854 2 304 5 9 +3805511786: 89 89 7 6 827 70 3 8 1 +5643745939: 92 133 6 399 461 +190682490: 9 59 3 665 9 4 68 6 4 5 +9386: 648 74 13 +235: 1 38 8 5 7 +397: 78 5 2 1 4 +1957898736: 464 8 60 10 376 1 368 +4985464: 9 9 98 628 398 +59134728876: 35 4 1 167 2 88 66 7 +171: 1 5 29 26 +1565370: 98 213 2 5 370 +26711813433: 25 202 59 93 964 33 +3229813000: 686 51 4 438 997 +251449650: 5 4 58 86 7 1 119 6 5 9 +5021908928: 1 717 415 561 7 +8061397778: 806 131 69 808 78 +674478582: 190 85 1 3 6 29 1 4 45 6 +588738: 5 6 1 3 3 7 7 22 3 201 2 7 +6103928698: 242 95 2 4 42 860 45 +28688562: 5 48 9 205 532 529 42 +7043267: 4 6 234 307 287 +34965810: 1 6 3 3 3 2 7 4 4 27 9 366 +7872769: 12 8 153 536 +39120: 11 6 7 465 80 +62700: 44 89 76 100 3 +188803745: 4 5 978 9 9 7 5 5 8 5 754 +208523174: 24 21 7 401 31 72 +165261: 2 3 5 2 9 38 8 557 52 93 +10494322916992: 2 252 466 2 9 169 93 +79567: 9 9 4 8 78 6 2 5 1 7 6 2 +51630630: 5 1 6 305 42 86 +318: 2 6 6 5 3 2 +59651611: 8 7 1 2 263 9 122 83 3 5 +928088: 150 878 8 876 7 +2192043: 7 8 7 9 345 605 118 3 6 +6464: 80 70 2 7 564 21 724 4 +53308267: 8 880 471 6 7 +2716: 5 7 66 539 910 +1037: 6 1 6 8 8 1 4 16 6 4 367 +7549: 15 81 2 35 829 +924104925: 62 38 2 93 602 7 9 +11188828: 3 7 5 43 5 8 18 15 1 1 3 7 +2137644202: 6 8 46 7 582 6 7 3 7 586 +7908350: 769 2 17 743 571 +460: 41 90 2 322 5 +41: 35 2 4 +815: 9 9 277 2 99 +554946: 554 89 2 2 34 +19544120: 630 89 90 1 348 440 +181694: 94 410 7 36 3 2 +278951400: 9 9 1 6 246 9 70 4 +12283: 2 7 3 3 7 9 9 3 7 735 19 +1113215481: 2 73 1 64 890 2 4 985 +4060898: 1 566 32 2 8 7 8 2 2 7 2 +1664611666: 27 3 6 6 43 2 3 337 8 8 4 +37562670: 47 40 3 37 9 4 2 44 8 5 +5146430: 444 4 215 857 933 +20287813: 76 4 3 81 847 811 +489033: 392 96 93 3 102 +15739449147181: 6 9 8 8 4 926 9 8 2 990 +1946039979: 9 8 9 6 7 9 973 3 1 52 2 2 +10059: 9 59 46 9 +30022719: 1 501 1 36 20 +357048341: 606 4 736 3 8 +39593260: 356 39 9 3 263 +1527427897: 687 8 2 37 5 5 6 7 8 9 5 +410489: 63 7 8 7 5 7 755 89 9 3 9 +1013317239614: 780 2 3 8 6 9 8 9 3 9 6 14 +4138383: 643 892 2 6 6 447 6 51 +109997: 56 8 7 452 96 +3903: 904 4 41 4 107 +15798542: 5 4 268 13 1 57 156 2 +13419844: 61 93 2 11 9 62 6 4 5 +4719995: 808 649 8 9 7 91 297 +43066715: 478 18 13 8 7 55 7 608 +1033539: 65 226 7 1 523 9 +247379: 32 5 5 308 979 +18832431997: 1 8 29 563 96 11 4 4 9 +13809: 31 9 2 3 3 40 2 3 5 4 2 7 +453393018: 87 694 5 85 3 9 754 3 +2704345: 2 63 1 67 6 285 4 56 +3058425: 2 53 556 4 24 +9992610: 6 96 1 287 30 69 5 5 7 +5047746735: 9 347 66 86 6 98 54 78 +2725709051136: 56 78 5 60 516 1 6 2 8 6 +2094424: 1 229 5 22 14 9 +4198135: 95 9 9 8 545 +826984585: 537 154 4 574 6 8 +79351: 834 94 45 907 3 +64563205: 5 4 99 3 9 9 6 6 7 6 7 331 +214359: 43 3 46 4 9 8 56 9 77 1 +351021243: 877 53 9 4 56 41 +15688616821: 56 45 72 85 386 9 +142812: 4 8 24 9 2 70 34 7 3 4 6 2 +140196: 29 8 2 6 7 6 3 73 2 8 25 +30764261340: 3 178 8 8 4 4 6 2 7 780 3 +12191105: 12 5 40 7 6 5 106 +28: 5 5 18 +168061856: 4 65 5 1 84 6 632 9 4 8 4 +85: 8 22 38 2 8 7 1 +117306974: 243 45 775 6 8 6 6 977 +108646503: 31 87 39 437 21 +230946884: 162 1 945 9 68 4 3 7 4 +4186304562009: 716 8 34 4 6 1 406 7 18 +1333820108: 66 691 5 4 109 +159536: 3 1 175 2 767 +10539: 2 384 25 795 94 +658396: 50 9 854 11 4 +206596243: 6 4 865 455 162 7 82 +275064360: 9 9 4 992 7 9 810 56 1 +85592486: 8 551 4 28 153 diff --git a/day7/part1.zig b/day7/part1.zig new file mode 100644 index 0000000..59813e7 --- /dev/null +++ b/day7/part1.zig @@ -0,0 +1,89 @@ +const std = @import("std"); +const print = std.debug.print; + +// Look like the complexity is 2 ^ (n - 1) +// with n len of a int list +// +// So that mean I need to do + +const Operator = struct { + value: usize, + list: []usize, +}; + +pub fn main() !void { + // const test_value = "190: 10 19\n3267: 81 40 27\n83: 17 5\n156: 15 6\n7290: 6 8 6 15\n161011: 16 10 13\n192: 17 8 14\n21037: 9 7 18 13\n292: 11 6 16 20"; + + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + const allocator = gpa.allocator(); + defer { + const deinit_status = gpa.deinit(); + if (deinit_status == .leak) @panic("TEST FAIL"); + } + + const file = try std.fs.cwd().openFile("day7/input", .{}); + defer file.close(); + + const file_size = (try file.stat()).size; + const buffer = try allocator.alloc(u8, file_size); + defer allocator.free(buffer); + + _ = try file.readAll(buffer); + + var iter = std.mem.split(u8, buffer[0..file_size], "\n"); + var total: usize = 0; + while (iter.next()) |line| { + if (std.mem.eql(u8, line, "")) continue; + total += try parseOperator(line); + } + + try std.testing.expectEqual(882304362421, total); +} + +fn parseOperator(line: []const u8) !usize { + var number_buff: [12]usize = undefined; + var result_buff: [2048]usize = undefined; // 2 ^ 11 + + var main_split = std.mem.split(u8, line, ":"); + const left_value: usize = try std.fmt.parseInt(usize, main_split.next().?, 10); + + var iter = std.mem.split(u8, main_split.next().?, " "); + _ = iter.next(); // Skip the first space after : + var len: usize = 0; + while (iter.next()) |number| { + defer len += 1; + number_buff[len] = try std.fmt.parseInt(usize, number, 10); + } + + // So here I need to iterate over all combinaison of + and *, how can I do that ? + // I can do a tree with 2 branch at each step, the result of the new node is the entry value + or * current node + // But I need keep in memory all previous number, it's useless, I just need to know the value of all combinaison of the list + // Im sure I can take advantages that operations are done left to right, it would be even easier + // So I start with an empty usize list -> I take the 2 fist value -> I do + and * and add them to the list -> + // -> Take the next number, and do + and * on all of what is inside the list, remove previous item and add them to the list + // -> Do that over and over until the end and check how many left value are in the list + + result_buff[0] = number_buff[0]; + for (0..len - 1) |i| { + const number_count = std.math.pow(usize, 2, i); // This is the number of value in the result buffer + + // For all number in the list, I add them + new value at the end of the list (number_count + index) and then replace themself by them * new_value + for (0..number_count) |j| { + result_buff[number_count + j] = result_buff[j] + number_buff[i + 1]; + result_buff[j] = result_buff[j] * number_buff[i + 1]; + } + } + + // Now I have all result of all combinaison of the list, I just need to check how many are left_value + const all_results = result_buff[0..std.math.pow(usize, 2, len - 1)]; + + var total: usize = 0; + for (all_results) |result| { + if (result == left_value) { + total += left_value; + break; + } + } + + return total; +} diff --git a/day7/part2.zig b/day7/part2.zig new file mode 100644 index 0000000..8ce7f56 --- /dev/null +++ b/day7/part2.zig @@ -0,0 +1,96 @@ +const std = @import("std"); +const print = std.debug.print; + +// Look like the complexity is 2 ^ (n - 1) +// with n len of a int list +// +// So that mean I need to do + +const Operator = struct { + value: usize, + list: []usize, +}; + +pub fn main() !void { + // const test_value = "190: 10 19\n3267: 81 40 27\n83: 17 5\n156: 15 6\n7290: 6 8 6 15\n161011: 16 10 13\n192: 17 8 14\n21037: 9 7 18 13\n292: 11 6 16 20"; + + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + const allocator = gpa.allocator(); + defer { + const deinit_status = gpa.deinit(); + if (deinit_status == .leak) @panic("TEST FAIL"); + } + + const file = try std.fs.cwd().openFile("day7/input", .{}); + defer file.close(); + + const file_size = (try file.stat()).size; + const buffer = try allocator.alloc(u8, file_size); + defer allocator.free(buffer); + + _ = try file.readAll(buffer); + + var iter = std.mem.split(u8, buffer[0..file_size], "\n"); + var total: usize = 0; + while (iter.next()) |line| { + if (std.mem.eql(u8, line, "")) continue; + total += try parseOperator(line); + } + + try std.testing.expectEqual(145149066755184, total); +} + +fn parseOperator(line: []const u8) !usize { + var number_buff: [12]usize = undefined; + var result_buff: [177147]usize = undefined; // 3 ^ 11 + + var main_split = std.mem.split(u8, line, ":"); + const left_value: usize = try std.fmt.parseInt(usize, main_split.next().?, 10); + + var iter = std.mem.split(u8, main_split.next().?, " "); + _ = iter.next(); // Skip the first space after : + var len: usize = 0; + while (iter.next()) |number| { + defer len += 1; + number_buff[len] = try std.fmt.parseInt(usize, number, 10); + } + + // So here I need to iterate over all combinaison of + and *, how can I do that ? + // I can do a tree with 2 branch at each step, the result of the new node is the entry value + or * current node + // But I need keep in memory all previous number, it's useless, I just need to know the value of all combinaison of the list + // Im sure I can take advantages that operations are done left to right, it would be even easier + // So I start with an empty usize list -> I take the 2 fist value -> I do + and * and add them to the list -> + // -> Take the next number, and do + and * on all of what is inside the list, remove previous item and add them to the list + // -> Do that over and over until the end and check how many left value are in the list + + result_buff[0] = number_buff[0]; + for (0..len - 1) |i| { + const number_count = std.math.pow(usize, 3, i); // This is the number of value in the result buffer + + // For all number in the list, I add them + new value at the end of the list (number_count + index) and then replace themself by them * new_value + for (0..number_count) |j| { + result_buff[number_count + j] = result_buff[j] + number_buff[i + 1]; + result_buff[number_count * 2 + j] = try concat(result_buff[j], number_buff[i + 1]); + result_buff[j] = result_buff[j] * number_buff[i + 1]; + } + } + + // Now I have all result of all combinaison of the list, I just need to check how many are left_value + const all_results = result_buff[0..std.math.pow(usize, 3, len - 1)]; + + var total: usize = 0; + for (all_results) |result| { + if (result == left_value) { + total += left_value; + break; + } + } + + return total; +} + +fn concat(left: usize, right: usize) !usize { + var buff: [16]u8 = undefined; + const value_str = try std.fmt.bufPrint(&buff, "{d}{d}", .{ left, right }); + return try std.fmt.parseInt(usize, value_str, 10); +}