From 129c9f85a04baf364a960db48379c6b39cb665ac Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 3 Dec 2022 13:49:36 +0100 Subject: [PATCH] Day 1, 2 and 3 --- day1/.gitignore | 1 + day1/Cargo.lock | 7 + day1/Cargo.toml | 8 + day1/input.txt | 2248 ++++++++++++++++++++++++++++++++++++++ day1/src/main.rs | 91 ++ day10/.gitignore | 1 + day10/Cargo.toml | 8 + day10/src/main.rs | 3 + day11/.gitignore | 1 + day11/Cargo.toml | 8 + day11/src/main.rs | 3 + day12/.gitignore | 1 + day12/Cargo.toml | 8 + day12/src/main.rs | 3 + day13/.gitignore | 1 + day13/Cargo.toml | 8 + day13/src/main.rs | 3 + day14/.gitignore | 1 + day14/Cargo.toml | 8 + day14/src/main.rs | 3 + day15/.gitignore | 1 + day15/Cargo.toml | 8 + day15/src/main.rs | 3 + day16/.gitignore | 1 + day16/Cargo.toml | 8 + day16/src/main.rs | 3 + day17/.gitignore | 1 + day17/Cargo.toml | 8 + day17/src/main.rs | 3 + day18/.gitignore | 1 + day18/Cargo.toml | 8 + day18/src/main.rs | 3 + day19/.gitignore | 1 + day19/Cargo.toml | 8 + day19/src/main.rs | 3 + day2/.gitignore | 1 + day2/Cargo.lock | 7 + day2/Cargo.toml | 8 + day2/input.txt | 2500 +++++++++++++++++++++++++++++++++++++++++++ day2/src/main.rs | 117 ++ day20/.gitignore | 1 + day20/Cargo.toml | 8 + day20/src/main.rs | 3 + day21/.gitignore | 1 + day21/Cargo.toml | 8 + day21/src/main.rs | 3 + day22/.gitignore | 1 + day22/Cargo.toml | 8 + day22/src/main.rs | 3 + day23/.gitignore | 1 + day23/Cargo.toml | 8 + day23/src/main.rs | 3 + day24/.gitignore | 1 + day24/Cargo.toml | 8 + day24/src/main.rs | 3 + day25/.gitignore | 1 + day25/Cargo.toml | 8 + day25/src/main.rs | 3 + day3/.gitignore | 1 + day3/Cargo.lock | 243 +++++ day3/Cargo.toml | 10 + day3/input.txt | 300 ++++++ day3/input.txt.test | 6 + day3/src/main.rs | 47 + day4/.gitignore | 1 + day4/Cargo.toml | 8 + day4/src/main.rs | 3 + day5/.gitignore | 1 + day5/Cargo.toml | 8 + day5/src/main.rs | 3 + day6/.gitignore | 1 + day6/Cargo.toml | 8 + day6/src/main.rs | 3 + day7/.gitignore | 1 + day7/Cargo.toml | 8 + day7/src/main.rs | 3 + day8/.gitignore | 1 + day8/Cargo.toml | 8 + day8/src/main.rs | 3 + day9/.gitignore | 1 + day9/Cargo.toml | 8 + day9/src/main.rs | 3 + 82 files changed, 5859 insertions(+) create mode 100644 day1/.gitignore create mode 100644 day1/Cargo.lock create mode 100644 day1/Cargo.toml create mode 100644 day1/input.txt create mode 100644 day1/src/main.rs create mode 100644 day10/.gitignore create mode 100644 day10/Cargo.toml create mode 100644 day10/src/main.rs create mode 100644 day11/.gitignore create mode 100644 day11/Cargo.toml create mode 100644 day11/src/main.rs create mode 100644 day12/.gitignore create mode 100644 day12/Cargo.toml create mode 100644 day12/src/main.rs create mode 100644 day13/.gitignore create mode 100644 day13/Cargo.toml create mode 100644 day13/src/main.rs create mode 100644 day14/.gitignore create mode 100644 day14/Cargo.toml create mode 100644 day14/src/main.rs create mode 100644 day15/.gitignore create mode 100644 day15/Cargo.toml create mode 100644 day15/src/main.rs create mode 100644 day16/.gitignore create mode 100644 day16/Cargo.toml create mode 100644 day16/src/main.rs create mode 100644 day17/.gitignore create mode 100644 day17/Cargo.toml create mode 100644 day17/src/main.rs create mode 100644 day18/.gitignore create mode 100644 day18/Cargo.toml create mode 100644 day18/src/main.rs create mode 100644 day19/.gitignore create mode 100644 day19/Cargo.toml create mode 100644 day19/src/main.rs create mode 100644 day2/.gitignore create mode 100644 day2/Cargo.lock create mode 100644 day2/Cargo.toml create mode 100644 day2/input.txt create mode 100644 day2/src/main.rs create mode 100644 day20/.gitignore create mode 100644 day20/Cargo.toml create mode 100644 day20/src/main.rs create mode 100644 day21/.gitignore create mode 100644 day21/Cargo.toml create mode 100644 day21/src/main.rs create mode 100644 day22/.gitignore create mode 100644 day22/Cargo.toml create mode 100644 day22/src/main.rs create mode 100644 day23/.gitignore create mode 100644 day23/Cargo.toml create mode 100644 day23/src/main.rs create mode 100644 day24/.gitignore create mode 100644 day24/Cargo.toml create mode 100644 day24/src/main.rs create mode 100644 day25/.gitignore create mode 100644 day25/Cargo.toml create mode 100644 day25/src/main.rs create mode 100644 day3/.gitignore create mode 100644 day3/Cargo.lock create mode 100644 day3/Cargo.toml create mode 100644 day3/input.txt create mode 100644 day3/input.txt.test create mode 100644 day3/src/main.rs create mode 100644 day4/.gitignore create mode 100644 day4/Cargo.toml create mode 100644 day4/src/main.rs create mode 100644 day5/.gitignore create mode 100644 day5/Cargo.toml create mode 100644 day5/src/main.rs create mode 100644 day6/.gitignore create mode 100644 day6/Cargo.toml create mode 100644 day6/src/main.rs create mode 100644 day7/.gitignore create mode 100644 day7/Cargo.toml create mode 100644 day7/src/main.rs create mode 100644 day8/.gitignore create mode 100644 day8/Cargo.toml create mode 100644 day8/src/main.rs create mode 100644 day9/.gitignore create mode 100644 day9/Cargo.toml create mode 100644 day9/src/main.rs diff --git a/day1/.gitignore b/day1/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day1/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day1/Cargo.lock b/day1/Cargo.lock new file mode 100644 index 0000000..458987d --- /dev/null +++ b/day1/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aoc1" +version = "0.1.0" diff --git a/day1/Cargo.toml b/day1/Cargo.toml new file mode 100644 index 0000000..41932cc --- /dev/null +++ b/day1/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "aoc1" +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/day1/input.txt b/day1/input.txt new file mode 100644 index 0000000..342079f --- /dev/null +++ b/day1/input.txt @@ -0,0 +1,2248 @@ +7844 +1892 +10928 +4800 +9730 +3485 +7293 + +11956 +2767 +12893 +2757 +3026 +9979 + +4507 +4199 +2855 +1792 +2041 +4162 +3855 +2650 +2165 +5464 +2125 +4979 +4878 +6301 + +2546 +3750 +1192 +4692 +6809 +2808 +6505 +2811 +6448 +4270 +2919 +1297 +1678 + +2006 +6163 +5949 +2074 +5917 +5796 +3456 +1161 +6843 +3988 +4064 +5591 + +17062 +14531 +5297 + +16033 +18054 +25935 + +3621 +3121 +5884 +5199 +4584 +4796 +1325 +3374 +5789 +2545 +5842 +1760 +5766 +1882 +3084 + +10364 +1136 +2256 +5654 +7065 +5990 +3621 +8063 + +4334 +1865 +4485 +4741 +2591 +2594 +2991 +3928 +5849 +6864 +4932 + +6627 +8318 +11410 +18778 + +14870 +13264 +8777 +2567 +15388 + +11837 +11042 +12115 +11169 +8021 +4206 +8637 + +2955 +2115 +2292 +2759 +6464 +2843 +3817 +1628 +6486 +2499 +3935 +4944 +1427 +4870 + +14800 +13942 +2563 +18543 + +8415 +5943 +6117 +3863 +7123 +8666 +9834 +7437 + +12318 +5577 +8108 +11695 +2720 +3413 + +4765 +2805 +2850 +5241 +3910 +4837 +5770 +4998 +3358 +5141 +1052 +2281 +4405 +1714 + +7984 +4685 +12922 +11579 +4278 + +14877 +4676 +4571 +9279 +11337 + +1782 +3009 +14712 + +5936 +5243 +3849 +1001 +10728 +3847 +9986 + +1531 +3707 +3599 +5533 +4025 +4651 +3934 +4205 +2481 +3462 +1672 +1806 +3833 +4072 +1497 + +16920 +25420 +17042 + +43927 + +8193 +3107 +2831 +4122 +16336 + +7507 +1665 +8553 +3231 +2528 +1046 +3491 +4631 +3574 + +35988 +29345 + +3520 +4006 +6327 +1658 +4714 +1123 +1938 +3667 +3807 +1824 +4808 +4586 +3275 +4548 + +9989 +32096 + +52470 + +1188 +7694 +7875 +6114 +6189 +4343 +6974 +4812 +1776 +4794 +8065 + +2364 +4111 +3663 +4182 +3667 +5440 +5482 +2657 +3931 +5871 +5403 +5956 +2659 +2320 + +10249 +13770 + +6331 +7262 +1498 +1329 +8943 +1563 +8197 +6898 +2300 + +5116 +5930 +8363 +8908 +6063 +8325 +1070 + +7829 +8877 +5631 +6100 +1007 +4754 +7353 +8363 + +13160 +16304 +6155 +15418 + +18068 +24378 +16529 + +8216 +1918 +3305 +7698 +5936 +2012 +2053 +3575 +5705 + +5372 +3627 +2860 +3742 +4117 +5514 +2590 +4503 +2494 +4418 +1908 +4109 +5255 +5749 +5061 + +14547 +31905 + +4691 +4268 +3887 +4136 +5724 +4507 +2298 +6660 +5243 +4719 +5145 +2949 +1460 + +6324 +1211 +2329 +4872 +5530 +1645 +2989 +3687 +3925 +2578 +1153 +4364 + +1864 +8160 +9219 +6479 +1098 +9364 +7442 +9665 +1522 + +3185 +3657 +5730 +7979 +8956 +2138 +8288 +3524 +7910 + +20487 + +4948 +4419 +3363 +6742 +1536 +3809 +4289 +1861 +2490 +4842 +1005 +2083 +3115 + +5872 +2895 +2163 +6140 +4962 +1566 +1502 +6407 +6241 +7154 + +8910 +5483 +10358 +10448 +5912 +9133 +1919 +5768 + +7887 +1592 +3503 +6182 +10088 +12143 + +3897 +4813 +2087 +2953 +5308 +1587 +7320 +4947 +1366 +6723 +2720 + +16484 +15947 +2582 +11421 + +2457 +1498 +4113 +5639 +3930 +4950 +4130 +5475 +6156 +4966 +1322 +5749 +5892 +2257 + +24070 + +2634 +2784 +5289 +1472 +5770 +4442 +1733 +2003 +2281 +4283 +4183 +3183 +5405 +5055 +4089 + +6167 +5650 +6531 +8255 +11103 +12421 + +8499 +15327 +4714 + +52582 + +8000 +4408 +4744 +7665 +3565 +6676 +4983 +3282 +1095 +8269 + +6893 +4008 +2512 +5249 +6578 +2231 +7044 +7903 +3901 +2480 +1832 + +2278 +5805 +7783 +1497 +4503 +5569 +4260 +7618 +3310 +8083 + +8025 +17429 +14782 +12645 + +5914 +1865 +9622 +4014 +9577 +1812 +8287 +10720 + +3848 +12978 +12735 +3860 + +5562 +11339 +9051 +6703 +13290 +10611 + +1232 +1116 +2620 +2495 +4198 +4751 +6099 +3727 +3111 +2493 +3780 +2379 +3042 +4395 +6100 + +62606 + +13357 +13984 +11428 +18201 + +33875 +5610 + +2504 +19711 +17021 +5985 + +3759 +5522 +8815 +2113 +2333 +9169 +4805 +2870 +6419 + +6210 +4186 +3763 +5633 +5159 +5116 +4448 +4570 +5894 +4045 +1994 +3044 + +10366 +6706 +11448 +1927 +10647 +11786 +11927 + +1350 +10908 +9325 +2455 + +10527 +8300 +1312 +1403 +8155 +8803 +9663 +7780 + +2118 +5436 +5909 +4083 +3714 +3001 +2226 +2915 +5627 +6476 +3578 +6112 + +36649 +6648 + +17271 +23884 +15032 + +16967 +17931 +2443 + +2520 +1468 +2779 +6020 +4477 +4798 +1894 +2429 +4645 +5053 +6478 +5899 +5824 +2554 + +12614 +11252 +25055 + +3435 +1317 +5073 +3082 +4576 +5006 +2238 +3055 +4867 +5079 +4385 +5723 +2084 +4307 + +6609 +1556 +2351 +2301 +4913 +1820 +1122 +5398 +4738 +2377 +2843 +4704 + +1201 +1092 +1622 +6094 +1793 +6521 +8237 +2848 +5617 +6585 + +3561 +8072 +3941 +4432 +4740 +9292 +8115 +3586 +5464 + +2926 +6812 +5551 +3104 +4369 +7421 +3774 +1272 +1492 +1842 +6058 +1815 + +5555 +2688 +8859 +8517 +3338 +1500 +7276 +8130 +5984 + +6597 +5544 +4944 +6402 +1336 +4243 +4333 +6374 +6770 +5346 + +7225 +33323 + +17863 +9174 +21966 + +4835 +4359 +6074 +4069 +5984 +11934 +2577 + +1738 +2317 +6844 +1672 +4213 +3930 +4658 +5785 +8074 +5695 + +3063 +6287 +7248 +5656 +1571 +5468 +1512 +5555 +3192 +7892 +5664 + +5819 +28895 + +4407 +5072 +4733 +2964 +4073 +5739 +2423 +6131 +3999 +1454 +1221 +1243 + +26391 + +35896 +26888 + +1171 +4136 +1050 +5788 +1049 +5686 +5297 +6035 +2968 +2274 +2771 +5596 +4478 +3401 +5860 + +6699 +15009 +4368 +13135 +13609 + +6033 +3972 +1214 +1549 +3996 +2251 +3213 +5217 +5525 +3656 +2585 +2710 +6035 +1903 +1586 + +8651 + +4494 +7096 +7913 +1024 +1334 +1353 +2705 +5405 +1601 +7386 + +18756 +19801 +24646 + +8490 +5254 +1932 +3706 +1980 +6058 +1961 +3150 +5200 +1337 + +2846 +6123 +3274 +4632 +3068 +5384 +5842 +2688 +1307 +3279 +2424 +4783 +3932 + +2720 +7808 +5871 +1416 +7979 +6594 +7325 +4214 +5444 +2132 + +2626 +6949 +6034 +4887 +6773 +1111 +3317 +3388 +4209 +2809 +2730 +6578 +2700 + +8995 +10064 + +2134 +5564 +5889 +3719 +6357 +3523 +4600 +2138 +5976 +6025 +5689 +5950 +3745 +1542 + +5545 +5789 +4295 +6717 +8612 +3847 +7911 +3367 +6867 +5975 + +23119 +18834 +3134 + +7080 +2729 +4118 +1407 +7022 +4796 +8459 +8530 +7721 +7333 + +5245 +3739 +1338 +1245 +2926 +2695 +4571 +1492 +4794 +4380 +3726 +2225 +2098 +5942 +6081 + +2192 +2866 +4690 +4240 +6512 +1881 +5789 +1641 +6017 +4327 +3688 +6622 +3555 + +12879 +2468 +13146 +8534 +10525 +4590 + +8451 +8697 +11858 +5657 +4893 + +14019 +13301 +7206 +13988 + +17234 +22191 +13894 + +6383 +3682 +5281 +6335 +5412 +5474 +8723 +9536 +8864 + +14888 +9953 + +2464 +5875 +2484 +1693 +3441 +5883 +7835 + +34085 + +1997 +9058 +7144 +6222 +2930 +3661 +4107 +8058 +4938 + +3033 +2420 +5196 +5152 +1364 +2192 +3442 +1149 +3575 +6916 +6856 +1995 +6259 + +1331 +1731 +10757 +3486 +8823 +2450 +8018 +9197 + +64329 + +25450 + +6652 +4972 +5085 +1881 +5555 +1521 +3723 +1158 +3260 +1532 +3131 +2904 + +1088 +14166 +4490 +15880 +6439 + +19789 +5274 +7770 +11329 + +64877 + +4256 +5811 +3538 +8943 + +6164 +7843 +5400 +14856 +2882 + +2781 +3829 +8689 +6347 +8239 +4232 +8606 +5770 + +10061 +6576 +19346 +15720 + +9071 +6842 +5147 +8570 +4175 +3801 +6512 + +21045 +29371 + +5646 +1786 +11347 +11957 +4226 +12836 + +1786 +1117 +2905 +5545 +2759 +3168 +5993 +1050 +4096 +1812 +1036 +3048 +1602 + +5694 +4123 +4940 +8115 +8877 +2063 +7222 + +5281 +5676 +5429 +5198 +1480 +7224 +6453 +2535 +1894 +2730 +5489 +6674 + +6091 +3148 +4124 +5837 +1575 +4028 +5943 +2374 +3307 +4535 +2008 +2981 +1251 +1902 +1689 + +1154 +4931 +1030 +6793 +9190 +6920 +6588 +4759 +5502 + +23727 + +1716 +2529 +6082 +5333 +2555 +3710 +4174 +1747 +1506 +2434 +2343 +4019 +5704 +1253 +3978 + +13129 +11913 +9504 +11759 +5353 +9152 + +7685 +7469 +2376 +2221 +3446 +2576 +7992 +2538 +3572 +1715 +7268 + +15241 +4735 +10421 +9976 +1717 + +3460 +5386 +1806 +3764 +3019 +4349 +6319 +6635 +6608 +7641 + +3249 +2254 +4624 +2495 +3325 +1502 +2347 +1544 +2806 +2844 +5702 +3594 +3448 +4378 +5474 + +4447 +1251 +1088 +2070 +4109 +1029 +5779 +3795 +1080 +3589 +3016 +2793 +2636 +5946 +4953 + +52518 + +5836 +6177 +4873 +2860 +4545 +2793 +3492 +6810 +2330 +2067 +3626 + +14370 +14242 +8644 +16054 +7313 + +8547 +6827 +1264 +8991 +1306 +3829 +6188 + +1566 +6239 +4931 +5359 +7314 +7493 +2898 +4429 +5609 +3329 + +6747 +3945 +9283 +10312 +2925 +11240 + +9133 +14062 +15257 +12353 + +12534 +17806 +5580 +7262 + +4311 +3933 +3798 +4932 +3040 +1819 +4434 +5705 +1293 +4348 +4241 +3050 +4471 +4445 + +21451 +9368 + +5252 +6300 +3548 +7323 +2328 +2721 +5001 +1261 +7357 +1350 +7024 +5193 + +15832 +15934 +17497 +7846 + +1647 +6717 +1323 +5420 +5063 +2488 +3298 +1163 +1205 +3104 +3644 +4177 +2730 + +6851 +4735 +2851 +7015 +2836 +4052 +6511 +2413 +4049 +6620 +1205 +3131 + +8028 +6431 +8863 + +3411 +3434 +1509 +4907 +5244 +2022 +5347 +2648 +5479 +1668 +3461 +1380 +2991 +4789 +1003 + +3584 +3947 +2670 +2718 +7380 +1243 +2124 +2825 +5907 +7608 +4592 + +7236 +3836 +2137 +1824 +3283 +4702 +6791 +6370 +4781 +1647 +5176 +6373 + +2526 +5660 +5065 +1103 +5031 +1394 +1948 +2812 +1240 +4727 +5359 +3119 +2511 +2913 +2763 + +25820 +24769 + +2645 +1917 +5280 +1864 +5772 +2984 +1410 +3052 +3599 +2034 +4122 +3678 +1502 +1107 + +3385 +2149 +2758 +1895 +6232 +3858 +6266 +2861 +6624 +1078 +6721 +5652 + +6842 +4520 +4919 +6678 +3890 +1823 +6488 +2575 +5245 +3696 +4294 +6071 +5158 + +38153 + +4245 +4359 +6283 +3510 +2610 +2592 +4843 +2179 +1218 + +1895 +3676 +4307 +1886 +2495 +2143 +6751 +6498 +1546 +4454 +2203 +6640 +3713 + +6943 +2324 +3284 +2277 +1234 +2005 +1168 +3585 +1931 +4371 +5547 +1237 +6250 + +2722 +6827 +7366 +7001 +8320 +8560 +10331 + +7759 +11634 +4006 +9406 +12116 +1403 +10477 + +6213 +6458 +5178 +9407 +5651 +5743 +4120 + +9958 +18260 +9126 + +6239 +3466 +2939 +4775 +1326 +6307 +4255 +2843 +7634 +5993 +4585 + +6607 +8754 +9714 +9844 +12936 + +20048 +24368 +16320 + +6152 +1868 +2057 +6981 +6244 +6557 +2858 +4943 +2261 +7241 +6353 + +3362 +1989 +4154 +6154 +4409 +5546 +1202 +6484 +2812 +4690 +6080 +2564 +6001 +1379 + +4859 +7852 +4538 +1495 +6904 +7849 +4937 +2986 +8593 +4164 + +2338 +1139 +4118 +2916 +2087 +2180 +1476 +1669 +6375 +2689 +3890 +6928 + +2032 +2582 +3926 +2966 +4326 +1334 +4264 +1151 +1513 +3098 +2618 +4087 +5318 +5287 +4176 + +2012 +3358 +12673 +15745 +13638 + +18797 +6045 +12915 + +10036 +10932 +11869 +6686 +2505 +4998 +2545 + +9353 +24442 +15660 + +1563 +6832 +6212 +7249 +5815 +3135 +4260 +1632 +1105 +2628 +1693 +4728 + +5564 +3863 +2269 +1623 +3527 +2445 +4823 +2271 +1102 +2110 +3765 +1731 +4149 +2924 +3807 + +3049 +8544 +2753 +1454 +6543 +2379 +6571 +3467 +5347 + +4430 +6186 +8128 +6013 +8050 +6688 +5697 +5250 +3077 +4775 + +5639 +1567 +4651 +2362 +1676 +2033 +2843 +1577 +5838 +5545 +5803 +2561 +1774 +5371 +4177 + +2934 +4347 +5400 +1017 +1907 +5367 +3233 +3201 +6389 +3857 +1884 +2082 +5091 +1362 + +3574 +1873 +5995 +3908 +6154 +5350 +1856 +5219 +5865 +4628 +4904 +1988 +3336 +3602 + +17499 +8319 +8975 + +4570 +8463 +8389 +5896 +6657 +5300 +2953 +5541 +3791 +8065 + +2177 +7674 +10338 +6861 +7176 +12012 +5930 + +11051 +4024 +11264 +7017 +7432 +3699 +6920 + +5220 +3483 +7075 +5240 +2156 +2838 +7600 +7522 +3647 +3466 +1903 + +2400 +6060 +3414 +1852 +6822 +5793 +4895 +2960 +6642 +1477 +1240 +3047 +6426 + +11128 +22839 +20660 + +5889 +3600 +7076 +4431 +3604 +4256 +2548 +5482 +3501 +5278 + +3410 +3519 +9965 +12953 +9463 +6493 + +3949 +5992 +2986 +2886 +1598 +3393 +5766 +3427 +3750 +2125 +2819 +2818 +3033 +5536 +4458 + +9958 +8583 +3283 +6782 +10683 +3178 +4486 + +7674 +1680 +2315 +7486 +3096 +4386 +1553 +3675 +4100 +7705 +3479 + +6402 +3133 +3192 +3227 +2933 +6881 +3088 +8628 +2271 + +3697 +4072 +4962 +6101 +4711 +2184 +5168 +3172 +1076 +4206 +4876 +6040 +1844 +2792 +2138 + +5141 +6671 +7291 +8327 +9200 +1479 +2338 +9402 +4860 + +12944 +3176 +1343 + +8561 +4339 +4569 +5435 +4568 +10420 +6843 + +2642 +11252 +3981 +7926 +9800 + +6046 +3747 +3534 +5597 +1487 +2726 +3469 +4202 +5847 +3297 +6666 +3832 + +10609 +2492 +1269 +2012 +5583 +7277 +4471 +9874 + +4697 +3030 +3002 +6541 +1895 +1254 +2032 +6218 +2624 +4494 +3822 + +1077 +5664 +2566 +2028 +6227 +5342 +6013 +5994 +6331 +5290 +4154 +1985 +3748 +3666 + +5745 +1780 +6074 +5641 +2102 +5400 +2585 +6776 +1732 +6493 +4095 +2228 +4647 + +5283 +6675 +6784 +1759 +6256 +5952 +2476 +4176 +3949 +3097 +5127 +6465 +2571 + +4670 +5896 +3916 +8881 +6058 +10440 +9862 +10596 + +10471 +7667 +2665 +10829 +6934 +2179 +5155 + +3258 +4634 +6263 +2398 +6452 +1536 +3066 +2195 +3431 +1245 +2672 +2692 +1056 +3313 + +7418 +1070 +2436 +5831 +4648 +3358 +2808 +4966 +5358 +3868 +2124 + +4779 +5703 +3827 +4386 +6424 +4582 +4501 +2325 +1586 +1450 +5306 +6237 +1210 + +4882 +4275 +1094 +3855 +5611 +5650 +2271 +1769 +5764 +5895 +2891 +2344 +5228 +6017 +4763 + +20686 +14164 +24547 + +26116 +2047 + +64931 + +11106 +11298 +3236 +2998 +3995 +10523 + +1230 +3999 +2775 +2882 +4474 +2490 +5185 +3853 +6045 +1786 +3372 +3548 +2217 +1424 + +4424 +2982 +3616 +1397 +4217 +3084 +2641 +2703 +1247 +1131 +3372 +1664 +1351 +2609 +4200 + +10258 +1295 +10597 +5712 +8643 +7976 +5578 +2924 + +1514 +8050 +4828 +8746 +5551 +8739 +1382 +8218 +6875 +6039 + +45328 + +18784 +21739 + +2884 +7165 +8039 +3978 +6701 +2646 +6171 +3899 +2700 + +6461 +4227 +7052 +1458 +6367 +4403 +2232 +7085 + +3490 +4126 +6334 +2320 +4354 +5981 +4319 +2031 +1629 + +5536 +3182 +6285 +1561 +1215 +2367 +5133 +2720 +3062 +6456 +6160 +3248 +5430 +3354 + +2124 +7143 +6779 +2022 +2034 +9093 +4122 +1303 +5054 diff --git a/day1/src/main.rs b/day1/src/main.rs new file mode 100644 index 0000000..8d055d1 --- /dev/null +++ b/day1/src/main.rs @@ -0,0 +1,91 @@ +#![feature(test)] + +use std::{collections::BinaryHeap, fs::read_to_string}; + +fn main() { + let input = read_to_string("input.txt").expect("need input file"); + let (max, top3) = initial(&input); + println!("{max}, {top3}"); + let (max, top3) = idiomatic(&input); + println!("{max}, {top3}"); +} + +fn idiomatic(input: &str) -> (u32, u32) { + let mut sums: BinaryHeap<_> = input + .split_terminator("\n\n") + .map(|block| { + block + .split_terminator('\n') + .map(|line| line.parse::().unwrap_or_default()) + .sum() + }) + .collect(); + let max = sums.pop().unwrap_or_default(); + let top3 = max + sums.pop().unwrap_or_default() + sums.pop().unwrap_or_default(); + (max, top3) +} + +fn initial(input: &str) -> (u32, u32) { + let numbers = input.split_terminator('\n').map(|s| s.parse::().ok()); + let mut elves = vec![0]; + for number in numbers { + match number { + Some(ration) => { + *elves.last_mut().unwrap() += ration; + } + None => elves.push(0), + } + } + let (index, max) = elves.iter().enumerate().max_by_key(|(_, v)| **v).unwrap(); + let mut elves = elves.clone(); + elves.remove(index); + let (index, second) = elves.iter().enumerate().max_by_key(|(_, v)| **v).unwrap(); + let mut elves = elves.clone(); + elves.remove(index); + let third = elves.iter().max().unwrap(); + let top3 = max + second + third; + (*max, top3) +} + +#[cfg(test)] +mod tests { + use std::{ + fs::File, + io::{BufRead, BufReader}, + }; + + use super::*; + extern crate test; + use test::Bencher; + + #[bench] + fn bench_initial(b: &mut Bencher) { + let input = read_to_string("input.txt").expect("need input file"); + b.iter(|| initial(&input)); + } + + #[bench] + fn bench_idiomatic(b: &mut Bencher) { + let input = read_to_string("input.txt").expect("need input file"); + b.iter(|| idiomatic(&input)); + } + + #[bench] + fn bench_read_string(b: &mut Bencher) { + b.iter(|| { + read_to_string("input.txt") + .unwrap() + .split_terminator('\n') + .for_each(drop); + }); + } + + #[bench] + fn bench_lines(b: &mut Bencher) { + b.iter(|| { + BufReader::new(File::open("input.txt").unwrap()) + .lines() + .for_each(drop); + }); + } +} diff --git a/day10/.gitignore b/day10/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day10/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day10/Cargo.toml b/day10/Cargo.toml new file mode 100644 index 0000000..40d2066 --- /dev/null +++ b/day10/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day10" +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/day10/src/main.rs b/day10/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day10/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day11/.gitignore b/day11/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day11/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day11/Cargo.toml b/day11/Cargo.toml new file mode 100644 index 0000000..8f5b9a5 --- /dev/null +++ b/day11/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day11" +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/day11/src/main.rs b/day11/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day11/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day12/.gitignore b/day12/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day12/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day12/Cargo.toml b/day12/Cargo.toml new file mode 100644 index 0000000..ba13763 --- /dev/null +++ b/day12/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day12" +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/day12/src/main.rs b/day12/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day12/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day13/.gitignore b/day13/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day13/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day13/Cargo.toml b/day13/Cargo.toml new file mode 100644 index 0000000..36c9510 --- /dev/null +++ b/day13/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day13" +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/day13/src/main.rs b/day13/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day13/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day14/.gitignore b/day14/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day14/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day14/Cargo.toml b/day14/Cargo.toml new file mode 100644 index 0000000..85aa832 --- /dev/null +++ b/day14/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day14" +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/day14/src/main.rs b/day14/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day14/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day15/.gitignore b/day15/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day15/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day15/Cargo.toml b/day15/Cargo.toml new file mode 100644 index 0000000..f52c8dc --- /dev/null +++ b/day15/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day15" +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/day15/src/main.rs b/day15/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day15/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day16/.gitignore b/day16/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day16/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day16/Cargo.toml b/day16/Cargo.toml new file mode 100644 index 0000000..597b6da --- /dev/null +++ b/day16/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day16" +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/day16/src/main.rs b/day16/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day16/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day17/.gitignore b/day17/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day17/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day17/Cargo.toml b/day17/Cargo.toml new file mode 100644 index 0000000..e483073 --- /dev/null +++ b/day17/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day17" +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/day17/src/main.rs b/day17/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day17/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day18/.gitignore b/day18/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day18/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day18/Cargo.toml b/day18/Cargo.toml new file mode 100644 index 0000000..fa53f27 --- /dev/null +++ b/day18/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day18" +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/day18/src/main.rs b/day18/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day18/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day19/.gitignore b/day19/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day19/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day19/Cargo.toml b/day19/Cargo.toml new file mode 100644 index 0000000..58edd67 --- /dev/null +++ b/day19/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day19" +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/day19/src/main.rs b/day19/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day19/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day2/.gitignore b/day2/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day2/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day2/Cargo.lock b/day2/Cargo.lock new file mode 100644 index 0000000..63c2f60 --- /dev/null +++ b/day2/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day2" +version = "0.1.0" diff --git a/day2/Cargo.toml b/day2/Cargo.toml new file mode 100644 index 0000000..8aa34bb --- /dev/null +++ b/day2/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day2" +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/day2/input.txt b/day2/input.txt new file mode 100644 index 0000000..5525ccf --- /dev/null +++ b/day2/input.txt @@ -0,0 +1,2500 @@ +B Y +A Z +C Z +A Y +A Y +B Y +C Y +A Y +B Y +B Y +A Y +B Z +B Y +A Y +C Y +B X +B Y +B Y +B Y +C Y +B Y +A Y +B Y +A Y +B Y +C Y +A Y +B X +B Y +B Y +B X +B Y +C Y +B Y +C Z +A X +B Y +B Y +A Z +B X +C Y +C Z +B Y +B Y +A Y +B X +B Y +B Y +B X +B Y +C Y +A Y +B Y +C Y +C X +B X +B X +A Z +C Y +B Y +C Z +B X +B Y +B Y +B X +B Y +B Z +B Y +B Y +B X +B Y +B X +C X +B Y +B X +A Y +B Y +B X +B Y +A Y +B X +B X +B Y +A Y +B Y +B Y +B Y +C Z +B X +B Y +B X +B X +B Y +B X +C Z +B Y +B Y +B Y +B Y +B Y +B X +A Y +B Y +C Y +C Z +A Y +B Y +A Y +C Z +B Y +B X +B Y +C X +A Y +B X +B Y +B X +B X +B X +A Y +C Z +B Y +A Y +B X +A Y +B Y +A Y +B X +B Y +B Y +B Y +B X +B X +C Z +B Z +B Y +B X +C Y +C Y +C Z +C X +C Y +B Y +B X +A Y +A Y +B X +C Z +B X +C X +B X +B Y +B Y +A Z +B Z +C Y +C Y +B Y +B Y +C Y +C Y +C Z +B Y +B X +B Y +B Y +C Y +B Y +B Y +B Y +B Y +B Y +C Y +A Z +B X +B Y +C Z +B Y +C Y +B Y +B X +C Y +B Y +B X +C Y +B Y +B Y +B Y +A Y +B X +B X +B Y +B Y +B X +C Z +B Y +A Y +A Y +B X +C X +A Y +B X +B X +B Y +B Y +A Y +C Y +C Z +C Y +B Y +B Y +A Y +A Y +A Y +B Y +B Y +A X +B Y +B Y +B X +B X +C Z +B X +B X +A Y +A Y +A Y +B Y +B Y +C Y +B X +A Y +B Y +C Z +B X +A Y +C Z +A Y +B X +C Y +B Y +B Y +C Y +B X +B X +B Y +B Y +B Y +B Y +A Y +B X +B X +B Y +A Y +B Z +A Y +B Y +C Y +B Y +B Y +B X +C Z +B Y +B Y +B X +B X +C Z +B Y +A Y +B Y +B X +C Y +A Z +C Z +B Y +B Y +B X +C Y +C X +B X +C Y +C Z +B X +B Y +B Y +C Z +B X +C X +A Z +A Y +B X +C X +B Y +A Z +A Z +A Y +B X +A Y +B Y +B Y +C Z +B X +A Z +B Y +B X +A Y +B Y +C Y +B Y +B X +B X +A Z +B Y +B Y +C Z +B X +B X +B Y +C Z +B X +B X +C Z +B X +A Y +B X +C Z +A Y +C X +B Y +B X +B Y +B Y +C Y +B X +A Z +A Y +B X +A Z +B X +B Y +B Y +A Z +C X +B Y +B Y +B Y +A Z +B Y +B X +C Y +C Z +B X +B Y +B Y +B Y +C Y +A Z +B Y +C Z +C X +B Y +C Y +B Y +B X +B Y +B Y +A Y +B Y +B Y +C Z +A Z +B X +C Y +B Y +B Y +B Y +A Y +A Y +B Y +A Y +B Y +A Y +B X +C Y +B Y +C X +A X +B X +A Y +C Y +B Y +A X +B X +A Z +B X +B Y +B Y +B X +B Y +B Y +B X +A Y +A Z +C Z +B Y +B Y +B X +C Z +C Z +B Y +A Y +B X +C Z +A Y +B X +B Z +B Y +B Y +B Y +B X +B Y +B X +B X +B Y +C Y +B Y +B Y +B Y +B Y +B Y +C Z +B X +B Y +B Y +B Y +B X +B X +C Y +B X +B X +C Z +B Y +B Y +B Y +B Y +B Y +C Y +B Y +B Y +B Y +B X +B Y +B X +B Y +B Y +C X +B Y +C X +B X +C Z +C X +B Y +A Y +A Z +A Y +C Y +B X +B Y +B Y +C Z +A Z +B Y +B Y +B Y +B Y +B Y +B Y +B Y +C Y +B Y +C Y +C X +B X +B X +C Z +A X +B X +B Y +A Y +B X +B Y +A Z +B Y +C Y +B X +B Y +B Y +C Y +C Y +B Y +B X +B X +B Y +B Y +B Y +B Y +C Z +B X +B Y +B Y +B X +B Y +B X +B X +B Y +B X +B Y +B Y +C Y +B X +B Y +B Y +B Y +A Y +B Y +A Z +B Y +C Y +C Y +B Y +B X +A X +B Y +A Y +B X +B Y +B Y +B X +C Y +C Z +B X +B Y +A Y +C Y +A Z +C Y +B Y +B Y +B Y +B X +C Y +B Y +B Y +A Y +A X +B Y +B X +B Y +B Y +A Y +B X +C X +B Y +A Y +C Y +B Y +B Y +A Y +C Y +A Y +C Y +B Y +B X +C Y +C Y +B Y +B Y +A Y +B Y +B Y +B Y +C Z +B X +B Y +B X +B X +A X +A Y +B Y +B X +A Z +B X +A Y +B Y +C Y +C Y +C Y +B Y +A Y +A Y +B Y +B Y +B Z +B Y +B X +A Y +B X +A Z +B Y +B Y +B X +B Y +C Y +A Z +B Y +C X +C Y +B Y +B Y +C X +B Y +A Y +A Y +C Z +B X +B X +B X +B X +B Y +C Z +B X +C Y +A Y +B Y +A Y +B Y +A Y +B Y +B Y +C Y +B Y +B Y +B X +B Y +B X +B Y +B X +B Y +A Z +C X +B X +C X +B X +A Y +C Y +B X +C Y +B X +B X +C Z +C Y +B X +B X +B X +B Y +C Y +B X +B X +A Z +B Y +B Y +C Y +B X +C Z +C Y +A Y +B X +C Y +C X +B Y +B Y +A X +B Y +B X +B Y +B X +C Y +B X +A Y +B Y +B X +B Y +B Y +B Y +C Y +C Y +C Y +C Y +B X +B Y +A Z +B X +B X +B Y +B Y +C Z +B Y +B X +B Y +B X +C Y +B Y +C Z +A X +B X +B Y +C Y +C X +B X +B X +B Y +B Y +B Y +B X +B Y +B Y +B X +C Z +B Y +B Y +B X +B X +B Y +B X +C Z +A Z +C X +C X +B Y +B X +A Y +B Y +B X +C Z +A X +B X +B Y +B X +B X +B Y +B Y +A Z +B X +A Y +A Y +B Y +B X +B Y +C Y +A Y +A Y +B X +B Z +C Y +C Y +B Y +C X +B X +C Z +C Z +B Y +C X +A Y +B Y +B X +A Y +B Y +C X +B Y +B X +B Y +C Z +A X +A Z +B Y +B Y +B X +B X +A Y +B Y +B X +B Y +C Y +B Y +B X +C Z +C X +C Y +A Y +B Y +A Y +B Y +B Y +B X +B X +A Y +A Y +B Y +B Y +B Y +A Y +B Y +B Y +B Y +C Z +A Z +C Y +B Y +B X +C Y +A Z +B X +B Y +A Z +C Y +B Y +B X +B Y +B Y +A Y +B X +B Z +B X +B X +B X +B X +B Y +B Y +B X +B Y +C Y +C X +C Z +B Y +B Y +C Y +A Y +B X +B X +B Y +B X +B Y +B Y +A Y +B Y +B Y +B Y +B Y +A Y +B X +C Z +B Y +B Y +B Y +B X +B Y +C Y +B X +B X +A Y +A X +A Y +C X +C Y +B Y +B Y +C Y +B X +B Y +B Y +C Y +B X +C X +B X +C Y +B Y +B X +B X +B Y +C X +B X +B Y +B X +B X +B Y +B X +B Y +B Y +B Y +C Y +B Y +B Y +C Z +B Y +B X +C Y +B Y +B Y +B X +B Y +A Y +B Y +A Y +B Y +B Y +A Z +B X +B Y +B Y +C Z +B X +B X +B Y +B Y +B Y +B X +C Y +C Y +B X +B Z +A X +B Z +C Y +B X +B X +A X +B Y +B X +C Z +C Y +B X +B Y +B Y +B Y +C Z +B Y +C Y +C Y +A Y +B X +B Y +B Y +B Y +A X +B Y +B Y +B X +B X +A Y +B X +B Y +A Z +B Y +C Z +B X +B Y +B Y +A Y +A Y +B Y +B Y +B Y +B Y +C Y +C Z +B X +B X +B Y +B Y +B X +B X +A X +A Y +B Y +B Y +B X +B Y +A Y +B Z +B X +C Z +B Y +B X +B X +B Y +B Y +B Y +C Y +C X +B X +C Z +B Z +B X +B X +C Z +C Y +B X +A Z +C Y +A Y +B X +B Y +C Z +B Y +B Y +B X +B Y +C Z +B Y +A Y +B X +B X +B X +C Y +B X +B Y +B X +B Y +B Y +A X +C Y +A Y +C Y +B X +B Y +B X +B X +B Y +B Y +B Y +B Y +B Y +B Z +B Y +A X +C Z +B X +A Y +C Z +B Y +C X +A Y +C Y +C X +B Y +B X +B X +C Z +C Y +A Z +C Y +A Y +B Z +A Y +B X +C X +A Z +C X +B Y +C X +B Y +A Y +A X +B X +B Y +B X +B X +B X +A Y +B Y +B X +B Y +A X +B Y +C X +B Y +B X +B Y +A Y +B X +B Y +B X +B Y +B X +B Y +B Y +A Z +A X +B Y +C Z +B Y +B Y +B Y +B Y +C Y +B Y +A Y +A Y +C Z +C Y +B Y +A Y +B Y +B X +A Y +C Y +B Y +B Y +A Y +B Y +A X +C X +B Y +B Y +C X +B Y +B X +A X +B Y +B Y +B Y +B X +B X +A Z +B Y +A X +B X +A Z +B X +C Z +B Y +B Y +B Y +B X +B Y +B Y +C Y +B Y +B X +A Y +C Z +B Y +B X +A Y +C Y +B X +B Y +B Y +C Z +A Y +B X +B Y +B X +B X +C X +B Z +C Y +B Y +B Y +B X +B Y +C Y +C Y +C Y +B Y +A Y +C Z +B Y +C X +C Y +B Y +B Y +A Z +B X +A Y +A Y +A Z +B X +A Y +C Z +B Y +B Y +A X +B X +B Y +C Z +B Y +B Y +B X +B Y +B X +B X +A X +C Y +C Y +C Y +B Y +B Y +C Z +B Y +B X +C X +B Y +C Z +B X +B Y +B Y +B Y +B X +B Y +B X +B X +B Y +B Y +B Y +B Y +B X +B Y +B Y +C Z +B X +B Y +C Y +B X +B Z +B Y +C Z +C Y +B Y +A Z +A Y +B X +B Y +C Y +A X +A Y +B X +B Y +C Z +B Y +C X +A Y +C Y +B Y +B X +B Y +B Y +B Y +B X +B Y +C X +A Z +B X +C Y +A Y +B X +B Y +B X +B Y +C X +A Y +A Y +C Z +B Y +C Y +B Y +B Y +B Y +B Y +B Y +C Y +A Y +B Y +B X +C Y +B Y +B Y +A Z +B Y +B Y +B X +B Y +B Y +B X +A Y +A Z +B X +B X +C Y +B Y +B X +C Y +B Y +A X +B X +B Y +A Z +B Y +B Y +B Y +B Y +B X +A X +B X +C Y +B Y +B Y +B X +C Y +B Y +B X +B Y +B X +A X +B Y +A Y +B X +C X +B Y +C Z +B Y +B Y +C Y +B Y +C X +B Y +B X +A Z +B Y +B X +B Y +A Y +B Y +B X +B X +B X +B Y +B Y +B Y +A Y +C X +B X +B X +C Z +B Y +A Y +A Z +A Y +B Y +B Y +B X +C X +C Y +C Z +B Y +B Y +B Y +B Y +B Y +B X +C Y +B Y +B Y +B X +B X +B Y +B Y +A Y +A Y +A Y +B X +B X +C Y +B Y +A Z +B X +C Y +B Y +B X +B Y +B Y +A Y +A Y +B Y +B Y +B X +B X +A Y +A X +A Z +C X +A Z +B X +B Y +C Y +A X +B X +C Z +B Y +C Y +A Y +C X +B Y +C X +A Y +B Y +B X +B Y +A X +B X +B X +B Y +B Y +B Y +B X +B Y +B X +B Y +A X +B Y +B X +B Y +B Y +B Y +B X +B X +A Y +B Y +A Z +B Y +B X +C Z +B X +B Y +B Y +B Y +B X +C Y +B Y +B Y +A Y +B X +B X +B Y +B Y +A Y +B Y +B X +B Y +B X +B Y +C X +C Y +B X +B X +B X +C Z +B Y +B Y +B X +B X +B Y +A Y +B Y +C X +A Y +B Y +B Y +C X +B X +A Y +C X +B Y +B X +C Z +B X +B Y +A Y +B Y +B X +C Y +A Y +B Y +A X +B Y +C Y +C X +B Y +B X +A Z +B Y +B Y +B X +B Y +B Y +B X +B Y +C Y +B X +B Y +B X +B X +C Y +B X +B X +A Y +B X +B Y +B Y +B Y +B Y +B Y +B Y +B Y +C X +B X +B X +A Y +B Y +A Y +B X +B Y +A Y +B Y +A Z +B X +A Y +C Z +A Y +A Z +B X +B Y +A Y +B X +B X +B Y +B Y +A Z +A Y +B X +C Y +B Y +B Z +C X +C X +B X +A Y +B X +B Y +B Y +A X +B Y +A X +B Y +A Y +B X +B X +A Z +A Y +A Y +C Z +B Y +B Y +C Z +B Y +B X +C Y +B Y +B X +A Y +B Y +B X +C X +C X +B Y +A Y +B Y +B Y +B Y +B X +A Y +B Y +B Y +A Y +B Y +B X +B X +C Y +C X +B Y +C X +B Y +C Y +B X +B Y +B X +B Y +B Y +B X +B Y +B Y +C Y +B X +B Y +B X +B Y +A Y +B X +A Y +B X +B Y +B X +C X +C Y +B Y +B X +B Y +B Y +B X +B Y +B Y +A Y +B Y +B X +B Y +B X +C Y +A Y +B Y +B X +B Z +B Y +B X +C Y +B Y +C Y +C Y +B X +C Z +B X +C Y +B Y +A Y +B Y +A X +B Y +B Y +B Y +B Y +A Z +B Y +B Y +A Y +C Y +B Y +B X +B Y +B X +B Y +B Z +B X +B X +B Y +B Y +B Y +B X +B Y +B X +B Y +B Y +A Y +C Z +B Y +B Y +B X +B X +B X +B Y +A Y +A Y +B X +B Y +B X +A X +B Y +B Y +C Y +A Y +C Z +A Z +A Y +B Y +B Y +B Y +B Y +B Y +C X +B Y +A Y +C X +C Y +B X +A Z +C Z +A Z +C Y +B X +B Y +B Y +B X +B Y +A Z +C Z +C X +B X +B Z +A Y +C Y +C Y +C Y +A Y +C X +B X +C Y +C Y +B Y +B Y +A Y +B Y +A Y +A Y +B X +B X +C Y +B Y +C Y +B Y +B Z +B Y +A Y +B X +B Y +A X +B X +B Y +B Y +C Y +B Y +C Z +B Z +A Y +A Y +A Y +B Y +B X +B Y +A Y +C X +B X +B Y +B X +C X +B Y +B X +B Y +B Y +B X +A Y +A Y +B Y +B Y +B Y +A Z +B Y +B Y +B Y +B Y +B Y +B X +B Y +B Y +B Y +B Y +B Y +B X +B X +B X +A X +C Y +C X +C Z +C Y +B X +B Y +A Z +B Y +C Y +B Y +B X +B Y +A Y +B X +B X +B X +C Y +B Y +B Y +B Y +B X +B Y +B Y +B Y +B Y +B Y +B Y +C X +B Y +A X +B X +C Z +B X +B Y +B X +B Y +C Y +B Y +B Y +B X +A Z +B Y +A X +B Y +C Z +C Y +B Y +B Y +B Y +C X +B Y +B Y +B X +A Y +C Z +B Y +B X +B Y +B Y +B Y +B X +B Y +B Y +B Y +C X +B X +B X +C Z +B Y +B Y +B X +A Z +B Y +B Y +C Y +C Y +A Y +C Y +A Y +B Y +B X +B Y +B X +C Y +B Y +B Y +B Y +B Y +B Y +C X +B X +B X +B Y +C X +C Z +B X +A Y +C Z +B X +B X +C Y +C Y +A Y +B Y +B X +B Y +B Y +A Z +A Z +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B X +B Y +C Y +B Y +B X +A X +B Y +A Y +A Y +B Y +B Y +B X +B Y +B Y +C Y +A Y +B X +B X +B X +B Y +B Y +B Y +B Y +B X +B X +A Y +B X +B X +B X +B X +B Y +B X +A X +C Y +B Y +B Y +A Y +B Y +B X +C X +C Y +A Y +B Y +A Z +C Y +B Y +B Y +B Y +B X +B X +B Y +C X +B X +B Y +C X +B X +A Y +B Y +B X +B Y +B Y +B X +B Y +B Y +C Y +B X +B X +B X +A Y +B Y +B X +C Y +C Y +B X +A Y +B Y +C Y +B X +B Y +B X +B X +B Y +C Y +A Y +C Y +B X +C X +B Y +B X +A Y +C Y +B Y +B Y +B Y +C Z +C Y +A Z +A Y +B Y +B Y +B Y +B Y +A Y +B X +B Y +B Y +C Y +C X +B Y +B Y +B Y +B Y +B X +B X +B X +C Z +B Y +B Y +C Y +B X +B Y +B Y +A Z +B Y +C Z +B X +A Y +B X +B Y +A Y +A Z +A Z +B Z +B Y +B Y +A Y +C Z +B Y +C Z +B X +B Y +B Y +B Y +B Y +C Y +B X +B X +B X +B X +B X +B Y +A Z +A Y +B Y +B Y +B Y +C X +B Y +A Y +B Y +B Y +B X +B Y +C Y +A Z +A Y +C Y +C Z +B X +A Z +B X +B X +B Z +B Y +C Y +A Y +B Y +B Y +B X +C Z +B Y +B Y +A Z +A X +B Y +B X +B Y +B X +B X +B X +B X +A Y +B Y +A X +B X +B X +B Y +B X +B Y +B Y +A Y +B Y +C Y +A Z +A Y +B X +B Y +A Y +C X +B Y +C Y +B X +B Y +A Y +B Y +A Z +B Y +B Y +A Y +B X +C Y +B Y +B Y +C Z +B X +B Z +B Y +A Y +B Y +C X +B Y +B Y +B Y +B Y +B Y +C Z +C Z +B Y +C Y +C Z +A X +B Y +A Y +B X +B X +B Z +B X +A Y +B Y +B Y +B Y +A Z +C Y +B Y +B Y +C Y +C Z +C X +B Y +A X +B Y +A Y +C X +B Y +B Y +B Y +B Z +B X +B X +C Y +B X +B X +C Z +B Y +B X +B X +B Y +B Y +B X +C X +B Y +B Y +B X +A Y +B Y +C Y +B Y +A X +B Y +A Y +A Y +B Y +B X +B X +C X +B Y +B X +A Y +C X +A Y +B X +B Y +B Y +C Z +B X +B Y +B X +B Y +B Y +A Z +B Z +B Y +B Y +C Y +C X +C Y +C Y +B Y +B Y +B Y +C Y +A Z +A Z +B Y +B X +A Y +B X +B Y +A Y +B X +B Y +B X +C X +B Y +B Y +B X +B X +A Z +A Y +B Y +A Y +B Y +B X +B X +A Y +B X +B Y +B Y +B X +C X +C X +B Y +B Y +A Y +B X +B Y +B Y +B Y +B Y +C Y +B Y +C Z +B Y +B Y +C X +B X +B Y +B Y +B X +B X +B Y +B Y +B Y +B X +A Z +B Y +B X +C Z +B X +B Y +A Z +C Z +A Z +B X +B Y +B Y +B Y +B X +B Y +C Y +C X +C Y +A X +B Y +B Z +B Y +B Y +B Y +A Y +B X +B Y +C Y +B Y +B X +B X +B Y +B Y +B Y +C Z +B Y +B X +B Z +B X +B Y +B Y +B X +B X +A Y +B X +B X +B X +A Y +B X +B X +B Y +B X +A X +B Y +B Y +C Y +B X +B Y +B X +B X +C Y +B Y +B Y +B X +A X +C Y +C X +A Y +B X +B Y +B Y +B Y +B Y +B X +B Y +B Y +B Y +B Y +C Y +C Z +B Y +C X +B X +B Y +A Z +C X +B X +B Y +B Y +B X +B Y +B Y +B Y +B Y +B Y +B Y +B Y +C Y +B Y +C Y +B X +A Z +B Y +B X +A Y +B Y +B X +A Y +B X +B X +B X +B Y +B Y +B X +B Y +A Z +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B X +B Y +B Y +A Y +B Y +B X +B X +C Y +C X +B Y +A Y +C Z +B X +B X +B Y +C Y +A Y +B Y +B Y +B X +B Y +B X +C Y +C Y +B Y +B X +B X +B Y +C Y +B Y +C Y +B Y +B Y +C Y +A Y +B Y +A Z +C X +B Y +B Y +B X +B X +C Z +B Y +B Y +B Y +B X +B X +A X +B X +B Z +B Y +B X +B X +B Y +B X +B X +B Y +B Y +B Y +B Y +A Y +B Y +B X +B Z +B Y +A X +A X +A Y +B Y +B Y +C Y +A Y +C Y +B Y +B X +B Y +B Y +B X +B Y +A Y +B Y +B Y +B X +B Y +A Y +B X +B Y diff --git a/day2/src/main.rs b/day2/src/main.rs new file mode 100644 index 0000000..72e4b6c --- /dev/null +++ b/day2/src/main.rs @@ -0,0 +1,117 @@ +use std::fs::read_to_string; + +#[derive(Debug, PartialEq, Eq, Clone, Copy)] +enum Symbol { + Rock, + Paper, + Scissors, +} + +impl From for Symbol { + fn from(value: char) -> Self { + match value { + 'A' => Self::Rock, + 'B' => Self::Paper, + 'C' => Self::Scissors, + 'X' => Self::Rock, + 'Y' => Self::Paper, + 'Z' => Self::Scissors, + _ => panic!("invalid input"), + } + } +} + +#[derive(Debug, PartialEq, Eq, Clone, Copy)] +enum Outcome { + Win, + Draw, + Lose, +} + +impl From for Outcome { + fn from(value: char) -> Self { + match value { + 'X' => Self::Lose, + 'Y' => Self::Draw, + 'Z' => Self::Win, + _ => panic!("invalid input"), + } + } +} + +impl Symbol { + fn play(self, opponent: Self) -> Outcome { + if self == opponent { + Outcome::Draw + } else if (self == Self::Rock && opponent == Self::Scissors) + || (self == Self::Paper && opponent == Self::Rock) + || (self == Self::Scissors && opponent == Self::Paper) + { + Outcome::Win + } else { + Outcome::Lose + } + } +} + +fn score(play: Symbol, result: Outcome) -> u32 { + let score = match play { + Symbol::Rock => 1, + Symbol::Paper => 2, + Symbol::Scissors => 3, + }; + let score2 = match result { + Outcome::Lose => 0, + Outcome::Draw => 3, + Outcome::Win => 6, + }; + score + score2 +} + +fn get_play(opponent: Symbol, outcome: Outcome) -> Symbol { + match outcome { + Outcome::Win => match opponent { + Symbol::Rock => Symbol::Paper, + Symbol::Paper => Symbol::Scissors, + Symbol::Scissors => Symbol::Rock, + }, + Outcome::Draw => opponent, + Outcome::Lose => match opponent { + Symbol::Rock => Symbol::Scissors, + Symbol::Paper => Symbol::Rock, + Symbol::Scissors => Symbol::Paper, + }, + } +} + +fn initial(input: &str) -> (u32, u32) { + let first = input + .split_terminator('\n') + .map(|line| { + line.split_whitespace() + .map(|s| Symbol::from(s.chars().next().unwrap())) + .collect::>() + }) + .map(|p| score(p[1], p[1].play(p[0]))) + .sum(); + let second = input + .split_terminator('\n') + .map(|line| { + let chars: Vec<_> = line + .split_whitespace() + .map(|s| s.chars().next().unwrap()) + .collect(); + let opponent = Symbol::from(chars[0]); + let outcome = Outcome::from(chars[1]); + let play = get_play(opponent, outcome); + score(play, outcome) + }) + .sum(); + (first, second) +} + +fn main() { + let input = read_to_string("input.txt").expect("input needed"); + let score = initial(&input); + println!("score: {score:?}"); +} diff --git a/day20/.gitignore b/day20/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day20/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day20/Cargo.toml b/day20/Cargo.toml new file mode 100644 index 0000000..9bb7445 --- /dev/null +++ b/day20/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day20" +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/day20/src/main.rs b/day20/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day20/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day21/.gitignore b/day21/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day21/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day21/Cargo.toml b/day21/Cargo.toml new file mode 100644 index 0000000..ea8752e --- /dev/null +++ b/day21/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day21" +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/day21/src/main.rs b/day21/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day21/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day22/.gitignore b/day22/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day22/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day22/Cargo.toml b/day22/Cargo.toml new file mode 100644 index 0000000..06b2e41 --- /dev/null +++ b/day22/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day22" +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/day22/src/main.rs b/day22/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day22/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day23/.gitignore b/day23/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day23/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day23/Cargo.toml b/day23/Cargo.toml new file mode 100644 index 0000000..3e1aa7d --- /dev/null +++ b/day23/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day23" +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/day23/src/main.rs b/day23/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day23/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day24/.gitignore b/day24/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day24/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day24/Cargo.toml b/day24/Cargo.toml new file mode 100644 index 0000000..207a374 --- /dev/null +++ b/day24/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day24" +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/day24/src/main.rs b/day24/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day24/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day25/.gitignore b/day25/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day25/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day25/Cargo.toml b/day25/Cargo.toml new file mode 100644 index 0000000..dbb6a46 --- /dev/null +++ b/day25/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day25" +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/day25/src/main.rs b/day25/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day25/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day3/.gitignore b/day3/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day3/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day3/Cargo.lock b/day3/Cargo.lock new file mode 100644 index 0000000..b94bcbd --- /dev/null +++ b/day3/Cargo.lock @@ -0,0 +1,243 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "backtrace" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "cc" +version = "1.0.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "color-eyre" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" +dependencies = [ + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", +] + +[[package]] +name = "color-spantrace" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba75b3d9449ecdccb27ecbc479fdc0b87fa2dd43d2f8298f9bf0e59aacc8dce" +dependencies = [ + "once_cell", + "owo-colors", + "tracing-core", + "tracing-error", +] + +[[package]] +name = "day3" +version = "0.1.0" +dependencies = [ + "color-eyre", + "itertools", +] + +[[package]] +name = "either" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" + +[[package]] +name = "eyre" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "gimli" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "miniz_oxide" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" +dependencies = [ + "adler", +] + +[[package]] +name = "object" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" + +[[package]] +name = "owo-colors" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "rustc-demangle" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" + +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-error" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" +dependencies = [ + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +dependencies = [ + "sharded-slab", + "thread_local", + "tracing-core", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" diff --git a/day3/Cargo.toml b/day3/Cargo.toml new file mode 100644 index 0000000..97c9780 --- /dev/null +++ b/day3/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "day3" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +color-eyre = "0.6.2" +itertools = "0.10.5" diff --git a/day3/input.txt b/day3/input.txt new file mode 100644 index 0000000..44f74a7 --- /dev/null +++ b/day3/input.txt @@ -0,0 +1,300 @@ +DMwrszrfMzSSCpLpfCCn +RMvhZhQqlvhMvRtbvbcPclPlncddppLTdppd +tVMQhFtjjWmsFJsmsW +trRtvNhfJhSzzSTFVhQQZQhHGphP +CnLMBWLwDMgMcwwdngdHGPVTQGpTHZdGPGpd +LLDqcDgwqCMnLWqtvzrzbbtJqPjJ +wQQwHNQLmbWQbQRHwHNFBbwqPfjqlzRMGRqzpSfvPlzplM +nCtGCZZtsGsrtDMZpfMpSlMlvlZq +cJctJCgVJsCJnDTsCthGhGLwBWBbbQmLbgQLQQdWbbbQ +ZWnNlTNTnhhQQlDNdmmpwrrrqBwjwjZd +GzvlVRSfvMVMvGlSpdCCdjmfpmBCdsqB +bzlFlLzJWLHHttLL +SmzFhVDzrmSrszVDVhSVbhZcCZdfZNcnMfMbZnNN +PTTRGqwqTqWRwLgTLTZGnCbZbNddZCCtMcNs +sgPqPqgJgWWqjjwgwLLVFBFSVmvmBBrmJJDSvp +CBccfSBhcSBddfgtlJmmmwmPRwmh +FpTzzGWHWprgDtJlDZDPFR +HbbTzWnTrnWtCbQBbQqQbSjf +fPHspCjgwZggSvZQ +RrNhzFZFcNzFLNLNwQlSlLnv +TRFrcDVrrRmrhFRZzVrczqhRpjqjsssCpfHjsCdpsPfpjCMC +ZBnBTMVTSbGbTVTGbCPgqsgPtHtgCcPtBB +ldDrmnnNrzhdhfgcsHqcsfCcsCHg +zFdrzNdzQNDDhFdWldDrJTbZTbLZJVVVpMVWVnLS +pLnpQNhBbnWvbsWm +FrFwjlTPTdTqqrDZWbvmZbpSgmJWvbgS +RqDqRrdGFpGRFrFFdTNzCcHcHLHBzQCcNNGN +bvRCtbtCPfSGtCcvCbPNlglqgqlGZMzTgnlZnq +hrmWWFspsHWrzNwTnFlTMTwFFn +HpjJDWBQmmQdRffbPtSzdJ +GpHjFsjMFpCpMWjMGCqWmmqrWQtmthdbDbbD +fzgLTJwJPSgJgzSzPfhmqmQhQHzQtbQDrrmq +RNlBRwHfRJHLLfHTwLSBppNGvjNMFFCVpVFcvcFC +SfQnfSFHfnvMtQQSnHJtMffsdTlZtdZmtllmTlmlRRbBRLDb +hrwhWWwqzPrcCzwwzmPlRbdmlQDTPPBLDl +CpwCzrwGzNCWrJnMvpMvfJVFvQ +rCRPpgSggcpqrhPrCDDTLsMLDSDGLTMGVs +HdvzmRWmlHzwvWHvRHRvHJbDFsdMssQQVGMDTMDLVLLFLT +JBlBnnWBJlCqZRRqRBpr +GtZllZDlfDpGHZtZBGBZpDmzQzzCSVVFHmmmsPCQWWSS +JvFJJrwvNNcJTnbrTRNRSCzqwSsVPCPQqmCQszVm +JLMnTbLnMgBhDFDf +lffDhtgDJzCJNGGTzWTRRnRvBv +qpbpdwqZwqZSwMPSqdQcQmTRnWvnBnRBQBtVnTvWmB +SccbbwSbZbFPswpSZtgFlClLhgChhhNfJlFj +ClmCjCJBjwBVwJGjlGNFJlVMHSrfpDpTfrHMcHTppQVrHp +dRLZWLvWSHmTccWW +ggtqzmRZnmhghZhZghntdqsvBbjlbNFFBPwNNJNNCBlwPGBz +HZmsFZQpvZsWCZQvWrghGrhtgNzdHddHGh +fWSbqWDJVwcSccNzrNhcBtGcgG +VqVfTJnbWjqTSqbwDRfRvQvFpFLRpZsssQsCQZ +FpFZNfplSTJmbZzddGzhDrWh +LqLPPQjLLRMPqvjLLHQrLqrRWdzHnGhdthttGGbbDWhDDdWz +sMLMgvRLgscrLrRQvwmTNNfpNplglplfmp +MPVBmCmWGWRPPqRhLcnjcvjjcpjMvp +tzwrwsJlrldJsrsrTtrzrTtSNnLJSShnjcncvnvqnSFnqN +rswrzsbdwDHHbWZqVfWV +dVmmMTmBPTrCBRMCqFHSWFFHWzCvCz +jNqfGsDqtsjGjQjDlcJFFFznFtzznvtFpFFp +fNNhgsDcfNflqchVRdgVrRPRdVTRRb +HJPLwgLvjttmgHJFjwHgtlsBbNbbNsPpblspTllThT +MzmcRRrdDMVTzbhNNSszhl +mCDDVqdVcdDrqfcCnrFwtGwvngwvtWJtFjWW +dFDpmttBlvNNgWlglNDBFttmTGHTcSSJJHHnMsJsGGSdqcJj +zLbwMLVQbQRwVsJsSHSsHcJqbj +wfVZLPzfZZmpMZZMBl +PZHZMJSTBWHNWSHzVnhhfnhThhpnpC +jFdBBtrFjpfnjfnf +ccGrbblbGRDQMlvmQBvmBl +PCCTsnbPbHDnlDfDNB +rMjQltgSqtvMjScQggjfVVzBzFHzGfVGDLGBqB +vdtrMSttcdwcpSQSdglMrtWRRPJZCpsRZJmWRRWChWPh +pWzbsPCCPPpbptSMCJJwBQQGQt +cDDmcTTRRqzFRddVTSJwMShMtBwhwQMDwv +HldqVmVlZdLTcmRFdrngNNzrffjWpPLggP +JPqvjJmmqvSLmPtpZdcftdmtfdCC +swwhDRwBBHjFFBtBfZ +RRzNQDwznDsDwWJjLNlrSPLSTr +VQmdRLvDlmqZdFrBBJdW +CMstGsnHnHGGMrMZwMpwBSbW +GnsshssNfjtsnggnHCGhjtmfLQQczllvDRVTTQllQWlQ +dhbNbswbwVdNtVdstBtgbNQTBCCSFTmfmMFmfRqQmmQM +HFljLrvZfMQQQPvm +WrpznLZZrnplpWbgdFcFsNzszgst +LjddfTlMccnBfDQBtBQb +ZRSNchHwhNNCHNSWPQFFFHDBBtnQDH +CNpZshSZgpwJmpdLMlplMc +bTmTFmqzgbBntRVsFvVwcv +CZfMrlZLLLMlfPZRLRHGstnjGwtvGcsSVwtcSGvn +ClZpMLCRMZMrHMLmWpqQBpzpgQzmbg +jDmSSGWDDdWdSqqDDqCqpJzqRRqpJnRsMRcMzM +lPgNPvPrrgNrPhNszFggnRzccbMJgz +ZQTHQvQTZPrrQlBBrNvQZZGtTtGdsVCGsCTLLGDmLsjt +rbCfBrbsvQqRFZRNZC +HLSTcwqwZSQFFgRZ +wdDwjpMHqJDTMTdqjlfBvGBhsbfhbsnb +ZhZcHHHlhgchHhlCZZhLCCbGdrsBBGPNBjGbsjNNjnJnPn +wtJqqwDqQQMQFqSqTzwzVTBnGdsjBdnMdPGBBsBdnrjr +RVzJzmSVZmLLWpCc +gdqjQQrlhhQlQrhsnjjhLgmmvmHBBmTmZRsHJzTBHRJv +NwNnGNbGPbmTGpJzppBG +nDnVDfMDrQqQStgM +MLbgbppMMgLmHgQttGQJgJrBShwNShWBBSNNrwNqNN +GnTFlzCVVwPRrVWhSw +GnDDdvdnZDTdnGMsHbbttZgttLbc +mdmPmjClrTzqttfm +cpFnSbcQQsqNNtqWJzHS +QFpcMMBcZtLpQBjVjZhlPjjVlwvw +spVsPjTZZMpZMVLDjmdSQJCLJSmLzdJQdl +HhRnNrqwMhNhnqnHwGNRFBNBrzSCSdQmQCdddbrQSSclSSbQ +nFNqGRvqBfjMvTssfZ +FjjzjnpFqqzFFqgFSZjBhHfHhnHRDDwfdTdLfD +MmCMGCsMWbtJrtCWCbmsmWWhdLGGwRBwdfdLhdTLhHHTBd +bJmtrRvRjgzFFvVq +RWwWmVQGMFGmMGVCVWRRZSBgDdSdJGlSJpcBGGSlpJ +HHhQThnjBDHfSBlS +bPhNjbsssQzFNQqWmz +FTDtrjqwwqGtDbGnfBlcnLcWBZwlWn +mMhRMvJsJvJnMHCvHmhLZLQlhWQBBfPfLPBZ +HRCCsdNdvNmCvggFStbzjbGSSjjn +sLGddsvvcZmLvrLMGcMsVnTTlqlHCsTHHVVgVt +wRbfJPbpNRffRJMBhpDntTCHFNVgqllFlqggHC +DpfbPhRDJPMJppJwzfpbbDGSjrGZvdccQdjGvQZdvrLz +wTwLNLVTqnLMsBwfMsJmCj +JhlGvcdJhSFvFvvvMfgBpCzjzdCfsMMs +DSlPPJSGWrDcFPhtFhWJZHQZLTQVnRWRbHbZHQQT +TmTgTrPDNLNVlDrmlbgNmrSSGbzjZGMvjpZjvvphWMzW +QtBfdfQcdfHtZcnZnGZzchnp +HQHwRBGfBCGBtsrCNPDTmTlNLr +bfNhjhNJDWhlWhlRRR +SsscnHgnSnZnltqqfWRWrzZv +cnfTMfmMnTnmFGsnTVLLLpQJbpbbjpdTdN +BqwZzqRQQRRPSlFRQDDwdfWwhJphnfgfnpMdJfdM +rcTLrcrvDDChWJhfpTgTJh +DHGbGNVCZStGqSqS +dlfdRNNfVdLwrRnwdwRmhLFsbsJJgLqbgCBWBCsW +PHDppMPMHHDPzmBBCmWJqCmbJD +HzzZHmZzQcNdRRdZwddr +wrlshslPsSRfvrQvwbrslCDghtDgCVhDhBVJCFHddt +mZnGpWpWzGTMqnFqDqJNDNFJVJqH +LjpzGcjMGcTzcmmznWSRsfRPfcrbFQcfrwcv +rWBmmmtNmmtBbtlwnhJJVZbw +FsRcjGdLdvFslZbQJZwQps +GHFGvMccFPjgDNbmWWBTTHNz +GhHzmhmwlpbltGBmBmsZsBZsfCWC +rgrcCCPdsWBgNVBD +RnRMdQPMCqndSdQdcQhblpLLwhJbbpzGzwpS +NNQtStFPpJwhRbRzRbqpZZ +jLnmdJrrdDTdbgWbTbRW +JHvnMCmDnMnMljLCDmMLjHNFGGNBPVtQQFtSNFQtPQBv +BFbBRllFZJnPVJbV +GpGHwgzcLhDcwttwthzzhHcPTjZjMgMVZjgZTMmTnMZWJVJm +GccwhqcDtlrPqQrRNQ +gWHWLgHBHQdFhjGGThTQhR +pZsSMpZMJJSzMszzzqclpfjvrvvcRGGTcTVhbVvRbTGTRG +lnMwsqZqsslpjlSMSsffZqqJBgHNNPNDWdLLgdDgdLHPWwCw +qfNvBCBfBqfNMBqCZZfcnmnvtwScpwFSpSsSwt +HzdVzLWPPGGDdnsswnztsRsnmn +QddWVQgJPPHJTJbjBtNTTq +DdRDDPRGGPGccfcbJwsbJWzsnznlLLWzWTLWhVVVVS +CvCrNCqgFqvmqNZFZqqZvpWlVrlVhlhnTLShlDWnzVBD +jvqpvpvpQNCQQCZZmmNgZfdGddRjJDPRMHcHJDHPJf +ttdtBtPPMqWMdgPPBbVGWfTGTTzSVLfVrzCS +ZpDpvRpZDDcmmjmZfLSrwzRnSVSnwTTR +ZvQmjFVHJFDcQjDlZcDVHdqMNtqNBPtPJtbhhbdbts +dGdwwLLpgwgssJpgssNhpJlnbfjnzFfcbfttGjzjlntf +VQvDvHVVQHrQHDCZVBChrHFtzffnfltFFtncnvFtllMl +VBShSqDVRVSTmppPwwsP +fTFDTLNNzlcNrmDcrMDTFPwCSsbCbPPsnCPwLSPvbs +ttQqhJtBRRGnvgHGnlSnbl +hZBJlQBRjVRBRjhtRRMNFVmFmfDNrfWcFVmD +mcTZFBFmqBjmBgPtCtPprmssStCP +LWDQNqDJfQNJddnWfzhfsPRVppVVsSptftpVMS +NDGnJDDDbzddWdNbGNQQLQbqqFBBFcjlZBlHjlZHGBTvZB +PwDzvphPwVwWBqLLwnJWTq +jdCGCgjmllCrmmlmjrbgmRdgJSSJJFLSSqJfLnqLLLbWffLB +mRdjcMHgDpZhDqMZ +cqLjhhrwZwJbBqZhMwbZZdGWdGSllWFvLFGQdnGFQG +gHHVzzppRVggcgpcGWRQRSvdSvvGWvll +HmNNHtVggHsHPtrhJsbjbwCrCqJc +zqPvzLVvzFFQZzWpRLlmHRDHmRCHDH +dNjnJGGrGdqqMprRlpqB +GsgtjhSsSvvSFqvP +pVrfzzjrjWVWTWjrNZvnJSJZqnnqnpSZZS +bdQVQPRPDdcbRGPFddRVMVlZlMlBqSBBZSvSZwnwvJBS +bFbcFbCPPCbbVHCCdVgWfrzjmWfrWrNWgHfT +JgJqLjjjVGgdqGDZGzlGRStStT +PHrHccmrMrTSMVStRtRR +HWPWffNsrppfPWNsVFsmPNCJwwjdJdvdvnJwghBLJLpdLJ +HtHvcnDSDgDcDHtpLrvwjwjfZMjffw +CPWzdJdqVdWZpnLdwnrfdn +GNCNmTQnPVRRglSlHsSG +FJdhjTPbdPJjTPjTjPtSLsSBWWRcCvCvsBWztc +MfGgrHMDDpMnZGDLCRLScCsBlgWvzB +HnmpmNNHGZZpZZrnMPFFbNCNbFdTPVFFFN +TJrrrJQTqJqmTltfRrgfgtgFFg +jLRzBvBjjcnFBNwWlgBZFt +RMjMCGpGzGznzhRmmPPDPsmMmPQmJs +BZqwQCQZGZcVBczqBHtfbbbWfTqNWfMfPNqW +LLpmFjpvpHrvRFSRDRMWbdbtfPWPbjtMgMtW +SDnrpDprDFnQhZCVnhcH +WTsBBQTfQQTTbJBbZbnfTsRFwFrjwjFlrRqvrrlqvWRV +pGcShcGSLNJNHCLttlpllRFgpRFlRpgRrg +GzcMLScSGJGtCbsbQfbZbMBnBn +NGCLGjVjZjQwTGJRQdWM +cFTcvSrFmnnpSmndMswsRMJWRwMHps +rrrhhcTznqvzmcccvvmhgzqDgbgttlDtjjjlfVCfZCjZZV +ccDMHddWNDnnNWMMzdHJJmSQhfQZfvQZflrZQfdVfLLZ +bgBFRTwFtgqCgpRGFpvpVllZlhjrrlVlvj +wtbBGPTPtRTgbCTBqFgGRwFnsWJnmDMsWMJJMzHPhDmJzP +zsbsMtMMdnffBbzNsBtCCWLpLrCrcNLVDWVVcD +TmPhJRvwmjmhFJwjjRPFPTvJGVCcCGBrDpccpDrCrWCVDVFZ +QvSTvBhqwjPmwddHgtqMnllzMl +gftDtqnpqzGZsFcthbtZ +VlNPrBrRNrLBmdRVFCcGCZTFCsTCsbLL +VdldlljlSNHBsSlqfgqMDDvzpHJHWg +tQDLvFLcDrWrcnsHffCGgGHG +ZRPTPJqhMZJZVllRZJPVZPRHnhCnfdssnCznzGhdgfwCHn +qPqlPVlTlSqbZZVJplqlPDmrjWFtmLtFWgQvtmtFvp +zlZzdNRPgGGzsLGCDBBtCDCtSncScP +vWvHWbqjrFMbvrTWcVnQBBBSjLDcQJcL +wfLHwfFqLFbhHvWhMWqwbwwRspssmzgpzGgmmNfmzmRGRz +rPvLrQBvBLsLLdtrgssgZjwFwlnCFMtMFnlllnnb +mNmmzpWHlzjlJMJb +TVSVTWpqRWpSTqNbTVRBPDfLLPrSLrsfQrrvsf +nRjpQWnQnRQzMjRdrtvvPCfmvGtPfMcCtG +TDbrbhNZVbbbbwhDZDhbTTGfcftqcGVvmmcqcJCcCPmJ +NLhrSwgwgnsLsQWljW +JWqVSpGNPdNNzdZJJpMzHzwLgsMwzwQwMBgL +clrlcvrRfccCtFbHrBWLgwLHmMHsHg +DbfDFjcvRcvchWZVWdNpGZNqdh +sdfvFLfmtszQwLfddRpmtDDBjVNWGMNQVQNMJGWJMj +lccrncTZhqqcqhWggvrjMNMGrJMG +SblShnZCqSbPhhbcbTTSZFdFsFpmdRwPwzvmswLtmm +PGwwHpfnFSvVpWqWCQNNjCbbnW +lmddlhcDRBlLRchdmzbNjqqWTcbNPNWTzz +RBMrRdRhlDtPrJtfwFHpsvrHpFSrFw +hhwlglFFSQndLRFbmCbTTz +NczHMMqzpzPcpfBffcmTrdfGbbRbGrdGrLCL +qNzNPqMjcqNBWWccBHsZPDhJnllwnwvJvQnJhQsgvD +mbmvmvbbprZmlFmZbFgLffgQtFNHNhfqQtNQ +SJcdzjSJBzdBdJDzQhhLQfqzNQQHggRL +jwDwcTTDThvTZPPW +FSVBBBvHvCpVVDDGcGwNNhhctwMvMc +fLLZsZVQmjfTfqQRmQhhtgbbJbGJRghtcGct +qTsTQdqjVfqdVdZZqVLpCpzSpdppBlSpCFdHSC +sQQhWsMmQshlhmMQZFDHDJFjgjzHZgcHdH +LnwnpNRrnrbCqqLpwnqfnLcvFHJFzNcHzJcgJJHgdDgN +wCbnpCfPCVqwwnrrbbPRGMMlSllmlTTmsThVMlsd +pzrprfwgbwtwqzrCWbqCwqSMvddHdDSvtHRlDnRRDddD +zQLzQQjPBPFcLcQFTFsmNQzcMNdDdvnldHHvdvnDnRnlvRnJ +cTZGzzscLcPrqrfrZqqbVV +DcSdcTwDLmcwDwvWssGfJfcJQZPGnfcs +FlHFMgtgNggpsztMHMqpjgBBnCfPflfQnZCQBBCnRPZC +gpVjqNVrHFtjqqzSLDTSmTDwwrmhbs +MLMzJTsZzZMgMLgHMmVmdCVhCBlQwDwwhChD +vtPRQpbqCldwdtBC +bQqFbnQbcFfjPRFPQnTrMMgcJgJrssrzgrgS +mtdGJmQRFmdtQvdvtRtdHzHzqZqpHFzZnCzhZjjH +fPwVlllswMVNPfBDDlNVsMsfcBjchHncqzjZbpzjcqCnpHHn +rlsNPWNlhWTPMMNPfwNWTLQRvQLLmgvSJvRJgTRG +TwnqhqqgvQnGBGmBDp +SMjclJSjjVJgCzCzNgpmdBpmBGspRBmpDDVB +JjMCgMMHMMZNStllZSNHhPqFhFWfqPPqTqhLFqtL +lRQPtjPRlDdStDSlPmvllvLsCphFfCHLHggspgFmsFLH +qwpTNprcbNWVHLrfFssBgFCM +NTWTnzTTWGZZZVRSRRQGpdDtSQRp +gpwTPNPBPTdLLLLVGl +jSHdjzZHMcDVtDvFjtCF +HqfZMHzbcqRRRWgdqPmBBBNmwW +PvSBtdFgvSmBPngFBTBjbSjwwpGjsppMjNpMjj +VZLfVQLzQQQhllpcNcwbssvwwwZj +vHWLVVqWTmTgttgq +CNRmNRFNRCWbWNCrlmfGlWqFLsDZQZBZzgwQZsBsDZZCzczB +MSjdVHvHnDDhHvdwBwssZVzwcgLcQg +HnMMTdttHSHSpHvDddpSHTjWlNWFlmRtRmRbqGfqGGNNfR +fBLTDppznrfTndfnfTzTLPvZvvHVbRbggjvzVbzvbV +mwmDGGlqDhMqthGqhJMWmlNVRZPHjgwjjRZbbHRgRHvv +DmhsJsshWGhSGlmlmrdcLLsTBBfcfnBppc +mbCGFFmGmcdTrCTQdh +MJHfJNLllJffPLRTdBqTRQNcqQGB +fPJHfSSSWfSLDMLWGHDMLDFmznmsjmvZwzvjZjbvbZ +pPvpJSfZTTvCzNZczzQZchcj +svbHWsqsvbsMFtVHgVtcRQcDlQRRRQLjlqjczj +tBsgvHVMFggbgFrgWnwSndfBmmBJfPSfpn +jwbwfjSbwjVSjvZPzWSvhvhQlCsBFgLRLLgBLRClLLFQQw +GdNJHpmHTDnTNJqnFCgBLFLFzFtsQRCd +NpMJHpnMrDpJGTHqTTmJHTPjfcvbWfrffVzvZfVWSbjz +wFwpqWwwpqwtqqrbCFtptDmCcfNhNRzRBZRRJRChVNBZBJ +svlvjHsQlvdlvMLdlvPSSLtzzczcNhJthfNtRcNMJNMc +HvvPLSHjgltjsvqwbbnmWmDpgwTT +zhCmPVwwChdCBtsWnNWswBWr +GJJSfSgFpjJjGgpfpgrcNNstvnBHNnHLtFHr +jgDTfjpMgZMGMGJTMMJRhzZPCzbhVlPqdNCbhd +bDbQQmVDRpDNbRQlfQQZnfwTlllfsT +FChzzBWhVzrgMwffJwlnngnTlJ +MCvqvhFzcHCChjtpNNVLppGmbq +bZZzJnccqdzcLhrcQDLrDs +FfCfWVfjWTFClClfwjWCfGGwhZSDhSLsSSRpZprLph +mFmTMmFjMMWFfZtttflWjmWTngNHJHggJJHtzgnJvBtBgHdv diff --git a/day3/input.txt.test b/day3/input.txt.test new file mode 100644 index 0000000..f17e726 --- /dev/null +++ b/day3/input.txt.test @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw diff --git a/day3/src/main.rs b/day3/src/main.rs new file mode 100644 index 0000000..d320553 --- /dev/null +++ b/day3/src/main.rs @@ -0,0 +1,47 @@ +use std::{collections::HashSet, fs::read_to_string}; + +use color_eyre::{eyre::*, Result}; +use itertools::Itertools; + +fn priority(item: &char) -> usize { + ('a'..='z') + .position(|c| *item == c) + .map(|i| i + 1) + .or_else(|| ('A'..='Z').position(|c| *item == c).map(|i| i + 27)) + .unwrap_or(0) +} + +fn initial(input: &str) -> (usize, usize) { + let output1 = input + .lines() + .map(|line| { + let (compartment1, compartment2) = line.split_at(line.len() / 2); + let compartment1 = compartment1.chars().collect::>(); + let compartment2 = compartment2.chars().collect::>(); + compartment1 + .intersection(&compartment2) + .map(priority) + .sum::() + }) + .sum(); + let output2 = input + .lines() + .chunks(3) + .into_iter() + .map(|group| { + group + .map(|line| line.chars().collect::>()) + .coalesce(|a, b| Ok(a.intersection(&b).copied().collect())) + .map(|set| set.iter().map(priority).sum::()) + .sum::() + }) + .sum(); + (output1, output2) +} + +fn main() -> Result<()> { + let input = read_to_string("input.txt").wrap_err("reading input.txt")?; + let output = initial(&input); + println!("output: {output:?}"); + Ok(()) +} diff --git a/day4/.gitignore b/day4/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day4/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day4/Cargo.toml b/day4/Cargo.toml new file mode 100644 index 0000000..8842130 --- /dev/null +++ b/day4/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day4" +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/day4/src/main.rs b/day4/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day4/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day5/.gitignore b/day5/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day5/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day5/Cargo.toml b/day5/Cargo.toml new file mode 100644 index 0000000..f9b62bf --- /dev/null +++ b/day5/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day5" +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/day5/src/main.rs b/day5/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day5/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day6/.gitignore b/day6/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day6/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day6/Cargo.toml b/day6/Cargo.toml new file mode 100644 index 0000000..89d04ae --- /dev/null +++ b/day6/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day6" +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/day6/src/main.rs b/day6/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day6/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day7/.gitignore b/day7/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day7/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day7/Cargo.toml b/day7/Cargo.toml new file mode 100644 index 0000000..b170ccb --- /dev/null +++ b/day7/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day7" +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/day7/src/main.rs b/day7/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day7/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day8/.gitignore b/day8/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day8/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day8/Cargo.toml b/day8/Cargo.toml new file mode 100644 index 0000000..4879259 --- /dev/null +++ b/day8/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day8" +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/day8/src/main.rs b/day8/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day8/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/day9/.gitignore b/day9/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day9/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day9/Cargo.toml b/day9/Cargo.toml new file mode 100644 index 0000000..b5e5273 --- /dev/null +++ b/day9/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day9" +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/day9/src/main.rs b/day9/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/day9/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +}