From e50a1a537da3edd430bbdd5f400994357dc9acf2 Mon Sep 17 00:00:00 2001 From: Dendy Date: Fri, 2 Dec 2022 02:17:40 +0100 Subject: [PATCH] Day 1 --- 1/1.zig | 20 + 1/2.zig | 70 ++ 1/input.asc | 2237 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2327 insertions(+) create mode 100644 1/1.zig create mode 100644 1/2.zig create mode 100644 1/input.asc diff --git a/1/1.zig b/1/1.zig new file mode 100644 index 0000000..3f93071 --- /dev/null +++ b/1/1.zig @@ -0,0 +1,20 @@ +const std = @import("std"); + +pub fn main() void { + const input = @embedFile("input.asc"); + var iter = std.mem.split(u8, input, "\n"); + + var max: usize = 0; + var curr: usize = 0; + while (iter.next()) |value| { + // If not a number, we assume EOF was reached (End Of elF) + curr += std.fmt.parseInt(usize, value, 10) catch { + if (curr > max) max = curr; + + curr = 0; + continue; + }; + } + + std.debug.print("{d}\n", .{max}); +} diff --git a/1/2.zig b/1/2.zig new file mode 100644 index 0000000..b360da0 --- /dev/null +++ b/1/2.zig @@ -0,0 +1,70 @@ +const std = @import("std"); + +// NOTE: I know this is way too overengineered, but I wanted +// to make it as efficient as possible. + +pub fn main() !void { + const input = @embedFile("input.asc"); + + // Putting part 1's solution as an extra :P + std.debug.print("Part 1's solution: {}\n", .{sumTopNElves(input, 1)}); + std.debug.print("Part 2's solution: {}\n", .{sumTopNElves(input, 3)}); +} + +// Returns the sum of the elves with the most calories from +pub fn sumTopNElves(input: []const u8, comptime cant: usize) usize { + var iter = ElfIterator.init(input); + // Initialize the buffer where the 3 numbers will lie + var maxArr: [cant]usize = .{0} ** cant; + // Keeps track of which is the smallest index of the array + var min_i: usize = 0; + + // Iterate through each elf's sum of calories as usize + while (iter.next()) |elf| { + // Check if the current elf carries more + // calories than the previous smallest max + if (elf > maxArr[min_i]) { + maxArr[min_i] = elf; + + // maxArr changed, update what is the smallest index + var advance: usize = 1; + while (advance < cant) : (advance += 1) { + // Advance and wrap around + const i = (min_i + advance)%cant; + + if (maxArr[i] < maxArr[min_i]) min_i = i; + } + } + } + + var res: usize = 0; + inline for (maxArr) |num| { + res += num; + } + + return res; +} + +// Helper to return the total of calories per elf one at a time +const ElfIterator = struct { + iter: std.mem.SplitIterator(u8), + + pub fn init(input: []const u8) ElfIterator { + return ElfIterator{ + // We assume the input file is properly formatted + .iter = std.mem.split(u8, input, "\n"), + }; + } + + pub fn next(self: *ElfIterator) ?usize { + var res: usize = 0; + + while(self.iter.next()) |calories| { + // If non numeric assume EOF (End Of elF) + res += std.fmt.parseInt(usize, calories, 10) catch return res; + } + + // If we reach EOF (End Of File, do not confuse with End Of elF), return null + return null; + } +}; diff --git a/1/input.asc b/1/input.asc new file mode 100644 index 0000000..d6fca09 --- /dev/null +++ b/1/input.asc @@ -0,0 +1,2237 @@ +3120 +4127 +1830 +1283 +5021 +3569 +3164 +2396 +4367 +2821 +6118 +4450 +1300 +3648 +1933 + +4841 +6135 +5806 +8128 +4069 +6511 +3601 +4786 + +2739 +2663 +2678 +1627 +7779 +7845 +9191 +9656 + +1372 +11432 +14854 +15168 +3789 + +47972 + +5109 +4118 +3399 +6468 +6900 +4742 +4196 +6590 +7327 +6828 +2253 +7055 + +1698 +5601 +1983 +6931 +6010 +4091 +6881 +2372 +6531 +4825 +3918 + +8481 +8321 +1703 +7251 +2360 +10719 +5468 +6503 + +12835 +11545 +3650 +11065 + +6817 +6491 +4285 +4831 +2392 +8103 +8243 +8753 +3725 +1857 + +1969 +4278 +4922 +2667 +2613 +4720 +4729 +5696 +3067 +2409 +2223 +5378 +3349 +3952 + +4250 +2250 +5073 +5893 +3740 +2037 +4679 +1331 +3881 +5751 +3255 +3155 +4582 +1844 +3164 + +5935 +4702 +1774 +2285 +4800 +3721 +5674 +3830 +1556 +4464 +2235 +1241 +1132 +6506 + +6818 +2822 +6006 +5073 +2663 +4829 +5705 +2684 +2043 +7070 +3439 +2189 + +3869 +4747 +2191 +6208 +3109 +3615 +8081 +3981 +7432 +1515 +3560 + +3750 +4290 +5798 +5477 +2027 +1826 +6339 +6664 +2071 +5611 +4009 +2165 + +4424 +3220 +3006 +5249 +1427 +4691 +2417 +1468 +2435 +2430 +4560 +1767 +1661 +5351 +3480 + +9752 +11520 +7189 +11440 +7516 + +6962 +6318 +6796 +7039 +6509 +3035 +4551 +6494 +4699 +6092 +7734 + +5614 +7858 +1785 +5830 +2645 +4232 +7573 +6542 +4971 +5849 + +5288 +2492 +4213 +3903 +6472 +3900 +3325 +5947 +4029 +2288 +3069 +3046 +2633 +5082 + +1525 +9159 +10607 +13000 +4914 + +2232 +4661 +3575 +3938 +5334 +3065 +1005 +2386 +3748 +2592 +2502 +4334 + +20639 +30326 + +7479 +6661 +2626 +7142 +4469 +6912 +1665 +7263 +3952 +7861 +2736 + +2311 +6735 +3624 +5175 +6522 +1370 +2008 +3647 +6857 +3264 +2862 +4427 +6413 + +2325 +7237 + +1523 +2625 +1816 +1628 +8418 +5434 +6124 +3137 +2878 +4949 + +2218 +5941 +3051 +4939 +7147 +5603 +5609 +1478 +5494 +7949 + +3597 +1882 +2633 +2471 +6944 +3760 +3944 +2543 +6706 +6896 +6667 +1352 +2139 + +4534 +7162 +6233 +3012 +4319 +4610 +2912 +4899 +5222 +5082 +3670 +6363 + +12651 + +9158 +34492 + +15407 +9599 +18253 +12367 + +3870 +12469 +20949 + +5006 +12672 +2312 +5001 +1740 +12492 + +6497 +5827 +5872 +3269 +5344 +2235 +6482 +1593 +2136 +5270 +1039 +6375 + +8497 +3530 +7100 +6449 +9897 +9576 + +5508 +1430 +8102 +3020 +4959 +6561 +3947 +3397 +8462 +1859 + +9481 +11044 + +1287 +12137 +6366 +1835 +10500 +6763 + +2213 +4026 +3648 +7894 +7334 +1905 +1484 +2804 +4801 +3715 + +3925 +10274 +6920 +1395 +5990 +2321 +7620 +1539 + +2537 +6440 +1734 +1023 +1523 +1111 +2041 +5669 +6787 +7176 +7221 +2735 + +1989 +1682 +3892 +3203 +3088 +4199 +2010 +2167 +2106 +3411 +2219 +3033 +4214 +2096 +3487 + +5061 +1978 +1889 +4055 +2352 +4377 +3200 +3479 +1656 +4387 +3323 +1550 +3072 +5438 +4884 + +1663 +1029 +2037 +5546 +4006 +6645 +6535 +1348 +5422 +2353 +6384 +1405 + +5372 +4213 +1216 +4205 +3752 +5457 +4208 +3019 +5619 +4602 +3656 +3403 +5994 + +2017 +15645 +11147 + +10332 +9869 +6370 +13474 +2178 +7461 + +18692 +10232 +4148 +2647 + +66855 + +4985 +9276 +9301 +4837 +8248 +8191 +3237 +4567 +2816 + +55407 + +6350 +5061 +3654 +4514 +6197 +3986 +3601 +4421 +6166 +3973 +2375 +1214 +5203 +5738 + +21949 +20967 + +3232 +6276 +3937 +5900 +2079 +6475 +2119 +5981 +2392 +2731 +2076 +4051 +2328 + +3004 +3329 +1709 +4125 +4397 +1742 +5775 +3256 +2705 +1018 +1169 +2266 +3767 +4683 +6014 + +2537 +2800 +1115 +3066 +2741 +4514 +3184 +2034 +5565 +2245 +5884 +3200 +5808 +4964 +1710 + +5711 +2095 +4311 +3685 +3035 +1710 +4369 +2817 +5836 +3210 +1356 +4734 + +10244 +9347 +8073 +8412 +9912 +8438 +9189 +4677 + +4477 +5287 +6898 +7699 +4302 +6294 +7022 +8700 +6850 +8672 + +7889 +6263 +8775 +5103 +6364 +6343 +2250 +5207 +3257 +3149 + +17552 +10109 +7831 +4342 + +1258 +11359 +12821 +3614 + +6672 +3389 +10580 +11163 +11630 +2352 +11490 + +6340 + +5541 +7827 +4328 +2481 +2375 +8011 +4105 +2983 +2734 +2851 +1877 + +22845 +27767 + +32945 + +7892 +13869 +8411 +12957 +1888 +2491 + +6461 +4240 +6319 +4607 +1596 +7757 +3117 +1662 +2630 +2818 +5349 + +3397 +2467 +2993 +5613 +1894 +5570 +4646 +2143 +5724 +6325 +6070 +5724 +2587 +2366 + +2066 +6543 +10590 + +9360 +7985 +7172 +9598 +9400 +6918 +9103 + +5804 +2533 +4371 +2137 +4962 +4289 +3282 +4165 +5751 +1374 +2383 +2506 +5695 +3244 + +7079 +6767 +3159 +1301 +10045 +10545 +5331 +2043 + +4977 +4624 +5544 +3247 +1114 +1463 +4170 +2919 +2311 +5368 +3044 +1942 +1391 + +2344 +2101 +4414 +4349 +4279 +3368 +3300 +5830 +1944 +3557 +6110 +3964 +2169 + +4995 +5143 +9050 +5601 +3903 +3468 +4814 +3322 +8735 + +3494 +1879 +3757 +3842 +1795 +1158 +7008 +6778 +7222 +6034 +6320 + +6633 +7869 +3994 +7917 +9658 +9222 +5030 +2083 +5702 + +2086 +3860 +1142 +5361 +3812 +2735 +2673 +2015 +1615 +4579 +5090 +5747 +1426 +2139 +4786 + +3362 +6320 +2031 +7282 +5106 +3031 +1295 +6365 +3799 +3081 +6241 +1998 + +8620 +5326 +8573 +5232 +8508 +5911 +7057 +1924 +2393 +8446 + +3384 +5126 +3747 +5523 +2345 +3816 +3246 +5073 +5778 +1747 +5777 +5864 +5261 +5132 +3841 + +11806 +11670 +13208 +8744 +5434 +4319 + +10397 +4910 +16337 +16444 +6959 + +18421 +7156 +7004 +2915 + +6754 +5386 +6922 +7586 +7935 +2972 +6049 +7286 +3422 +2031 +6399 + +7510 +6281 +5004 +2836 +4253 +2891 +2127 + +4416 +1465 +1106 +6829 +4371 +2090 +4556 +2544 +3936 +6469 +1781 + +6885 +1049 +8295 +9647 +3617 +4504 +3286 +9503 + +17536 +2797 +4305 +9965 + +34414 +28940 + +25883 +25422 +5584 + +18095 +18098 +16278 + +3140 +3833 +3988 +6018 +4838 +3941 +4805 +5494 +2431 +5925 +2085 +5465 +4449 +1745 +1687 + +1249 +9174 +11930 +5039 +4455 +10089 +5806 + +7405 +1383 +5761 +6448 +7787 +1568 +4287 +3567 +5213 +1026 +4037 + +15317 +19135 +2237 + +1097 +9281 +3625 +10282 +2191 +7404 +5671 +9749 + +5436 +5129 +1903 +2407 +3301 +3048 +4309 +1119 +3447 +6443 +3705 +2274 +5059 +4889 + +5281 +8052 +5260 +3031 +4004 +5858 +5628 +1547 +3900 +4101 +6481 + +21678 +7776 + +3296 +3667 +2475 +6045 +1103 +3614 +6180 +8898 +1775 + +3177 +5633 +2228 +3745 +1418 +5908 +5257 +1145 +2975 +4887 +4950 +3936 +2556 +3659 +5236 + +2034 +6929 +8174 +10306 +8178 +2452 +10055 +10123 + +2581 +5182 +3548 +3783 +2933 +5747 +5932 +2296 +4418 +6076 +1532 +4055 +3802 +2080 +3476 + +3467 +18594 +8059 +11553 + +3109 + +1978 +1921 +2031 +3589 +4463 +6735 +3305 +7795 +5659 +5990 + +3344 +6281 +10312 +4107 +1507 +2358 + +9048 +1620 +9125 +14678 + +50634 + +10561 + +4145 +1105 +5400 +3889 +5475 +4716 +3577 +2445 +2775 +6190 +3839 +1909 +2971 + +3239 +3157 +1457 +2411 +2437 +1383 +4673 +4692 +5324 +2086 +4390 +6159 +1901 +3446 + +2139 +3226 +3313 +2041 +5980 +1880 +5717 +2596 +3221 +2366 +1878 +2706 +3439 +3657 +4891 + +5871 +4063 +3575 +4158 +6690 +2276 +3013 +4190 +6737 +7188 +3900 +6369 + +3554 +1762 +6451 +4430 +6042 +4443 +3249 +4430 +1693 +1379 +4927 +3209 + +2244 +4654 +6231 +3907 +2329 +6999 +3963 +5830 +2714 +6924 +6928 +2620 + +10463 +4092 +4551 +9847 +5709 +7949 +4759 +10519 + +3485 +2738 +5282 +5662 +3048 +5871 +5223 +5294 +2208 +4959 +4648 +3344 +5938 +2695 + +5668 +2447 +9093 +6948 +9235 +9037 +1295 +1117 + +6304 +7714 +2764 +5092 +3646 +1528 +4235 +3410 +5870 +6712 + +6243 +4167 +5546 +5677 +4051 +4126 +1518 +3038 +5074 +2996 +4713 +5615 +3713 +5353 + +1705 +7258 +2081 +4789 +1086 +3383 +1063 +1272 +7377 +1083 +2340 +1857 + +6148 +8793 +15899 +16615 + +1016 +1652 +10136 +4173 +10159 +7453 +8870 +7846 + +3170 +6604 +4405 +7236 +5404 +3844 +4443 +6335 +5523 +7522 +4969 + +3700 +5325 +2257 +5105 +4279 +3467 +5370 +2312 +4560 +5890 +2856 +5023 +2711 +6053 +1527 + +6966 +6543 +2763 +3654 +6555 +4079 +3391 +1850 +5381 +1137 +7077 +1526 + +43329 + +5367 +3412 +3096 +3796 +2692 +5915 +5300 +1995 +2768 +6016 +3345 +5212 +3014 +1795 +5710 + +1287 +3572 +3548 +3941 +6918 +1907 +4922 +6715 +5074 +6559 +6356 +1331 +4828 + +1361 +3299 +4490 +6031 +2418 +2283 +6857 +4058 +6626 +3136 +6850 +1425 +3941 + +53967 + +58538 + +7984 +2826 +7426 +3537 +2456 +7891 + +25266 + +4701 +14944 +3558 +9316 +10321 + +4597 +4734 +7240 +4556 +1901 +2009 +6461 +2494 +3910 +2772 +3528 +5806 + +1551 +10440 +4519 +4482 +7547 +3291 +1752 +7160 + +6988 +2307 +7645 +2942 +2957 +8326 +5863 +8334 +5512 +6792 + +9597 +12957 +2425 +9649 +3041 + +8391 +5211 +6638 +3594 +7878 +6074 +5116 +2396 + +1394 +8778 +8682 +5906 +4944 +4143 +1250 +7992 +7520 +7240 + +1872 +8574 +9482 +7326 +10291 +3034 +2239 +4823 + +4580 +6076 +2542 +4594 +2248 +2461 +2693 +3203 +6884 +4034 +6445 + +6790 +8420 +2488 +6755 +15375 + +5449 +2644 +2023 +8574 +10409 +4154 +10484 +9064 + +9238 +5727 +6658 +6015 +1146 +5883 + +16027 +11778 +4640 +15162 +4828 + +3197 +7744 +1794 +5587 +4922 +3452 + +2913 +29520 + +6131 +3539 +2434 +6159 +1779 +2633 +1647 +6215 +1171 +1833 +6559 + +4319 +9549 +2983 +1479 +3661 +6460 +9129 +7436 + +3481 +21517 +2874 + +6860 +6916 +7812 +1637 +5712 +8484 +7285 +3058 +2628 +2570 + +1659 +3146 +1841 +5757 +3450 +1746 +1008 +5645 +1850 +6996 +1300 +1900 + +2701 +9850 +2463 +6510 +16313 + +7957 +9451 +13258 +5356 +13211 +11193 + +2334 +19295 +10196 +1819 + +5791 +5682 +5106 +3888 +3749 +7422 +9829 +10153 + +3769 +5615 +1416 +3701 +3686 +3348 +3161 +3176 +2473 +2517 +2736 +1782 +5781 +3103 + +5582 +10766 +8454 +1262 +10836 +8468 + +7489 +2256 +3382 +4322 +2129 +1781 +2384 +6900 +3331 +4913 +3546 + +6154 +4587 +4720 +6739 +2343 +6147 +3297 +5561 +6439 +5630 +1130 +5046 + +5767 +5422 +5927 +1029 +5227 +3286 +5217 +1993 +2879 +4557 +4175 +2828 +3793 +2557 + +2892 +7300 +3365 +3756 +7648 +2537 +4011 +7480 +6709 +4010 +1344 + +6729 +1596 +2230 +7942 +10493 +3295 +10888 + +3992 +3165 +7898 +3801 +3385 +4875 +2519 +4350 +2260 +3989 +5977 + +3755 +7303 +1874 +3718 +5448 +2208 +3884 +7157 +4885 + +5042 +5099 +2005 +3179 +3429 +4146 +2125 +4488 +6368 +3732 +2031 +6317 +5670 +4167 + +4032 +7665 +1611 +1561 +8937 +4986 +2676 +7514 +3211 + +5627 +3639 +1219 +4932 +3339 +4567 +2280 +1420 +1215 +4449 +3371 +1656 +5555 +3381 +2957 + +5513 +11756 +4472 +4661 +11770 +2478 +9185 + +5443 +6055 +4317 +2557 +2921 +3833 +7765 +1688 +4767 +7302 + +11400 +7038 +11848 +5810 +4024 +8708 +9815 + +5844 +8109 +9288 +5487 +4463 +4964 +8004 +3623 +5724 + +55875 + +7214 +6283 +6962 +4385 +8165 +9330 +4506 +6456 +3249 + +24141 +17839 + +2814 +3522 +3834 +5491 +1959 +1653 +4548 +3150 +1922 +4649 + +6544 +5722 +6447 +8079 +2292 +1218 +1530 +6004 +6519 +8616 + +4716 +5361 +3212 +1483 +6032 +1168 +4369 +2808 +5251 +5770 +3025 +6059 +3971 +5611 + +6900 +6349 +6359 +3559 +6089 +2025 +5909 +2623 +4366 +3829 +2205 +6696 + +3958 +6196 +2973 +3056 +2921 +4351 +3940 +2188 +4689 +3217 +1877 +4609 +6174 +1043 + +8572 +10692 +4142 +3022 +3764 +10663 +1347 +6173 + +1618 +9886 +7620 +9968 +1839 +3526 +3621 +8521 + +8813 +11132 +15555 +5470 +1312 + +4025 +7513 +2082 +2426 +3542 +7940 +4392 +2387 +2528 +1031 + +4693 +12069 +2956 +3424 +9052 +10365 +7715 + +6014 +4190 +1926 +1571 +4337 +3544 +5594 +4324 +2836 +2075 +1644 +3130 +4123 +2728 + +5682 +11910 +3177 +6967 +10603 +5430 + +2105 +10866 +6804 +6925 +7798 +10432 +8296 + +5642 +8469 +5896 +5141 +6586 +5742 +9623 +8271 + +21333 +13036 + +11736 +9354 +6388 +9104 +7534 +11007 +9054 + +5503 +8509 +3348 +1887 +9859 +7303 +10324 + +10723 +3345 +4989 +10727 +9831 + +6278 +2447 +7489 +2763 +6210 +5940 +1997 +7499 +1136 +2913 +5045 + +11549 +15174 + +6691 +2272 +7002 +3091 +3492 +2790 +5359 +5071 +1177 +3777 +4431 +3524 + +16104 +7757 +15578 + +8940 +1139 +9935 +10083 +3451 +7287 +6594 +3007 + +1491 +2604 +3108 +4882 +5901 +3393 +1665 +7819 +7221 +1593 +4645 + +1365 +11628 +8502 +9468 +8638 +8219 +8880 + +2937 +13922 +2323 +5126 +3722 +6835 + +1108 +1336 +5054 +9811 +3846 +2925 +1268 + +4398 +6669 +8740 +10287 +4969 + +13246 + +6402 +8076 +1010 +4392 +2101 +4365 +2139 +7963 +6078 + +1122 +4123 +13473 +4701 +14157 + +17539 +15944 +17893 +8376 + +68056 + +5208 +4934 +5001 +5758 +1447 +2272 +3586 +3761 +2012 +2663 +5023 +4671 +1296 +6055 +5198 + +1295 +4069 +2210 +5072 +3547 +4437 +5520 +5498 +4907 +5945 +4221 +1405 +4506 +2862 +4030 + +8962 +2658 +5362 +4213 +7268 +2284 + +5226 +8628 +10535 +5284 +12189 +6523 + +8336 +8105 +5094 +6885 +7406 +7252 +9332 +9597 +4504 + +2108 +3800 +5986 +1793 +4395 +5762 +4297 +1900 +6256 +1205 +3552 +4270 +2859 +2140 + +2161 +8356 +7062 +6218 +7964 +7875 +3891 +4178 +7126 +2369 + +2077 +6348 +2757 +5734 +1632 +6196 +3700 +5385 +2898 +2310 +5376 +4158 +2413 + +8368 +3632 +8981 +10269 +5839 +2386 +5302 + +2194 +13530 +6742 +2611 + +7395 +7424 +3719 +6504 +8396 +4896 +6918 +8754 +3316 + +2712 +4870 +5014 +2195 +4629 +2415 +6338 +5244 +6682 +5050 +1141 +3762 +6459 + +17272 +18789 +6571 + +3488 +2091 +3800 +3821 +4206 +5993 +6173 +5600 +1670 +4492 +4136 +5512 +3093 + +1954 +5637 +1637 +5661 +1053 +1728 +3798 +7454 +5787 +6616 +5415 +5393 + +2181 +4290 +5407 +3608 +1568 +6300 +1619 +1006 +4916 +6100 +5025 +2718 +4054 +2302 + +5513 +6726 +2804 +2655 +6385 +4049 +2492 +4405 +2569 +6428 +3742 +5037 +6014 + +3531 +4133 +1549 +9146 +8227 +5186 +5159 +1952