From e18c62168b17557e8106cbca1197af47127330d9 Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Mon, 5 Dec 2022 20:17:33 +0100 Subject: Add day 1 for 2022 --- 2022/day1/Cargo.toml | 8 + 2022/day1/example.txt | 14 + 2022/day1/input.txt | 2266 +++++++++++++++++++++++++++++++++++++++++++++++++ 2022/day1/src/lib.rs | 72 ++ 4 files changed, 2360 insertions(+) create mode 100644 2022/day1/Cargo.toml create mode 100644 2022/day1/example.txt create mode 100644 2022/day1/input.txt create mode 100644 2022/day1/src/lib.rs diff --git a/2022/day1/Cargo.toml b/2022/day1/Cargo.toml new file mode 100644 index 0000000..a3c4e52 --- /dev/null +++ b/2022/day1/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day1" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/2022/day1/example.txt b/2022/day1/example.txt new file mode 100644 index 0000000..2094f91 --- /dev/null +++ b/2022/day1/example.txt @@ -0,0 +1,14 @@ +1000 +2000 +3000 + +4000 + +5000 +6000 + +7000 +8000 +9000 + +10000 diff --git a/2022/day1/input.txt b/2022/day1/input.txt new file mode 100644 index 0000000..6c1f923 --- /dev/null +++ b/2022/day1/input.txt @@ -0,0 +1,2266 @@ +6669 +6434 +6564 +1032 +1098 +1829 +2608 +7322 +2690 +7061 +1664 +5769 + +6160 +1082 +3958 +5272 +2188 +5618 +3418 +2302 +2926 +3338 +1082 +2024 +4195 +4083 + +3276 +5581 +3421 +3403 +4356 +2989 +1278 +1868 +3630 +4702 +3409 +4887 +2383 + +7104 +7496 +5265 +8078 +8788 +7402 +3601 +2641 +1252 +4994 + +4074 +7524 +8889 +9290 +8892 +5785 +2163 +1074 +6747 + +7452 +8006 +12427 +7919 +4012 +6850 + +34591 +26861 + +13028 +12695 +12762 +11006 +15937 + +17218 +12408 +17554 +11415 + +1118 +7240 +6400 +3431 +1032 +3283 +4667 +6100 +5076 +1101 +6952 +3527 + +7633 +4385 +4510 +4073 +3052 +11738 + +33554 + +3448 +16054 +10839 + +4496 +2697 +4731 +5150 +5327 +4039 +4004 +2148 +6150 +4001 +2882 +5780 +4327 + +4095 +2064 +6701 +3828 +2427 +4775 +2583 +2000 +1390 +7391 +1701 +3796 + +10355 +1262 +8781 +6350 + +11053 +11527 +1389 +6007 +12383 +11033 + +7951 +4258 +9815 +10061 +7579 +3769 +11431 + +3597 +35622 + +2129 +2994 +4260 +5269 +4179 +1612 +3509 +3581 +4544 +3713 +3202 +6458 +1203 +1095 + +17196 +13475 +12666 + +3549 +6432 +6593 +6723 +1272 +4023 +2112 +2844 +5135 +5103 +1585 +4773 +5635 + +8731 +16378 +5076 +2999 + +11136 +1525 +8684 +9731 +9753 +5366 +7399 + +8996 +1483 +4922 +1191 +2761 +9333 +9247 +3797 +3940 + +5876 +4139 +2158 +5905 +5445 +2438 +2814 +3853 +3432 +2289 +5783 +3839 +2811 +4361 + +3260 +6058 +3620 +2171 +4387 +4011 +4552 +1646 +3400 +2941 +6776 +2793 +6702 + +2318 +3118 +4920 +1293 +5593 +2308 +6819 +5949 +3819 +1742 +1074 +4565 +5891 + +5260 +8430 +6832 +6248 +2162 +7770 +1692 +4345 +7140 +6748 + +2921 +2075 +6039 +2875 +1479 +5835 +2350 +5981 +2684 +2560 +1608 +1495 +1358 +2047 +5003 + +13864 +8452 +10716 +6642 +14875 + +9704 +7477 +3664 +7751 +11616 +11067 +3496 + +12744 +11268 +7987 +15133 + +2859 +6255 +1302 +4053 +6133 +4181 +3008 +3450 +4421 +6065 +2732 +7142 + +7502 +3436 +2987 +8648 +1103 +1477 +7647 +9669 +6285 + +69741 + +60977 + +3987 +10933 +1170 +12375 + +6773 +2923 +8707 +3434 +5872 +5793 +5573 +6338 +7182 +2158 + +5522 +5345 +4425 +6178 +5236 +1397 +6165 +2173 +3547 +5225 +3949 +2238 +2594 +6032 + +7998 +6850 +1552 +3087 +6978 +7829 +1957 +1432 +7504 +2382 +3534 + +16000 +12845 +12638 +8250 + +5712 +1853 +2986 +6472 +1543 +1147 +5670 +5085 +3519 +5847 +4603 +1394 +2353 +1668 + +3542 +2995 +5413 +1108 +1783 +3902 +5173 +4228 +3997 +1759 +5652 +5896 +2109 +5697 +4198 + +3625 +7049 +4471 +11613 +1668 +9077 +3143 + +4473 +3397 +12107 +1364 +5698 +8030 +12081 + +2337 +3212 +3567 +1115 +3963 +1753 +1769 +6966 +3093 +4758 +5271 +3635 + +4387 +3770 +2931 +3029 +2657 +1109 +1592 +4884 +5784 +1911 +2938 +2501 +5851 +3793 + +1438 +7877 +7911 +2781 +1486 +4302 +6924 +3930 +6489 + +3794 +5964 +3072 +2292 +5199 +2157 +2357 +3649 +4888 +4522 +5408 +4743 +2753 +1717 + +8856 +7753 +8504 +1696 +5469 +7135 +7838 +6572 +4414 + +3860 +6400 +4018 +4506 +6979 +5493 +1950 +2544 +7426 +1405 +6440 +6253 + +8397 +2488 +4483 +3346 +8035 +3996 +6236 +4951 +2849 +6277 + +2113 +5149 +2409 +3971 +2762 +1704 +1799 +3929 +3224 +2149 +5804 +2026 +2269 +1107 +3140 + +2851 +10610 + +2901 +2215 +3138 +4848 +2612 +5624 +4878 +4137 +4093 +4660 +3369 +1970 +1176 +2141 +2298 + +50004 + +37286 +4713 + +2844 +1432 +2303 +4938 +3770 +1589 +5731 +5173 +3512 +5820 +3910 +6687 + +8039 +11639 +2325 +11278 +8313 + +7488 +15716 +1889 +4665 + +10258 +1862 +10452 +8650 +8039 +8984 +8778 +6486 + +8827 +12823 +25875 + +4658 +12284 +10171 +5966 +13525 + +7011 +2322 +8908 +8383 +3992 + +8965 +4198 +18224 +19587 + +5325 +20017 + +13271 +10542 +5223 +3178 + +1563 +4352 +6234 +2095 +1565 +1904 +6494 +6102 +3930 +4529 +5226 +5391 +1159 +4928 + +1588 +4779 +3001 +3698 +5784 +5327 +2149 +3020 +5362 +5751 +5704 +3296 +4746 +2595 +3169 + +5627 +24442 +5459 + +1867 +7808 +1287 +4179 +1395 +5759 +3916 +3549 +7235 +1740 +3753 + +11451 +8529 +1874 +6475 +1205 +8217 +9286 + +2929 +3725 +6071 +2336 +1725 +7049 +2041 +1694 +1231 + +3587 +6327 +8078 +4723 +10069 +5008 +8537 +7827 + +4148 +4758 +3453 +1189 +5086 +1045 +2429 +5157 +4454 +3198 +3080 +5980 +6011 +3575 +5044 + +7858 +7552 +7965 +3623 +7309 +4740 +6151 +1926 +2370 +6310 + +1734 +11654 +8498 + +2099 +4433 +3831 +6238 +4152 +1749 +4146 +5282 +3683 +4976 +5297 +1710 +4181 +4213 + +1981 +1318 +5839 +4815 +6083 +3841 +2842 +3246 +3884 +5193 +3451 +5147 +2518 + +2960 +3167 +5279 +2233 +6509 +5722 +3576 +6488 +4366 +1564 +6941 + +7515 +1502 +4892 +4008 +3196 +1730 +7263 +5971 +6213 +6673 +7824 + +5835 + +2444 +4473 +6654 +2285 +2184 +6397 +3411 +2602 +5380 +6952 +1234 +1474 +6842 + +3876 +7019 +1240 +6349 +4016 +2340 +8085 +1932 +5186 +4549 +6375 + +19405 +2299 +5583 + +13376 +12685 +9717 +12221 +2883 + +9537 +8867 +13398 +6781 +13954 + +2874 +1486 +5232 +5947 +2140 +7588 +1404 +8295 +6127 +7705 + +22842 +26153 + +8396 +2626 +3725 +5917 +2949 +1524 + +30131 + +5851 +1366 +3574 +1450 +5377 +6713 +3783 +3281 +4981 +6910 +5229 +4359 + +9099 +2211 +2814 +4583 +4690 +7122 +9334 + +17546 + +1378 +6567 +5300 +3819 +5604 +5316 +7159 +3564 +4302 +1442 +5763 +6610 + +1891 +8030 +3579 +4977 +3620 +2421 +7637 +1481 +9177 + +3298 +3865 +6812 +5409 +6482 +7245 +7049 +4319 +3040 +6027 +7195 +6023 + +28329 + +3409 +4600 +6903 +4511 +4341 +6742 +6967 +4247 +6802 +3453 +1515 + +2517 +13539 +3030 +11819 + +2974 +3749 +3971 +4509 +9599 +1036 +8176 + +1000 +2863 +1029 +2452 +2286 +2891 +5244 +3929 +5734 +2075 +5107 +2622 +4680 +1847 + +9653 +4720 +5078 +1589 +2431 +3149 +3261 +7308 +6953 + +5916 +7409 +3773 +7286 +4552 +9685 +2114 + +38289 + +1591 +10416 +3921 +16121 + +3217 +10969 +5198 +9305 +8671 +9606 +9759 + +60758 + +26875 + +12555 +12735 +14656 +4437 +4307 + +1528 +4259 +3310 +5563 +2281 +4305 +2573 +5733 +2725 +1519 +3299 +2055 +4674 +6146 + +21988 +17405 +15500 + +1775 +3126 +5002 +9407 +6048 +3346 +8368 +2185 +2825 + +24510 + +25200 +37377 + +9852 +1000 +2688 +11027 +11129 +11742 + +16298 +12093 +16906 +1567 + +1677 +3068 +6035 +6271 +6344 +5794 +1933 +6032 +4308 +6874 +6225 +1046 +6712 + +2194 +4404 +8838 +6737 +8595 +2478 +1033 +3489 + +5439 +14385 +13397 +3570 +13810 + +1726 +5761 +4318 +2813 +3351 +3168 +1539 +3847 +4422 +6071 +3376 +1093 +1979 +3206 +4011 + +2491 +4041 +3106 +2550 +3206 +5553 +3473 +5805 +1934 +4179 +1963 +4113 +3996 +2351 +3437 + +8747 +3481 +11813 +7672 +4711 + +4393 +2158 +3121 +6931 +7801 +3706 +4801 +3971 +1195 +1553 +1058 + +20051 +11463 + +1299 +6007 +6845 +1866 +2461 +3548 +4175 + +10323 +9098 +5566 +8553 +8768 +1022 +10088 + +5388 +4289 +5067 +5871 +5451 +4891 +8796 +6506 +3323 + +2652 +1923 +5235 +1539 +9256 +5794 +6153 +1379 +3568 + +12764 +15021 +11371 +1577 +4189 + +1960 +7462 +6862 +6710 +2350 +1689 +8322 +1575 +5367 +1074 + +4411 +4588 +3164 +1456 +6084 +2628 +5635 +2845 +3593 +3027 +6316 +5661 +2890 +2470 + +5592 +5071 +4290 +4402 +6091 +2907 +1531 +6229 +6159 +1791 +3833 +2435 +3919 +3160 + +18373 +2699 +6711 +14268 + +7693 +1264 +4217 +5299 +3786 +4555 +1112 +3392 +2535 +6768 +3618 + +11723 +6939 +7761 + +15672 +15601 +13101 +6229 + +23344 + +7787 +4343 +6661 +2629 +3189 +5155 +7999 +2351 +1308 +2726 +3177 + +18631 +18125 + +9177 +3897 +3655 +3449 +8336 +4366 +3363 +2145 +8594 + +1820 +9067 +2171 +2487 +15998 + +16221 +3430 +14946 +6869 +5305 + +4483 +7157 +1588 +2629 +5109 +7299 +1688 +4386 +6960 +6538 +1525 + +1289 +1340 +1520 +3601 +4316 +2653 +6140 +6219 +5044 +4306 +2573 +4028 +1828 +5844 + +7277 +5775 +2893 +3958 +6228 +6786 +7203 +7119 +5786 +6477 + +4367 +10361 +5973 +9197 +2832 +7900 +6711 +8279 + +9606 +6118 +10025 +10242 +8279 +8938 +6688 +7905 + +2478 +1918 +5575 +1840 +4897 +5871 +6309 +2778 +1937 +5396 +3249 +3456 +1002 + +12936 +11011 +11487 +11919 +13937 +8622 + +3853 +13287 +8285 +7842 + +11250 +7923 +8049 +3931 +7625 +4918 + +6516 +8209 +1752 +6258 +8501 +7426 + +10432 +3916 +12055 +13687 +1774 +8053 + +4682 +6779 +7258 +6929 +6899 +2643 +7021 +4960 +1732 +4065 +2854 +3593 + +13273 +11558 +5225 +3607 +5637 +11317 + +65129 + +6830 +3890 +4718 +6376 +3029 +8343 +7250 +7484 +3379 + +16188 +11694 +16583 +18745 + +4379 +2764 +4045 +3392 +1546 +3255 +2029 +3239 +1565 +5060 +1208 +1340 +5419 +3466 +4620 + +5408 +11519 +10387 +7305 +5770 +1733 +5462 + +9975 +4492 +14939 + +6365 +5846 +1825 +2851 +5483 +4801 +4109 +2581 +4729 +5149 +5573 +3345 +5426 +2060 + +15826 +6853 +10422 +12615 + +26180 + +5520 +1816 +1983 +4838 +2454 +4060 +2788 +6199 +6235 +2288 +4959 +4117 +3684 +3781 + +33317 +13949 + +1439 +1401 +4390 +4539 +5877 +2857 +3622 +3524 +4414 +1908 +2148 +1941 +4218 +1323 + +9364 +14727 +3282 + +22309 +24789 +7850 + +3434 +19391 +9665 + +1420 +3456 +4714 +4667 +2824 +3442 +1875 +2679 +4123 +1089 +2733 +4700 +5369 +1177 +1161 + +1710 +4521 +2164 +5986 +2485 +5614 +6494 +5043 +6334 +4947 +1423 +3351 +4010 +4360 + +3366 +3591 +8590 +3852 +9035 +8474 +1698 +5448 + +4560 +2248 +7197 +1821 +5411 +4522 +4914 +7806 +1387 +5702 +1780 + +3156 +2143 +5586 +2022 +3913 +5090 +5977 +4643 +3195 +5785 +6892 +5048 + +3839 +1261 +10477 +8350 +5769 +12750 + +19348 +9824 +15316 +17581 + +7925 +7634 + +2947 +4578 +1499 +1778 +10217 +5597 +3943 +8172 + +2012 +3917 +8065 +5627 +7562 +5489 +4334 +1648 +6666 +8287 + +15138 +7610 +12478 +12309 +13290 + +6296 +1234 +7587 +5783 +3061 +5613 +3283 +4447 +7188 +4577 +4102 + +8355 +2352 +1164 +1204 +2809 +6145 +6475 +3972 +1539 + +1805 +1214 +4153 +1685 +2472 +4620 +2784 +1859 +1390 +3591 +2560 +6291 +2805 + +11842 +20590 +15179 + +22669 +16927 +13861 + +2691 +9308 +3682 +1107 + +6906 +5502 +2120 +6862 +8843 +5379 +9651 +8263 +7238 + +3026 +5505 +2220 +1215 +4409 +2544 +3819 +7524 +3042 +4252 +1241 + +11244 +2129 +8844 +10557 +4463 +2319 + +5365 +2200 +1589 +4451 +5736 +1895 +4986 +3211 +1235 +4028 +1707 +1051 +6037 + +14311 +5746 + +2013 +8567 +3579 +6440 +3637 +10568 +8596 +7767 + +5653 +7015 +5853 +3670 +4265 +3003 +4139 +3132 +7538 +3629 + +3173 +1436 +3076 +5275 +4686 +5149 +6179 +2238 +1339 +2123 +4221 +6509 +5150 +2728 + +35818 + +11419 +8083 +12069 +3666 +2300 + +28844 +10855 + +30505 +18426 + +3369 +3085 +7409 +7308 +6556 +9671 +5416 +5981 +7558 + +5259 +9105 +15313 +6050 + +3203 +3414 +11117 +6231 +6049 +11632 +4816 + +11686 +5815 +11464 +7186 +9842 +5953 +8553 + +9330 +1817 +3529 +1761 +1823 +3942 +9471 +2207 + +8304 +9429 +12445 +3950 +16005 + +4809 +3869 +6968 +3204 +3621 +5925 +3967 +5180 +5238 +3013 +5291 +1371 + +4656 +2372 +1950 +4696 +1060 +3802 +5178 +5875 +3804 +5357 +3257 +1949 +3892 +5813 +3996 + +10281 +24432 +9867 + +7152 +5979 +4947 +6123 +6631 +6929 +4675 +3974 +5293 +6265 +4023 +6536 + +2200 +2917 +4479 +3671 +7268 +3545 +6762 +5921 +1814 +3704 +2767 +4692 + +9984 +5140 +2532 +4146 +13613 +11710 + +2027 +2367 +7666 +8617 +7563 +6593 +5060 +4431 +2666 +5080 + +7837 +6223 +2698 +8080 +3586 +8054 +6153 + +4364 +5979 +13237 +9841 +8704 + +5197 +4477 +5255 +8748 +11477 +1361 +4220 + +12430 +4451 +1038 +9999 +7577 + +59250 + +3857 +2158 +7069 +4813 +1980 +1636 +3646 +6760 +2842 +4217 +7578 + +1360 +2241 +2170 +2623 +2647 +5193 +3950 +4758 +5644 +2097 +3768 +5600 +3042 +3976 + +3905 +7116 +9941 +1927 +2265 +4489 + +6072 +3192 +6263 +3496 +3332 +2584 +5862 +6093 +6069 +4497 +1483 +6109 +4352 +1235 + +18487 +10619 +16127 +11370 + +2449 +2250 +2025 +3522 +5687 +5202 +4474 +5911 +3270 +5929 +4208 +2694 +5863 +3789 +2120 + +2591 +9936 +3145 +4471 +2234 +2250 +1547 +3760 + +13060 +12425 +20060 + +1786 +6317 +2087 +1998 +4111 +2185 +5446 +2732 +3731 +6082 +4513 +6370 +2494 +3197 + +5581 +5685 +1428 +1539 +1704 +5007 +2207 +4835 +1700 +4340 +1818 +3276 +1724 +1555 + +16085 +18634 + +1834 +2654 +5257 +2329 +4180 +4424 +4947 +5484 +1141 +4607 +5401 +2856 +2045 +4916 +5992 + +2925 +4945 +4969 +1400 +6410 +1093 +2398 +1949 +2701 +2763 +6314 +1105 +1580 +2804 + +52492 + +4181 +8013 +15867 + +2465 +4182 +6901 +1949 +5107 + +3078 +5461 +5477 +5344 +5974 +9751 + +26600 + +3943 +9282 +9655 +4304 +11368 + +4386 +7039 +7871 +9075 +2279 +10752 +1240 +5754 + +6914 +7359 +6766 +5693 +7719 +5043 +8665 +7241 +3498 +8771 + +12438 + +2288 +2764 +2633 +3416 +3396 +3172 +2004 +3583 +1862 +3027 +3928 +3165 + +3265 +2973 +2084 +5073 +1835 +2803 +2420 +3924 +4277 +5862 +1330 +5599 +3553 +3640 +5041 + +8709 +1629 + +5938 +9575 +1789 +6720 + +3623 +4874 +8500 +6566 +6965 +9388 +2106 +8552 + +9147 +4821 +5991 +9194 +3138 +2877 +5089 +4677 +3841 + +2865 +4858 +4642 +3755 +5958 +8076 +5599 +7931 + +5112 +2846 +2713 +3603 +5395 +4539 +4324 +2518 +1850 +5995 + +44743 + +1052 +3226 +3355 +4357 +4745 +4324 +4606 +3155 +3877 +1188 +4762 +1587 +2101 +1792 +4723 + +2071 +4440 +7135 +5825 +6083 +4034 +4572 +6942 + +3345 +5000 +1167 +1951 +4713 +2062 +4786 +7635 +1304 +6163 +5063 + +7060 +1738 +2658 +1217 +1388 +7416 +3719 +3903 +2305 +1051 +4437 +2496 + +9603 + +17966 +16434 +6253 + +8045 +8593 +9128 +6057 +10943 +11143 +2626 + +1961 +2742 +5305 +4780 +4307 +2465 +4472 +2946 +1404 +2195 +4822 +5607 +1027 +5697 + +26688 + +1004 +1382 +1194 +4638 +3773 +5037 +3731 +2676 +3567 +1159 +1136 +2883 diff --git a/2022/day1/src/lib.rs b/2022/day1/src/lib.rs new file mode 100644 index 0000000..26df697 --- /dev/null +++ b/2022/day1/src/lib.rs @@ -0,0 +1,72 @@ +pub fn get_sums(input: &str) -> Vec { + let groups: Vec<&str> = input.split("\n\n").collect::>(); + let data_groups = groups + .into_iter() + .map(|x| { + let numbers: i32 = x + .split('\n') + .map(|x| x.parse::().unwrap_or_default()) + .sum(); + + return numbers; + }) + .collect::>(); + + data_groups +} + +pub fn part1(input: &str) -> i32 { + let sums = get_sums(input); + + sums.into_iter().max().unwrap() +} + +pub fn part2(input: &str) -> i32 { + let mut sums = get_sums(input); + + sums.sort(); + sums.reverse(); + + sums[0] + sums[1] + sums[2] +} + +#[cfg(test)] +mod day1_tests { + use super::*; + + #[test] + fn test_example() { + let data = include_str!("../example.txt"); + + let result = part1(data); + + assert_eq!(result, 24000); + } + + #[test] + fn test_input() { + let data = include_str!("../input.txt"); + + let result = part1(data); + + assert_eq!(result, 69912); + } + + #[test] + fn test_example_part2() { + let data = include_str!("../example.txt"); + + let result = part2(data); + + assert_eq!(result, 45000); + } + + #[test] + fn test_input_part2() { + let data = include_str!("../input.txt"); + + let result = part2(data); + + assert_eq!(result, 208180); + } +} -- cgit v1.2.3-18-g5258