From a1e913e617bf6b2637c0cac56adabe980d27387f Mon Sep 17 00:00:00 2001 From: Martin Ashby Date: Sat, 3 Dec 2022 10:37:08 +0000 Subject: Days 1-3 --- .gitignore | 1 + Cargo.lock | 16 + Cargo.toml | 9 + input/day1.txt | 2248 +++++++++++++++++++++++++++++++++++++++++++++++ input/day1_ex.txt | 14 + input/day2.txt | 2500 +++++++++++++++++++++++++++++++++++++++++++++++++++++ input/day2_ex.txt | 3 + input/day3.txt | 300 +++++++ input/day3_ex.txt | 6 + src/day1.rs | 27 + src/day2.rs | 124 +++ src/day3.rs | 46 + src/main.rs | 11 + 13 files changed, 5305 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 input/day1.txt create mode 100644 input/day1_ex.txt create mode 100644 input/day2.txt create mode 100644 input/day2_ex.txt create mode 100644 input/day3.txt create mode 100644 input/day3_ex.txt create mode 100644 src/day1.rs create mode 100644 src/day2.rs create mode 100644 src/day3.rs create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..a1c40dc --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,16 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aoc2022" +version = "0.1.0" +dependencies = [ + "simple-error", +] + +[[package]] +name = "simple-error" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc47a29ce97772ca5c927f75bac34866b16d64e07f330c3248e2d7226623901b" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..5db6e4a --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "aoc2022" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +simple-error = "0.2.3" \ No newline at end of file diff --git a/input/day1.txt b/input/day1.txt new file mode 100644 index 0000000..f10d8a8 --- /dev/null +++ b/input/day1.txt @@ -0,0 +1,2248 @@ +2159 +2527 +2441 +3299 +1672 +3025 +2820 +6821 +3201 +1204 +1208 +4861 +5621 + +5580 +18071 + +8803 +1667 +4173 +9404 +9718 +10311 + +12237 +5068 +9824 +6535 + +25484 + +18598 +2851 +13577 + +13719 +9147 +11204 +8554 +11796 +1297 + +43055 + +8156 +4616 + +16383 +17036 +16017 +18569 + +33581 +10017 + +65566 + +5750 +6961 +4494 +11117 +3392 +10471 +3490 + +7006 +7526 +9302 +1454 +4039 +8067 +9321 +8888 +7380 + +8543 +2106 +2986 +3465 +9592 +11240 +1795 + +4396 +27967 + +8091 +19515 +1282 + +6241 +8946 +6665 +5163 +2224 +8684 +6631 +5866 + +5565 +6118 +1856 +3227 +4501 +3024 +5745 +3988 +1590 +5111 +4457 +3108 +3165 +3508 +4629 + +1455 +4809 +5650 +5472 +4673 +1775 +3080 +5282 +3552 +3875 +4691 +7352 + +7325 +2121 +2751 +10300 +1939 +3782 +3635 +1801 + +8562 +15236 +18996 +18271 + +9673 +9270 +15540 +5842 +10343 + +7384 +30187 + +7578 +7909 +8514 +5775 +3455 + +2617 +30132 + +6414 + +6916 +6847 +2774 +2137 +2755 +3801 +5635 +2354 +5206 +1555 +1979 +4146 +3223 + +25686 +20293 + +17083 +16276 +14249 +19080 + +11875 +14353 +5177 +9053 +13032 + +2168 +4155 +6764 +3432 +6362 +5193 +1953 +6809 +2592 +2940 +1712 +4140 +2971 + +6197 +5203 +10968 +10361 +9549 +9288 +4285 + +12639 +6370 +9415 +13404 +1185 + +40195 + +5865 +4919 +1593 +2182 +4134 +4928 +2521 +3529 +3780 +4039 +4554 +1449 +5414 +1335 +3145 + +5323 +10950 +6223 +4568 +4096 +5697 + +2252 +3388 +1881 +5937 +4571 +1266 +5451 +3547 +2718 +5851 +5127 +4469 +3896 +5401 + +10727 +3611 +3924 +9410 +8255 +4973 +9845 + +13643 +6910 +7722 +4082 +4449 +10901 + +2193 +1347 +1070 +7345 +6916 +7148 +2948 +5325 + +2121 +9029 +4972 +6004 +10500 +8962 +5505 +5541 + +5862 +2143 +6882 +7117 +7377 +1663 +5025 +3543 +5279 +2009 +3243 +2738 + +11713 +36062 + +4486 +7936 +3497 +9095 +10365 +11350 +2871 + +11207 +7344 +4568 +4303 +4564 +3537 +9306 + +2713 +2131 +5390 +1658 +3888 +4057 +2415 +1206 +5894 +6019 +2675 +5690 +1396 +1211 +5796 + +1614 +2036 +3825 +1868 +1695 +5456 +6781 +3703 +5360 +4286 +2098 +4870 +1774 + +3024 +10027 +11951 +12395 +7235 +12217 + +3526 +2302 +5594 +5210 +1700 +3858 +2282 +5079 +3805 +5202 +2637 +3713 +4628 + +1236 +1025 +5147 +1707 +1968 +1957 +3236 +1304 +4445 +1113 +3339 +1600 +4387 +5561 +4067 + +10142 + +11218 +9160 +11751 +12770 +13082 +11308 + +2902 +7986 +1353 +11697 +9091 +9758 +5959 + +30995 +4880 + +51409 + +2447 +3702 +3691 +3799 +5245 +4059 +3995 +4062 +4306 +4831 +4983 +2675 +1957 +4448 +4466 + +4526 +3559 +2859 +6809 +4220 +7802 +1842 +5260 +7885 +4327 + +4108 +10738 +3790 +10063 +2151 +1109 +6287 + +9668 +4537 +9819 +7653 +5472 +9815 +6801 +10064 + +6506 +6381 +2925 +1827 +8351 +7893 +1534 +3095 +3371 + +4751 +2425 +4391 +3993 +6915 +2815 +1171 +4244 + +1989 +4356 +2356 +1155 +6421 +1276 +5180 +1234 +5162 +1572 +5139 +5039 +4044 +3196 + +6301 +1677 +3682 +6065 +4279 +2823 +3820 +1689 +2880 +3858 +4057 +1718 +2341 +2609 + +13112 +9850 +7687 +3533 +13436 + +3221 +2511 +2034 +2518 +1429 +1115 +2292 +5982 +3859 +4813 +3884 +3766 +1398 +1307 +1114 + +8116 +8158 +8281 +4972 +9848 +7207 +2000 +8389 + +5534 +5354 +2736 +4137 +2232 +3363 +6423 +5242 +4889 +5954 +1269 +3836 + +34199 +1010 + +5347 +19266 +6151 + +7355 +9264 +15405 + +5659 +2466 +5593 +1615 +1035 +3464 +4237 +5532 +4739 +3202 +4018 +4355 +5047 +1085 +5701 + +1855 +3764 +4400 +3316 +6592 +5938 +4181 +5686 +4982 +3172 +5083 +3553 +4031 + +7043 +9662 +6165 +1007 +6016 +2782 +1859 +3957 +8388 + +15153 +7559 +19575 +5262 + +31900 +13395 + +51487 + +14907 +31794 + +1450 +9954 +3039 +5989 +1723 +11802 +10238 + +2404 +7669 +11121 +10550 +5239 +4153 + +5193 +4785 +5851 +1417 +1957 +2102 +4458 +1712 +4914 +1195 +3235 +3552 +4482 +2651 + +5531 +4364 +4775 +3752 +3298 +4680 +2183 +3576 +2079 +4577 +5104 +5725 +2396 +4339 +5199 + +4231 +6177 +3676 +5690 +5114 +6936 +4726 +1769 +4865 +1013 +3706 +2990 +2569 + +1007 +3622 +2266 +1993 +5089 +2966 +6259 +7076 +2134 +2902 +3218 +7279 + +1326 +3004 +4093 +4220 +4447 +3847 +4168 +5216 +5744 +2389 +5589 +4004 +1817 +3621 +5296 + +13987 +18409 +17832 +11535 + +11649 +8919 +18521 +14161 + +1415 +4887 +3494 +5247 +6589 +6843 +2835 +5927 +4117 +1156 +6928 +4561 +1090 + +8282 +10239 +8219 +6655 +9963 +10672 +2648 +9472 + +2684 +5383 +2257 +5979 +5831 +3924 +2830 +5286 +4345 +2823 +2637 +3323 +3713 +3054 +4266 + +3794 +3481 +4462 +6962 +3036 +1331 +2209 +2207 +6242 +6425 +7935 + +4035 +5276 +2420 +2056 +7858 +2502 +5326 +3403 +5849 +1839 +7903 + +2471 +1515 +4700 +2824 +3543 +5832 +3984 +3338 +3439 +4061 +5929 +2455 +3231 + +7861 + +9304 +3161 + +2371 +28263 + +1661 +1388 +2995 +12665 +16419 + +2524 +1487 +7060 +3838 +1578 +7169 +5209 +7784 +3624 +4459 +2364 + +6698 +1301 +9506 +6294 +7991 +8888 +8743 +6054 + +12685 +5876 +5168 +7008 +10315 + +6748 +1470 +2574 +8676 +1931 +8141 +1363 +5511 +5202 +7192 + +1594 +4407 +2553 +6004 +5681 +1238 +6153 +5082 +2080 +2167 +4224 +4983 +5011 +4437 + +4646 +1839 +3847 +2657 +1961 +6910 +2504 +3201 +2122 +1368 +3298 + +9041 +8226 +4741 +9802 +8968 +1241 +8769 +9428 + +3818 +2525 +2976 +2435 +4602 +7466 +8117 +8330 +4226 + +3773 +6191 +1045 +3874 +7811 +4758 +6726 +4243 +7139 +8009 +1763 + +6146 +7887 +1934 +1107 +8833 +3816 +7822 +7614 +2084 + +4729 +4535 +3489 +3971 +3995 +1261 +2723 +6688 +1397 +6089 +1039 +1162 +2845 + +14666 +23256 + +1183 +4264 +1316 +2549 +4763 +4966 +6321 +6230 +4309 +2484 +4915 +6496 +6628 + +12678 +3479 +7812 + +2773 +6383 +7824 +2647 +4234 +3274 +6620 +1696 +4621 +1662 + +13710 + +11861 +4939 +3810 +13818 +7577 + +2840 +3547 +4020 +1876 +5041 +5290 +6509 +4969 +3490 +2539 +5644 +2279 +1848 +5828 + +11719 +11125 +3216 +11005 +11633 +2806 + +49621 + +9289 +1576 +7377 +8217 +1445 +5638 +3544 + +1610 +11356 +18332 +6800 + +2308 +4086 +1765 +6148 +1291 +6606 +5974 +7110 +3515 +5511 +3222 +5222 + +10477 +9350 +8515 +9846 +7086 +9324 +3376 +7061 + +3618 +2702 + +4829 +3094 +5689 +1657 +4491 +6307 +6404 +5355 +6493 +6159 +3149 +5458 +3639 +4575 + +16698 +23747 +7188 + +6495 +3976 +7676 +4560 +7326 +6772 +5877 +7121 +6474 +6104 +1811 + +3745 +5935 +16652 +19074 + +1050 +1684 +6531 +1365 +4615 +5569 +4257 +4619 +3576 +5736 +2284 +4054 +4736 + +11520 +5079 +6733 +7453 +10370 +10336 + +13082 +5970 +5552 +4886 +3365 +2465 + +8226 +1767 +1330 +7254 +4164 +2254 + +3745 +3173 +3378 +6116 +2539 +2548 +6082 +5685 +2572 +5908 +3721 +4079 +6028 +4928 + +6065 +10833 +18151 +9597 + +6461 +6590 +6341 +7117 +2508 +4495 +5848 +3721 +3139 +6980 +3020 +6416 + +1772 +5253 +1476 +12001 +7434 +9614 + +3821 +7137 +6955 +3022 +4107 +2381 +4975 +2041 +1391 +6479 +4380 + +27486 +23127 + +2754 +5361 +3334 +1119 +2534 +6649 +1333 +6055 +4740 +4282 +6868 +2203 + +13576 +11551 +9609 +13727 +7950 +8594 + +2078 +6350 +11475 +7410 +11617 +4156 +6565 + +5466 +1887 +2844 +2386 +3286 +2369 +4826 +5052 +1605 +3638 +2464 +1256 + +4612 +4885 +4738 +5946 +5822 +2629 +1701 +3454 +2385 +2256 +5738 +5355 +4582 +2256 +6109 + +8280 +12911 +12759 +7058 +5658 +8825 + +4352 +1600 +2414 +3442 +7060 +3618 +3681 +6777 +4115 +7295 +3032 +5935 + +15976 +15624 +8838 +16884 + +4206 +6660 +3702 +3294 +5066 +5153 +2687 +2138 +2387 +2640 +2887 +4689 +1592 + +6347 +6804 +7760 +3433 +4076 +3360 +6994 +4539 +4413 +3747 +3856 + +12149 +23188 +17235 + +1676 +3699 +3827 +2440 +6046 +4516 +3452 +4108 +2240 +4454 +1850 +1907 +6039 +4589 +1028 + +1447 +4080 +2846 +2959 +3580 +3422 +3876 +2805 +2184 +6175 +4826 +2002 +5567 +4959 + +3545 +7160 +3584 +7979 +8150 +2598 +1528 +8569 + +2705 +2584 +6312 +5107 +6674 +6737 +4977 +7302 +2154 +7072 +1874 +2860 + +25044 +21875 +11897 + +10493 +4494 +11775 +7689 +2241 +11089 +6639 + +4732 +2438 +6095 +4217 +2815 +2179 +1388 +1050 +1686 +4542 +2692 +2624 +4548 +4158 +1554 + +5549 +4680 +5028 +2004 +2803 +6145 +4969 +4637 +7026 +6769 +1347 +1023 + +8246 +7712 +3191 +6860 +8708 +1435 +5973 +2667 +5426 + +4128 +1662 +3235 +2343 +5648 +6688 +6622 +2625 +3453 +5599 +5757 +5799 +1461 + +4777 +9486 +7167 +4960 +6227 +2074 +5197 +4242 + +1412 +1861 +7599 +5993 +5588 +2494 +8105 +1902 +3187 +1945 + +3792 +3070 +4611 +5463 +4745 +7237 +5579 +2036 +2605 +6729 +4963 +1694 + +8441 +8372 +8617 +3295 +10245 +3520 +1524 +2418 + +6328 +2063 + +19738 +10056 +16085 +2863 + +5697 +1102 +5817 +1447 +3060 +2563 +5476 +2389 +2258 +2439 +2059 +5751 +4874 +4629 +1591 + +15007 +7626 + +12623 +23823 +17194 + +55217 + +10620 +11397 +4761 +11650 +13208 +2508 + +4106 +3845 +2383 +1389 +4701 +4674 +6075 +4917 +6815 +1790 +2452 +5396 +2949 + +20219 +10699 +1223 + +4720 +1107 +5354 +6254 +5367 +3808 +4687 +1253 +3580 +6658 +8084 + +5861 +4207 +5535 +12800 +4588 +2333 + +7203 +36816 + +5985 +5394 +5689 +2730 +1034 +6016 +3903 +5419 +4802 +2792 +1209 +4412 +2835 +5574 +1721 + +9837 +11425 +5676 +7511 +11236 +10062 +11180 + +1574 +4254 +2501 +5256 +6071 +3180 +6302 +1019 +6345 +2041 +2556 +5173 +3686 +2862 + +1622 +3929 +8097 +3392 +9603 +6645 +9101 +8963 + +9677 +1115 +2716 +8048 +9394 +7321 +9496 + +10805 +10286 +10947 +5896 +7808 +1791 +11995 + +1886 +2697 +5634 +4818 +2213 +1927 +7440 +7311 +6638 +4760 +3677 +1648 + +18334 + +1424 +5646 +4407 +3184 +6817 +6297 +2689 +3783 +1809 +3542 +2829 +5268 +3934 + +10276 +16236 +13013 +11052 +5967 + +9245 +1505 +6473 +1173 +10126 +4803 +1874 +1397 + +3377 +5662 +4181 +4311 +2313 +7453 +3734 +3438 +2304 +5807 +4041 +2673 + +42104 + +4047 +6040 +8950 +5913 +3512 +7760 + +6321 +4745 +7073 +2117 +3427 +6842 +5525 +5870 +2418 +1926 +7264 +1591 + +1223 +9775 +14018 +15378 + +12574 + +10520 +3487 +8520 +6708 +7996 +11442 +2206 + +11255 +4890 +3493 +4284 +5313 +11598 + +2982 +21019 + +1915 +3312 +4851 +7937 +4442 +1259 +6454 +6212 +8728 + +16012 +31825 + +3090 +15799 +14109 +8736 +11302 + +4835 +5319 +4717 +2968 +3703 +3892 +6247 +3263 +2850 +1889 +2989 + +6923 +6909 +7498 +3434 +5755 +1982 +1577 +4303 +2399 +2424 +5726 + +17813 +12904 +17003 + +3194 +12390 +11283 +2694 +8006 +11555 + +5094 +3057 +7671 +8755 +4429 +3076 +3283 +3984 +2460 +1720 + +6285 +5638 +5352 +1032 +5500 +5093 +4972 +6139 +2477 +4845 +1977 +3396 +1298 +4563 + +10996 +5188 +8022 +7555 +2353 +13208 + +1770 +1563 +1282 +8442 +6443 +1430 +3077 +4630 +8869 + +4633 +2671 +6720 +6390 +4815 +5276 +5639 +4067 +1325 +2563 +5760 + +5091 +12562 +4601 +6905 +12067 + +5632 +3856 +2885 +3090 +5837 +1604 +4805 +1957 +4769 +6524 +6473 +1126 +4044 + +5449 +7915 +10347 +5347 +1548 +5313 +6816 +9401 + +2918 +3990 +3690 +3351 +6178 +6373 +3551 +1288 +4961 +5867 +5061 +6706 +1849 + +3745 +2090 +4216 +6031 +5888 +6238 +2951 +4671 +6451 +5536 +5177 +6089 +6062 +1157 + +2759 +5545 +3896 +2474 +4101 +6321 +7415 +7326 +7131 +4581 +3243 +3782 + +6470 +3540 +4160 +7171 +7946 +4097 +1142 +5022 +6545 +4889 +4762 + +2709 +3765 +1880 +2601 +2312 +5789 + +11191 +7016 +19716 +4196 + +1903 +3391 +1491 +5481 +3306 +2093 +4878 +3301 +4961 +3398 +5579 +5558 +3669 + +4402 +1781 +4861 +3633 +6699 +9137 +3165 +7754 + +14784 +7543 +4446 +9325 +13613 + +5355 +2452 +2153 +4075 +5333 +5572 +3105 +4848 +1124 +4715 +5375 +1614 +2580 +2188 +4713 + +1560 +4565 +4367 +4621 +4981 +2504 +4394 +5528 +5537 +2486 +1553 +7379 + +35695 + +9647 +8727 +6135 +3147 +8616 +6873 +3837 +7376 +5415 + +2648 +2742 +5116 +6315 +5150 +4049 +4783 +4102 +1808 +4138 +6134 +1439 +5609 + +15163 +10151 +1869 +12214 + +6504 +5302 +2124 +2330 +1460 +3671 +1086 +1919 +2766 +3156 +5680 +4024 +3160 +4793 + +4243 +17053 +22756 + +5103 +2752 +3162 +4466 +3569 +1656 +4430 +3378 +2581 +3847 +5479 +2378 +3720 + +68321 + +5590 +3509 +2669 +2430 +3234 +3403 +6124 +6024 +3407 +6400 +2780 +6322 +5139 +1618 + +6471 +2418 +3991 +5206 +1343 +2674 +4228 +4816 +2144 +5542 +2555 +5055 +4481 +2239 + +3605 +1063 +2534 +4631 +3836 +3967 +3373 +5778 +5698 +3580 +2214 +5307 + +2961 +2388 +1769 +6464 +6452 +2944 +4196 +3566 +4218 +5808 +1712 +1488 +2127 +5959 + +6828 +4662 +2844 +9182 +1912 +4558 +4760 +2042 +5317 + +1911 +1235 +5583 +5971 +7786 +10324 +6978 +7148 + +4537 +5225 +2886 +8229 +8611 +9025 +2229 +9990 + +6005 +4924 +1458 +2998 +2809 +3068 +5967 +2003 +4161 +2227 +4010 +2429 +1088 +3286 +1814 + +1524 +1882 +2661 +1868 +2448 +4244 +4882 +4113 +4866 +3652 +5468 +2841 +5572 +3431 + +4971 +6486 +5373 +5863 +7378 +7901 +1803 +4637 +2088 +7780 +6047 + +7458 +2483 +5279 +2673 +5310 +7321 +1520 +1117 +1078 +2879 +7379 +5757 + +1030 +10099 +10427 +6213 +12215 +4307 + +1157 +2020 +5233 +1997 +7472 +2968 +2847 +3744 +6340 +3310 +3237 +1519 + +26488 + +16807 +24831 +13009 + +9601 +1567 +8861 +2226 +7238 +6549 +8867 +9238 + +2573 +3677 +10657 +8167 +1435 +10753 + +8808 +4328 +3503 +6761 +6209 +2579 +2896 +2441 +1370 +2880 + +38579 + +3846 +3357 +6584 +6682 +2620 +3197 +1914 +2873 +2158 +6229 +3507 +3003 +1051 + +5816 +5885 +4040 +6485 +1984 +4185 +2024 +5446 +1961 +4646 +3395 +6606 +3919 + +1961 +4181 +10805 +5917 + +7241 +6129 +5211 +4923 +9200 +5140 +5847 +8434 +3620 + +3216 +3066 +2708 +6310 +2403 +2018 +2405 +6625 +1317 diff --git a/input/day1_ex.txt b/input/day1_ex.txt new file mode 100644 index 0000000..2094f91 --- /dev/null +++ b/input/day1_ex.txt @@ -0,0 +1,14 @@ +1000 +2000 +3000 + +4000 + +5000 +6000 + +7000 +8000 +9000 + +10000 diff --git a/input/day2.txt b/input/day2.txt new file mode 100644 index 0000000..f55d458 --- /dev/null +++ b/input/day2.txt @@ -0,0 +1,2500 @@ +C X +C X +C X +A Z +C X +C X +A Y +B X +B Y +B Z +C Y +C X +C X +C Y +B Y +C X +C Y +B Z +C Y +B Z +B Z +A Z +C X +C X +C X +B Z +C Y +C X +C X +B Y +C X +B Z +C X +C X +A Y +C X +A Z +B Z +B Z +B Z +B Y +B Z +C X +B Y +C Y +C Y +B Z +C X +C Y +C X +C X +C X +C Y +A X +A X +C Z +C X +B Z +A Z +C X +B Y +C Y +B X +B Z +C Z +A X +C X +B X +C Y +C Y +B Z +B Z +B Z +C Z +A Z +A Z +C X +C X +C Z +B Z +B Y +C X +A Z +C X +B Y +C Y +B Z +C X +A Y +C Y +A X +B Z +C Y +C Y +C X +C Y +C X +B X +C Y +C X +B Y +A Z +B X +B Y +C Z +C X +C X +C X +B Z +B X +B Z +C X +B Y +B Z +C X +C Y +B Y +C Y +C X +B Z +B Y +B X +A Z +A Z +C X +C X +B Z +B Y +C X +C Y +C Y +A X +C X +C Y +A Y +C X +A Z +C Y +B X +B X +B X +B Y +B Y +C Z +C X +A Y +A Z +C X +B Z +C Y +C Y +A Y +B Z +B Z +C X +C Y +B X +C Y +B X +A Y +C X +B Z +A Z +C Y +A Z +A Y +C Z +B Y +A Z +A Y +C X +B Y +B X +C X +A Y +B Z +B Z +B Y +B Z +C X +C Z +B Y +B Y +A Y +B Z +B X +B Z +A X +C Y +B Z +A X +A X +B Y +C Z +C Z +B Z +B X +B X +A Z +A Y +A Y +C Z +C X +C X +C X +B Z +C Y +C Y +C Y +B X +B Y +A Y +B Z +B X +B Z +C X +B X +C X +C X +B Z +C Z +C Y +C X +C X +B Z +A Y +C X +C X +A Z +B Y +B X +B Y +B Z +C Y +A X +B Y +C X +A Z +B Z +A Y +C X +B Y +B Z +A Z +B Z +C Y +B Z +A X +A Y +B X +A X +B Y +C X +A X +B X +A X +A Z +B Z +C X +C X +A Y +B Z +C X +A Z +B Z +C X +C X +A Z +C Y +B Z +C X +B Y +B Y +A Z +C X +B Z +B Y +A Z +B Y +C X +C Y +A Y +B Y +C Z +A Y +C Z +A Z +B Z +C X +A X +B Z +C X +C Y +A X +C X +A Z +C Z +C X +C Z +B Z +C Y +B Y +B Z +C X +C X +B Y +C X +B Z +C Y +A X +A Z +B X +A Z +C Z +C Y +C Y +B Z +C Y +C X +C Y +B Y +C X +C X +C X +B Z +C X +C X +B Y +C Y +A Z +B Z +C Z +B Z +A Y +B Z +C X +C Z +B X +A Z +C X +C X +C Y +B Z +C Z +B Z +A Y +B Z +C Z +B Z +A Z +C X +A Z +A X +C X +B X +C X +C X +C Y +C X +C X +B Z +C X +A Z +B Z +B Y +C X +A Y +C Y +B Z +B Z +C X +A X +C X +B Z +C X +B X +B X +B Y +B Z +B X +B Y +C X +C X +B Y +C X +C X +A X +B Y +A Y +B Z +B Z +A X +C X +C X +C X +A Z +C X +B Y +A Z +A Y +B Z +B Y +B Z +C X +A Y +C X +C X +B Y +A X +A X +B X +C Y +C X +C X +B Y +B X +B Z +C Y +B X +C X +B Z +B Z +B Z +C X +C Z +A X +C X +C Z +A Y +B X +C Y +C Y +B Z +B Z +C Y +C X +A Z +A Z +C X +C Z +C X +C X +C X +C Y +B Z +B Y +B Z +C Y +A Y +A Z +C Y +C Z +C Z +B Z +B X +C X +C X +C X +B Y +C X +C X +C Z +A Z +C X +B X +B X +C X +C X +C X +C Y +B Z +B X +C Y +C X +B Y +A Y +A Z +C X +C Y +A Y +B Z +C X +B X +C X +C X +B X +B Z +B Y +C X +C Y +A Y +C X +C X +B Z +C Y +B Z +C Y +B Y +C Y +B Z +B Y +B Z +B Z +C X +B Z +A X +C Y +C X +C X +C X +C X +C Z +B Z +C X +C Y +C Z +C X +C Y +B Z +B Z +A Z +B X +A Z +B Y +A Y +C X +C X +C X +C X +C X +C X +A X +C X +C Y +B Z +C Y +C Y +C Y +B Y +C X +B Z +B Z +A X +C Z +C Z +B Y +B Z +C X +A X +C Z +B Z +B Z +C Z +B X +C X +B Z +A Z +B Z +C X +A X +B Y +B X +B Y +B Z +B Z +C Y +B X +B Y +C X +B Z +B Z +B Y +B Z +A Y +A X +C Z +C Y +B Z +B Z +A Y +A X +B Y +C X +B X +A Y +B Y +A Z +A X +B Y +B Z +A Z +C X +C X +C Y +C Y +B Y +C X +A Z +B Z +A X +C X +C X +B X +C Z +B Y +C Z +C Y +C X +B X +C Y +C Z +C X +B Z +C Y +C Y +B X +B Y +C X +B X +B X +A X +A Z +A X +A Y +C Z +B Z +C Y +C X +B X +A X +C Y +C X +C X +B X +B Y +A X +B Y +A Z +C X +B Z +C Y +B Z +B Z +B Z +C X +B Z +B X +C Y +C Y +C Y +B Z +B X +C Y +C Z +A Z +C Y +B Z +B X +B Z +B Y +A X +B Y +B Y +A Z +A X +B Z +C X +C Y +C X +C X +C X +A X +A Z +C Y +B Z +B X +C Z +C Y +C X +A X +C X +B X +C X +A X +B Y +C Y +B Z +C X +B Z +A Y +C X +C Y +A Z +B Z +B Z +C X +A Z +A X +C Y +C Y +A Z +C X +C Z +C Y +C X +C X +A Y +C X +C Y +A Y +C Y +C X +C Z +C X +A Y +C X +B Z +C X +C X +C X +B Y +A Y +A Y +C X +C X +B Z +B Z +C X +B Z +C X +A Y +B Y +C Y +B Z +C X +A X +C X +C X +C X +B X +B Y +A X +A X +B Z +C X +B Z +C X +C X +A Y +A Z +B Z +C X +B Z +B X +C X +B Y +B Z +B Z +C X +B Z +B Z +B Z +C X +B Y +B Z +A Z +C X +C X +B Z +A Y +B Y +C X +B Z +B Z +A Y +B X +B X +A X +A X +B Y +C X +A Z +B Y +B X +C X +B Z +B Y +A Z +C X +C X +B Z +C Y +B Z +C X +C Y +C X +C Z +C X +B Z +B Z +B Z +C X +C X +C X +B Z +C Y +B Y +B Z +C Z +C X +B Y +C X +A X +C Z +C X +C X +B Z +A Z +C X +C Y +C X +B Y +C Y +B X +C Z +C X +C Z +C X +B Z +B Y +B Y +A Z +B Y +C X +A X +C X +C Y +B Z +C X +C Z +C Z +B Y +C Y +B Z +C Y +C Y +C X +C X +A Y +B Y +B Y +C Y +B X +B Z +C X +C X +C Y +C X +B X +B Y +A Z +B Z +B Z +C X +C X +B Y +C X +B X +B Z +B Y +B Y +B Z +B Z +A Y +B Y +B Y +B X +A Y +C X +C Y +A Z +B Z +C X +B Y +C X +A Z +B Y +C X +C X +B Y +B Y +C Y +C X +B Y +C X +C X +B Z +C X +C X +C Y +B Z +C Y +C Y +A Z +C Y +B Y +C X +C Z +A X +C X +B Y +B Z +C Y +A Z +B Y +C Y +C Z +B Y +B Y +C X +C Z +B Z +C Z +C X +C X +C X +B Y +B Y +B Y +A Z +B Y +B Y +B Z +A Y +B Z +C X +C Z +B Z +C Z +B Y +B Z +C X +C X +C Y +C X +B Y +A Z +C Z +B Z +C X +B Y +A X +C X +A X +A Z +C X +B Y +B Z +B Z +A Z +C Z +C Y +C X +C Z +B X +C Y +C Z +B X +B X +A X +A Z +B Z +A Z +A X +C X +C X +A X +B Z +C Z +C Z +A X +B X +C X +B Z +B Y +A Z +A X +B Y +B Z +C X +B X +B Y +C X +C X +B Z +C Z +C X +C X +B Z +C X +B Z +C Y +C Y +C Y +B Z +C X +A X +B Y +B Y +A Y +C X +C X +C X +B Y +A Z +C X +C Y +C X +C X +B X +B Z +C X +C Z +A Z +B Z +C X +A Z +B Z +A X +C X +C Y +B Z +B X +B Y +B Z +C X +C X +C X +C X +B Y +C X +B Y +C X +C Y +B Z +C Y +C X +A X +C Z +C Y +A X +C X +B Z +B Y +B Y +C Y +C X +C Y +C X +B Z +B Z +C Y +B Z +B Z +B Z +B Z +C X +B Z +C X +A Z +B Z +B Y +A X +B Z +C Y +B Y +C Z +C X +A X +C X +A Y +B Z +B Y +B Z +C X +C Y +A Y +C X +C X +B Z +B Z +A Z +C X +A Z +C X +A X +B Y +C X +A Z +B Z +B Z +C X +C X +C Z +B Z +C X +A X +B X +B Y +C X +C X +C X +C Y +B Z +C Y +C X +C X +B Y +C X +A Z +A Z +C Y +B Y +B X +B Z +B Y +C Y +C Y +C X +A Z +B Z +B X +C X +C X +A X +C Z +A Y +C X +C Y +A Z +C Z +B Z +B Z +C X +B X +A Z +B Y +C X +A Z +C X +C Y +B Y +B Y +B X +B Z +C Y +B X +C X +B Y +C X +B Y +C X +B Y +A Y +A Z +C Y +A X +C X +C Z +B X +C Z +C Y +C Y +C X +C X +C X +C Y +C Z +A Z +B Z +C X +A X +A Z +B Y +C X +C X +C Z +C X +B Z +C X +B Y +B Z +B Y +C X +C Y +B Z +C Y +A X +C X +A Z +B Y +B Z +C X +B Z +C X +C Z +B Y +A X +C X +C X +C X +C X +B X +B Z +A Y +B Y +C X +B Z +C Z +C Y +A Z +C Y +A Y +B Z +C X +B Z +B Y +C Y +C Y +C Y +B Z +B Z +C X +C Z +C Z +B Y +B Y +C Z +B Y +C X +C Y +B Z +A Z +C Y +A Y +A X +B Z +B Y +C X +B Z +C X +A Z +C X +B Z +A X +C Y +C X +A Z +B Z +C Y +A Z +C Z +C X +A Y +B Z +C X +C X +B Y +A X +C Y +C X +C X +C Z +C X +A Y +C X +C X +A Y +B Z +B X +C X +B Z +C Z +C X +C Y +C Y +C X +B Z +A Y +C Y +C Y +B X +C X +B Z +B Y +B X +C X +C Z +B Z +B Z +B Z +C X +B Z +A Z +C X +C Y +C X +C Z +A Y +C Y +C Y +B Z +B Z +A Z +C Y +C Y +C X +B X +C X +C X +B X +C Z +A Z +A Y +C X +A Y +B Y +A X +C X +C X +B Z +B Y +C X +A Y +B Z +C Y +C X +C X +C X +B Z +B Y +B Y +C Z +B X +C X +C Z +C Z +C X +C X +C Z +C Z +B Z +C X +B Z +B Z +A X +A Z +B Y +B Y +A Y +A Z +B Z +C X +C Y +C X +A X +C X +A Y +A Z +A X +C Z +B Y +B Y +B X +C Z +B Y +C Y +B Y +C X +C Y +B X +A Y +C X +C X +B Z +C Z +A Z +C X +C Z +C X +A Z +B Z +B Y +C X +C X +B Y +B Y +C X +C Y +C Y +B Z +A Y +A Z +A Z +C Y +C X +C X +C X +C X +A X +A Z +A Z +B Y +B X +C Z +C Y +B Y +B Z +C X +B Y +B Z +B X +A Y +C Y +B Z +B X +C X +B Z +C Y +A X +C Z +C X +C Y +B Y +C X +C Y +C X +C X +B Y +B Y +B Z +C X +B Z +A X +C Y +B Y +C X +C X +B Z +B Y +B Y +C X +C Y +B Y +C Y +C X +C X +A Z +C Z +C Y +B X +B Z +B Z +B Z +A Y +B Y +C X +B Y +B X +C X +C X +A Y +C Z +A X +B Z +C X +C X +B Z +A Z +A Z +B Z +C X +C Y +A Z +B Z +C Z +C Z +C X +C X +C Y +C X +C X +B Z +A X +C Y +C Y +B Z +C Y +B Y +C Y +C X +C Y +B Y +C X +C Z +C X +C Z +C Y +C X +C X +A Z +B Y +C X +C X +B Z +C Z +B Z +C X +C X +C Z +C X +C X +B X +C X +B Z +B X +B Z +B Z +B Z +C X +B Y +B Z +C Y +C X +B Z +B Z +A Z +C X +B Z +A Z +B Z +B Z +B Z +C X +C X +C Y +C X +C X +B Z +B Y +B X +B X +C X +C X +B Z +B Y +C X +C X +B Z +C X +A Y +C X +C X +C X +B Z +C Y +C Y +B Y +B Y +B Y +A Y +B X +B Z +B Y +A Z +B X +C X +B Z +B Z +C Y +B Z +A X +B Z +C Y +A X +B X +A Z +B Y +B Z +C X +B Y +C X +B Z +B Z +A Z +B Y +C Y +C Y +C X +C Z +B Z +C X +C Y +A Z +B X +C X +A Z +C Y +C X +C Y +C X +B Z +B Z +C X +B Y +B Z +C X +C X +B Y +A Y +C X +C Z +C X +C X +C Y +C X +C X +C X +B Z +C X +B Y +C X +C Y +C X +C Y +A Z +B Z +A Z +C Y +C X +C X +B Y +A Z +C X +B X +C X +C Z +A Z +B Z +B Z +C Y +C Y +B Z +C X +C Z +A X +C X +B Y +B Z +B Y +B Y +C Z +A X +C Z +A X +B Z +B X +C X +B Z +B Z +A X +B Y +B Z +A X +C X +B Z +B Y +C X +C X +B Y +C Y +A Y +C Y +B X +B X +C X +C X +C Y +B Z +B Y +B Z +C X +B Y +B Y +B Z +B Y +B Y +C Y +C Z +C X +B Z +C X +B X +A Z +C X +C X +A Y +C Z +B X +C Y +B Y +C Z +B Z +C X +B Z +C X +C X +C Y +C Y +B Z +C X +C Z +C X +B Z +B Z +C X +B Z +C Y +C X +C X +A X +C X +B X +A Y +C Z +C Y +B Y +B X +C X +C Z +B Z +C Y +C Z +C X +C X +B X +A Z +B Y +C Z +A X +C X +C X +A Y +C Z +B X +B Z +C X +B Z +C Y +C Z +B Y +B X +C X +A Y +A X +C X +C X +B Z +C X +C X +C X +B Z +C X +A Z +B Y +C Z +C X +A Z +C X +C Z +B Z +B X +B X +B Y +C Y +A X +A X +A Z +C Z +C Y +A X +C X +A Z +B X +B Z +C X +B Y +B Y +B X +B X +B Y +B Y +B Z +C X +C Z +C Y +B Y +B Z +A Y +A Y +C X +B Z +C X +C X +B X +C X +B Z +B X +C Y +C X +C X +B Z +C Y +B X +A Z +C Y +C Y +C X +C X +B X +B Y +C X +B Z +C Y +B Y +B Z +A Z +C X +B Z +C X +B Z +C X +C X +C X +A Y +B X +A Z +C Y +C Z +B Y +B Y +A Y +B Y +B Z +B X +C X +B Y +B Y +B Z +A X +C Y +B Z +C Y +A Y +C X +B Z +A Z +B Z +B Y +B Y +B Y +B Z +B X +B Z +A Y +C Y +B Y +C X +C Y +B Y +B Z +C Y +C X +B Y +B Z +B Y +C Y +B Y +A X +C X +C X +B Z +B Z +B Y +B X +A X +B Y +A Z +A X +C Z +B Z +C X +C X +A Z +B Z +B Z +A Z +B Y +C X +C X +B X +C X +C Y +C X +B Z +A X +C X +B Y +C Z +A Y +B Z +C Y +A Y +B Y +B Y +B Z +B Z +C X +B Z +A X +C X +B Z +C X +C X +C X +A X +B X +A Z +B Z +A X +B X +C X +B Z +A Z +B Z +A Z +C X +C X +C X +C Y +B X +B Z +B Z +B Y +A Y +C Z +A X +B Y +C Y +B Z +B Z +B Z +B Z +C Y +B Y +B Z +B Z +C X +A Z +B Y +A Y +B Y +C Z +B X +C Y +B Z +C Y +C X +B Y +B Z +C Z +A Z +C Y +B Z +A X +C X +B Y +B Z +B X +C X +B Z +C Y +C X +C Z +B Y +C X +B Y +B Y +A X +C X +B Y +B X +C Z +C X +B Z +B Y +C Y +B Z +C Y +C Y +C Z +B Z +C Z +A Y +B X +B Z +C X +B Z +B X +B X +C Z +C Y +C Z +C X +B Y +C X +A X +B Y +B Y +C Y +C X +A Z +B Z +B Z +A Y +B Z +A X +C X +A Z +C X +B Y +C X +C X +A Y +A Z +B Z +A X +A X +B X +C X +C Z +B Y +A Y +B Y +A Z +B Z +A Y +B Z +C X +B Z +C X +C X +A Y +C X +C X +B Y +A Z +B Y +B Z +B Z +B Z +B Z +B Y +B Z +B Z +C X +B Z +C X +C Y +C Y +B Y +C Y +C X +A Z +B Y +A Z +B Y +C X +B Y +B X +B Z +B Y +B Y +B Z +C Z +B Z +B X +C X +B Z +C X +C X +A X +C X +B Y +B X +C Y +C Y +C Z +B Z +A Z +C X +B Z +B X +A Z +C X +C Y +C X +C X +A X +B Z +B Z +A Y +C X +B Y +B X +A Y +B Y +C X +C Y +C X +B Y +B Z +C X +B Y +C X +C X +C X +C Y +B Z +B Z +A Y +B Y +A Z +B Z +C X +B X +A Y +C Y +C Z +A Z +C Y +C X +B X +A Z +A Z +B Y +C X +B Z +B Z +C Y +B Z +B Z +C X +B Z +C X +A Z +C Y +B X +C Y +A X +B Y +B Z +A X +C Y +C X +C Y +C X +B Z +C X +C X +A Y +B Z +B Y +B Z +C Y +A Z +B Z +C X +B Y +C X +C X +C Y +C Z +B Z +B X +C X +C X +B Y +C X +C Y +A X +C Y +C X +C X +A Y +B Y +B Y +A X +C Y +B Z +B Z +C Z +B Z +B X +B Y +B X +B X +C X +C Y +A Z +C Z +C Y +B Z +B Y +A Y +C X +B Z +A X +C Y +A Z +C X +B Y +C Y +A X +A Z +A Z +B X +B Y +B Y +C X +B X +B Z +B Z +B Y +B X +B X +C Y +C Y +B Y +C Y +C X +B Y +B X +A Z +C Z +C X +B X +B Y +C Y +C Y +A X +C X +A Z +C X +A Y +B Y +C Y +A Z +B Y +B Y +A X +B Z +B Y +B X +A Y +B Z +C Z +C X +A Z +C Y +A X +A Z +C X +C Y +B Z +C X +B X +C Y +C X +B Z +C X +C X +B Y +B Y +C X +C X +B Y +C X +C Y +B Y +B X +C X +B Y +C Y +A Y +B Y +B Y +B Z +B Y +B X +A Y +C Y +C X +C Z +A Z +C X +A Z +C X +A Y +B Z +C Z +C Y +B Z +B Z +A Z +A X +C X +C Y +C X +C Z +B Z +A X +A Y +B Z +B Z +A X +C X +C Y +B X +C X +C Z +A X +B Y +A X +C Z +B Z +C X +C X +C X +B X +C Y +B Z +A X +B Z +A X +C Y +C X +A Y +C X +A Z +B Y +C X +C Y +B Z +C X +B Y +B Z +B Y +B Y +C X +C X +B Y +C X +C Y +C X +C Y +A Z +C X +C Y +B X +A Z +B Y +C X +C X +C Z +B Z +B Z +B X +C Z +B Z +B Z +C X +C X +C X +B X +B Z +B Z +C X +C X +C X +A X +C X +C Y +A Y +B X +A X +A Z +A Y +C X +B X +C Y +C X +C Y +C X +A X +B Z +A X +A X +B Z +C X +B Y +C X +B Y +B Z +C X +C Y +C Z +C X +C X +C X +C X +B Y +C Z +A Z +B Z +B Z +C X +C Z +B X +B Z +A Z +B Z +C Z +C X +C Y +B X +C Y +C Y +C X +B X +B X +C Y +C X +B Y +C Y +C X +B Z +B Z +A Y +A Z +C X +B Z +C X +A Z +B Z +C X +C X +C X +B Z +C X +B Y +B Z +A X +B Y +B Z +B X +C Y +A Z +B Z +C Y +C Y +C X +B Z +C X +C X +C X +C Y +A Z +C Z +B X +B Y +B Y +B Z +C Y +B Z +B Z +C Y +C X +B X +C Y \ No newline at end of file diff --git a/input/day2_ex.txt b/input/day2_ex.txt new file mode 100644 index 0000000..25097e8 --- /dev/null +++ b/input/day2_ex.txt @@ -0,0 +1,3 @@ +A Y +B X +C Z \ No newline at end of file diff --git a/input/day3.txt b/input/day3.txt new file mode 100644 index 0000000..691664a --- /dev/null +++ b/input/day3.txt @@ -0,0 +1,300 @@ +sfDRhjhHsHhgWPJvPmmQnmPqnW +pTddGVwcpMTTCdnQJqqQqqqVtVms +MdZCZGdcrCNRFZRhFssL +CttWnSnNfSnCHsWrTlTPPpPCTRrLpl +DgqqghjqJBVgDMTPGVlRGwbfLLGP +cgqBBhjqcBdMcWQcQNnNzsfv +lnDWMgTLlTFlHHgDDgngWFnlBWNcBQrdjcrrdQrPBrdjhWhj +JqSVRRVmmRqJJbZGGJqJvbmBNcjPNQNssQPhSSdwPwwwQr +bCRJqGJJmzmJZRCmFNTLTttTzfFfLglf +SPWvWMvCSPcjzjDbcwfjTl +lLNRNLqhhQVQJlRjrjrDwTzzqzzfrb +GRnRVhRJLFnnhtJQNVdLdLgWCmmZlMlgSCSWSgpZtPBM +pTGFrLFTFWFprLDBmLbSbtmBDb +MqjwqJwZlqJjHlqjHHPmSbsffDmsStDnHnQmsm +ZPJjVPZbVMRRPZwMJZVMNJMcGWpWFcWFFNFGrWTzWzFrzG +MffZZtMTnTtSZLdfgSMtCHSbmWsGwbHGSqvmCqWb +lzpQhrhphhlzDDhRPmBvqHGRbBbwbbssCB +JJljpvhFrrjhptnddMJfdtgnMT +drCtpNLCLpTpJSdswQhvDbHZHDLDHQ +WmWgBWRcRzVVWVBgBBnnlfgWHjmvjQhwbbbshQvZDQQjsHZC +fqBzggWPPzBWBzffcfnMJdtFtrpqrGMpdCCTdM +JwJWqNBNNdzzBSzGsqbdNJbVMpptPmZMrVZrrZMtPmPwDp +THgfgffffHRhQRLVMGVQmGtLDGmM +TjGchhlHhGfhRHgRgWJSqzJWWlqNSzsWSJ +dNmPlzdvdspsFWwQmG +bhZSbVJBJnLNTnwWVHMGwQsGMFFw +RnnbbTnSnSSTTnLfRCCPqDPDNDlfCfDDcr +lhhTcnPchPPHCCStwWTHbS +GDRFNqlQJsGJqGJDqVNsqssDQBSZWHQBCZHHwbZbtHtwCbZW +RNJrFJFJDrmqsVjNmDvrvfzfffcvdpMrvlfh +DtLdNGHNfwBJQwgCrncgpSpcnlfC +sGqWPMPTvPPhTjjsqRqPvSlzFFpjnnSrjczprgllFF +vVPGPGMbPGqTRWsMqZhqvbZNLLmLQddQdmBtBwBNBwNB +ChVzhwpdpqHhtNmHHNHt +QsjGTQcTWQjfjbssQDPmHgfrrVrPZnntZD +jTGJSGvWJwqlvlCBqV +pRVcSRffTPfBWfNVfWBWdJdwhvvwGjjFmGvhLTdh +qsrHqtbDZqsnsZqCQDtHnQQLwFvJFhGJwddvwLcCwJJJdv +sgcqHnzqqzgnHnqrstZzqsnSPllRlVVSNpWVNVRgMBlVPW +WRQTtHrTrrDRvQDHrbtJlpdhLdGsDllfspLpphhs +GzCSqCSmSmVSpsljphlpsL +gVwCVGzmNmCNRQTvJQJHnvwQ +psBDsswNjBcqtHtsTHsqtM +vQrPqZPmvgQZrfgmPrfJQlLvnLzVHLnSnnTLTnnHMt +PRCJRPgmqrmZmmqQQDDRwwNwjwDwpFjDDW +VtBgCqbVjPbSbHtPRdrssZMFZlrRsBRw +LzWmhcDqTDvnDWTFMrwRvwFrGZdGlZ +zJLczJDnWDpDNzmDczWLzWzWNCbbttHPCHbSVbqgHSCjffQf +TjTfvJjjvcjTQcDzMDfQTLLbLgVVVhMrWWblghbbLN +dZHFSpqpqpbWrhhlWh +dFwPBHqFSqwZSmZmSlqZjTvvJTmzcJsTTTjfvsfQ +qqqNTlfjzbMGJlHMSZtZzZgRZDgZDzdS +nLCCVVcmgCdZdSlg +cmQscBVpFsppsVlffQGJHjlWHJGq +whwVGGZhVLwhsFFDCTrDccCctrcctL +CzSSvPSzTBStSWND +HllCHvHJPPqjCPvbfdvvbsmhdRRRsmZhsRdMFQMRFQ +gFCfCVfCsLCftsBsDbSHrbJRJJtrmrddrd +hqQpqWhlNlpMlppfdTRhmbmTdbdHJH +NGvvjvpvpfGgGGDCZZBg +rmBtgdddtqmmrqBGbLGJlmctWWvbNzvfpsVVfzzSVSTsWNpz +RPDRjMhDFljvsvzlSs +wDChhnCQwDwmgJclqrgm +WHrrDbWHQPzNrrRVMQJMQGvvsvvjnDLvfsjsvwfGws +dhdhZhcphZZZmtFFTcZSmcZsnfqjLRnngnpwnGfqfvvnRs +FZcZhtmhFCttldFlSSmlSthQJzNVMbRPWWPJzrbbJCNMPH +wMFBpvTppLpwfNfjggmNmGTj +ddSDDbGHnRDQDZRHSZSdRZDQzjjrzNNNfnmNrllhgglhfgWg +bCQqsJqGDZCHbppwvtVMMvJcLL +pSpSVdLDFCvDDvCFvJgwjsJbNtmtJgSjmj +ZcWNNBQfwjsttsbc +WNQMBflQQNGQrFpFVVRDHpCMDR +PfPvqLphWpWLtZSWpWLPjwJbmDwJbbDbmJVjPQ +lQQnRGMllMjswrmwJM +ggRGFFGGdlGGzFFzzFFcNBvSfLQZShZTtdLWWZWSWZSp +lCfgHsVHJDdswNRmsMRQ +vccvvFVrPcvQNRdnmqdR +rctPBrPBTTpPFBLZZcCCgVHJHVjjbLHfCjfS +dfGdsGGrlFFlbWjfgblhJhLDLDDMLNvJNLLBnmLB +tSppwQQHSSVtwStSpZZVqRJmBDzLvwPmzJznBDDmLBBJ +cHvtpRSvptCRbbjrrcfjrWjf +BBdHdjgQdjMMsHJscFnrzLpLgznLFzcF +wvllmNmVvZfvmZWqcPptPztFSWLFGrrFnt +ZbCvqqmNvflfVTbZfNllsjHdjdhhHDTHRBJjjMsc +FNCPtPtgLFJwPwflFwSrLFcMczQZTbMVmzzVZMcNVVVb +DhRDdhpWQDZmzVSQ +vnhBSHppjRBHqpWvrPFtJLJlLvfLPF +nmcSnnWjmfCTcHPHJCvh +zdDdlrrzGFFLPtPhBBhH +NGNGrzrRrzphwwwMmqqfnsfZZNbSjQSN +lgznQGWQLQWlnSzHSQlwnlDhCbZhZhZChPChwDcDphcb +jTRvVVrMvmLCPNcNZhRNcD +jfftvsrVJLsVvJqsmfqjfjlQgzlQWFzHFGGBQgtFgnnH +sllpwssrsCwrTRgCHGCTcnZD +jjzJtSdhdzbJWhdQqLdzqSHmDZBGZmmcGGgBGTDRBQTD +SVjgVhgtbVzJPfFpvvNrNswV +StzdmmnnjSRRdhPPdZZd +VbTbCqFFMbZTFcNQLgRgQbvvRh +pGsqGGGfHGfZVffzwtrHnmJHllznrS +NLWJvtLjtLzBjNSvSMDCHfwHSlDMlSSHfZ +RTPTVmhpnprfcfgZwgRD +PnPGFhGsTphsFpdPnpVdmhwFvBJzbdWNtJJjtNJNjbvJtttN +RvmgjDqqjqRgZRMRDpQjQhWsbPLPFnPFFbVVLbdSbnPSvP +NwczHBrJTzcBJHrfWJBCJcrCdnPPPNSlLnsnbFnnLlbSFddS +rGJwCCCJHwBGGctGDtphQQMppQWZmRpD +RPhhSMqRccBDZPPPRhPcNZSzzTLJrWZLmVVQLWZdTQQJWL +nwggfwCvbjwvbwpzWLpWVLdrrrQVTm +vgnGGCsCtntbFsgqlRVMSqNVBDtPSc +mtstjJmvTNBcjRRCHCfH +gLpglwwlgHbZbgpgFrdBBBfdfSPBLSSrcS +GQGglGWWgMglQFHgbmTmNtDqnDDVJMDMNJ +ZMbBZfvVfFfBbMvfMhgbfDsrSTTszcldmTTPmcPFDz +QqQQnwrqWQpwRWWpWwJRwNzTTSPpzPPdTPpSPmdSscmS +GjjtJRWtwGQjRZVChZMjVCrMMf +fJNPTvDPTpHHTPwvjNNHDfTWthhgQQGdBddtlvMsMQMvQh +rFbZVZrLmLdGrrhMBQWg +FmnzVRFLqVqqVLVRRFZSFmTwfHHjHCNCCDGwjnCDDfNH +gQHHQJgCnNJnQFQPRbDQzLRR +mwrdpctWtrMvvrrWwGMmGWWPLzFFLSbLnDFsLPdDFbZRLz +vGcmGwBBMGtmmrvlMrGlqNghlVjCCnTHHCHgCCjh +LmLvVjVjsrmrtmmr +tfcnbScRnlMZtHQPCgSQssPdHC +RGGGGnRfcwnGbbJRBRcwJfnGtBDhhVptNhDvLLhVvvjBWNvT +dZWNQZgQbbNvdWGgZvbTfLrjtrPlGJfrLqLJlj +TMmDpwzmVMHpBLfrcccMfqLjct +SwnSBTDDTwwzwnnsFSZdRNbQZWRvgSCvbQ +WPgZgQLLbMgdBrdnGqqfdhVVvR +HzssNTzwlwHHcczwFjMFHjVGrqRqnVThVqrGrGTRqvrf +zFzcHFNlzJBLgMQLJCZL +nPLNcWtNtlLMccLlWdTjzzbBfBQSzqzBqPqS +RbbDZZrGRJhJjgJQSjCfqQCC +rrmRbDDwvZDpprbGrbDvtctlVVVHvdtlcMtWHMHV +DWrZJrQjWwFcrhzVzbpmpcVqhb +MFnFHMNSqbMpMMmG +FNngNRBRCgnHCCHRPvLNdgJWwJDlJJDssZDLWWlWQlsl +BQqNsGrbBCNbNCrMpGpbHhthRCDRDRJCmDVRhRJP +nfvWvcnSWncSTdzzFLJtRmhHmPPVPVTwwHHtTh +WfLfnfSJZJvdLFZWngfBMGMppGMrNBbGMpZjrj +rccMjBMVJcjjjNNqmmCf +LLspTTGsTGntsntTFwnNNfFqQmmNgNqfNQmZvQ +tpDTwlGDTGPPsbtsLsnnqGTJzJrJBzHzMVrMRzBMlShVBR +PsrNPRjjPbjzjLRWLbjmvtCnMntnpfmtNZNCNv +dDlfwwJllhJTcllScSCQvmtCnmtCmQmQmG +TTFcdhJwhBFfwJJHhdchVclrsbWsbzqLgbzrrjgVRgsqgW +vvcvvDJFcDZPTzwfcwSLczzScz +VNnnVVsqGNntsqtBRblqBndSfzCCRzwRfCHSjdfSjzSH +pppsMVlGGhhrZwMMDP +LltNHMZNHMfNnfgtLHWWbhWjcblSbVbcTWVP +vFmCZsqRRBqrVPWsWTWPWb +mQBqJRdqQBqQzzRQztgLgntGZttddLMggw +ZTCCrCWfGLGBWSwHvHHmHvmTTH +bllhnsbjDlqFfqjhnFRppwmvJppmpRRwMNSmmw +FlnFDjdtqhDdfZZBrtBrrPLt +CRCTHHJcCmJgTSTRcSMcRMVstssSrtprppVFtdrdspNb +jjllnvgBLqdsGprtqtFG +vQjzWnWZWjBLhjgwcccRJgZPCmJm +VRNmBBRNRFcCRcFVRSVSqZLLvvlLqvLfzfMhjJLC +TdHsHbDsbHMJLqlLzl +bgQGsgWWGGgbDgwGzBNSFrFtVSmwRRNFtn +pCCggQPPzWnvlDcWVHGJcNBl +LhsLMrwwGlnMBlNG +mmhwZmqSLwjLttnFbvgFTpPtPtgFCz +TtZSJzFZhZzTFcgFFcmRRmJJQllCHvPshVQsCrshsCssHVHW +GjGGDGqdGfbpDBjMdjpBjBNbVHtsWWPHlMlrrrrWWlVlVsCs +dBdDdfqLdBjjFRFScRStmLnL +GtVppGGPbVgTVFQrZzfrJfJJtMJr +DslmNmLsnmNHNNnnqQRZSJSQfqrJzSJn +BNljDHsHlvhmBshDljWsDWlHdgvpVTFggVgGcTTpvFPTzGCV +GRcnTRtcQTcBTsNtpvhFCmmFhZvFPC +bBJMgqWfdwBJfMPPPmvPqhmjvvPC +SMJMdJbdfwJgVglMWWVdcQnBzSQDzGGQzRQDTQSB +mvjVzLgTzVzvVjJrJgrlMhZRFTtRlRhMRRRtFZ +HGqnNNqfnHNGGfCHndBqnqfFlcppsJMZplMFpMtlscRlpC +qSnPGqqbnSdVrvQrrSJjSV +lWFSWZZvVqnqfnSrJzMcPDjJBJcBMPFJ +NGppNgHdHbRsHPbsgGspTwHTMcmMDdJMMmzBDcMBMDQmjMBd +TGGLRGwHsGtpHgHpNbpttwrvCnvCrqSSLvWqPqSSnWvn +jwcqBNNdZLjSfvPdddRlfb +CDVmsgMHCnnDnhVghmDnDCzRRrSrbrlTbsSTlzzlvzPb +gCCFmCWDnChGCFHnGCLBcwwjvZQZNtGqqNZc +LBDcNstdNJscccVDhLHNDHVtFvdldlFvCSnSvjSSbblgvZjF +rWznQqGMMrmmRZbbwvSFgjwbwm +RQnTQfWqqTzTLJJLVtBTsc +SvwCTHqCqqqHtwtnnHHDtWgrBQLzzVLLzSQVFhbrSFLL +cZmPNmPJdmPjPdcclRPPdhBCFVVVrQzQCCLbcgVbBV +fNlmfZfpfWMCtGGpnM +bSNssNssbPHVccPhclPGpP +ffQfZdZZBDDZgLvhmhzVmVppmlpGgh +jdQQQJRljSFFTWCT +lvlLtvnhnfvMgtrvWjmTmPPzjHcrmdcjdd +qCbssCJbppQZQbRJDQSZCJRpzhmcQjdcTBmmGzmdcmjGmdmT +SqwSbJZSpwwFJFDDbqtNVMwVMMlVNgNVlLhV +DqGFQGNMGMQwCcgtCJcr +sVfjWlzzVsmzVZsdVlHrhjppcgpjrhpphcSJ +LRdLsZBWWmlZldZRmzPDvDTTDMGTPFPvBTTc +jzzzpjgBzTDQQHPH +gLLtZVdCdsLfnbZCbdZtHDfHTJJPPmJJfmHQDJqD +bVtWndLtcZgnhsvMSBrMFrvBWNrB +sfqhLDcqfqRRqQhQRqMcvlJpJwFgzwpjplwbgpwzLz +CrGttnhTWtmSnGrtTtSCZGFzbgHHFFFjljHjZHHFwgwl +mBnrrTmWWCGStVCmMcDPcPBqcsRhcvPR +GLZLBNrGZdGGVgMVJVhnvn +dmWlcqcQMWCJVhMn +cdpPqtQbcHlmQjmZswFfTRFpBTfwwT +ZhtZpvbnbpPbtLHLvdsNdcRLNd +jDDjlCflGwsHfdrfTLrrdN +MzmljBMBWPtsbtSQtW +GHrzPSrNLFnMtSBZjZBB +WWbfDmVmwmmlbVDldWslNnBMJJNZZJCtJJJn +vwDfffVvmDwdTvDRQvpLNpLpcRFpphhHLPHg +scsTslgcnCTCScSTcqLLWlFWLLqbGvRbpL +NZMBdBPtNbbrLGqqqGvqZF +NttdbhMPfjQfNtbMbMmNjhNcCzczSSCSJTSzTCScnfnzwC +pjdjCGGGWPCMSDfS +JhFMFcrgBHPnSnWFWDDn +HVBBJctBccghsJhgrbwLGTTdtjLdbmTMMb +DtGHgDPfGfPhfLwNWSSJQcpHcr +dvlMCzdnMRFCCTjnZNpNQJcSbrWzrpSQWS +TVvFJJMjJdlMvRvMClllZZgPtPGsftfDqtGfVGsGtqqq +jSmmcjmJqcBgwmWMCLLzCsMz +TnTQVDGQTpZGNQHDZDHHQDwsCCdLrflsrCVzVrwWzwrr +zDFpppnNQtnTQQvZZZNvnhqqjtRccRbgqqbSSSjPRg +FwClNSwCFstWZLDLvhvjvtjhhD +TmsHmsmrggzmqnnGGvPGjTbbRGBhbB +cHVqgcrVzrQqzHmMcrMnczzcWFVCCFNJZWJZswwFCZWwffwS +mzbsmbmLRCZTRbSJFvPLPJPJpJffcP +QqWqNVNNNllnnWTglqTVlGNPJDvwcJpwfwccPgccPJDfJF +HMGnNMltqGMjHGqMzmTSmzTsRSszSm +qlGDfljllCTgqCTvCDfBHHQsbrSZZHSHWtvWZB +NzpnNpRnLLwRpdwpVhtqQbSbsWQWbSWnrrnH +cFqwFNpLdVcDJlDgccTD +BRqjnSBNBpRHHpjpBSnHnRBQfQzzCvzWrsWCTvfsvCsCCsfC +ZMVbhqbMdlbLTdsWvfPdPC +hlZVDMZcwJNSgjJgJFnq +CZwZssQQZrmsCmNNDpDGFblclD +HMjWMbBVfnnbMbnzMpFhlNSNFFSDcDGSzN +LnLLqjnBMjMngHbnWrTgZsCsgZvvvQrvQs +RCFCCJQbCQcprRlHHPpHhd +tWWLwvswfvZshgqDpdpBgfdf +mZtvZtMpjZzwWFjJTcQQbjjnSQ +fBfVwtttLDFctDtwFPWfTppWfmHCHdJhdChT +bGMRsbsvMQSSzMzZSNzsZvRNWTZJlmgZTJJdhhmppHTJCgTg +jssjNSSGMsQHbsRvHNPjtDcDcLPPPPDwLDDV +pClhQjJccrpbpqHhMhVhSMqHPt +dBZGZdgBzRsBsvMwGGVPVqMGwtVH +ZvDddZvDBdDdDmgCmVmbbCNpCCbljW +DTMCpdCnwRDwdfMCDDCssfZmGrBrjpttjrNrgctmGpGr +VVqJQgSSWzhPGGrPtNNQtm +bFvhgWzHJlDdffswTvRd +jwCCPPTtCswCCNTsqRNbMqQMVvVzMMMQSGvQqn +hprHlmFcHcdhWWLchZzHrLMvvnBvJJSBJMVMnnmMnMMJ +WppLcZdHWHplZWlDHhHTfzRzCCsTTtNNgtjgDw +vhmDFcDZmczMrwcqrMrmDFrvggtVSWgtSNwsjBtNVSnBsjsS +dbbRJHbpCWBBpZVgSS +LZLdHlClPmqLGDvMDv +mFbWsvsJVtbbRwfTSP +BGpQllhLGqhplBGZBfLMTSTLwwfwMJwMPT +GlDnDpQZlZZpZBlpWDNcmrgrWmNdNJvc +zbtqTtHQbZZpqbPpvGJdvQdhrhQjdQGs +qDFLLSNqcWwsGhGDJh +LgBcfnFCSFnLccggSVCVtHZlpqPPtTRMftHMbMzb +hzrrWnzRZRnbWVRzjcRHMDdqqQdNMHqHQQjlHM +sGCpCtppBfCTgwBBCwPBCssQqMQvNlSMMQDQNqHGHvDSbQ +tpLFPgfbCsfbzzcnJhRhZLhc +qzzGqfpFvWFmRSPjPjRP +cwwVssBMtNMNLngstgVBnrsPmHSJJmjllhQdQldmhdrjQJ +nDVSsLwcVcMnBGzTDDCvpvfzGT +bcTbbcZGZLPgTMWZpLLDQnrvPVnVmmjmRPFVrF +HJCJqlzBdsSjzCJRmlrlrnVQQDFnVF +BfwffNdNswLtbWbNcpjt +smJwSNNFMzFNDrvbrbfJHvbl +BRQjqZQcBhrbTsbTnfcn +ZLQRZRBjjPWSsmCdSWMgSN +NhwlDpbWggdSBvBggLFg +fRrZsVfjqljmsQQVmmsnFMFSBLLRvFTFMBSvFF +QfqVVzcsQmcQqrcsNwzzzPphHlwNppPH +nnFdsjVdmpBsBVFHzjpvlTfQdPcQQPGPcvlGPv +DWMDCCWbNJhLtMgJMNLgtMgQflZQlfQGjZZhQZGhTfQcQP +rCrtJJgLLMbgDgMDWNRrWRnzsjpFzBzSHmmqHmqnHH +rmjjJmmdwSmGhdsjJtsgGNzFWQFnBFVWHdFQcLLcNz +RCCbfRlvvPfvCTnHLLnNbNLczHnQ +lqZTllRRpDMlpfZRvgQpSmwwtggQjJgtpS +LDsGvTSSsswCwTrLZDqQWHMWbphlHMpGGpQz +RRPfPRccBdVjPcFlpMpMQWzMWfpF +RjPRjRtczcNBJRSCtLDTvTSDCCST +pqQNgNnSntwgqzzQCzNwCNBRcWtBjZcZGrBMcHMGvWcr +mmJdJPFVbJbPPGZbMRbvvrjcMj +lTMVVlLPfLNQhpgqLSLn +HlBHFrgBvlfzFzqvnvFqpCJbJfQpQpLcmhbcmtmm +jDjPGsRRTMMPjdJmjmLpCLth +MRMZMWsNpFFFVFHW +RGgwWcppGSWcWSRWmGdWcttHQFJHfbQwBQJTJQBQfJ +njjZZCMlCZjqMBFbJQZHJHBQft +DsjCPDDvjFNsMNjNqpGspcsGSmcpccrGWS +cVwMZGVZwHNPgPwRZwHttThlHllvlzQpptzppl +DsCWdqLdDCnfJLSCqsqWRsBdlhjlhzlttzQhhtvlhnhhhbzT +JCWWRWCrLDDdBdLsSsLLSCrCNZMVcmMZMFwMZwNZPZVGFPmr +hhPzDzPhPNbfpzhBbdNbDhttzqWtwttHWwntjqmwmWFm +LgGZSdMMrgTLrZLdgLSgsGTFFjrWtFFmmmFtWjqHFnFtjn +vZgdLvZLZQLRQZQQdMZLdQvVpRhNNPfJDbcBbbhVNJNNhf \ No newline at end of file diff --git a/input/day3_ex.txt b/input/day3_ex.txt new file mode 100644 index 0000000..9919ffa --- /dev/null +++ b/input/day3_ex.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw \ No newline at end of file diff --git a/src/day1.rs b/src/day1.rs new file mode 100644 index 0000000..8aa966b --- /dev/null +++ b/src/day1.rs @@ -0,0 +1,27 @@ +struct Foo { + acc: u32, + max: [u32;3], +} + +pub fn run(input: String) { + let init = Foo{ + acc: 0, + max: [0,0,0], + }; + let res = input.lines().fold(init, |foo, line| { + return if line.is_empty() { + let mut arr = [foo.acc, foo.max[0], foo.max[1], foo.max[2]]; + arr.sort(); + Foo { + acc: 0, + max: [arr[1], arr[2], arr[3]], + } + } else { + Foo { + acc: foo.acc + line.parse::().expect("input line wasn't a u32!"), + max: foo.max, + } + } + }); + println!("day 1: {}", res.max.into_iter().sum::()); +} \ No newline at end of file diff --git a/src/day2.rs b/src/day2.rs new file mode 100644 index 0000000..15a99de --- /dev/null +++ b/src/day2.rs @@ -0,0 +1,124 @@ +// Accumulator structure... +// parse each line + +use simple_error::{SimpleError,bail}; + +#[derive(PartialEq)] +enum Move{ Rock, Paper, Scissors } +enum Res { Win, Draw, Loss } + +fn parse_m1(c: char) -> Result { + match c { + 'A' => Ok(Move::Rock), + 'B' => Ok(Move::Paper), + 'C' => Ok(Move::Scissors), + _ => bail!("invalid character {}", c) + } +} +// fn parse_m2(c: char) -> Result { +// match c { +// 'X' => Ok(Move::Rock), +// 'Y' => Ok(Move::Paper), +// 'Z' => Ok(Move::Scissors), +// _ => bail!("invalid character {}", c) +// } +// } +fn parse_req_res(c: char) -> Result { + match c { + 'X' => Ok(Res::Loss), + 'Y' => Ok(Res::Draw), + 'Z' => Ok(Res::Win), + _ => bail!("invalid character {}", c) + } +} +// fn win(opp: Move, you: Move) -> Res { +// match opp { +// Move::Rock => match you { +// Move::Rock => Res::Draw, +// Move::Paper => Res::Win, +// Move::Scissors => Res::Loss, +// }, +// Move::Paper => match you { +// Move::Rock => Res::Loss, +// Move::Paper => Res::Draw, +// Move::Scissors => Res::Win, +// }, +// Move::Scissors => match you { +// Move::Rock => Res::Win, +// Move::Paper => Res::Loss, +// Move::Scissors => Res::Draw, +// } +// } +// } +fn calc_req_move(opp: Move, req_res: Res) -> Move { + match req_res { + Res::Win => match opp { + Move::Rock => Move::Paper, + Move::Paper => Move::Scissors, + Move::Scissors => Move::Rock + } + Res::Draw => opp, + Res::Loss => match opp { + Move::Rock => Move::Scissors, + Move::Paper => Move::Rock, + Move::Scissors => Move::Paper + } + } +} + +// fn score(opp: Move, you: Move) -> u32 { +// let ms: u32 = match you { +// Move::Rock => 1, +// Move::Paper => 2, +// Move::Scissors => 3, +// }; +// let ws: u32 = match win(opp, you) { +// Res::Win => 6, +// Res::Draw => 3, +// Res::Loss => 0, +// }; +// return ms+ws; +// } +fn score(opp: Move, req_res: Res) -> u32 { + let ws: u32 = match req_res { + Res::Win => 6, + Res::Draw => 3, + Res::Loss => 0, + }; + let mm = calc_req_move(opp, req_res); + let ms: u32 = match mm { + Move::Rock => 1, + Move::Paper => 2, + Move::Scissors => 3, + }; + return ms+ws; +} + +// fn parse_turn(line: &str) -> Result<(Move, Move), SimpleError> { +// let mut lc = line.chars(); +// let e1: SimpleError = SimpleError::new("not enough characters in input!"); +// let c1 = lc.next().ok_or(e1.clone())?; +// lc.next().ok_or(e1.clone())?; +// let c2 = lc.next().ok_or(e1.clone())?; +// let m_opp = parse_m1(c1)?; +// let m_you = parse_m2(c2)?; +// Ok((m_opp, m_you)) +// } +fn parse_turn(line: &str) -> Result<(Move, Res), SimpleError> { + let mut lc = line.chars(); + let e1: SimpleError = SimpleError::new("not enough characters in input!"); + let c1 = lc.next().ok_or(e1.clone())?; + lc.next().ok_or(e1.clone())?; + let c2 = lc.next().ok_or(e1.clone())?; + let m_opp = parse_m1(c1)?; + let req_res = parse_req_res(c2)?; + Ok((m_opp, req_res)) +} + +pub fn run(input: String) { + let score: u32 = input.lines().map(|line| { + let (m_opp, m_you) = parse_turn(line).expect("invalid input line!"); + score(m_opp, m_you) + }).sum::(); + println!("day 2: {}", score); +} \ No newline at end of file diff --git a/src/day3.rs b/src/day3.rs new file mode 100644 index 0000000..5c01b7a --- /dev/null +++ b/src/day3.rs @@ -0,0 +1,46 @@ +use std::{collections::{HashSet, HashMap}}; + +pub fn run(input: String) { + if !input.is_ascii() { + panic!("input wasn't ascii, character calculations won't work!"); + } + + let scores_table = make_scores_table(); + + let ll: Vec<&str> = input.lines().collect(); + + let score = ll.chunks(3).map(|gm| { + let init: Option> = None; + let lb: Vec = gm.into_iter().fold(init, |maybe_acc, m| { + let cs: HashSet = m.chars().collect(); + if let Some(acc) = maybe_acc { + let rr: HashSet = acc.intersection(&cs).map(|x| {x.clone()}).collect(); + Some(rr) + } else { + Some(cs) + } + }) + .expect("didn't get any group members??!") + .into_iter().collect(); + let ct = lb.len(); + if ct != 1 { + panic!("Couldn't find exactly one badge for group! found {}, {:?}", ct, gm); + } + let ch = lb.into_iter().next().expect("foo"); + scores_table.get(&ch).expect(format!("couldn't find score for char {}", ch).as_str()) + }).sum::(); + println!("Day 3: {}", score); +} + +fn make_scores_table() -> HashMap { + let mut scores_table: HashMap = HashMap::new(); + let r1 = 'a'..='z'; + for (ix, ch) in r1.enumerate() { + scores_table.insert(ch, (ix as u32)+1); + } + let r2 = 'A'..='Z'; + for (ix, ch) in r2.enumerate() { + scores_table.insert(ch, (ix as u32)+27); + } + scores_table +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..79c5970 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,11 @@ +use std::fs; + +mod day1; +mod day2; +mod day3; + +fn main() { + day1::run(fs::read_to_string("input/day1.txt").expect("Failed to read input file!")); + day2::run(fs::read_to_string("input/day2.txt").expect("Failed to read input file!")); + day3::run(fs::read_to_string("input/day3.txt").expect("Failed to read input file!")); +} -- cgit v1.2.3-ZIG