diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..6e23cf7 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aoc-2022" +version = "0.1.0" diff --git a/input/day01/question01 b/input/day01/question01 new file mode 100644 index 0000000..89622fa --- /dev/null +++ b/input/day01/question01 @@ -0,0 +1,2262 @@ +5916 +7281 +1715 +3853 +10283 +1455 +7807 +6117 + +33711 +6672 + +3988 +6947 +1674 +1928 +6128 +6361 +3817 +6141 +3301 +5473 +2609 +4262 +6105 + +2725 +7430 +7415 +6997 +4542 +2703 +7148 +2710 +5660 +7372 +2539 +7162 + +5377 +4274 +2793 +2911 +2113 +1077 +4115 +5871 +1079 +4336 +4894 +2088 +5408 +5535 +1982 + +3270 +1347 +4884 +2986 +6067 +5567 +5093 +4421 +2772 +4935 +6153 +1235 +3824 +6460 + +4131 +5183 +5329 +8021 +6096 +6053 +4352 +2016 +5055 +3031 +3379 + +1846 +3964 +16169 +10061 +16400 + +1519 +5378 +6590 +6782 +7072 +4011 +6581 +5871 +6112 +6836 + +3894 +5621 +6342 +6746 +1955 +3348 +5651 +1468 +7232 +3240 +3435 +4566 + +8079 +4170 +5034 + +7439 +1078 +4537 +7020 +2013 +2796 +1627 +1171 +3472 +2611 +3701 +1570 + +2874 +13468 +4739 +16126 +11847 + +37266 +25445 + +9722 +12162 +9507 +5369 + +10547 +5064 +10328 +7331 +2829 +7218 +2094 +8963 + +9828 +4878 +1582 +3494 +8656 + +4271 +8332 +1579 +6029 +13927 +5572 + +6709 +5200 +2009 +7145 +3739 +4750 +7173 +6257 +2520 +4878 +3730 +5773 + +3367 +11772 +4282 +9184 +6947 +2471 + +1112 +1186 +2178 +5993 +2098 +5243 +5223 +1709 +2290 +6327 + +8571 +4827 +4630 +2496 +6101 +10967 +9712 + +5730 +2663 +6857 +3517 +7938 +5069 +1825 +6498 +2716 +6798 +6394 + +2154 +5746 +3630 +4056 +6257 +6249 +4872 +1769 +8320 +1294 + +1469 +6784 +6869 +3459 +6487 +1003 +7296 +8054 +3027 +8338 + +1156 +5197 +6307 +3935 +4874 +2021 +2001 +2077 +3755 +4507 +4116 +1742 +1341 + +2602 +6117 +1059 +4689 +4430 +1216 +4126 +4810 +6270 +2819 +6013 +1589 +4496 +5670 + +5739 +8341 +9572 +6860 +5805 +6627 +3291 +5664 +1907 + +5359 +26291 + +2503 +8306 +6709 +4770 +7460 +5028 +6586 +1286 +4120 +4381 + +1049 +17368 + +5170 +1955 +6256 +2513 +2666 +2571 +1274 +4515 +2359 +5327 +6325 +1141 +5883 + +9948 +18400 +10491 +16743 + +1531 +2231 +3614 +6706 +3516 +5629 +1745 +2780 +2899 +2916 +3928 +4085 + +10012 +12228 +15603 +4551 +3922 + +12264 +13387 +6562 +6050 +12784 +11921 + +34920 +20549 + +4990 +5935 +4252 +4079 +1354 +9274 +3232 +1527 +5978 + +65379 + +1216 +5983 +12805 +6875 +2671 +2381 + +4320 +5687 +6760 +2023 +4263 +1892 +2926 + +3192 +10623 +10169 +12098 +1307 +11324 +2156 + +3749 +2564 +3627 +4701 +5104 +1052 +5035 +3742 +5456 +2150 +2042 +4326 +3053 +5006 +5142 + +5984 + +13641 +30009 + +13225 +5744 +8472 +8526 +5427 + +4593 +6409 +7212 +6755 + +4285 +8123 +6604 +1812 +4145 +9072 +7456 +9813 + +8572 +3737 +9989 +17372 + +3522 +11158 +11713 +1160 +10425 +9709 +7731 + +6503 +3369 +3225 +3899 + +31458 +29242 + +27980 +17901 + +3361 +2869 +1654 +5350 +6317 +8273 +6526 +2723 + +5186 +31304 + +12989 +11754 +11012 +5487 +3127 + +1627 +3229 +2818 +6410 +10184 +6946 +3349 +2976 + +4656 +4290 +3066 +5230 +3503 +1444 +3154 +3748 +2392 +2435 +2211 +2093 +3835 +2402 +1698 + +1311 +6276 + +3748 +4996 +6338 +8906 +11219 +1797 +6467 + +4241 +3011 +6574 +3945 +5947 +6398 +1505 +4799 +5325 +5559 +1735 + +13793 +9236 +9335 + +1031 +7087 +1933 +14085 +12694 + +2019 +2371 + +6900 +6067 +5355 +7415 +3735 +3616 +5010 +4661 +7376 +3971 +2233 +6296 + +7738 +2032 +2170 +6164 +6861 +2420 +5351 +2794 +9647 + +5785 +1391 +2213 +12440 + +2136 +1308 +3209 +3353 +3791 +5916 +5124 +1003 +2489 +5370 +3041 +4007 +2782 +2946 +5378 + +5848 +8012 +5443 +3056 +2550 +8199 +9613 +6809 +2623 + +16460 +1618 + +12239 + +3005 +1728 +7292 +7379 +3241 +5232 +8567 +5880 +4743 +8582 + +9983 +5730 +2346 +7669 +3723 +3102 +10038 +3634 + +5996 +7330 +1061 +5321 +3113 +3533 +6219 +4449 +1353 +5978 +1035 + +2951 +2249 +6361 +1322 +3363 +4667 +4494 +6531 +1530 +2968 +2552 +2249 +5052 + +4376 +13988 + +5472 +3797 +8451 +5091 +5804 +9664 +9061 +1726 +7215 + +2922 +4700 +6062 +5747 +4578 +2098 +1192 +1245 +4752 +1098 +1591 +4644 +5028 + +25366 + +5026 +1139 +6338 +1321 +5559 +3270 +6123 +2535 +1758 +1290 +4424 +3760 +3754 +5044 + +5414 +3035 +5760 +3894 +6727 +2297 +3800 +3285 +3127 +4110 +5435 +1321 + +1363 +5566 +3084 +6064 +1968 +2954 +5078 +5649 +5761 +1265 +5368 +2584 +1814 +4855 +4670 + +4580 +3174 +1343 +4299 +2930 +2209 +4883 +4404 +2899 +4431 +2433 +3444 +2183 +3816 + +2301 +3278 +6603 +5907 +6658 +3429 +3206 +5091 +4527 +3467 +4731 +2694 + +14883 +3132 +16229 +13353 + +4339 +4088 +4244 +1947 +2691 +6081 +1013 +3078 +1197 + +4565 +5429 +19061 +7019 + +5028 +1657 +5177 +1768 +3641 +3897 +3675 +1885 +1966 +1724 +6106 +5721 +5394 +1562 +3637 + +5590 +5469 +4382 +5375 +1656 +3496 +1553 +4737 +5521 +2951 +5633 +6099 +2365 + +3451 +6892 +4327 +6207 +6468 +1638 +6676 +3366 +6793 + +7999 +3815 +2828 +7726 +4747 +6494 +3227 +5024 +7550 + +10475 +24156 +1946 + +61232 + +3562 +11518 +5489 +13618 +8886 +4331 + +5068 +6620 +1899 +1742 +4183 +4792 +3300 +1636 +3644 +1716 +2247 + +21547 +25323 +17987 + +10463 +11220 +7134 +10719 +1274 +11774 + +22985 +19754 + +16499 +24689 + +2529 +4751 +2572 +4097 +6163 +5281 +3617 +3757 +3927 +3603 +3093 +6143 +4730 +3650 + +6393 +1523 +5956 +6591 +2063 +6414 +6834 +6649 +3808 +1286 +4953 +5087 +2796 + +3296 +2685 +5141 +3415 +7132 +4397 +4098 +6860 +5815 +4552 +2464 + +15557 + +1863 +1041 +4563 +1798 +3402 +1270 +3457 +1379 +5354 +2330 +6010 +3812 +2823 +6076 +4226 + +2619 +3202 +3298 +5199 +5356 +2239 +1567 +2088 +3106 +1639 +7116 +6917 + +1569 +7017 +4686 +8636 +8174 +1685 +5343 +4403 +1187 +3285 + +2886 +5763 +1469 +11516 +10773 +2282 +11137 + +10923 +8429 +11772 +8319 +4256 +6490 +2616 + +3491 +28517 + +15778 +16609 +25152 + +4645 +5384 +6744 +4612 +4405 +5450 +3678 +3894 +2232 +7232 +2377 +7056 + +4331 +2122 +4624 +1423 +6583 +5137 +1426 +1919 +2101 +4315 +4855 +6865 +1114 + +7694 +8630 +6754 +5894 +7170 +8178 +8646 +6369 +6162 +5627 + +8027 +1885 +6581 +2173 +3920 +7931 +1907 +6362 +6774 +5027 + +3841 +8648 +5530 +2754 +13794 +8974 + +1363 +5452 +6499 +5721 +2430 +2766 +6536 +1606 +5189 +1008 +6126 +2875 +5931 + +7517 +8727 +3495 +7647 +10130 +8585 +1435 + +3909 +6342 +5378 +11006 +6483 +6426 +4300 + +7358 +4616 +9891 +2965 +11555 +13437 + +6332 +3010 +7403 +1795 +7359 +5017 +6471 +2495 +2589 +7223 + +5359 +10446 +12714 +1727 +8024 + +11690 +3529 +6145 +8147 +15083 + +5461 +4939 +1905 +3342 +3385 +3920 +5609 +3524 +5645 +6882 +4355 +2263 +3464 + +67422 + +2437 +6392 +1206 +1253 +3402 +4722 +2867 +6304 +3139 +2120 +4953 +5095 +3647 + +16783 + +9717 +25377 +17887 + +6852 +8926 +10395 +2107 +8228 +7462 +5239 +10085 + +22658 +18276 +12253 + +3488 +4976 +4196 +3427 +4603 +1579 +6785 +6656 +5143 +1109 +5507 + +14794 +28617 + +2296 +2367 +1865 +9975 +1988 +3950 +7755 +3008 + +8090 +8620 +11016 +11153 +5513 +2683 +4080 + +10557 +2744 +11379 +8339 +1908 +3088 + +8659 +9142 +1838 +10380 +7386 +4599 +9768 +3718 + +2941 +9112 +6492 +2847 +1562 +8956 + +7867 +4589 +9354 +3953 +7557 +2528 +8845 +8845 +1468 + +7065 +10043 +7109 +4063 +2987 + +11800 +5009 +5108 +4783 +12570 + +61504 + +5512 +1432 +6118 +6389 +2752 +5032 +1688 +5662 +6690 +4760 +6248 +3515 +6122 + +4127 +1192 +3521 +4583 +3060 +5306 +2783 +1949 +3633 +5486 +4799 +2056 +2800 +5770 + +19956 +11717 +16021 +3566 + +2387 +4083 +5811 +3849 +3496 +2213 +4107 +4588 +1995 +1228 +5055 +6133 +1759 + +33909 + +4517 +2866 +1068 +4227 +1063 +4361 +3775 +1875 +1073 +3639 +3237 +4783 +5372 +4323 +3275 + +13452 +14869 +23151 + +12595 +9113 +9304 +5185 +5235 +3787 + +6269 +1291 +2735 +3495 +2070 +5552 +4185 +3574 +4856 +4845 +1211 +4071 +5889 +3287 + +4307 +1452 +2411 +8024 +2614 +7541 +5120 +3104 +3937 +2592 + +37000 +12395 + +4725 +8239 +3949 +9498 +9488 +6151 +5996 + +1748 +3706 +6210 +5673 +3791 +5378 +6384 +2993 +4521 +1687 +2437 +3063 +4262 + +10776 + +1329 +2732 +4136 +3270 +7983 +6004 +4285 +7196 +7543 +7826 + +5324 +15037 +11331 +14308 +13527 + +1542 +4771 +4065 +3939 +5925 +6740 +5121 +6854 +1797 +2246 +2036 +5105 +5555 + +9669 +8993 +7817 +5442 +10974 +7509 +8967 + +46998 + +8151 +8919 +5590 +1172 +12588 +12730 + +1584 +7654 + +25613 + +10908 +3168 +6477 +2079 +1440 +6280 + +7201 +5717 +8338 +1740 +2479 +1984 +1751 +8594 +7637 +1089 + +14411 +3771 +7202 +3251 +2650 + +5964 +3451 +1718 +1723 +2658 +2163 +3113 +6200 +2399 +5498 +1571 +5872 +2842 +6443 + +2611 +3129 +3150 +4293 +3362 +5035 +5682 +1950 +4556 +6069 +1061 +3628 +5222 +2266 +2326 + +3979 +3488 +4876 +2074 +5871 +3413 +3968 +4870 +4654 +3475 +3151 +3581 +4218 +1086 + +1521 +3326 +3537 +3223 +2599 +2264 +3004 +2885 +6521 +4096 +3015 +2034 + +9175 +10101 +6721 +5683 +8376 +3584 + +8994 +12517 +5524 +8860 +1700 + +5976 +5345 +1916 +1376 +4610 +4637 +1222 +1823 +5969 +4598 +1266 +3058 +3274 +3196 +2533 + +4151 +4606 +2939 +7433 +7934 +1433 +7226 +3391 +6444 +3292 +3707 + +13678 +1900 +1316 +2999 +4739 + +10131 +8655 +3662 +6570 +9957 +2535 +3312 + +3632 +1192 +6521 +7333 +1874 +6379 +6505 +3737 +5705 +6127 +3099 +5289 + +13342 +10976 +7459 +17656 + +4441 +2033 +4373 +6988 +5037 +3301 +4940 +5675 +1654 +2206 +6505 +1171 + +23804 +22215 + +5917 +1679 +5720 +2327 +2111 +1479 +5369 +1455 +4047 +2609 +4059 +5461 +3726 +5245 +4617 + +3832 + +30019 +36074 + +2301 +2878 +2284 +2359 +6149 +5411 +4323 +2135 +3423 +5649 +5302 +2837 +4670 +5240 + +2535 +3698 +4005 +4530 +3483 +3840 +5770 +6032 +2261 +4189 +4715 +6289 +3112 +5324 + +5734 +4573 +2286 +1328 +5187 +6665 +5591 +2782 +4429 +5214 +7126 + +4378 +1546 +5909 +5252 +12837 +9857 + +6943 +7103 +6885 +2216 +2277 +5110 +3147 +1669 +2405 + +9766 +2431 +8424 +3505 +4371 + +7819 +3429 +2003 +7906 +4196 +4966 +6544 +2194 +5282 +3391 + +5196 +7087 +5152 +4841 +1323 +8180 +8375 +2274 +9193 + +2455 +9393 +3353 +3473 +6684 +8779 +8869 +1379 +6049 + +10423 +7768 +7405 +8893 +6566 +1104 +2981 +6618 + +2320 + +5330 +4166 +6922 +3242 +4383 +7546 +7715 +7988 +8012 +1877 + +10491 +3303 +2681 +2093 +4378 +6167 +2854 +5345 + +3312 +12989 +13062 +7486 +13302 +1205 + +58470 + +13413 +4298 +3133 +7842 +9040 + +4374 +7227 +10320 +2654 +5348 +12005 + +13208 +7384 +11355 +11780 +7356 +1871 + +1615 +6191 +1367 +1969 +4694 +1704 +6816 +3502 +5382 +4902 +4140 +3525 +5102 + +7778 +5765 +3407 +1334 +8488 +4870 +5197 +5158 +7332 +6025 + +3114 +15591 +23604 + +25210 +12504 +22559 + +1906 +6500 +1781 +2858 +4947 +3217 +3577 +4332 +1509 +6900 +1180 +5648 +3821 + +3982 +4400 +4655 +2599 +2430 +1743 +1817 +1626 +1880 +2769 + +9617 +7677 +3341 +4398 +8994 +10662 +5805 + +2984 +4321 +1939 +4864 +10130 +1227 +7189 + +3586 +4161 +3089 +2857 +2931 +8877 +3311 +5180 +4607 + +2539 +4289 +1168 +6262 +4551 +1731 +1292 +2442 +1423 +1619 +6126 +5220 +5577 + +1769 +4044 +1064 +1380 +2814 +7936 +2928 +3053 +3109 +2695 + +3502 +3521 +4581 +2917 +7040 +1876 +4819 +6214 +2779 +2169 +4885 +5352 + +9675 +13851 +9906 +1245 + +7934 +2860 +17685 + +4982 +3620 +2583 +1264 +2218 +6499 +4028 +9082 +2112 + +3761 +3665 +3717 +1112 +9380 +3463 +9677 +5469 +4111 + +6450 +14269 +17362 +1469 + +9305 +1360 +2214 +1625 +6197 +1322 +7217 +1076 +9466 + +2572 +6102 +7582 +13444 +8038 +1523 + +2212 +7180 +6025 +5842 +2433 +5261 +6975 +8067 +1247 +2153 +3311 + +1770 +5359 +6076 +5750 +4681 +8009 +5273 +3051 +7465 +6530 + +3373 +5040 +4365 +4906 +3988 +2941 +4778 +5635 +4277 +5298 +3161 +4611 +3880 +2808 +5151 + +15491 +3325 +4869 +12203 + +20880 +27057 + +5023 +7729 +7517 +6546 +1217 +7548 +8017 +7453 +6909 +7762 + +16756 + +1104 +2160 +4999 +2256 +2061 +2899 +1677 +1202 +4950 +6408 +2614 +1029 +6114 +3983 + +1676 +22625 +24638 + +6252 +6116 +6544 +4736 +4360 +6578 +2026 +8438 +4904 +5071 + +6250 +1604 +5152 +4034 +4210 +2452 +1982 +1462 +1338 +2083 +1618 +4563 +4859 + +1970 +7309 +2481 +7603 +7395 +6379 +6398 +6117 +7246 +2876 +3027 + +5903 +1822 +5861 +4894 +6005 +4571 +4555 +6531 +5464 +3609 +6464 +7134 + +1225 +21041 +7411 + +6970 +7008 +2951 +2131 +5453 +4772 +3154 +6810 +6825 +4469 +1413 + +1056 +5979 +7996 +11013 +4330 +12024 +10085 + +5270 +2532 +2411 +1372 +2690 +5956 +2638 +3667 +4929 +4946 +4141 +1727 +3957 +3987 +5032 + +11710 +2443 +8104 +9459 +5216 +4656 +9892 + +6455 +7683 +6891 +3883 +5618 +3631 +8120 +4878 +3746 + +8872 +14142 +7663 +14581 +7294 + +3656 +7094 +4543 +7459 +4517 +4732 +4501 +3358 +4838 +4205 +2077 +4579 + +7562 +2081 +8129 +6791 +10059 +2783 +4002 +5055 + +3431 +4855 +6062 +7023 +2386 +4158 +6753 +9088 +3315 + +1011 +3354 +5796 +9625 +3172 +5466 +2276 +8053 +4692 + +4232 +5937 +4857 +4515 +3142 +4902 +2726 +1425 +4999 +3980 +3225 +3083 +3054 +5380 +2547 + +1161 +5732 +5773 +1553 +1317 +3005 +1882 +7352 + +7392 +1908 +6482 +3445 +7074 +8522 +9787 +6791 + +3421 +5673 +5874 +4044 +4264 +2367 +4127 +1186 +4172 +5972 +3405 +2272 +1702 +5672 +4004 + +25299 +34008 + +4160 +6041 +8263 +4164 +2317 +2395 +9046 +5315 +7069 + +5362 +7912 +5760 +6799 +1462 +2520 +9667 +6333 +1055 + +35513 +6387 + +10814 +4122 +11320 +6445 +11264 +5322 +7651 + +5518 +3507 +6489 +11057 +7094 +2014 +3874 + +17936 + +2573 +7532 +1617 +5007 +4781 +4238 +5023 +7946 +7218 +6051 +6517 + +5524 +9035 +2723 +10089 +8048 +7010 +3673 + +11048 +4936 +11979 +4390 +2639 +9910 + +50344 + +5440 +5049 +7437 +2658 +8751 +3995 +1955 +4056 +7203 +3175 \ No newline at end of file diff --git a/input/day02/question01 b/input/day02/question01 new file mode 100644 index 0000000..623b502 --- /dev/null +++ b/input/day02/question01 @@ -0,0 +1,2500 @@ +A X +B Z +C Z +B Z +B Z +A Y +A Y +A Z +A Y +B Y +A Y +B Y +B Z +A Y +C X +B X +A Y +B Z +B X +A Y +A Y +A Z +B Z +B Z +C Y +C Y +B Z +A Y +A Y +B Z +B X +B Z +A Z +A X +C X +A Y +B Z +A Y +B Z +B Z +B Z +B Z +A Y +A Y +C Y +A Y +A Y +A Y +B Z +A Y +A Z +B X +B Z +A Y +A Y +A Y +B Z +C X +B Z +A Y +B Z +A Y +A Y +A Y +A Z +A X +C X +A Y +C Z +C X +C X +B Z +A Z +A Z +B Z +A Z +A X +C X +A X +C X +A Y +B Z +A Z +B Z +A Y +B Z +C X +A Y +B Z +A Z +B Z +A Y +A Z +B Z +A X +C X +A X +A Y +B Z +B Z +A Y +B Z +B Z +C Z +A Y +A Y +C Y +A Z +B Z +A Y +C X +A Y +B Z +A Y +C X +A Y +B Z +A Y +C X +C X +B Z +B Z +B Z +A Y +A X +C X +A Y +A Y +A Y +A Y +A Y +A Y +B Z +A Z +A Y +A Z +B Z +B Z +B Z +A Y +B Z +A X +A Y +A Z +A Z +A Y +A Y +B Z +A Y +C X +B Z +A Y +B Z +C X +A Y +A Y +B Z +C X +A Y +A Y +A X +A Z +A Y +A Z +A Y +A Y +B Z +B Z +A Y +C X +B Z +B Y +A Y +C Y +A Y +A Z +B Y +B X +A X +B Z +B Z +A Y +A X +A Y +A Y +A Y +A Z +A Y +A X +B Z +A Z +A Z +A Y +C Z +A Y +B Z +C X +A Z +C X +B Z +A Y +C Z +A Z +B Z +A Y +A Y +B Z +A Y +C X +C X +A Z +A Z +A Y +A Y +A Y +A Y +C X +C X +A Z +A Z +C X +B Z +C Y +A Y +A Y +A Y +A Z +B X +C Z +A Y +B Z +A Z +A X +A Y +A Y +B Z +C Y +A Y +A Z +A Y +C X +C X +A Z +A Y +B Z +A Y +A Z +C X +A Z +A Y +A Y +A Z +B Z +A Y +A Y +C X +A Y +C X +B Z +A X +B Z +B Z +A Y +A Y +A Y +A Y +A Y +A Y +B Z +A Y +A Y +A Z +B Z +A Y +A Y +A Z +B Z +A Y +C X +A Y +B Y +B Z +A Y +B Z +A Y +A Y +A X +A Z +A X +B Z +B Z +A Y +A Y +C X +A Z +A X +A Y +A Y +A Y +C X +A Y +A Z +B Z +A X +B Z +A Y +A Z +C X +B X +A Y +C X +A Y +A Y +A Y +A Y +B Z +C X +B X +A Y +B Z +A Z +C X +B Z +B Z +C X +A Z +C X +B Z +C Y +B Z +B Y +B Z +B Z +B Z +C Z +C X +A Y +C X +B Z +A Y +A X +B Z +C X +A Y +A Y +A Z +B Z +B Z +C X +B Z +A X +B Z +A Y +A Y +B Z +A Y +A Y +A X +A Z +B Z +B Z +A Z +A Z +A Y +B X +A Y +C X +A X +A Y +A X +A Y +A X +C X +B Z +A Y +B Z +A Y +B Z +B X +B Z +A Y +B Z +B Z +C X +A Z +A Y +B Z +B Z +C Y +A Y +B X +B Z +B Z +A Y +B Z +C X +A Y +A Y +B Z +B Z +B Z +C X +A Y +A Z +C X +A Z +C X +B Z +A Y +A Y +B Z +A Y +B Y +B Y +A Z +A Y +B Z +A Y +C X +A Z +A Y +A Z +A X +A Y +A Y +A Z +C X +B Z +A Y +A Y +A Y +C X +B Z +C Y +A Y +B X +B Z +B Y +B Z +A Y +A X +A Y +A X +A X +B Z +A Y +A Z +B Z +B X +A Y +C Z +C X +B Z +B Z +C X +A Y +B Z +A Y +B Z +B Z +A Y +A Y +B Y +A Y +B Z +B Z +A X +B Z +A Y +A Y +B X +A Y +B X +C X +B Z +A Y +B X +A Z +A Y +A Y +A Y +B Z +C X +A Y +B Z +C Y +A Y +B Z +A Z +C X +A Y +A Y +C X +A Y +B Y +A Z +A X +A Y +C X +B Z +C X +B Z +A Y +A Z +B X +B Y +C X +B Z +A Y +C Z +A Y +B Z +B Z +A Z +B Z +B Z +B Z +B X +A Z +B Z +B Z +C X +A Y +A Z +B Z +A Y +B Z +A Z +C X +A Y +B Z +C Z +C X +B Z +C X +A Y +A Y +A X +A Y +B X +A Z +A Y +C Z +C X +A Z +A Y +B Z +A Y +A Y +A Y +A Z +B Z +B Z +C X +A Y +A Y +A Y +A Y +A Z +A Y +C X +B X +B Z +C X +A Y +A Y +A Z +C X +A Y +A Y +A Y +B Z +A Y +B Y +A Y +B Z +B Z +B Z +A X +C X +A Y +B Y +A Z +C X +A Y +A Y +A Y +B Z +A Y +A Y +C Y +A Y +A Y +A Y +C X +A Z +A Y +A Y +A Y +C X +B Z +A Y +C X +B X +A Z +A Z +A X +A Z +A Y +B Y +C X +B Z +C X +C Z +A Y +C X +A Z +C X +B Z +B Z +A X +B Y +B Z +C Y +B Z +A Z +C X +A X +B Z +B Z +A Y +A Y +A Y +A X +A Z +B Z +A Y +A Y +A Y +A Y +A Z +B Z +B Z +B Z +A X +A Y +B Z +A Z +B Y +A Y +A Y +A Z +A Y +C Z +A Z +B Z +A Y +C X +A Y +C X +B Z +B Z +B Z +A Y +A Y +C X +B Z +C X +A Z +A Y +C Y +C X +C X +A Y +C X +B Z +B Z +B X +C X +B Z +A Y +A Y +A Y +A Y +A Y +B X +A Y +C X +C X +A Y +B Z +C X +C X +A Y +C Y +B Z +B Z +C X +A Z +B Z +A Y +A Z +A Z +A Y +A Y +A Y +B Y +B Z +A X +A Y +A Y +B Z +C X +C X +B Z +B Z +A Y +B X +C X +B Z +A Y +B Z +A Z +A X +A Y +A X +B Z +A Z +B Z +A Z +B Z +A Y +A Y +A Y +B Z +A X +A Y +A Y +C Z +A Y +A Y +C X +A Z +A Z +B Z +B X +A Y +A X +A Y +C X +C X +B Z +B Z +B Z +A Y +A Y +A Z +A Y +C X +C X +A Z +A X +A Z +B Z +A Z +A X +B Z +A Y +B Z +A Z +C X +C X +C Y +A Y +A Y +A Y +C Y +A Y +B Z +A X +A Y +A Z +A Y +B Z +A Z +B Z +B Z +A X +C X +A Y +A Y +B Z +B Z +A X +A Z +A X +C X +B Z +A Z +A Z +A Y +A Z +B Z +C X +A Z +B Z +A Y +A Z +A Y +C X +A Y +A Y +B Z +B Z +B Z +A Y +A Y +B Z +B X +C X +A Y +A Z +A Z +B Z +C X +B Y +A Z +A Z +B X +C Z +C X +A Y +A Z +A Z +C X +B Z +B Z +B Z +A Y +A Y +B Z +B Z +A Z +C X +B Z +B Z +A Y +A Y +A Z +A Y +C X +B X +A Z +C X +A Y +B Z +A Y +A Z +A Y +A Y +B Z +B Z +C X +A Y +A Y +B Z +A Z +A Y +A Y +A Y +A Y +C Z +A X +B Z +B Z +A Y +A Y +C X +A Y +C X +B Z +B Z +A Z +A Y +A Y +A Y +A Y +C X +B Z +A Y +B Z +A X +A Y +A Y +A Y +C Y +A Y +B Z +C X +A Y +A Y +A Y +A Y +A Y +A Y +A Z +A X +B Y +B Z +B Z +A Y +C Y +C X +A Y +B Z +A Y +B X +A X +B Z +A Y +A Y +A Y +A Y +C Y +A Y +B Z +A Y +B Z +A Z +B Z +A Y +A Y +A Z +B Z +A Y +A Y +A Y +B Z +A Y +B Z +B Z +A Y +A Y +A Y +A Y +A Z +A Y +A X +A Y +B Y +B Z +B Z +A Y +C X +B Z +B Y +B Y +C Z +C X +A Y +B Z +B Y +B Z +B X +A Z +A Y +C X +A Y +A Y +C X +A Y +C Y +B Y +C X +A Z +A Z +A Y +A Y +A X +C X +B Z +C X +C X +C X +A Y +A Y +A Y +A Z +C Y +A Z +B Z +C X +B Z +A Z +A Y +B Z +C X +B Z +C Z +C X +B X +A Y +C Z +C Z +B Z +B Z +A Y +B Y +B Z +A Y +A Y +B Z +A Z +C X +A Z +A Z +A Z +B Y +B Z +A Y +A Y +B Z +A Y +A Z +C X +A Y +A Z +A Z +A Y +A Y +B Z +A Y +A Y +A Y +A Y +A Y +A Z +B Z +A Y +B Z +B X +A Y +A Z +B Z +A Z +A Y +B Z +A Y +B Z +A Y +C X +A Y +B Z +A Y +B Z +A Y +A Y +A Y +B Z +A Y +B Z +C X +B Z +B Z +A Y +A X +A X +A X +A Y +C Y +A X +B Z +A X +C X +C X +C X +B Z +A Y +C X +C X +C Y +B Z +A X +A Y +A X +A X +B Y +C Z +A Y +C X +B Z +C Y +B Z +B Z +C Z +A Y +B Z +C X +A Y +C X +B Z +A Y +A Y +A Z +A Y +A Y +B Z +A Y +C X +C X +B Z +B Z +C X +A X +A Y +B Y +A X +A X +A Z +B Z +A Z +C X +A X +A Y +B Z +A Y +A Y +A X +A Y +A Y +A Z +A Y +B Z +C Z +B Z +B Z +A Y +C X +A Y +A Y +B Z +C Y +C X +A Y +A Y +A Y +A Z +A Y +A Y +A Y +B Z +C X +A Z +C X +B Z +A Y +B X +B Z +B Z +A Y +A Y +C X +B Z +A X +C X +A Z +B Z +B Z +C X +B Y +C X +A Y +A Z +C X +A Y +B Z +C X +A Y +A X +A X +A Y +C Y +B X +A Y +B X +A Y +A Y +C X +A Z +A Y +A Z +B Z +A Y +C X +A Z +B Z +A Y +C Z +A X +C X +A X +C Y +A Y +A Z +B Y +C X +B Z +A Y +C X +A Y +A Y +A Y +B Y +A X +C X +A Y +A Y +C X +B Z +A Z +A X +A Y +A Y +A Y +A Z +A Z +B Z +A Z +A Y +A Z +A Y +C X +A Z +C X +B Z +B Z +A X +A Y +B X +B Z +B Z +A Y +B X +A X +A X +A Y +A Y +C X +C X +A Y +C Y +A Y +C X +B Z +C X +B Z +A Z +B Y +A Y +B Z +A Y +C Y +B Z +B Z +A Y +A Y +B Z +A Y +B Z +B Z +A Z +A Y +A X +A Y +A Y +A Y +A Y +A Z +B Z +A Y +A Y +A Y +B Z +A Y +C X +C X +B Z +A Y +B Z +B X +A Y +C Z +A Z +A Y +B Z +A X +C X +B X +A Y +A Z +A Y +A Y +B Z +A Y +B Z +A Y +C X +A Y +A X +A Y +C X +A Y +C X +C X +B Z +A Y +B Z +A X +B Z +A Z +C X +B Z +A Y +A Y +A Z +B Z +A X +A Y +A Y +A Z +A Y +A X +A Y +C Y +A Y +A Y +A Y +A Z +A Y +B Z +B Z +A Y +A X +C X +B Z +B Z +A Z +A Y +A Z +B Z +A Y +A Y +C X +B Z +A X +A Y +B Z +A Y +B Z +B Z +B Z +A X +B Z +B Z +A Y +A Y +A Y +B Z +A Y +A X +B Z +A Y +B Z +A Y +A Y +B Z +A Y +A Y +B Z +A X +A Z +B X +A Y +B Z +C X +A Y +A Y +C Z +A Y +C X +A X +B Z +A Y +C X +A Z +A Y +B Z +A Z +A X +A Y +C X +A Z +A X +A Y +A X +B Z +B X +A Y +A Y +A Y +C X +A Y +A Y +B Z +B X +B Z +B Z +C X +C X +B Z +B Z +B Z +A Y +B Z +A Z +A Y +C X +B Z +A Y +A Y +B Z +C X +A Y +C X +A Y +B Z +A Z +A Y +A Y +A Y +B X +C X +B Z +B X +A Y +A Y +C X +A Y +A Z +C X +A Y +A Z +B Z +A Y +A Y +A Y +A Y +A Y +B Z +A Y +C X +A Y +B Z +C X +A X +B Z +C X +A Y +A Y +A Y +A Z +A X +A Y +C Y +A Y +A Z +A Y +A Y +B Z +A Y +B Z +A Y +C Y +A Z +A Y +C Z +A X +A Y +A Y +C Y +A Z +A X +C X +B X +A Y +C X +A Y +A Y +A Y +C Y +C X +A Y +B Z +A Y +A Y +A Y +A Z +A X +A Y +A Y +A Y +B Z +C Y +B Z +A Y +B Z +B Z +A Z +B Z +A X +B Z +C Y +A Y +A Y +C X +B Z +A Y +A Z +C X +B Z +A Z +B Z +C X +B X +C X +C X +C X +A Z +A Y +A Z +A Y +B Z +A Y +B Z +C X +A Y +B Z +B Z +A Y +A Y +B Z +A X +A Z +B Z +B Z +A Y +A Y +A Z +C X +A X +B Y +A Y +B Z +C X +A Y +A Y +A Y +A Y +A Y +B Z +B Z +B Z +A Y +A X +A Y +A X +B Y +B Z +A Z +A Y +A Y +A Y +B Z +B Y +C X +A Z +C Z +A Z +C Y +B Z +A Z +C Z +A Y +B Z +A Y +A Z +A Y +A Y +A Y +A Y +A Y +B Z +A Z +A Y +B X +C Y +C X +A Y +B Z +B Z +A Y +B Y +B Z +B Z +C X +C X +C X +B Z +A X +B Z +A Y +A Y +B X +A Z +A Y +B Z +A Z +A Y +B Z +B Z +C Y +B Z +B Z +B Z +B Z +A Z +B Z +A Y +B Z +A Y +C X +A Y +B Z +A Y +A Y +C X +A Y +A Y +A Y +A Y +B Z +A Y +A Y +A Y +A Z +C X +A Y +A Y +A Y +B Z +C X +A X +A Y +B X +C X +A Z +A X +B Z +A Y +C Y +C X +A Y +A Z +B Z +A Y +A Y +A Z +A Y +A Y +B Z +C Z +C X +A Y +A Y +C X +A Y +A X +B Z +C Z +A Y +B Z +C X +B Y +A Y +B X +A Y +A Y +B Z +B Z +A X +A Z +A Z +B Z +A Y +B Z +A Y +A Y +B Z +B Z +B X +A Y +B X +C X +B Z +B X +A Y +B Y +C X +A Y +A Z +A Y +B Z +A Y +B Z +A Y +B Z +A Y +A Y +A Y +A Z +B Z +A Y +B X +B X +B Z +B Z +A Z +B Z +B Z +A Y +C X +C Y +B Z +A Z +A Z +A Z +B Z +B Z +A Y +C X +A Y +A Y +C Y +A Z +A Y +A Y +A Y +A Y +A Y +B Z +A Y +C Y +B Z +B Z +A Y +A Y +A Y +A Y +A Y +B Z +B Z +A Y +B Z +B Z +B Z +A Y +A Y +C Z +B Y +A Y +C X +A Z +B Z +B Z +B Z +B Z +A X +A Y +A X +B Z +A Y +A X +A Y +B Z +B Z +C X +C Y +B Z +A Y +A Z +B X +A Z +A Y +A Z +A Y +C X +B Z +A Y +C Z +A Z +B Z +A Y +C X +B Z +A Z +A Y +A Y +A Y +A Z +C X +B X +A Y +C X +A Y +A Y +A Y +C X +A Y +A Y +A Y +A Y +A Y +A Y +B Z +A Y +B Z +B Z +B Z +A Y +A Y +A Y +A Y +A Z +A Y +B Z +B Z +C X +B Z +A Z +B Z +A Z +A Y +A X +B Z +A Y +A Y +B Z +B Z +A Y +B Z +B Z +A Y +A Y +B Z +B Z +A X +B Z +A Z +B Z +C X +B Z +A Y +B Y +A Y +B Z +A Y +C X +A Z +B Z +A Y +A Y +C X +A X +A Z +A Y +A Y +A Y +B Z +A X +A Z +A Y +A Y +A Y +A Y +C X +C X +B Z +B Z +A Y +A X +C X +B Z +B Z +B Z +A Z +B Z +B Z +B Z +A Z +A X +A Y +B Z +A X +B Z +A X +B X +B X +B Z +A Z +C X +A X +B Z +B Z +A Y +C Y +B Z +B Z +B Z +B Z +A Y +C X +B Z +B Z +A X +B Z +A Y +C X +C Z +A Y +A Y +B Z +B Z +A Z +A Y +B Z +C X +B Z +A Y +A Y +C X +A Y +A Y +A X +A Y +A Y +A Z +C X +A X +B Z +C X +A X +A Y +A Y +B Z +A Z +A Y +A X +B Z +A Y +A Y +A Z +A Y +A Y +A Y +B Z +C X +C X +A Y +A Y +A X +A Z +A Y +B X +C X +C X +B Z +A Y +B Z +B Z +A Y +A Y +A Y +A X +B X +A Y +B Z +A Y +A X +A Y +C Y +A Y +B Z +A Y +A X +B X +B Z +A Y +B Z +B Z +C X +A Z +A Y +B Z +A X +A Y +A Y +C X +B Z +B Z +A Z +A Y +A Z +A Z +B Z +B Z +A X +A Y +C X +A Y +B Z +B Z +A Y +A Y +A Z +A Y +A Y +A Y +A Y +C X +B Z +A Y +B Z +A Z +B Z +A Y +B Z +A Y +B Z +A Y +C X +A X +A Y +B X +C X +B Z +A Y +A Y +A Z +A Y +A Y +A Y +A Y +A Y +A Y +B Z +A X +B Z +B Z +A Y +C X +A Y +C X +A Z +A Y +C X +A Y +A Y +A Y +C X +A X +A Y +C Y +A Y +A Y +B Y +B Z +C X +A Y +B Z +B Z +A Y +A Y +B Z +A Y +A Y +B Z +A X +A X +B Y +B X +A Y +A Z +C X +A Y +A Y +A Y +A Z +C Z +A Z +A Y +A Z +A Y +A X +B Z +B Z +C X +B Z +C X +C X +A Z +A Y +A Y +A Y +A Y +A Y +C X +B Z +B Y +B Z +A Y +B Y +A Y +A Y +A Y +B Z +A Z +C Z +A Z +B Y +A Y +A Y +B Z +B Y +A Z +A Y +A Z +A Y +C X +B Z +B Z +A Z +A X +C X +A X +A X +B Z +C X +A Y +A Y +A Z +C X +C Y +C X +A Y +B Z +A Y +A X +A Z +B Z +A Y +A Y +A Y +B Z +A Y +B Z +B Y +B Z +B Z +B Z +B Z +A Y +B Z +B Z +A X +C Y +C X +A Y +A Z +B Z +A Y +A Y +A Y +A Y +A Y +A Y +B Z +B Z +A Y +B Y +B Z +A Y +A Y +A Z +A Y +A Y +A Y +B Y +B Z +C X +A Z +A Z +B Z +C Y +C Z +A Z +A Z +A Y +B Z +B Z +B Z +A Z +A Z +B Y +A Y +A X +A Y +B Z +A Y +B Z +A Y +A Y +A Z +B Z +A Y +A X +A Y +A Y +A Y +A Y +A Y +C X +A Y +B Z +A Z +A Y +A Y +A Y +C X +A Y +A Y +A Y +A Y +B Z +A Z +A Y +B X +B Z +B Z +B Z +B Z +A Y +A Y +C X +A Y +A Y +B Z +C X +B Z +B Y +A Y +A Y +A Y +B Z +B Z +B Z +A Y +B Z +B X +B Z +A Y +A Y +B Z +A Y +B Z +C Z +A Y +B Z +A Z +A Y +B Z +A Y +B Z +C X +B Z +A Y +A Y +A Y +A Z +B Z +C X +B X +A Y +A Y +A Y +C Y +B Z +B Z +A Y +A Y +C X +A Y +C Y +B Z +A Y +C X +A Z +A Y +A Y +A Z +A Y +A Y +B Z +B Z +C X +A Z +A Y +A Y +A X +A Y +C X +A Y +B Z +A X +A Z +B Z +C X +A Y +A Y +A Y +A Y +A Y +A Y +A Z +C X +A Y +A Y +B Z +A Z +A Z +A Z +A Y +B X +A Y +C X +A Y +A Y +A X +B Z +A Y +A Z +A Y +A Y +A Z +B Z +B Z +A Y +A Y +A Y +A Z +A X +A Z +C X +A Y +B Z +A Y +A X +A Y +A Z +A Y +A Z +A Y +B Z +A Y +B Z +B Z +B Z +A Y +C X +B Z +A Y +A Y +C X +A Y +A Z +B Z +B Z +A Y +C X +A Y +A Y +A Y +B Z +A Z +A Z +C X +B Z +C Y +B Z +A Y +A Y +A Y +A Y +A Y +C X +A X +A Z +A Y +A Y +B Z +A Y +B Z +B Z +A Y +C X +B Z +B Z +A Y +A Y +B X +C X +B Z +A Y +B Z +B Z +C Y +B Z +C X +A Y +A Y +A Y +C X +A Y +B Z +A Z +B Z +A Y +A Y +C X +A X +A Y +A Z +A Y +A Z +A Y +A Y +C X +A X +A X +C Y +A Y +A Y +A Y +A Y +B Z +C X +B Z +A X +A Y +A X +A X +A X +A Y +B Z +A Z +B X +C Y +C X +C X +C X +B Z +B Z +B Z +A X +A Y +A Y +B Z +C X +A Y +A Y +A Z +A Y +A Y +A X +C X +B Z +B Z +C X +A Y +A Y +A Y \ No newline at end of file diff --git a/src/day01.rs b/src/day01.rs new file mode 100644 index 0000000..ffb5d19 --- /dev/null +++ b/src/day01.rs @@ -0,0 +1,45 @@ +use crate::utils; + +pub fn execute_task01(content: &str) { + let vector = utils::convert_to_string_slice(&content); + let mut sum_vector = collect_all_calories(vector); + sort_calories_descending(&mut sum_vector); + + let max: i32 = sum_vector[0]; + + println!("Day01 - Task01 - Biggest Calories {}", max) +} + +pub fn execute_task02(content: &str) { + let vector = utils::convert_to_string_slice(&content); + let mut sum_vector = collect_all_calories(vector); + sort_calories_descending(&mut sum_vector); + + let max_three: i32 = sum_vector.iter().take(3).sum(); + + println!("Day01 - Task02 - Biggest Calories of top three: {}", max_three); +} + +fn collect_all_calories(list: Vec<&str>) -> Vec { + let mut calories: i32 = 0; + let mut calories_list: Vec = vec![]; + + for var in list { + + if var.is_empty() { + calories_list.push(calories); + calories = 0; + continue; + } + + calories += var.parse::().unwrap_or(0); + } + + return calories_list; +} + +fn sort_calories_descending(vec: &mut Vec) { + vec.sort_by_key(|a| + + std::cmp::Reverse(*a)); +} diff --git a/src/day02.rs b/src/day02.rs new file mode 100644 index 0000000..1b816f7 --- /dev/null +++ b/src/day02.rs @@ -0,0 +1,115 @@ +use crate::day02::Move::{Paper, Rock, Scissors}; +use crate::utils; + +/* +First Colum (Opponent): +A = Rock +B = Paper +C = Scissors + +Second Colum (You): +X = Rock +Y = Paper +Z = Scissors + +Rock > Scissors +Scissors > Paper +Paper > Rock + +Score: +Win -> 6 +Draw -> 3 +Loos -> 0 + +Rock (X) -> 1 +Paper (Y) -> 2 +Scissors (Z) -> 3 + */ + +#[derive(Clone, Copy)] +enum Move { + Rock, + Paper, + Scissors +} + +pub fn execute_task01(content: &str) { + let vector = utils::convert_to_string_slice(&content); + let score: i32 = vector.into_iter().map(|line| { + let opp_char: char = line.chars().nth(0).unwrap(); + let you_char: char = line.chars().nth(2).unwrap(); + + calculate_score_from_game(convert_to_move(opp_char), convert_to_move(you_char)) + }).sum(); + + println!("Day02 - Task01 - Score: {}", score); + +} + + +pub fn execute_task02(content: &str) { + let vector = utils::convert_to_string_slice(&content); + let score: i32 = vector.into_iter().map(|line| { + let opp_char: char = line.chars().nth(0).unwrap(); + let you_char: char = line.chars().nth(2).unwrap(); + let opp_move: Move = convert_to_move(opp_char); + + calculate_score_from_game(opp_move, convert_to_conditional_move(opp_move ,you_char)) + }).sum(); + + println!("Day02 - Task01 - Score: {}", score); + +} + +fn convert_to_conditional_move(opp: Move, you: char) -> Move { + match you { + 'X' => match opp { // need to loose + Rock => Scissors, + Paper => Rock, + Scissors => Paper, + }, + 'Y' => opp, // need to draw + 'Z' => match opp { // need to win + Rock => Paper, + Paper => Scissors, + Scissors => Rock, + }, + _ => panic!("error"), + } +} + +fn convert_to_move(c: char) -> Move { + match c { + 'A' | 'X' => Rock, + 'B' | 'Y' => Paper, + 'C' | 'Z' => Scissors, + _ => panic!("error"), + } +} + +fn calculate_score_from_game(opp: Move, you: Move) -> i32 { + match opp { + Rock => { // Opp == Rock + match you { + Rock => 3 + 1, // You Draw with Rock + Paper => 6 + 2, // You Win with Paper + Scissors => 0 + 3, // You Lose with Scissors + } + }, + Paper => { // Opp == Paper + match you { + Rock => 0 + 1, // You Lose with Rock + Paper => 3 + 2, // You Draw with Paper + Scissors => 6 + 3, // You Win with Scissors + } + }, + Scissors => { // Opp == Scissors + match you { + Rock => 6 + 1, // You Win with Rock + Paper => 0 + 2, // You Lose with Paper + Scissors => 3 + 3, // You Draw with Scissors + } + }, + + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index e7a11a9..74a6628 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,23 @@ +mod utils; +mod day01; +mod day02; + fn main() { - println!("Hello, world!"); + let path01 = "input/day01/question01"; + let content01: String = match utils::load_file_as_string(path01) { + Ok(content) => content, + Err(error) => panic!("Problem opening the file: {:?}", error), + }; + + let path02 = "input/day02/question01"; + let content02: String = match utils::load_file_as_string(path02) { + Ok(content) => content, + Err(error) => panic!("Problem opening the file: {:?}", error), + }; + + day01::execute_task01(&content01); + day01::execute_task02(&content01); + + day02::execute_task01(&content02); + day02::execute_task02(&content02); } diff --git a/src/utils.rs b/src/utils.rs new file mode 100644 index 0000000..ef8a213 --- /dev/null +++ b/src/utils.rs @@ -0,0 +1,11 @@ +use std::fs; +use std::error::Error; + +pub fn load_file_as_string(path: &str) -> Result> { + let content = fs::read_to_string(path)?; + Ok(content) +} + +pub fn convert_to_string_slice(content: &str) -> Vec<&str> { + content.lines().collect() +} \ No newline at end of file