From 10af8f400de0f24f073309ef0ea27cca786cb832 Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Fri, 9 Dec 2022 14:26:32 -0600 Subject: refactor!: move crate to workspace crate with root lib crate --- Cargo.lock | 19 +- Cargo.toml | 14 +- aoc_2022/Cargo.lock | 23 + aoc_2022/Cargo.toml | 11 + aoc_2022/input/day_1.txt | 2249 +++++++++++++++++++++++++++++++++++ aoc_2022/input/day_2.txt | 2500 +++++++++++++++++++++++++++++++++++++++ aoc_2022/input/day_3.txt | 300 +++++ aoc_2022/input/day_4.txt | 1000 ++++++++++++++++ aoc_2022/input/day_5.txt | 512 ++++++++ aoc_2022/input/day_6.txt | 1 + aoc_2022/input/day_7.txt | 1082 +++++++++++++++++ aoc_2022/input/day_8.txt | 99 ++ aoc_2022/src/day_1.rs | 36 + aoc_2022/src/day_2.rs | 170 +++ aoc_2022/src/day_3.rs | 122 ++ aoc_2022/src/day_4.rs | 74 ++ aoc_2022/src/day_5.rs | 212 ++++ aoc_2022/src/day_6.rs | 80 ++ aoc_2022/src/day_7.rs | 217 ++++ aoc_2022/src/day_8.rs | 326 +++++ aoc_2022/src/lib.rs | 11 + aoc_2022/src/main.rs | 19 + input/day_1.txt | 2249 ----------------------------------- input/day_1.txt:Zone.Identifier | 4 - input/day_2.txt | 2500 --------------------------------------- input/day_3.txt | 300 ----- input/day_4.txt | 1000 ---------------- input/day_5.txt | 512 -------- input/day_6.txt | 1 - input/day_7.txt | 1082 ----------------- input/day_8.txt | 99 -- src/day_1.rs | 36 - src/day_2.rs | 170 --- src/day_3.rs | 122 -- src/day_4.rs | 74 -- src/day_5.rs | 212 ---- src/day_6.rs | 80 -- src/day_7.rs | 217 ---- src/day_8.rs | 326 ----- src/lib.rs | 11 - src/main.rs | 18 - 41 files changed, 9069 insertions(+), 9021 deletions(-) create mode 100644 aoc_2022/Cargo.lock create mode 100644 aoc_2022/Cargo.toml create mode 100644 aoc_2022/input/day_1.txt create mode 100644 aoc_2022/input/day_2.txt create mode 100644 aoc_2022/input/day_3.txt create mode 100644 aoc_2022/input/day_4.txt create mode 100644 aoc_2022/input/day_5.txt create mode 100644 aoc_2022/input/day_6.txt create mode 100644 aoc_2022/input/day_7.txt create mode 100644 aoc_2022/input/day_8.txt create mode 100644 aoc_2022/src/day_1.rs create mode 100644 aoc_2022/src/day_2.rs create mode 100644 aoc_2022/src/day_3.rs create mode 100644 aoc_2022/src/day_4.rs create mode 100644 aoc_2022/src/day_5.rs create mode 100644 aoc_2022/src/day_6.rs create mode 100644 aoc_2022/src/day_7.rs create mode 100644 aoc_2022/src/day_8.rs create mode 100644 aoc_2022/src/lib.rs create mode 100644 aoc_2022/src/main.rs delete mode 100644 input/day_1.txt delete mode 100644 input/day_1.txt:Zone.Identifier delete mode 100644 input/day_2.txt delete mode 100644 input/day_3.txt delete mode 100644 input/day_4.txt delete mode 100644 input/day_5.txt delete mode 100644 input/day_6.txt delete mode 100644 input/day_7.txt delete mode 100644 input/day_8.txt delete mode 100644 src/day_1.rs delete mode 100644 src/day_2.rs delete mode 100644 src/day_3.rs delete mode 100644 src/day_4.rs delete mode 100644 src/day_5.rs delete mode 100644 src/day_6.rs delete mode 100644 src/day_7.rs delete mode 100644 src/day_8.rs delete mode 100644 src/main.rs diff --git a/Cargo.lock b/Cargo.lock index 2823f71..10d37c4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,7 +3,13 @@ version = 3 [[package]] -name = "advent_of_code_2022" +name = "anyhow" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" + +[[package]] +name = "aoc" version = "0.1.0" dependencies = [ "anyhow", @@ -11,10 +17,13 @@ dependencies = [ ] [[package]] -name = "anyhow" -version = "1.0.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" +name = "aoc_2022" +version = "0.1.0" +dependencies = [ + "anyhow", + "aoc", + "indoc", +] [[package]] name = "indoc" diff --git a/Cargo.toml b/Cargo.toml index 260bb83..13d3f5a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,10 +1,18 @@ [package] -name = "advent_of_code_2022" +name = "aoc" version = "0.1.0" edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +description = "Library used for Advent of Code solution crates" [dependencies] +anyhow = { workspace = true } +indoc = { workspace = true } + +[workspace] +members = ["aoc_2022"] +default-members = ["aoc_2022"] + +[workspace.dependencies] +aoc = { path = "." } anyhow = "1.0.66" indoc = "1.0.7" diff --git a/aoc_2022/Cargo.lock b/aoc_2022/Cargo.lock new file mode 100644 index 0000000..2823f71 --- /dev/null +++ b/aoc_2022/Cargo.lock @@ -0,0 +1,23 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "advent_of_code_2022" +version = "0.1.0" +dependencies = [ + "anyhow", + "indoc", +] + +[[package]] +name = "anyhow" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" + +[[package]] +name = "indoc" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adab1eaa3408fb7f0c777a73e7465fd5656136fc93b670eb6df3c88c2c1344e3" diff --git a/aoc_2022/Cargo.toml b/aoc_2022/Cargo.toml new file mode 100644 index 0000000..4bc060e --- /dev/null +++ b/aoc_2022/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "aoc_2022" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +aoc = { workspace = true } +anyhow = { workspace = true } +indoc = { workspace = true } diff --git a/aoc_2022/input/day_1.txt b/aoc_2022/input/day_1.txt new file mode 100644 index 0000000..e329ff7 --- /dev/null +++ b/aoc_2022/input/day_1.txt @@ -0,0 +1,2249 @@ +6110 +2550 +6915 +5699 +4954 +5093 +3141 +5939 +4177 +3544 +5438 +5391 +3019 + +4691 +6961 +7515 +4545 +11145 +8346 +9225 + +9005 +2121 +4267 +1808 +3305 +9701 +1419 + +7178 +4921 +6687 +1918 +4856 +4538 +2786 +5071 +2689 +1803 +5763 + +12515 +15649 +17846 +14135 + +3290 +2875 +1184 +3166 +3473 +1683 +2706 +6297 +2900 +1684 +4688 +3074 + +3729 +6105 +7107 +7027 +5390 +11429 +8245 + +13381 +12304 +20944 + +18485 + +2108 +5008 +5779 +3539 +1633 +3957 +5475 +1345 +1526 +1809 +4355 +3237 +5006 +2573 +4353 + +1212 +5163 +3415 +3937 +2300 +3454 +4499 +3970 +5106 +3476 +5231 +5849 +5685 +3991 + +4916 +3093 +4965 +1996 +3298 +3331 +3564 +4052 +2850 +6755 +5818 +5390 +1179 + +4494 +1573 +5304 +5702 +2908 +3673 +1518 +2821 +3399 +3680 +1994 +1781 +3453 +5262 +2024 + +2817 +4683 +3484 +4726 +5292 +5647 +1371 +3251 +4694 +2239 +5457 +3252 +2558 +3081 +4813 + +6143 +6010 +4636 +1540 +2351 +1114 +1075 +1411 +2683 +2107 +1695 +1554 +6147 +1861 + +10945 +8590 + +17590 +15122 +2075 + +66239 + +4958 +6507 +9535 +5538 +2204 +8401 +6005 + +12195 +22957 +21872 + +6147 +5264 +6686 +2662 +9266 +10561 +9894 +1225 + +4431 +13046 +1127 +18157 + +3535 +5094 +7349 +7820 +6967 +3345 +7631 +6795 +5954 +2901 + +6202 +4413 +6345 +1171 +4765 +3423 +4403 +2940 +6516 +5968 +1697 +1868 +5429 + +17229 +10458 +1601 + +4637 +1385 +3460 +1955 +4774 +2037 +6428 +1620 +4279 +3459 +6101 +1027 + +5038 +5499 +5468 +3265 +4014 +4694 +3766 +3548 +5761 +5042 +4874 +5590 +1852 +2250 +5945 + +9655 +2813 +13235 +4421 +5676 +4059 + +4273 +11798 +11018 +12068 +1284 +10417 +2918 + +1358 +6723 +3461 +1450 +3975 +4723 +1166 +6732 +6140 +8746 + +1489 +1442 +13133 +12668 +12772 + +4116 +5431 +4612 +7136 +7684 +10312 +1377 + +4022 +5063 +3069 +4147 +3274 +2114 +2369 +5722 +4159 +4074 +4971 +1046 +5899 +5525 +2131 + +2422 +3086 +7519 +3820 +5993 +6375 +8142 +2993 +7202 + +9855 +36690 + +20852 +24060 +8384 + +6991 +21756 +4202 + +4029 +13074 +8711 +9491 +3020 + +10546 +4261 +6345 +1451 +3556 +7848 +1083 +7119 + +6059 +1982 +2101 +5916 +6447 +4244 +6947 +4484 +4184 +3602 +3309 +5663 +1453 + +5997 +3063 +4466 +1905 +4055 +3405 +5462 +2120 +5155 +4597 +2516 + +5803 +2603 +8894 +4316 +3949 + +4439 +4652 +3348 +2196 +4186 +2850 +2218 +1721 +6827 +4768 +7358 + +3004 +3210 +1281 +4206 +3540 +6025 +4411 +4765 +1782 +7126 +5710 + +3985 +7018 +1713 +7565 +2192 +6903 +4399 +6537 +1072 +6393 +2184 + +3443 +1385 +1670 +5400 +6885 +5391 +7668 +1248 +6523 + +20403 +21090 +1281 + +2435 +4119 +3181 +1687 +5239 +3980 +1274 +4202 +4218 +4174 +3090 +1417 +4875 +4176 + +1224 +10021 +2363 +7798 +8380 +10136 +5749 + +13994 +6701 +8270 +2278 + +3164 +4130 +1407 +3510 +2551 +5144 +3011 +3557 +5410 +5019 +1912 +5889 +5356 +1139 + +7704 +5596 +11858 +6497 +10778 +8479 +4638 + +2717 +8274 +14760 +2591 +1135 + +3752 +6482 +5847 +2548 +5054 +6225 +4262 +6461 +4939 +4170 +5185 +1956 +3863 + +4014 +5392 +6117 +8551 +5182 +6040 +7659 +3460 +6445 +3731 + +5137 +8809 +9393 +10116 +7912 +8936 +2821 +5535 + +4838 +2062 +3104 +4446 +5603 +1617 +1578 +3740 +5059 +2471 +1718 +4530 +2747 +1932 +2029 + +56887 + +8805 +8089 +3794 +8073 +3530 +3522 +2420 +5049 +5619 + +1200 +2268 +5872 +8108 +1220 +8411 +5234 +4288 +1117 + +2379 +4275 +3508 +4889 +4640 +3905 +7002 +2263 +7093 +2288 +3270 + +6171 +19996 + +4067 +4754 +6380 +2843 +8385 +4201 +7631 +4387 +2599 +7088 + +1522 +2360 +2515 +3834 +3958 +6926 +8060 +5358 +4355 + +19530 + +7501 +21086 +2310 + +3561 +1159 +5630 +6114 +4612 +1408 +3502 +4956 +5184 +5842 +2132 +1483 + +5056 +9746 +4504 +9019 +9021 +10289 +7094 + +4750 +11314 + +8676 +6672 +11494 +11044 +5380 +8643 +4934 + +1521 +1632 +2978 +5738 +5740 +4229 +5228 +1590 +4375 +3152 +2841 +6278 +5895 + +2120 +13307 +11773 +5906 +7961 + +20546 + +32304 + +6126 +9197 +1407 +4821 +11686 +2911 +1809 + +11052 +9610 +13895 +10903 +2730 +9753 + +25478 +4681 + +4588 +7758 +7746 +4496 +1521 +5217 +4325 +2242 +5547 +6018 +2099 + +5440 +4951 +4044 +3481 +4718 +1442 +4919 +5198 +1032 +5857 +4014 +1844 +3141 +6081 +3480 + +1311 +7390 +5777 +8124 +7703 +2441 +1849 +6597 +6202 +7848 + +8348 +10633 +15815 +1855 +8177 + +8951 +2899 +11227 +8207 +6741 +2921 +7614 + +3537 +1838 +2686 +5037 +1760 +3175 +3339 +3698 +1591 +3917 +5608 +3296 +5990 + +11248 +12466 +8712 +17366 + +6204 +3307 +6487 +1816 +2964 +4185 +5876 +1960 +3272 +7154 + +4264 +12009 +10916 +2329 +15852 + +2918 +3111 +1397 +6901 +3637 +8521 +1613 +4646 +1275 + +2378 +3601 +2856 +7283 +6269 +4980 +5453 +6274 +6481 +6402 + +9498 + +5368 +5215 +4931 +2638 +4925 +8673 +9606 +9301 +3330 + +19237 + +3272 +3631 +10887 +8302 +5286 +3006 + +5278 +10984 +9411 +1960 +9757 +4346 + +3852 +6281 +5839 +4446 +4445 +5711 +4111 +3201 +3258 +1236 +6237 +5595 +1089 +3002 + +3075 +9388 +3756 +6115 +4759 +2877 +4662 +2003 + +4686 +4103 +4316 +6771 +1945 +1138 +2938 +5802 +8579 +2573 + +8798 +2461 +6245 +5287 +11798 +10103 +3027 + +10348 +18709 +13427 +6693 + +8050 +5154 +3149 +7498 +7688 +6110 +3508 +8476 + +5567 +4365 +2847 +6503 +5903 +3712 +5377 +6888 +5713 +3586 +1586 + +6705 +3204 +7685 +4453 +8534 +5651 +5065 +8081 +6133 +1149 + +4483 +4954 +4851 +3999 +4945 +1362 +4185 +3725 +2950 +5058 +2254 +1800 +1842 +4694 +3281 + +6208 +5547 +3600 +4001 +2231 +4922 +5790 +1948 +4573 +3413 +4322 +4293 +4824 +1527 + +29021 + +2898 +3348 +3531 +5600 +2971 +3338 +5408 +4321 +3717 +4008 +2507 +1941 +2752 +5526 +3739 + +2697 +5679 +1433 +6811 +3980 +4167 +6041 +4697 +2502 +6879 +2025 +4208 +1228 + +4445 +2147 +7149 +5364 +5550 +2898 +1065 +3657 +6576 +6055 +3931 +5395 + +1303 +3297 +4116 +4097 +3206 +4908 +3991 +3820 +5987 +2689 +1026 +4494 +5668 +2364 + +3759 +7034 +12531 +6043 +5183 +2198 + +4924 +2362 +2522 +4904 +6009 +1737 +6787 +6494 +5298 +2737 +3593 +4537 +1031 + +4021 +3441 +2569 +1275 +6548 +8416 +5307 +3190 +3818 +2723 + +8685 +7967 +7708 +11926 + +12403 +9683 +13631 +10653 +7314 + +7316 +3547 +1915 +3356 +1414 +1492 +4886 +5530 +4692 +3502 +6184 +3557 + +5851 +4399 +2012 +2190 +2617 +2159 +2862 +1893 +2469 +2989 +5449 +2108 +1048 +2542 +1284 + +3705 +3689 +3695 +3966 +1879 +2717 +4394 +2586 +7253 +2340 +7181 + +18748 +3187 +11786 + +4576 +3311 +6355 +9688 +1070 +9779 +10843 + +6286 +2030 +1457 +3321 +2340 +5372 +2472 +2688 +3481 +3520 +2017 +4052 +3613 + +8703 +3801 +5806 +1194 +9099 +8051 +6266 +4389 +2806 + +8497 +6721 +4559 +5379 +8359 +2283 +3251 +8600 +3045 +3892 + +5771 +4622 +6452 +2910 +1336 +2028 +4483 +2200 +1261 +7928 +4897 + +4063 +5564 +4386 +4480 +7427 +7328 +4097 +4660 +2058 +2435 +1404 + +1765 +4959 +3595 +5417 +2459 +3727 +1003 +3933 +2074 +3492 +5181 +2748 +2691 +4250 +2233 + +6427 +2023 +5347 +4376 +3351 +5329 +7656 +3114 +2242 +6535 +5010 + +6335 +1288 +1509 +5055 +6435 +4259 +3766 +5446 +2275 +5759 +1658 +5648 +6337 +3140 + +19523 +9958 +7466 +10185 + +5056 +3745 +6112 +3496 +2919 +3307 +10013 + +5709 +1141 +6752 +14817 +1570 + +5994 +19335 +17039 + +8057 +7193 +6660 +10996 +4355 +7284 +9163 + +7243 +13354 +3937 +12804 +8327 +8024 + +1665 +11179 +17488 + +6093 +6097 +1884 +5083 +9616 +5268 +5129 +6153 +1145 + +7401 +2094 +4488 +5499 +6029 +7359 +1952 +3834 +4051 +3015 +2400 +5203 + +1037 +5318 +2600 +1438 +1882 +1667 +2577 +4671 +4614 +5335 +4666 + +3209 +4139 +1011 +6467 +3874 +2866 +2997 +1588 +1474 +4173 +1393 +4486 + +6091 +3128 +6230 +3830 +3837 +6176 +2659 +3036 +5598 +3045 +5889 +1270 +5451 + +2284 +5647 +5472 +2536 +2632 +1354 +2409 +5948 +3176 +5061 +1342 +1929 +3111 +2807 +2756 + +4056 +6430 +16073 +15446 + +8687 + +2610 +15342 +3943 +14628 +3545 + +4230 +4793 +2361 +4513 +5144 +6035 +3039 +5388 +5081 +3138 +4288 +2933 +1584 +2471 + +9066 +2772 +8183 +12049 +3585 +8452 +6792 + +3243 +1533 +5460 +5187 +1851 +3515 +4662 +3355 +5089 +3764 +1723 +4719 +5292 +5615 +1794 + +8661 +16368 +6930 +11440 + +35648 + +5079 +13796 +11334 +4677 + +8876 +24018 +16839 + +5092 +3404 +5504 +1093 +2884 +3871 +1341 +1652 +6410 +2617 +5703 +5414 +3033 +4846 + +29773 + +9474 +7432 +8272 +2002 +2667 +2456 +8304 +6334 +7922 + +4886 +5478 +3204 +3276 +2449 +3768 +1075 +6172 +1986 +6177 +3934 +3968 +4794 +4506 + +13497 +14301 +13442 + +61887 + +5216 +2359 +5537 +12769 +12794 +6740 + +5664 +2729 +5686 +3513 +2411 +3689 +2650 +3459 +2400 +3676 +4652 +4985 +3850 +1949 +1900 + +2841 +5334 +1280 +5989 +6006 +3916 +1715 +5624 +1476 +1209 +3713 +1376 +2545 +5123 +3985 + +2390 +1661 +4703 +6098 +4512 +3216 +2999 +6252 +1394 +1895 +1913 +1801 +3159 + +3322 +11142 +10847 +3906 +1419 +2000 +7233 + +2702 +1048 +5466 +6814 +3528 +3644 +4044 +2019 +4490 +1737 +6813 +5015 + +7855 +9990 +8750 +8581 +2368 +9358 +1568 +7690 + +2953 +1038 +6875 +4560 +6581 +6293 +2047 +1900 +6416 +5569 +4654 +5415 +4408 + +3720 +2562 +2393 +4639 +3641 +2911 +1312 +2697 +6195 +6576 +3644 +3128 + +28955 +5123 + +8445 + +4703 +12165 +7074 + +11707 +13879 +7866 + +4800 +5449 +2036 +5941 +4559 +2548 +4644 +4543 +2322 +2036 +3908 +5780 +5345 +2549 +1751 + +7859 +10697 +10414 +8986 +1373 +3111 +7807 + +2938 +4802 +5235 +3940 +2567 +2461 +7133 +4883 +2447 +1032 +3587 +5788 + +3080 +13380 +7178 +6656 +10753 +11646 + +1948 +3803 +1627 +1426 +6886 +1633 +1545 +3274 +6768 +3241 +4031 + +15127 +1778 +14074 +11149 + +4026 +3948 +5822 +2855 +2093 +6113 +5983 +1709 +6000 +4552 +2594 +1152 +2799 +1401 + +3226 +9386 +6030 +7930 +6490 +5736 +1574 +2360 +3167 + +8084 +7950 +10634 +2320 +3186 +4598 +9171 +7892 + +4968 +10880 +13264 +11047 +12412 +3450 + +28780 +26728 + +7945 +1296 +1773 +5426 +7765 +1785 +2377 +2434 +7809 +4140 +3727 + +1308 +6148 +21591 + +23972 +19371 + +5256 +12843 +23975 + +5911 +1161 +4312 +2088 +7105 +3023 +3772 +1650 +5065 +2713 +4336 +5514 + +5847 +11518 +11799 +11015 +3026 +10915 +1483 + +21170 + +2317 +5499 +4732 +5102 +2989 +3648 +1868 +1910 +5775 +3761 +2119 +3636 +1272 +1199 +2256 + +7780 + +9298 +16719 +25032 + +22138 +34813 + +4414 +2839 +1057 +5746 +5992 +3241 +6411 +4296 +3151 +6393 +3580 +6848 +2757 + +2137 +2976 +13805 +10178 + +1209 +5133 +6097 +3798 +1191 +5846 +1664 +6348 +3490 +6995 + +5102 +1531 +2487 +5914 +9420 +7252 +5464 +5663 + +7279 +1823 +1050 +4389 +7430 +5169 +7345 +1029 +7268 +7171 +1084 +5147 + +7352 +4540 +2007 +10929 +11713 +10909 +1151 + +10392 +5900 +10100 +11267 +11785 +11833 +8224 + +52397 + +4210 +2185 +7522 +2334 +1478 +3920 +2883 +6788 +4548 +6152 +3280 + +3410 +5271 +2300 +1970 +3784 +3548 +1977 +3077 +3306 +1020 +2594 +6537 + +5309 +9473 +16702 + +7650 +13750 + +17582 +4937 +12672 + +29349 +20611 + +6546 +7623 +1911 +2747 +7617 +3987 +7752 +5852 +1233 +1540 +4073 + +5695 +3845 +4041 +8076 +9015 +4289 +4259 +9920 + +5573 +2607 +4056 +2369 +3969 +1080 +2130 +6473 +2130 +3372 +4051 +3963 +2606 +5906 + +26141 +19389 + +12853 +12859 +3938 +9501 +1818 +5496 + +6529 +5972 +9280 + +9836 +3884 +4956 +10149 +5736 +5586 +2755 + +17543 +8648 +17976 +13773 + +1694 +3739 +2053 +1096 +2150 +1489 +4221 +3229 +2995 +4264 +1196 +3597 +3499 +4516 +2236 + +5612 +6240 +4378 +1014 +2163 +1935 +3429 +2831 +4749 +4245 +2239 +4559 +1693 +5657 + +11226 +1962 +9824 +10528 +6845 +6882 +3890 + +1975 +2792 +8087 +1459 +3226 +2909 +1094 +7529 +8035 +3212 +3353 + +13079 +18234 + +5218 +4074 +1663 +7056 +1783 +1857 +5490 +3184 +6300 +6151 +3879 + +2316 +1182 +2366 +4076 +1226 +3753 +6822 +4650 +2065 +6703 +3732 +1622 + +4283 +6886 +1713 +7954 +1408 +8538 +8336 +7599 +2739 +4374 + +4884 +4508 +4068 +2780 +1107 +2157 +3272 +5580 +1487 +4923 +1167 +5056 +2323 +2094 +4311 + +3709 +1743 +3607 +4700 +5983 +6508 +7310 +4932 +2986 +7994 +4138 + +2564 +5468 +7511 +3466 +7763 +4015 +6306 +2291 +7884 +1256 +3286 + +26272 +18770 + +10655 +4092 +13958 +19758 + +4937 +2529 +6704 +11459 +9749 +5660 + +5757 +2813 +2548 +5686 +1350 +2079 +5652 +3366 +2101 +4620 +6250 +2971 +3762 +6068 + +22115 + +15523 +15141 +12498 +2271 + +2307 +5729 +1509 +3105 +3410 +3816 +4078 +5564 +4357 +2989 +6192 +1974 +5607 +6183 + +4548 +1955 +1227 +9884 +6622 +6663 +2549 + +34829 +10698 + +1891 +3378 +1535 +5895 +8254 +3232 +6831 +5472 +7545 +6751 + +2971 +2462 +8484 +3898 +1911 +7516 +1435 +7853 +6027 +6130 + +59206 + +7822 +1506 +13885 +1017 +5150 + +6677 +3808 +14470 +1962 + +2816 +8043 +1593 +4462 +7112 +8563 +9026 +1660 +5553 + +5282 +4451 +1256 +7336 +3724 +2212 +5895 +2488 +8009 +1457 +7634 + +9604 + +3927 +10103 +5636 +11401 +12234 + +11006 +17248 + +10936 +8651 +10252 +7868 +7295 +3070 +1520 + +12324 +5230 +3847 +9922 +5525 +6929 + +13863 +1248 +13247 +11387 +6677 +9255 + +23703 +8659 +10869 + +7358 +2431 +3112 +4743 +6684 +6343 +4335 +1058 +8303 +1262 + +9600 +1977 +4524 +12701 +7686 +1120 + +27377 +9632 + +10910 +14343 + +6305 +5171 +3950 +4167 +2806 +5576 +5066 +4874 +3260 +7138 +5510 +3732 + +20922 +8396 +4707 + +1965 +3603 +1494 +4544 +4911 +1179 +2335 +1333 +2831 +4394 +5038 +6068 +3449 +5419 + +4597 +3641 +5977 +3109 +5448 +5290 +3587 +3195 +4096 +4134 +6191 +6420 +3329 +5404 diff --git a/aoc_2022/input/day_2.txt b/aoc_2022/input/day_2.txt new file mode 100644 index 0000000..787ae71 --- /dev/null +++ b/aoc_2022/input/day_2.txt @@ -0,0 +1,2500 @@ +B Y +A Z +A Z +C Z +B Y +B Y +B X +B Z +C Z +B X +B Y +A Z +B Y +B Z +B Y +C Z +B Z +B Y +B Z +C Y +B Y +A Z +B Y +B Y +B Y +C Y +A Z +B Y +B X +A Z +B X +A Z +A Z +B Y +B Y +B X +A Z +B Y +B Z +C X +C X +B Y +B Y +B X +B X +C X +B X +A Z +B Y +B Y +C X +A Z +B Y +B Z +B X +B X +A Z +A X +B Y +B Y +B Z +C Z +B Z +B Z +B Z +A Z +A Z +B X +B X +B Y +B X +B X +C Z +C Z +A Z +A Y +A Z +B Z +A Z +B Y +C X +B X +C X +B Z +B Z +C Z +B Z +B X +C X +A Z +C X +B Z +A Y +C Z +B Y +C Y +B X +A X +B Y +B X +B X +B Z +B Y +A Z +B Z +B Y +B Y +A X +A Z +B X +B X +B X +B X +B Z +B Z +B Y +C X +A Z +A Z +B Y +B Z +B Y +A Z +B Z +A Z +A Z +C X +B Z +A Z +A Z +B Y +B Z +A Z +B Y +B Y +A Z +B Y +C X +B Z +B Y +B X +C X +B X +B X +B X +A Z +A Z +C Y +A Z +B Y +A Z +C X +B Z +B Z +C X +B Y +C X +B X +B X +C X +A Z +B Y +C X +B X +B Y +A Z +B Y +B Y +C X +B Y +C X +A Z +A Z +A Z +B Y +B Y +A X +A Z +A Z +B Y +C X +C Y +B Y +C X +A Z +B X +A Z +A Z +C X +B Y +A Z +B Y +C X +A Z +B X +B Y +A Z +B Y +B X +B X +C X +B Y +C Y +A Z +B Y +B Y +C Y +B Y +C Y +C X +A Y +A Y +B Z +B Y +A Z +B Z +B X +B X +B Y +A Z +B Y +B X +B Y +B Y +C Z +B Y +B Y +A Z +A Z +B Z +A Y +C X +B Y +B Y +B Z +B Z +B Y +C X +B Y +B X +B Z +B Y +B X +B Y +C Z +B Y +B X +A Z +B Z +B Z +A Z +C X +B Y +C Z +A Z +B Y +C Z +B Y +B X +B Y +B X +C Z +B Z +A Z +A Z +A Z +A X +B Z +B Y +B X +B Y +A Z +B Z +C Z +B X +B Z +B Z +A Z +B Y +B X +A Z +A Z +B Y +B X +A Z +A Z +C Z +A Z +C Z +B Y +B Y +B Z +C X +A Z +B X +B Y +B X +B Y +B Y +B X +B Z +B X +C Z +C X +C X +A Z +A Z +B X +B X +A Y +C X +B Y +A Y +B Z +B X +A Z +B X +B Y +B Y +B Y +B Y +A Z +A Z +B Y +B X +C Z +B Z +C X +B Z +B Y +C X +A Z +B Y +A Z +A Z +B Z +B Y +B X +A Z +B X +B Y +A Z +B Z +B X +B X +A Z +C Y +B X +A Z +B X +B Y +C X +B Y +C Z +C X +B Y +B Y +B Y +B X +B Y +B X +A Y +A Z +B Z +B Y +B X +B Z +B Y +C Z +B Y +A Z +B X +A Z +C X +A X +B Z +B Z +C X +A Z +B X +A Z +A Z +B Z +A Z +B Y +B Z +C Z +A Y +A Z +A Z +A Z +C X +B Z +B Z +B Y +B X +B Y +B Y +B Y +B Z +B Y +B Y +A Z +B Z +A Z +C X +B Y +B X +B Y +B X +B Y +B Y +C X +B Y +B Y +B Z +B Y +C X +B Y +B X +B Y +C X +A X +A Z +C Z +B Y +C Z +B X +C Z +C X +C Z +B Y +B Y +C X +C X +B Y +C X +A Y +B Y +B X +B X +B Z +B Y +C Y +C X +B X +B Y +B Z +B X +B Z +B Z +C X +B X +B Y +B Z +B X +C Z +A Y +B Y +B Y +B Y +A Y +C Y +B Y +B Z +B Z +B Y +B Y +B Z +B X +B X +B Y +A Z +C Y +C Z +B Y +B X +B Y +B Y +C X +B Y +C X +A Z +B X +C X +C Z +A Z +A Z +B Y +C X +A Z +A Z +B Y +A Y +B Y +A Z +A Z +B X +C X +A Z +B X +B Z +A Z +A Z +B X +B Y +B X +B Z +B Y +B Y +B Z +C X +C X +B Y +A Z +B X +B X +B Y +B Z +B Y +B X +B Z +B X +B Y +C X +B Y +B Y +C Y +A Z +B Y +B X +B Y +A Z +C X +A Z +A X +B Z +B X +A Z +B Y +B X +B X +A Z +B Y +A Z +B Z +B Y +A Z +B Y +B Y +A Z +B Z +C Z +B Y +B Y +C Y +A Z +B Y +B Y +B Y +B Y +B Z +B Y +B Y +B Y +C X +B Z +B X +A Z +B Z +C X +B Y +B Y +A Z +B Y +B X +A Z +A Z +C Z +B X +B X +B Y +B Z +B Z +B Z +B Y +B Y +B Y +B Y +B Z +B Y +A Z +A Y +A Z +B Y +B Y +A Z +B X +B Y +A Z +C Z +B Z +B Z +B Y +A Z +A Z +B Y +B X +B Z +B X +B Y +B Y +B X +C X +B Z +B X +A Z +B Y +C Z +B X +A Z +C Z +C Z +A Z +B Y +B Y +A Y +B Y +C Z +B X +C X +B Y +B X +B Z +B Y +B Z +B Y +B Y +A Z +B X +B X +A Y +B Z +B X +B Z +A Y +B Z +C X +B X +B X +B Z +B X +C Y +B Y +C X +C X +B Z +B X +C Z +B Z +A Z +C Y +B Y +B Y +B X +B Z +B Y +B Y +B X +C X +B Y +B Y +C Y +B Z +C X +A Z +B X +B X +B Z +B X +B Y +A Z +B Z +B X +A Z +B Y +C X +A Y +A Z +C X +B X +B Z +B X +C X +A Z +B X +B Y +B Y +A Z +B Z +C X +A Z +B Z +C X +B X +A Z +C X +C Z +B Y +B Z +B Y +B X +C Z +B Z +B Z +B Y +A Z +C Z +A Y +B Y +C X +B Y +B Z +A Z +B Z +A Z +B X +C X +B Y +A Z +B Y +B X +C Z +B Z +C X +B Y +B X +C Y +B Y +C X +B Y +B Y +B Y +B Z +B Y +B X +B Y +B Y +A Z +A Z +C X +B Z +B Y +A Z +B X +C X +B Y +B X +A Z +C Z +A Z +B Z +B Y +B X +B Z +B Y +A Z +C X +C Z +A Y +A Z +C X +C Y +C Z +B Y +B X +B Z +B Y +B X +B Y +A Z +B Y +C X +B X +B Y +C Z +B Y +B Y +B Y +B X +B Y +C Z +B X +B Y +B Y +B Z +B X +B X +B Z +B Z +A Z +A Z +C X +B Y +B Y +C X +B Y +B X +A Y +C Z +B Y +B Z +B Y +B Y +A Z +B Y +B Z +B Y +B Z +B X +B Z +B Y +A Z +B X +B Z +B Y +B Y +B Z +B Y +A Z +B X +B Y +B Z +B X +B Y +B X +B X +B Y +B X +C Y +B Z +B Y +B Z +C Y +A Z +B Y +A Z +B X +A Z +A Z +C Z +B X +C Y +A Z +B Z +B Z +B X +B Z +B Y +A Z +B Z +C Z +A Z +C Y +A Z +B Y +A Z +B Y +A Z +B X +A Z +B Z +C X +B Y +B Y +B Y +C X +B Z +C X +A Z +A Z +C X +B Y +B Z +B X +B Y +B X +A Z +B Y +B Y +A Z +B Y +B Z +B Z +B X +B Z +B Y +B X +B Y +B Y +C X +C Z +B Y +B Y +B Y +B Z +B Y +B Y +B Y +A Z +B Y +B X +B Y +B X +B Z +B Y +B X +B X +A Y +B Y +B X +B Y +B Y +B Y +B Z +B X +A Z +B Y +B Y +B Y +A Z +B X +B X +C Z +B Y +B Y +A Z +B Y +B Z +B X +C X +B Y +B Y +C X +C Z +B X +A Z +B Y +B Y +B X +B X +B X +B Y +B Y +A Z +A Z +B Y +B Y +A Z +B Z +A Z +C X +C X +B Y +B Y +A Z +A Z +C Z +B Z +B X +A Z +B X +B Y +B Y +B X +B Y +B Y +C Z +B Y +B X +C Z +C Z +B X +B Y +B Y +B Z +A Z +B Y +B Y +B Y +B X +B X +A Z +A Z +B X +B Y +B Z +B Y +B Z +B Y +B Z +C X +B Y +C X +B Y +B Y +C Y +A Z +B X +C Z +B Y +B Z +B Y +B Y +B Y +C X +B X +B Y +A Z +C Y +B Y +A Z +B Y +B Z +B Z +B Y +B Y +B Y +C X +B Y +A Y +C Y +B X +B X +B X +B X +B Z +B X +B Z +B Y +B Y +A Z +B X +B X +A Z +A Y +B Y +B Z +B Y +C X +B Y +B X +B Z +C X +B Z +B Y +B X +B X +A Z +B Y +B Y +B Y +C X +A X +B X +C X +B X +C X +B X +A X +B Y +B Y +B Y +B Y +B Z +C Y +C X +A Z +B Z +B Z +B Y +B Z +B Y +B Y +B X +B Z +A Z +A Z +B Z +B X +B Z +A Z +B Y +B Y +B Y +B Z +A Y +B X +B Z +B Y +B Y +B Y +B Y +C X +B Z +C X +A Z +A Z +B Z +A Y +C X +B X +B X +C X +A Z +A Z +A Z +B Y +B Z +A X +A X +B Y +C X +A Z +B Z +A Z +B Y +B Y +B X +B X +B Y +C X +B Z +B Y +B X +B X +B Y +B Z +B Y +B Y +B X +B X +B X +B Y +C X +B Y +B Y +B X +B Y +B Y +B X +B X +A Z +C X +B X +A Z +B Y +B Y +B Z +B Y +B X +A Z +C Y +B X +B Z +B Y +C X +A Z +B X +A Z +A Z +B Y +B Z +B Y +A Z +B Y +B Z +A Z +C Z +B Y +B Y +B X +B Z +B Y +B X +B X +B Y +B Z +B X +B Y +C Z +A X +B Y +C X +A X +B X +B X +B Z +A X +B X +B Y +B X +A Z +B Z +C Z +B X +B X +A Z +B X +B X +B Z +B Y +B Y +A Z +B Y +B Y +B X +B X +B X +B Y +A Y +C X +B X +A Z +B X +B Y +C Z +B Y +B Y +A Z +B Y +A Z +B Y +A Z +B Y +B Y +A Z +B X +B X +B Y +B Y +B Y +A Z +B Y +B Y +A Z +B X +A X +A Z +B Y +B X +B Z +B Z +B Y +B Y +C Y +B Y +B Y +B X +B Y +A Z +C X +B Z +B X +B Z +A Z +B Y +B Z +B X +A Z +A Z +C X +B X +A Y +C X +B Z +B Z +C Z +B Z +B Z +C Y +A Z +C Z +A Z +C Z +B Z +B Y +C X +B Y +B X +A Z +C Y +B X +B Y +B Y +B X +B Y +A Z +A Z +B Y +B Z +B Y +C X +B X +B Y +B X +A Z +C X +B Y +B Y +B Y +B Y +C Z +B Y +C Z +A X +C Z +B X +B Y +B Y +B X +B Y +C X +C X +A Z +B Y +B Y +C X +B Z +C Y +B Z +B Z +B Z +B X +B X +B X +B Z +B X +C X +B Y +C X +B X +C Z +B Y +B X +B Z +B Y +B Y +B Y +B Y +B Y +B X +B X +A Z +B Y +B X +B Y +B Y +A Y +B Y +B Y +A Z +A Z +C Z +B X +B Y +B Y +B Z +C Z +C X +A Z +C X +A X +B X +B Z +B Y +A Z +C Z +B Y +C Z +B X +A Z +B X +A Z +B Y +A Y +B Y +B Y +A Z +C X +B X +B Y +A Z +B Z +B Y +B X +B X +C Y +B X +A Z +B Z +A Z +C X +C Y +B Z +B Z +A Z +B X +B Y +B X +C X +B Y +B Y +B X +C X +B X +B Y +B X +B Y +B Z +B Y +B X +B X +A Z +B Y +B Y +C X +C Y +C X +A Z +A Z +B X +B X +B Z +A Z +A Z +C Z +B Z +A X +B X +B Y +B Y +A Z +B Y +B X +B X +B X +B Y +B X +B Y +B Y +B Y +B Y +B Y +B Y +B Z +A Z +B Y +B X +C X +A Y +B Y +B Y +B Z +C Z +B X +C X +B Z +B Y +B Y +B X +B X +B X +A Z +B X +A Y +B Y +B Y +C X +A Z +B Y +C X +B Y +B X +B X +B X +C Z +B X +A Z +B Y +B Y +B Y +A Z +A Z +B X +A Y +B Y +B Y +B Y +B X +B X +B Z +B X +B Z +B X +B Y +A Y +A Z +C Y +B Z +C X +B Z +B Y +B X +A Y +B Y +B X +B Y +B X +C Z +B X +C Z +B Y +B X +B Z +A Y +A Y +C Z +B X +B X +B Y +A Z +B Y +B Z +A Z +B X +B X +B X +B X +B X +B Z +A Z +A Z +C Y +C X +A Z +A Z +C X +B X +B X +B Z +B X +A Z +B Y +B X +B Y +C X +A Z +B Z +C X +B Y +B Y +A Z +B Y +B Y +B X +B Y +C Y +B X +B Z +B Y +A Z +B Z +A Y +B Y +A Z +B X +B Y +A Z +B Y +C Z +B Z +B Y +C X +C X +B X +B Z +B Y +B Z +B Z +B Z +B Z +A Z +B Y +B X +B Z +B Y +B X +A Z +A Z +A Z +B Y +C Y +C Z +B Z +B X +B Y +B Z +B Y +A Z +A Z +C Z +B X +B Y +B Z +B X +A Y +A Y +B Y +A Y +B Z +B Y +A Z +B Y +B Y +B Y +C Z +B X +B Z +B X +B Y +B Y +B Y +C X +B X +B Y +B Z +B X +B Y +B Y +B Y +B X +B X +B X +A Z +B Y +B Y +C X +C X +C X +C X +B Z +A Z +A Z +B Z +B Y +B X +A Z +C Z +B Y +B X +C Z +C X +B X +B Y +B Y +B X +B X +B Y +A Z +B X +B X +B X +B Y +A Y +B X +A Z +B Y +B Y +B Y +C Y +B Z +B X +B Z +C X +B Y +B Z +C X +B X +B X +B Y +B Y +B Y +A Z +A Z +A Z +B Y +B X +C Z +B Z +B Y +B Y +B Y +B Y +B Z +C X +A Z +C Z +B Z +B X +B X +A Z +B X +B Z +A Z +B Y +B Y +A Z +B Y +B Y +C Y +C Z +B X +A Z +B Z +B Y +C Z +C X +B X +A Z +B Y +B Z +B X +A Z +A Z +A Z +B Y +B X +C X +B Z +B Z +B X +B X +B Y +A Z +B X +B X +B Z +A Z +C X +B X +B Y +B Z +A Z +B Y +B Y +B Y +C X +B Z +A Y +A Z +B Z +C X +A Z +A Z +B Y +C X +B Y +B Z +C X +B Y +B Y +A Z +B Z +A Z +C Z +A Z +B X +B Z +A Z +B X +B Y +C Z +A Y +B Y +B Y +B Y +A Z +B Z +A Y +A Z +B Z +B Y +B Y +A Y +B Y +C X +B Z +B Z +A Z +B X +B X +A Z +B Z +C Y +A Z +A Z +B Y +B Z +B X +C Y +B Y +B Y +B Z +B Y +B Z +B X +B X +B Y +B Y +C X +C X +B X +B X +C X +A Z +B Y +C Z +A Z +B X +B Y +B Z +A Z +C Y +A Z +B Z +A Z +C X +C X +B X +B X +B Y +B Y +B Y +B Y +B Z +B X +B Z +C Y +B Y +A Z +B Y +B X +A Y +B Y +B Z +C X +B X +A Z +A Z +B Y +B Y +A Z +C X +B X +B Y +B Y +B Z +A Z +A Z +C Z +A Z +B Y +B Y +B Y +A Z +B Z +B Y +A Z +A Y +B Y +B Y +B Z +A X +A Z +B Z +B X +A Z +B Z +B Y +B Y +B X +A Y +C Y +B Y +B Y +B X +B Z +A Z +B X +B X +B Y +B Y +A Z +B X +C X +B X +B X +A Z +B Y +C X +A Z +B X +C Z +A Z +B Y +B Y +B X +B X +A Z +C Z +B X +B X +B Y +A Z +B Y +B Y +B X +B Y +B X +A Z +B Y +B Z +B X +A Z +B Y +C Z +C X +A Z +A Y +B X +B Z +B Y +B Y +B Y +B Z +B Z +A Y +C X +B X +C X +B Y +B Y +B Z +B Y +C Y +C X +B Z +C X +B Y +B X +B Y +B Y +A Z +B Y +A Z +A Z +A Z +A Z +B Y +A Z +B X +B X +B X +C Z +B Z +C Y +B Y +A Z +B Z +B Y +B Y +B Y +A Z +B Z +C Y +C X +B Y +B Y +B Y +B X +B Y +B Z +A Z +B Y +B Y +C Y +B Z +B X +B Y +B X +B Z +B Y +C Y +C Y +A Z +B X +B X +A Y +B Z +A Z +B Y +B X +B X +B Z +B X +A Z +B Y +C X +C X +B Z +A Z +B Y +B Y +B Y +B Y +B Y +B X +B Y +B Y +B Z +B Z +A X +A Z +A Z +A Z +A Y +C X +B Y +B Z +B X +A Z +B Y +B Y +B X +B Y +B Y +C Y +C Y +B X +A Z +B Y +C X +B Y +A Y +B X +B X +B Y +C X +A Z +B Y +B X +C X +C Z +B Y +B Y +B Y +A Z +B X +A Z +C Z +B Z +B Y +B Y +B X +B Y +B Y +B X +A Z +C X +C Z +B X +B Y +C Y +B X +A Z +B Y +A Z +B Y +A Y +A Z +A Z +B Y +B Y +B Z +C Z +C X +B Y +B Z +B Y +A Z +B Y +B Z +B Y +B X +B Y +B Z +B Y +B Z +C X +B Y +B Y +C Z +A Z +B Y +C X +B X +A Y +B Y +A Z +B Y +B X +B Y +B Y +B X +B X +B X +B Y +B Y +C Z +B Z +C X +C Z +B Y +C X +B X +A Z +B Y +C Z +A Y +B Y +B Y +B Y +C X +B X +B Y +B Y +B Z +C X +B X +B Z +A Z +B X +B Z +B X +A Z +B Y +B Z +C X +B X +C X +B X +B Y +B Z +B Z +B Z +A Z +B Y +B X +B Y +B Y +B X +B Z +B Y +C X +A Z +B Z +B X +A Z +B Y +B Y +B Y +A Z +A Z +C X +B X +A Y +B Y +B Y +B Y +A Z +A Z +A Z +C Y +B Z +A Y +B Y +B X +B X +B Y +C X +B Y +C Z +B Y +A X +B Y +B X +B Y +B X +C Z +B Y +B Z +B X +B Z +A Z +B Y +B X +B Y +A Z +B X +C Y +B X +B Y +B Y +B Y +C X +B Y +B Y +B Y +A Z +B Z +C X +A Z +B Y +C Y +B X +A Z +C Z +B X +B Y +B X +C Z +B X +B Z +C Y +B X +B Y +B X +B Z +B X +B Z +B Y +B Z +B X +A Z +B X +A X +B X +B Y +B Y +B Y +A Z +B Y +B Y +B Z +C X +B Y +B Y +B Y +B X +B X +B X +C Z +B Z +B X +A Z +B Y +B Z +B Y +B Y +B Y +B Y +C X +A Z +B Z +B Y +B Y +B Z +A Z +B Y +B Z +B Y +B Y +C Y +A Z +B Z +C X +B X +C Z +B X +B X +B Y +B Y +A X +B Y +C Z +A Z +B X +C Z +C Z +B X +A Z +B X +C Z +B Z +B Y +B Y +C X +A Z +B X +B Y +B X +B X +B X +B Y +C X +B Z +B Y +B Y +B Y +B X +A Z +A Z +B Y +B Z +B Y +A Z +B Y +B X +A Z +B Z +B Y +B X +B Y +A Y +B Y +B Y +B Y +B Z +B X +B Y +C Z +C X +B Y +C Y +B Z +A Z +A Z +B Y +B Y +A Z +B Z +B Y +B X +A Z +A Z +C X +A Z +C X +A Z +B Y +C X +B X +B X +B Y +A Y +B Y +B Z +B X +B Y +B Y +A Z +B X +B Y +A Z +A Y +A Z +C X +A Z +C X +A X +B Y +B Y +A Z +B X +B Z +B Y +B Y +B Z +B Y +B Y +B X +B Y +C X +C X +B Y +B Y +B X +C Z +C Z +C Z +C X +B Y +C Z +A Z +C Z +B Y +A Z +B Z +B X +A Y +B Y +B Y +B X +B Y +B Y +C X +B Y +A Z +B Y +A Z +C Z +A Z +B Y +B Z +A Z +B X +B X +B Z +B X +B Y +A Z +B Y +C X +A Z +C Z +B X +A Z +B Y +B Y +C Z +B Z +A Z +B Y +B X +B Y +B Z +C Z +A Y +A Z +B X +B X +A Z +C Y +B Y +A X +A Z +B X +B Y +B X +A Z +C X +B Y +B Y +C X +A X +B Y +A Z +A Z +B Y +B Z +B Y +B Y +B Y +B X +B Y +B X +B X +B X +B Y +A Z +C X +A Z +A Z +A X +A Z +B X +B Z +B Y +A Z diff --git a/aoc_2022/input/day_3.txt b/aoc_2022/input/day_3.txt new file mode 100644 index 0000000..5533a94 --- /dev/null +++ b/aoc_2022/input/day_3.txt @@ -0,0 +1,300 @@ +zBBtHnnHtwwHplmlRlzPLCpp +vvhJccJFGFcNsdNNJbhJsJQplQMRLQMlfdfTPCLfQQCT +GPhjcjhZDjWtnSVH +BNhHVhrGNVTbDHdDJdJRPJdSQQSJwPjR +lvtsfbsqzwSnJcvjSm +MftttFLftZMLgtgMbltMqZzbDNrTpVGhNWrDTrpTGNpZGZhD +VSSHcTgTtTdtllZlzmmbljTn +RqMqsFfQLLFLQFMMfRLPZLvPpCfWrbpmCbjCnfjlWmnrmmnm +hqRDqPDRsqNHwtHSNBZtJd +tNFDpDFrtdjfmjjjFmFFdScpZhZScTJgpHccHhMJgS +lLzSlSCQqbsVhBghggBZgCcJ +zRLVVLQnvQqVVzRldfWrwffjjdwSdfjv +bpWqqqWvHBpwGBCCRl +hJdjdJFQqdBBDMMC +tFFzJZFtJSqtZJQsWLbNSTnffHfvTH +lFhRZhFjPlqMlJqZJlJcRLwrLrwStRwtsVVtVSrgRV +WcpDvDfBmpDHzWBDbpbmWmNVSSTzLTtrVswgttVVzwwr +pbWfmGBpHfDmWnvvGbmWnjjMqPJMlMFPdGcjqPqPhP +NjFNRlpVLFCSSlbBWWfw +pssPZQQsMnzmtnQPttzDBbBJBcrrJWbrZSBJSbfC +QTHPHspMNGHdhvRR +QfPdSJfFJmthSthtwbsNLbPLlLTLpbvP +nHnMBnZqqgBMnWrZMqnZVcbCqRwNsvblRwppbllTsRNp +nZHBHznMnWgcrnVBtjFdfmzQNtNddjNF +hFhfPghppPhpRNhzsjsvHVzjpsGnWz +tTjlCCwMqtdMjMctGJWHwWnVwWnwvWGs +rZdrjBBtqdCtlcdgFZQLfhRLFSgRNP +RDHSWrJWffJFlJCgCMCDjCvzjPMP +QtGTndBwBtNzBVjBCMgB +LdwwMpTdwsRHsqSHqHJl +RfsfzvLLFvFzCSvSbDsTpTGMPMZPPTMt +jqWBjwBBNwWqwPGZbTwVwVtD +BnhgglhhNNngqjBjHNWrZLlFLSCJSFFCCQzQvQFCFF +HLvLDQbvnDQDvbHTLhntSnGBSlfGldddcmfMMf +NgFjZjrZZJrlfJfSVcBJGc +scWCNFZpsjzrDLwLhbQzhQwD +SlqJlThDPqpwSTwhcbDdbWDbZGcZNcDb +MsnWWjHjvLvfscjjgdzNdbgbcc +vQQvWVQFLLHfHVBWfsfmFFpJRhhSplqlRJqpBwlqTCPC +DZbDzzZDjQbPGZFFSSgSlFCzTgzm +qLnvwvhddrqMrwrCTLLFJjmtSlFlSH +VdhvsWqdVWvvRhsvqbpbPcZfPpjZGBQNRj +mJNtNFmzDZtzdzrLtwwRqJSchgfGcRfwRB +pWpjQjCTQnHMWCCpjQpHvTqcwTwScfRcBcSGBRThwS +MQHjvjVCCqsvljWnVQzLtNPZzmzLVNLddtPN +QVRPRVDgsRjLssnL +TTGDJDJfbfLHSnsMWWbs +qGqqTFFDqgQgQQQq +nlMnRRjbMjCdJVQJCZ +nGqfLwfNLFNLnPPGFVVCdVGZJtCtCCVzJz +LHHfPNHnPqqLwqPqDPWfNFvMglbhhbMgmclgcllDmgmrcl +cLLWWSThtdLpRcddcgPRZFDMCVPPMCCPCPCZ +NfGbGNzrBNffGNJjbPPZsZmZZPmDHpMH +zlJBfzlQzNjNjfJcpwSdvWhcvLwQWt +cVVQfVCJVrVcTJnfNvlDFmDrmlvrFWlL +snZHpMhZtMbtPNvzHWWvNFNvNW +gppnbbbRgMnZbswRqRwbqTcCCSTCJJdGjgfVGTdcCG +jplgNdrHrrNZgdHmlHNJHddlDSPPSTlzTSlTSDSzCQLfzf +vscvWWWvGWGGscbFMpRWFwQTPzfLQwQwPfLbzSzzDL +GvGBWpqcMVRNNZHgdHdtBJ +LchbZhjjZFjwSmPRqRffqbdtggdR +vWHMWlHJdGqtRqHV +MvzCJlnMnlTNnNNLLdhjjCdjjhDjjL +FNCllHFvCGvwQcPQJfgfmwgh +zjtRpbDLjtsrzbLLQmfBTgTBQQfhbfQB +WLgqRzqsrWvFGFZFZC +qjLlNcLjcNWpQLlQMmvmhCvCgsMZZghj +tGSDJtRGJzHMMGDVZCfvmfhzmZZgZsmv +BSSRDRHBGHtSSSbGJSwHbNcLQddqMNlrqcMQMldBWc +JSfctrtctDpszHvzVQHr +glCWjhWmFjlmlhmdWPhVVznvcHjszbvvpHvznv +FgBmFhCBCGFqglgmhCFmSTSRLJLLZfSRJcDSGMtM +vZGlFFtLMLdShSSShRVtVf +rQNvmznWPNCPNsrCsbWbsPCvjShhhfHBBHJjSJRhjSRnHhSj +mCNsQCmqszNcQzrzrrzWvGgGMgpdFpMLlFZGwcLDdg +QJRJQDlcqLlWbNGL +HCnwwsCrnstLWqtWNgZNgg +rsnTrTCHTnnVwnsVPqqDQcRjcczMPvPRzM +qCzjqnzVdzrdhnhddDbDBMPttcGBDBDPnc +sZgRQWHgWHHLsgsRRZsJbpJlDcDGNcTDFtGNFFcJNFPBPBTc +WggbRQSRRgRSsWWmbHqvVffVwhzvCdmfhmdV +lhqWcNpQGcNmmHmNPWCsQzQsgrQrBMCMbMVM +wDLFFDJvSFFZRDZSzCrzTzsRgVWbCrMW +dFwDtZfdjFZWFFfmHGPnPPmqfmPNcN +lcMRNJRGGLJnNVFbVrwrwZrD +tjCzQjQhQwgWFShVFS +ffHQsQssQTzBsPnLpMPRwsJP +MQSMSBSRFMQLJChLChjTBh +WmVlPrwnpwDlflNpDrNnDlDwThJCCdLJhhdhCfJTccGjvscd +gnDVnNnwgglwDwptSZFzgQHqbjZgZZ +nwBcFgwTDcNrpZMD +WQWCLZmvhMRvNjsNSD +CGGWmZGHHhtVzHbTqgTdbgzz +RmcTCwvssRbsThTcVRJJfSPqfJwJFqfjfMFq +zQNZDWtQlDZGBQPfFQqjJLjL +rrglggZGWnrnrrHlDhsbsPTVCsCVsTRpHv +wFGfzSvCPGttSzqwmtqmvvPRDDRCWgWWDTBTMcBcBWbCRM +hVJJHQHnpWnDTNnnDb +LJsVVdhQqvmdbbSf +srlJztzsVVsSsVtRlNllTWzzmqGhqWLPCDCgmChPLDdqCmCP +bZQMZpbvMBMgmDGmZLSPZd +MpScMSMpvfjMBcBcfMfSBnzlTjssNszrNrtlTVzlzFVN +rCtgrgClprGGClnJCZmwtMjZRjbjjcjZQv +PWVfBHWPdbNfbbRmRj +sPsVqFPsHWLhBVVqHFqPVddWSDLJgpTCnnrRRLGpJSSTRrgT +zjqpGjrQjGqSHCVvCrRZDN +cTdshMhdmcMNmddRHBhvCCBCCvHZDC +JTmTmJnLTdwzNQpPWJWgpP +BmpZmrzZnznHbpprSbQSQbqdSVqbPQcV +fRGTGJZRTTDwJTJRGDfgJgNFlSSFcldfdccFVlPlFFQPSQ +GvTTTZZLmsntzmCL +VhMcrmbhvzMSnhvftbRbllLtglBBtf +HqqqJqDqPjJPNjjDVFDZCdqBtRtGBGlGRfQQgttQfHlTQl +pCZJPqqZpmhvhpVh +dWLBJHJhGJGMBJRcDLDSQsSQpvcR +ZlnnPqglblfRRpSvSsnz +sPTgZVjjmwVTljrwTTlbwVGdJhBNNdFdMGNHHJMjBNFN +FhFrfbfgbLRdfqfrmvDgLdjrcQtSNStHHHQlSjJJPllt +CnspzZWTpCnMVzzZZGZRCzttHNjNlQlSNtNlNjVcjlQS +GCZsZBRwnvwfbqwFwb +bZnJFJgLFRnqQZqJQJFQGpCLNcGlLllClNtccjGc +rVfvwPDhPHGtlcbClr +mBhshsfMvBvqsQJdTbgnqQ +jgWHqMSWMGqWjWjqbWGJQDfVqLfrfDfJhVLfTr +pPplwsRZPFZFtLhfwgfwrhJL +zlRsdgFcRgmjdBCMHdjHWB +qJSGJSPQWzcprtQZtt +mBMVfsNBnZzcNtcc +LMLBsmMlvBgFsghVVvfgLBvbJJSqgGHqPGPtCWwbJHqCPG +ZvZLcdMGVMlHDvDpvqhH +NNSrQNbJbrTnnWZDDZqqhqpW +wbgNJrsrCwwJQZbsrJBFzjCCdzGdjcGzMdzj +JbVmdVLJJJdQMnzmmMgHjPqqjNgvqwngHNNP +ZfffDZZsRpcpRDcCRrlpplcWSSgwgSwjvvsjPSwhNSWggh +cCtfppZrpjtMMmdQQTLz +TtbnmbdmTmgTlPNhqvqj +wrwrLsVZRsJJJsfHjvPPWfhjHqRN +sDZwDvsCCQLJZQJQsMCMzZBtSMpndcSFnnSBFtSBmdBc +mWFTZdmQdZFrFQbCRsrspjSjnvCLRS +GwlDqcNHDzwGfHSRqCgJsSpnvpSL +NGlcNwHLLGfDDHDhDwDcwVczbPddZtMFWttWWtdPPdQdhPWd +mnfcZgcdZqnqdfFqPmHfhqsbgVMCJNMtvCJtMvtblTJtvb +rRLDDjPSjjPDGBQSBNbtLVtbMNNJlTMtbl +SzjDDzRRpGQDDDPHzdsmnnhsqcqdFq +ZDGNRDGjSdwnnmnsVNsHJJ +tMBWWrddLPLhvWTTPLccvmmbVpgsJHmccppJ +ClPrtBWWrhrFLBPlCRzjzGqdRzjRdRGZjF +csTRNQNJcNBDLfhfMf +qGmWpGHqrqPLChPRhVFPDD +tgHrtnrrJnZRTZcv +FLqrfmLDrqCmqjTqcbGqRTGVvb +FMtWMSWzzFStJzPzhWzhQvTvHVjjTjHTTHvbHc +PgtWWstWtSpZWPzWwnrBsdBDdFLfllLlfC +mThbMDMQDCDbwLqWpqPpdhwR +zgrcffgHNZltZSgHLsRsLLWRWgLqppsW +SVlSrfSHlSSVlrJfVctlNDMCmMFbnbRDbDBFJFbBRM +PrBrWqtRPdBLLrBwqpswgpwhgpnZhhzsgw +FTFRSVJQVJflFfQQgggGMZngGQZszZ +TbmfFJFSDFblSTDSFFbmVSDrPLLWtcmBqqRmBtmcLtcrjP +DjPsMwDjLVVTsvNNRTNTRT +ztdQQHqHlFNtfRNNNMgg +FzhMhHQlDcCrhCCc +zSHGzzmHgnnMDLTNTG +lPVBtvhQjpNSMWTLBD +VCftbjvbVCfPbZwsJsrSgSSZwC +CbwgmvMnmnCwMmwRQqJBGBgHZHpJHdtdZpJt +zVSlNSDlrzNhqlNTScDzVWfBBZZZZGBstGsdsWFpdHdJsW +NDlLzhrVcqRPCMRwLLLw +TjTHHLwnLjVlTwLjgVfvsFvDsdWfvDvFMd +qbRRRpmpcmDcczppztSqSvWFssFGfWdMvfQWdfsG +RZpqDBmtrzhzphjTgjHlnwjgJhgJ +dLmMgdgzwDLzDWFhBWvzFzzBZJ +tTVcppbSTfstTMMHfTbhBchhJFCWcjWBZhjGGB +SSSSNbsNRpRRsRrfVHfRpNtlPgQDLPdMmlDLlrPnqPdPLl +qqbTCSqdqqFZdRLZhwhZ +HWWlHtlrBfGtVssnsLnHfJVPPMMFzhPRwMPwFhzPZzPMGM +nfmtsrlsnrfVnHJrVBWlsVfgbbNTNSvmvvpcTjLjLbqvvS +GGhFvGPFcThqffPdnfNLqZZCSwtQSwZpwQQBsL +RglMRrJJgHBCBZSQQpdr +WmbRHHbzDgJMDzRDMdWmWHzHNFFvvGGhnvVvvfcvnFfcbvnT +QsfQmsLfZZZcshnJ +dSgdWgSVVFvzSpqFdqTgWRHbJNcbZNCTJCNNZRRCCh +FcpVjgDvVVFdVWFvzjwwQtBMLtBBGDwftPrB +rqsRrHsvsPqswNcJcNJrnnBrNn +bFjgGFdbVRNNnpRQpV +GSthhggGDSvMRqtHvMfM +ZwVPgMsgVsGzVsRZpgpzzgpFMrNbbLFrDLFFrrSDLfrNBN +qvnjBhQhntbfDLrF +CJlHHcHcTWqvpBdsWRpdPdgs +BjmTDjJBCBWrgQRPFlWWlW +dHphshtdtVHVhpJqspdvRrqFPgrLPPFPrrRPvQ +sdMsMtStVszpwMzHjJGjCcZjmScNfCDf +DmGdDffgDSDDdJstqdJldlRt +MhnvMCZCbbZHMvsCHtrcVrPjJcRqVtlt +LsQbsFZvZhQzZwhQWTNgBWpNwSGpTmfS +RRJQnCzbZZLTZJCBtWvFtsfqBqtfWb +prjlChGNldGNdlSVMhWfqWtfsvwvqsFtdtsq +GGjNDNhpMGMGVhrnZZTzcTHCCJcDHc +RmbMmjgpPjMBsBMfchhVsc +HwFWFTztSrtFpcQvBsSqVscBBC +zWwnJFHtWWHDgbGgdpGpnl +mnbWbRRLRFnmmWcCDTBVwCDBlwNW +ggJPtpdHGfdZtMHgtZgVPPBCVsPNBcsBTTDDCC +hpvJJTpGhdhtJdMHqvmmnLvSbmnFnRFm +WWtrWrNgVbRjMrQCNzqJFwQJFNTJ +LdHPhcdchQQssLzJrz +pBccnHpnrrcGHnnSlWjnRMSlbt +NMMfNFnZgMVThhTMcgTDJDJjsVvvJJqJmHsqHG +LQpwwprCQzBNBdGjGjHswswdvm +CBCzzCrbWbSlNQnTRgPPfFRWnfgc +RFwHVQRwFgTQSFVhdsdHsBdDBnnqnq +LGftLtPGGMzlNrhlPqPsrJ +fvGpWpMtccpTwwpRRQhh +TTJCGdTGtZRQQCnzcnCv +FWWHPSFNFbDbDDqSWnVmLRRjRRQLhcmLjS +qPwPWwFppbwggGZGfdJZgdnGdd +zSTWzrzWTLWpCtCGpqqGgplc +nZWwsJVZZBnJHJCclHllgtChgCgc +DFnVBJsFssVVFBFnBdfvjDSmTMWzrmMfRmTv +MJmgMssrsggqqMVstbwTcTbPbTTwThmw +NRBBGRjHVRRcRbCp +QnSfzLWzNHzNVQQVjrglJMsMFvgJdFWrgZ +ggLLGnhgnPvJHZnN +VBtmVSldbSBVlcNPHvjmNcwNZZ +tdWqSVSSBztVWGrThLhfrfvG +TDqrjdSwLqDppdTCdzPBFmmjQmhHFPFQhPFR +zlGbMcVcVtsPHFRhWRRsPF +btgvlVVcDZZZqgrz +DgwlgbbFDDjjPTHDrmddPhPV +WqtMBBtQsttMNWQBqsbJpGGzdPdTHLVmTzJhmTPhHHPTmH +qQsqGZNQtZGMNsNtZpFnjnCRbZffwwSRljFf +gMdFLCdnMZCTFFCqnTgWLCHfSgPgPHStcQQmfSBBSfHg +vrwwrwzbGjjswjvhGGsjPQmqRmHPbBtcBQtqfmcH +qzJllVsGVGljjsrzwDzhwzDGTddNLFnZWNdpCVWTNTZTLZCF +LtwMhDtctwbwwppdWBJQJBWPvPfDfqvG +FTzrNrgSRFrgzFRHNVFQJvlqHjBvQWlQWqPBfq +sFgNzmVmNzgTvVTMwhMhstMwZtsbsc +MrBDQVzzlrvhQzQrDMVQrzrzgRJnRRwwRbwSwwVRRNSgwwwJ +qFTPTvfTHcqqncpcwR +LmtdGGPmTPGCTLHLWsZMhvZMMMzrzzdlMQ +ZVNpjfpZNpfNgNjzNVfWtnbbWmBHtsZWBSZBGS +MrDrQvvDrPLDMvFvdmBGGsBBCtsHrnrGCm +ltRMwLLDDRlvQwvlQcwhqfcJNpgzjJpjhJ +sRRRlRbcFbBBdnFBwCGppNvGrTCDDGVNlr +PPSLQzHjzZZPLZPjgTNTgpCbVJvGrNCTGr +ZLHHPQjhQmWWSRRnssdtbnmfwF +GRwrMrHJGwJPGWsgfqQgsc +VbTvLQCZLSWWsgWf +TVDvVCvppvTDmzZVTbZpTzBBNQQQJlJBBJBNNJmRBwRH +shJRWJsjZGNjSTrjFS +dMLCddggldQzMCCVgzVVLmLvTwNFFSqpNSqSbFGSqTTpMTFN +VGQvVglCLcVzgdddCDVvlsPZRRBDJPHZWZZnBsWJRR +CrwlwhRCMrswnsHBFccHHWFc +QJTmtfQgLtzQfLQfdPcWSFHHDDSpcFpFBg +jTQTqbfQfmLbLQJbJrRCWjljZGjNrZlZlC +JmthDmLShtJmHphphJQCwjdjdFDzFgzFdgdNlC +sbMTVBrWMbNvVMnsWMnVzjsjwCfjFgfZzfdgdzlj +NvqbbBcMMPPSqLSpGGthmp +RfGWFHlPFFNWGFZRZBjvwCvzBwhhrvvjzmrr +sLJSLMSTSJTbStJtMSqSqbpMrvmrzWdvhmjDCzzwrrpjdDDv +SbQqsqsWcZPcQGFG +BjqbMqMVBsfqGqFqGLmF +ZZQbQPddPcwbPnRQltdtQZdnmFNrvfhGrhrWWFNWWtmNFNNW +dJJQccnRPpcbQcMHsSgSMsDMTJSg +WWGBBvPflnWbBWhvhbPvNfnnVCFZmVRVZmVGMVwRLCCCGwVC +gjszgTMrgzgqCRRdmJRjJLVw +grzQHzqczMSzqSHcgQsqPvPlbNblpPhhPPbHvnhp +sJDDNWdnRLTTvqwSFPCmLCCrCq +thzplgfjglflFcbMclpppMfcwPqCZQCmqCwrzCqmQmHSqPqq +MhcpFBMBlhjbBTdnNJWvNvsvBd +czwwghnWWfcfgwfWthfrvVvrjdrdvDDVrbzrLF +RHPPMRpQPRMPPJRjJQsZsrrvvJBDDVDVdFqrBrFdBv +smjMsGZHRsHSmRQNGHPpSTwwttCflwngnChcCtWW +bprrrwrtLDtrWwrQjRDQDbPPVHVmmmmHNWlPlVNPZZlv +hqqhfnBCTfnnhzJwzsqzfPZZMCCVZVHHFvZMFvZmlC +TzhhdJTqJzcBdJJnzjtQrLdjwgLtpbgrLQ +qzQvzzgWSCqtqqGpddGc +jLrZNZhZrNRLHNffhrjNjNdtdZtGcPFwFwpbGwbVpdwC +nHnhrLNCCMHmhHBMhrzvgJvsWSWMWzzWzSlv +RzcbzdRFzbbzbzbFdZFTHMZPhVhVQMLrlrQPhLZlMM +BNGfBvsNttVmMhlMLm +BwGjpllswfjwpcFDWcWcbpdb +SjzpswrLSDjVSpwlmZJBTBdNJLvBNvHQZT +rCcCtbqgCfthggtbGGMqqghqZQvvQTBNJQHQZQTcZTJFZFFd +CggGMtqMfWbbGghPhhbCMtmsSppSspjpmWzjVSWlVrrm +PmWTPThTQWnLWQFl +VNcSVfMbtsddBQNnNpdl +sSjctwjVSzzccjgnTnDTHRDhqjRR +WfMWfCNCjWWHNTccMjRjfRcMbqSwfVwqwsfGGbssrJSrswVw +llLFQLlvlPFnhQBPBZQBqvBwzSzGGhShJVwShmsJbbmzSG +lnPqvQZBFFBnnpgplFvtvHDjTdcTjTMMjCRNCMWgRC +rprFNFFNjNLmMdgcqL +BvzCQQbBQgffsDbvVHMdbcVqmLVqlmqq +JvJCzBDJwnsRnQDszCBnnnQBrjZPjFpgZFTFZRpTrpZFGFtT +wBHQQZHVCcpwDgdZdMsZjvMZFn +GPSzlNlJLfzzzvsWdWLMmFWLMM +NfqGSfrTNzRTqJfRbptQHFQFrwrFHBHw +sNjVMVNVMzPzQgghcMsNzJtjSJtTFDTJtJnnDLjDnL +CHwrdCpvCrwrWdpZqcpFttJSFJTLLHLJfbnbfD +qrlZCwlqZrqqpWdlRqCRqdqcVNsVMzQzmNgNPBsRhVQVVzMs diff --git a/aoc_2022/input/day_4.txt b/aoc_2022/input/day_4.txt new file mode 100644 index 0000000..c2c3af1 --- /dev/null +++ b/aoc_2022/input/day_4.txt @@ -0,0 +1,1000 @@ +24-91,80-92 +28-93,5-94 +30-81,33-82 +28-97,59-72 +65-66,54-70 +35-35,5-36 +3-5,4-91 +73-97,20-72 +53-77,2-54 +47-96,48-95 +7-75,8-75 +66-89,67-86 +23-25,24-95 +97-98,5-98 +58-61,13-57 +53-62,52-52 +5-93,92-93 +52-61,34-61 +83-85,82-92 +90-90,46-91 +35-95,94-98 +89-91,72-90 +3-98,81-97 +26-26,27-96 +41-54,53-55 +9-43,8-54 +14-14,14-86 +36-50,50-50 +79-84,78-78 +44-69,70-73 +6-51,5-5 +40-40,39-73 +10-65,9-11 +1-2,4-99 +8-36,5-5 +72-72,25-71 +66-66,67-96 +69-79,62-68 +46-57,5-56 +97-98,39-98 +98-99,4-97 +9-94,10-84 +3-15,6-14 +9-10,11-80 +9-9,9-69 +60-79,78-82 +50-70,70-90 +12-12,13-64 +8-92,3-8 +29-79,30-78 +96-97,5-97 +13-75,59-63 +45-78,45-79 +38-70,38-69 +13-33,19-25 +79-87,47-88 +9-67,8-67 +51-59,58-60 +28-61,28-62 +7-90,33-87 +5-5,5-33 +78-85,43-84 +18-94,18-95 +42-42,42-81 +12-93,11-92 +16-64,17-64 +2-99,1-98 +32-68,31-69 +14-73,15-15 +43-55,43-81 +13-65,66-66 +79-85,79-91 +81-84,52-80 +21-68,22-67 +32-80,33-80 +17-76,83-83 +11-65,39-65 +32-85,33-84 +25-58,26-57 +14-28,8-15 +64-87,20-86 +62-99,29-61 +26-40,27-47 +9-76,9-83 +42-90,43-89 +5-97,5-93 +6-16,15-87 +45-91,9-91 +34-34,35-85 +21-56,21-21 +38-79,47-80 +79-98,36-96 +25-99,73-99 +4-51,12-50 +9-10,14-50 +65-89,26-48 +17-19,18-18 +39-60,34-75 +61-76,61-61 +38-90,37-37 +36-67,68-68 +6-19,10-20 +3-91,3-97 +35-93,35-94 +63-89,59-62 +46-76,66-76 +31-63,31-64 +17-44,33-37 +35-43,35-68 +11-13,12-90 +39-83,40-63 +41-99,24-86 +41-76,41-56 +9-62,10-62 +3-92,92-92 +36-41,36-46 +6-21,5-26 +7-98,5-97 +24-95,9-35 +4-82,3-81 +45-74,7-35 +7-74,59-75 +62-68,32-61 +45-66,44-83 +36-94,36-37 +57-76,57-77 +34-71,71-72 +95-95,95-95 +58-75,57-79 +48-75,40-53 +21-94,21-31 +55-55,3-56 +48-80,3-80 +10-81,9-81 +13-66,6-7 +1-91,90-92 +4-5,4-83 +22-76,20-45 +4-13,3-3 +10-22,6-6 +18-91,18-90 +50-53,51-52 +23-33,21-24 +1-49,1-48 +8-40,8-39 +11-97,2-96 +79-81,55-75 +82-95,81-81 +9-10,10-68 +59-59,58-58 +2-99,2-2 +22-36,21-22 +49-77,49-50 +7-21,7-7 +65-98,66-72 +1-43,39-40 +25-60,25-25 +12-79,38-80 +89-90,26-90 +52-72,53-53 +15-96,97-99 +4-8,4-72 +2-73,72-72 +11-35,15-35 +99-99,1-98 +72-83,8-88 +29-35,1-3 +32-72,15-33 +50-86,51-51 +27-65,59-87 +11-11,11-52 +16-87,17-87 +60-62,61-61 +50-90,81-92 +86-86,43-86 +42-82,11-82 +93-94,3-94 +22-91,90-92 +14-91,13-75 +11-28,14-19 +76-85,75-77 +7-98,6-98 +25-40,2-41 +4-96,12-90 +61-75,1-62 +17-97,16-17 +38-93,38-52 +16-34,17-39 +61-78,29-79 +7-91,90-90 +30-59,20-60 +5-98,4-98 +55-55,55-99 +1-95,1-94 +15-87,14-14 +56-92,23-55 +9-97,46-58 +9-93,8-94 +4-10,16-96 +52-53,24-53 +11-59,10-59 +61-76,53-65 +26-45,45-46 +4-38,38-92 +46-46,46-87 +41-61,40-95 +7-17,2-17 +26-27,27-33 +58-92,58-90 +13-96,13-98 +76-76,1-77 +12-97,12-96 +30-30,29-79 +38-86,38-86 +6-94,93-93 +5-9,11-55 +52-52,51-51 +29-88,29-29 +22-65,2-22 +51-60,57-77 +16-78,4-77 +99-99,40-98 +90-90,71-91 +16-86,16-87 +37-92,37-86 +42-79,48-56 +25-47,24-49 +32-35,33-36 +64-75,5-53 +18-53,32-54 +59-74,64-75 +22-76,21-76 +3-90,3-90 +98-98,15-99 +4-17,17-77 +97-97,7-97 +94-95,13-95 +19-56,4-56 +8-12,12-95 +9-75,9-21 +1-45,25-43 +65-82,65-66 +27-63,27-27 +97-99,5-96 +15-85,14-15 +24-75,24-74 +34-81,34-82 +29-97,18-96 +13-80,13-17 +7-93,8-93 +81-82,16-82 +16-59,60-98 +88-93,22-88 +91-93,41-92 +16-57,16-85 +19-46,15-20 +16-52,16-72 +7-7,8-61 +80-86,80-82 +65-75,1-88 +7-78,1-77 +5-94,4-94 +59-88,60-87 +69-73,69-70 +16-16,17-52 +50-91,51-91 +39-57,38-40 +12-73,72-74 +2-4,10-66 +36-38,36-71 +23-80,63-98 +85-91,40-84 +47-48,6-48 +1-3,3-97 +33-33,33-34 +16-18,17-61 +81-83,1-82 +53-82,15-54 +54-84,63-84 +1-98,97-97 +3-77,4-61 +34-79,35-54 +24-24,25-82 +6-99,4-6 +29-49,30-49 +1-2,1-90 +1-37,1-1 +3-4,8-62 +10-85,11-86 +57-59,54-63 +3-93,1-93 +58-59,9-59 +37-38,25-38 +32-96,31-96 +2-91,23-90 +31-70,37-47 +18-77,67-76 +58-91,66-97 +21-44,45-45 +60-61,61-78 +12-12,11-55 +43-65,15-66 +21-70,20-21 +10-10,10-88 +11-71,12-72 +75-75,50-76 +29-29,11-28 +4-81,1-98 +36-54,37-53 +8-92,91-93 +37-76,37-77 +74-99,75-99 +3-98,12-97 +19-83,20-83 +97-99,2-96 +45-45,45-95 +3-87,2-86 +66-74,50-65 +12-12,12-77 +1-93,5-85 +40-52,43-82 +5-69,9-70 +2-11,10-31 +31-74,31-99 +40-96,41-64 +12-38,11-13 +18-55,18-88 +54-84,53-54 +10-95,5-94 +32-70,63-71 +20-84,8-47 +61-87,86-87 +16-31,4-16 +1-97,1-96 +1-5,6-28 +73-73,38-72 +23-50,22-22 +27-93,27-36 +99-99,6-99 +99-99,1-99 +99-99,34-75 +7-24,18-24 +5-43,9-18 +3-6,5-62 +35-67,17-66 +16-45,8-44 +2-90,2-91 +48-97,96-97 +35-74,7-73 +25-86,85-85 +13-78,13-89 +2-79,79-79 +5-98,1-98 +66-66,64-68 +15-85,20-86 +25-41,42-73 +18-30,29-29 +16-20,16-75 +4-6,5-89 +7-56,8-57 +11-64,11-65 +7-7,9-86 +6-68,6-72 +4-92,4-91 +26-28,25-65 +2-57,1-58 +96-98,22-95 +2-82,82-82 +96-98,95-97 +11-91,90-90 +8-87,7-8 +64-92,76-93 +2-4,4-30 +53-92,49-61 +17-50,18-51 +8-64,7-64 +35-60,5-36 +1-6,6-85 +7-62,62-62 +38-42,50-54 +3-3,3-60 +39-48,50-86 +1-97,16-89 +44-72,73-84 +14-68,16-68 +7-55,8-8 +13-79,19-79 +31-94,95-97 +30-63,19-31 +15-83,52-83 +27-27,27-83 +72-72,3-71 +35-99,1-98 +29-80,29-88 +40-71,20-70 +61-93,60-94 +3-93,1-93 +4-4,5-99 +22-69,10-26 +42-74,42-75 +18-39,19-38 +37-43,43-92 +29-31,16-30 +7-95,7-7 +72-73,72-72 +9-90,91-98 +7-51,8-47 +28-88,89-94 +3-94,4-94 +20-41,37-51 +19-34,4-34 +13-63,64-68 +5-98,5-90 +24-93,24-73 +26-56,11-56 +2-75,33-76 +1-99,2-96 +44-55,54-56 +64-99,64-80 +41-64,41-64 +15-80,17-75 +57-59,58-90 +5-12,7-58 +16-50,17-17 +41-48,40-47 +31-32,31-92 +1-91,1-37 +53-67,49-77 +3-75,2-79 +55-76,47-60 +42-42,42-58 +20-42,20-41 +94-98,51-97 +1-44,1-45 +19-50,2-51 +28-82,29-94 +18-97,18-18 +41-89,14-41 +3-36,5-35 +64-85,31-86 +72-96,95-96 +11-18,18-87 +19-63,62-62 +16-17,16-94 +97-97,1-98 +22-95,23-96 +16-16,17-35 +25-96,43-96 +50-87,50-50 +3-92,3-89 +20-78,20-20 +53-53,54-89 +5-43,8-44 +39-85,38-38 +47-76,46-77 +35-78,77-79 +28-47,27-29 +39-39,36-40 +87-98,76-78 +30-35,30-63 +39-53,21-30 +30-30,30-93 +65-97,19-96 +74-77,73-98 +21-95,6-22 +36-89,47-88 +99-99,8-98 +22-68,25-69 +38-90,38-42 +39-88,17-39 +79-85,78-84 +11-74,7-7 +38-45,38-45 +57-90,56-58 +1-2,3-83 +2-48,7-49 +30-95,30-96 +71-96,71-79 +4-89,96-99 +44-93,44-99 +16-16,15-98 +7-95,10-91 +12-15,23-41 +39-62,38-92 +5-10,7-12 +51-91,14-52 +12-12,12-76 +54-58,56-59 +9-9,10-56 +11-42,49-70 +14-76,19-77 +24-33,27-33 +23-98,23-88 +35-78,51-85 +1-1,3-86 +1-2,2-94 +30-36,22-58 +48-48,47-51 +7-82,83-99 +31-77,31-31 +4-6,9-97 +63-85,10-86 +30-80,28-81 +1-1,1-98 +7-97,18-89 +52-89,21-88 +9-69,14-70 +71-72,34-72 +55-61,10-97 +59-88,55-55 +31-54,31-53 +26-35,45-98 +36-79,6-99 +2-3,2-41 +6-85,6-84 +9-97,1-95 +16-45,43-46 +5-81,4-80 +4-91,90-92 +44-86,30-87 +72-74,53-73 +20-20,15-15 +40-62,40-40 +28-99,34-62 +4-89,4-94 +42-58,46-59 +43-72,42-81 +81-83,22-82 +29-43,10-53 +47-55,46-70 +10-84,4-5 +10-93,11-94 +38-74,74-74 +14-48,13-14 +11-91,10-10 +9-11,10-10 +7-60,6-42 +3-93,92-92 +14-69,14-68 +32-45,41-46 +2-99,3-99 +16-83,15-83 +39-44,39-40 +2-76,75-77 +91-92,20-82 +19-50,24-51 +31-77,9-78 +3-99,70-99 +35-36,36-65 +6-24,7-68 +64-91,64-92 +95-96,95-96 +44-58,2-57 +61-61,44-62 +11-98,11-55 +38-47,20-46 +8-15,8-97 +29-53,27-29 +84-95,59-89 +61-62,61-85 +19-77,20-46 +88-92,92-92 +2-99,98-99 +10-79,10-10 +6-91,20-88 +14-74,10-10 +13-34,12-35 +27-87,86-86 +1-1,1-86 +28-31,27-79 +38-80,21-73 +23-64,22-24 +38-94,93-95 +96-98,10-95 +50-51,49-50 +74-88,81-89 +27-62,24-28 +49-49,48-92 +3-5,5-8 +47-87,47-76 +66-86,50-67 +78-96,77-77 +3-91,2-92 +88-91,5-87 +47-88,49-88 +56-80,55-79 +96-96,2-96 +19-38,30-39 +6-93,93-93 +36-98,36-36 +37-37,14-37 +17-17,18-67 +10-83,66-88 +25-89,28-88 +47-99,1-97 +87-87,18-86 +55-60,55-55 +15-15,23-61 +33-67,32-77 +37-42,38-42 +41-41,23-40 +54-66,53-68 +57-98,53-76 +14-92,14-93 +12-96,12-13 +43-43,14-42 +23-91,45-54 +36-59,58-58 +6-6,7-90 +31-38,37-39 +8-94,7-94 +94-94,87-94 +35-78,36-91 +37-90,68-75 +93-93,9-92 +39-80,35-84 +16-89,16-82 +1-86,2-37 +22-75,31-97 +1-97,96-98 +70-82,66-81 +8-94,93-94 +5-94,5-5 +4-75,5-74 +65-65,44-80 +33-97,96-97 +4-58,48-59 +5-99,5-5 +62-70,49-69 +37-42,36-41 +1-98,1-99 +91-92,5-92 +80-89,1-80 +15-92,74-93 +26-93,25-25 +43-46,41-45 +14-14,15-75 +29-29,30-99 +64-98,64-97 +14-86,87-99 +5-6,5-27 +50-75,34-75 +9-24,23-94 +77-78,76-77 +11-27,2-43 +98-99,58-99 +8-87,8-9 +35-35,35-38 +22-85,2-23 +39-84,49-70 +7-15,15-77 +98-98,7-97 +42-47,15-41 +27-34,27-27 +37-37,38-91 +33-81,33-80 +30-51,11-52 +79-80,76-80 +59-98,13-77 +52-55,33-53 +3-67,68-68 +3-72,72-83 +20-43,24-51 +75-89,29-76 +31-56,55-56 +25-50,24-49 +93-99,98-98 +2-76,2-75 +8-80,8-81 +16-18,45-60 +1-1,2-96 +55-82,54-93 +60-89,83-88 +55-88,11-66 +2-99,98-98 +83-85,11-84 +54-69,12-55 +10-10,10-74 +11-21,16-22 +50-71,68-75 +28-99,11-78 +41-51,39-87 +10-11,16-92 +72-72,13-72 +92-92,2-91 +27-46,45-47 +13-47,9-46 +1-99,2-18 +21-96,21-95 +5-5,5-61 +66-66,59-66 +30-82,30-77 +19-19,20-58 +82-89,2-99 +15-15,15-99 +10-10,11-51 +47-97,47-92 +18-20,19-56 +7-11,20-82 +24-73,24-70 +45-45,46-50 +13-91,65-74 +19-82,19-77 +26-98,2-58 +87-88,17-87 +44-51,22-51 +3-95,11-86 +5-49,15-50 +14-77,13-77 +98-99,1-99 +15-60,14-65 +4-8,8-21 +39-86,85-97 +25-92,24-24 +29-29,29-78 +9-63,8-8 +76-76,14-55 +15-88,16-84 +9-89,90-94 +4-89,3-90 +4-33,32-64 +4-98,2-98 +78-86,20-81 +63-89,62-88 +8-56,7-97 +25-44,25-45 +3-32,4-8 +53-86,53-87 +5-85,3-95 +18-24,8-94 +93-98,92-94 +39-53,54-69 +28-73,17-72 +3-93,4-9 +8-46,8-16 +3-3,2-78 +13-22,23-26 +71-72,47-72 +3-8,7-20 +6-73,1-6 +31-99,33-91 +90-99,89-89 +9-81,7-7 +58-59,58-63 +64-83,83-83 +4-5,4-5 +54-92,19-86 +7-8,8-63 +31-48,48-80 +22-86,8-22 +76-91,73-76 +62-78,9-79 +16-93,19-94 +5-95,5-93 +13-80,14-81 +6-80,79-79 +78-84,77-79 +40-83,78-84 +11-68,5-6 +81-81,23-82 +1-27,29-29 +50-60,51-53 +44-49,44-45 +52-62,51-98 +1-98,1-99 +39-97,98-99 +25-52,15-92 +34-99,34-34 +10-35,5-69 +11-11,12-69 +47-53,53-53 +92-94,7-93 +8-8,8-81 +28-85,28-84 +39-88,33-34 +66-83,65-86 +45-94,45-61 +36-60,14-36 +10-40,11-90 +23-75,24-51 +61-63,7-62 +68-83,82-82 +55-60,55-73 +9-44,2-44 +11-95,95-97 +10-62,9-65 +81-81,82-98 +6-56,6-57 +17-50,34-50 +4-34,34-34 +20-98,19-21 +25-39,25-58 +40-79,8-80 +14-57,14-58 +94-95,67-95 +17-24,15-24 +16-18,17-89 +6-58,5-57 +6-99,6-37 +3-3,3-17 +46-74,47-66 +16-38,17-17 +22-97,13-23 +99-99,38-99 +52-65,62-62 +22-24,17-23 +60-98,1-97 +3-71,7-21 +10-94,10-95 +38-90,38-89 +24-45,23-62 +12-14,13-95 +37-87,38-53 +14-45,13-45 +77-77,27-77 +25-83,17-25 +21-94,9-99 +73-73,49-73 +50-82,49-64 +7-95,95-95 +64-86,63-87 +33-85,2-50 +33-87,34-53 +13-31,30-31 +62-63,63-91 +9-91,91-92 +16-72,15-72 +32-40,39-40 +10-98,10-93 +1-3,2-18 +12-62,12-43 +35-68,34-69 +50-52,32-51 +4-37,4-35 +6-94,65-96 +63-88,44-62 +17-49,9-49 +20-49,20-48 +7-91,6-91 +33-63,34-63 +62-63,63-89 +9-62,10-62 +31-31,32-38 +77-87,15-87 +34-89,42-89 +1-2,3-79 +59-65,58-87 +4-57,2-56 +34-54,13-34 +41-95,5-54 +28-76,77-86 +13-13,12-42 +12-97,12-96 +20-27,26-50 +70-84,70-72 +47-75,48-69 +5-75,75-75 +25-80,22-79 +28-78,79-79 +89-89,11-93 +39-74,75-75 +20-88,20-87 +79-80,37-78 +7-17,16-18 +31-68,31-68 +18-36,18-18 +73-96,35-73 +28-98,27-29 +26-75,19-74 +2-4,3-48 +2-3,4-79 +4-93,92-92 +58-89,70-89 +1-99,2-68 +57-78,56-56 +10-46,10-39 +6-61,6-60 +51-90,50-90 +27-90,27-28 +45-45,1-44 +18-31,13-31 +25-51,18-52 +7-28,4-29 +93-93,6-93 +9-50,8-51 +92-94,1-93 +29-91,30-30 +25-75,24-75 +55-55,15-55 +70-73,62-71 +8-84,8-42 +50-76,46-57 +45-80,44-79 +6-86,7-87 +8-83,7-82 +4-30,8-31 +57-95,58-96 +49-50,50-79 +90-92,89-95 +24-24,25-98 +60-75,69-75 +9-83,20-69 +32-33,32-36 +3-3,2-98 +1-84,83-85 +69-99,99-99 +92-97,87-92 +71-96,72-97 +49-49,49-66 +18-18,35-75 +7-94,7-7 +3-48,45-92 +47-86,86-86 +10-42,7-66 +11-85,12-96 +39-77,17-39 +14-24,3-23 +23-23,23-23 +66-66,54-67 +29-29,30-71 +20-89,56-90 +41-56,40-57 +1-99,3-97 +4-92,4-98 +7-39,38-38 +69-71,68-73 +95-97,13-96 +55-84,54-75 +61-79,64-88 +97-98,3-98 +9-42,6-41 +36-86,35-36 +8-91,9-86 +16-45,58-79 +43-43,11-44 +8-74,9-73 +2-78,3-78 +76-86,83-94 +1-96,2-97 +49-79,49-78 +1-1,3-76 +74-89,21-90 +7-97,1-2 +38-73,73-73 +24-76,29-77 +4-43,2-2 +19-20,20-96 +56-77,51-77 +10-82,10-65 +58-71,17-94 +20-74,74-87 +28-84,28-83 +5-81,87-89 +9-40,9-24 +38-80,39-81 +36-36,36-37 +76-76,33-76 +62-62,1-62 +11-27,21-25 +13-59,44-59 +36-89,36-37 +53-70,45-69 +5-42,41-41 +49-49,9-50 +35-59,12-35 +32-63,18-63 +38-69,37-71 +70-97,96-96 +52-80,53-75 +43-43,44-94 +49-83,52-84 +11-76,10-98 +4-91,90-92 +26-54,26-30 +57-86,57-58 +3-97,96-96 +1-1,3-98 +24-36,36-67 +8-64,3-64 +39-98,14-98 +59-62,59-63 +30-42,30-31 +3-87,2-4 +6-79,7-80 +7-66,67-80 +30-48,18-47 +91-96,82-95 +4-78,4-5 +67-68,24-68 +7-7,8-59 +1-83,5-79 +50-67,34-66 +27-74,26-73 +7-94,94-97 +2-27,3-18 +13-55,56-56 +3-3,4-40 +52-66,52-52 +40-40,39-81 +3-54,1-47 diff --git a/aoc_2022/input/day_5.txt b/aoc_2022/input/day_5.txt new file mode 100644 index 0000000..922b345 --- /dev/null +++ b/aoc_2022/input/day_5.txt @@ -0,0 +1,512 @@ +[W] [V] [P] +[B] [T] [C] [B] [G] +[G] [S] [V] [H] [N] [T] +[Z] [B] [W] [J] [D] [M] [S] +[R] [C] [N] [N] [F] [W] [C] [W] +[D] [F] [S] [M] [L] [T] [L] [Z] [Z] +[C] [W] [B] [G] [S] [V] [F] [D] [N] +[V] [G] [C] [Q] [T] [J] [P] [B] [M] + 1 2 3 4 5 6 7 8 9 + +move 2 from 8 to 4 +move 2 from 7 to 3 +move 2 from 9 to 2 +move 4 from 1 to 9 +move 1 from 7 to 8 +move 1 from 9 to 6 +move 6 from 6 to 1 +move 6 from 1 to 6 +move 2 from 7 to 1 +move 9 from 4 to 1 +move 6 from 2 to 7 +move 5 from 9 to 7 +move 7 from 3 to 7 +move 19 from 7 to 9 +move 1 from 7 to 1 +move 3 from 6 to 8 +move 4 from 5 to 6 +move 1 from 4 to 1 +move 2 from 5 to 2 +move 8 from 9 to 7 +move 1 from 5 to 1 +move 3 from 9 to 4 +move 1 from 4 to 9 +move 2 from 4 to 7 +move 1 from 7 to 6 +move 3 from 8 to 9 +move 17 from 1 to 7 +move 21 from 7 to 3 +move 4 from 6 to 2 +move 1 from 7 to 2 +move 8 from 9 to 2 +move 2 from 8 to 3 +move 1 from 1 to 7 +move 2 from 7 to 9 +move 1 from 6 to 1 +move 1 from 7 to 4 +move 1 from 1 to 2 +move 4 from 6 to 1 +move 1 from 9 to 2 +move 1 from 7 to 9 +move 1 from 4 to 1 +move 7 from 3 to 7 +move 6 from 2 to 8 +move 3 from 3 to 4 +move 1 from 8 to 4 +move 12 from 2 to 8 +move 2 from 9 to 2 +move 12 from 3 to 2 +move 12 from 8 to 6 +move 3 from 4 to 2 +move 19 from 2 to 8 +move 4 from 1 to 9 +move 1 from 3 to 8 +move 1 from 4 to 6 +move 1 from 2 to 4 +move 1 from 6 to 3 +move 8 from 9 to 6 +move 1 from 4 to 9 +move 1 from 3 to 1 +move 1 from 9 to 5 +move 11 from 6 to 3 +move 5 from 8 to 6 +move 14 from 6 to 9 +move 2 from 1 to 4 +move 3 from 8 to 1 +move 8 from 8 to 4 +move 3 from 3 to 4 +move 8 from 3 to 1 +move 9 from 8 to 2 +move 12 from 4 to 2 +move 12 from 9 to 3 +move 9 from 3 to 4 +move 1 from 5 to 3 +move 7 from 7 to 1 +move 2 from 9 to 1 +move 2 from 4 to 6 +move 16 from 2 to 6 +move 1 from 2 to 8 +move 10 from 1 to 4 +move 1 from 8 to 2 +move 4 from 1 to 6 +move 15 from 4 to 8 +move 1 from 4 to 2 +move 2 from 6 to 8 +move 5 from 2 to 8 +move 21 from 8 to 3 +move 6 from 1 to 3 +move 15 from 6 to 1 +move 1 from 2 to 1 +move 1 from 8 to 9 +move 15 from 1 to 3 +move 7 from 3 to 8 +move 1 from 7 to 9 +move 2 from 9 to 8 +move 2 from 3 to 7 +move 4 from 6 to 1 +move 2 from 7 to 8 +move 1 from 6 to 2 +move 4 from 8 to 3 +move 2 from 4 to 8 +move 1 from 2 to 1 +move 4 from 1 to 5 +move 3 from 5 to 8 +move 1 from 5 to 1 +move 12 from 8 to 3 +move 3 from 1 to 2 +move 17 from 3 to 5 +move 2 from 5 to 3 +move 15 from 5 to 1 +move 1 from 1 to 4 +move 17 from 3 to 2 +move 5 from 2 to 8 +move 17 from 3 to 6 +move 6 from 1 to 3 +move 5 from 1 to 6 +move 4 from 8 to 9 +move 10 from 3 to 8 +move 7 from 2 to 9 +move 2 from 6 to 3 +move 2 from 2 to 8 +move 1 from 1 to 4 +move 17 from 6 to 9 +move 13 from 8 to 2 +move 2 from 4 to 1 +move 1 from 6 to 7 +move 2 from 2 to 4 +move 8 from 2 to 7 +move 1 from 6 to 1 +move 4 from 7 to 9 +move 1 from 4 to 7 +move 1 from 4 to 6 +move 1 from 1 to 7 +move 5 from 2 to 4 +move 2 from 3 to 8 +move 6 from 7 to 1 +move 1 from 7 to 4 +move 11 from 9 to 7 +move 1 from 8 to 4 +move 8 from 1 to 2 +move 1 from 1 to 4 +move 1 from 1 to 9 +move 1 from 6 to 1 +move 1 from 8 to 4 +move 6 from 2 to 3 +move 1 from 1 to 3 +move 1 from 6 to 7 +move 1 from 4 to 6 +move 6 from 2 to 5 +move 7 from 3 to 4 +move 2 from 7 to 6 +move 2 from 7 to 3 +move 8 from 7 to 5 +move 3 from 6 to 7 +move 1 from 5 to 7 +move 1 from 7 to 5 +move 13 from 9 to 3 +move 1 from 3 to 8 +move 8 from 4 to 3 +move 3 from 5 to 1 +move 7 from 4 to 1 +move 5 from 1 to 4 +move 3 from 1 to 4 +move 2 from 1 to 8 +move 2 from 7 to 5 +move 2 from 8 to 9 +move 1 from 7 to 6 +move 1 from 8 to 7 +move 4 from 5 to 1 +move 1 from 7 to 2 +move 2 from 1 to 8 +move 1 from 2 to 1 +move 5 from 9 to 7 +move 3 from 9 to 4 +move 8 from 4 to 8 +move 6 from 8 to 5 +move 11 from 5 to 1 +move 3 from 4 to 2 +move 9 from 3 to 7 +move 6 from 7 to 2 +move 13 from 3 to 2 +move 3 from 8 to 1 +move 2 from 2 to 8 +move 1 from 6 to 7 +move 3 from 8 to 4 +move 9 from 1 to 5 +move 5 from 5 to 8 +move 2 from 8 to 4 +move 3 from 9 to 4 +move 2 from 8 to 2 +move 8 from 1 to 5 +move 8 from 7 to 9 +move 1 from 8 to 3 +move 15 from 5 to 9 +move 6 from 4 to 1 +move 1 from 7 to 2 +move 4 from 2 to 1 +move 1 from 3 to 4 +move 5 from 1 to 7 +move 3 from 7 to 3 +move 14 from 9 to 8 +move 1 from 4 to 8 +move 1 from 7 to 6 +move 2 from 4 to 5 +move 4 from 1 to 5 +move 1 from 6 to 5 +move 4 from 9 to 3 +move 5 from 3 to 7 +move 4 from 5 to 9 +move 1 from 3 to 7 +move 1 from 3 to 2 +move 4 from 5 to 2 +move 4 from 7 to 5 +move 4 from 2 to 1 +move 1 from 5 to 4 +move 7 from 9 to 7 +move 1 from 4 to 2 +move 1 from 5 to 8 +move 21 from 2 to 4 +move 1 from 9 to 8 +move 1 from 9 to 4 +move 3 from 4 to 1 +move 7 from 1 to 6 +move 1 from 5 to 1 +move 18 from 4 to 7 +move 1 from 5 to 8 +move 27 from 7 to 8 +move 1 from 7 to 3 +move 1 from 3 to 7 +move 1 from 7 to 2 +move 1 from 2 to 1 +move 42 from 8 to 9 +move 1 from 8 to 7 +move 1 from 8 to 2 +move 1 from 4 to 6 +move 1 from 2 to 9 +move 2 from 1 to 2 +move 1 from 7 to 3 +move 7 from 6 to 4 +move 4 from 9 to 6 +move 1 from 3 to 2 +move 1 from 2 to 7 +move 2 from 2 to 5 +move 1 from 8 to 4 +move 1 from 9 to 3 +move 5 from 4 to 7 +move 1 from 5 to 6 +move 1 from 5 to 9 +move 1 from 6 to 3 +move 1 from 7 to 5 +move 2 from 3 to 2 +move 22 from 9 to 7 +move 2 from 2 to 3 +move 18 from 7 to 9 +move 1 from 4 to 9 +move 1 from 1 to 4 +move 4 from 7 to 3 +move 4 from 3 to 2 +move 3 from 4 to 5 +move 1 from 2 to 4 +move 5 from 6 to 9 +move 1 from 5 to 3 +move 1 from 4 to 7 +move 2 from 5 to 1 +move 3 from 2 to 4 +move 1 from 5 to 6 +move 2 from 7 to 9 +move 1 from 6 to 8 +move 2 from 3 to 2 +move 2 from 4 to 7 +move 1 from 8 to 7 +move 1 from 4 to 6 +move 35 from 9 to 7 +move 13 from 7 to 3 +move 1 from 2 to 7 +move 1 from 2 to 5 +move 1 from 5 to 8 +move 1 from 8 to 5 +move 8 from 7 to 3 +move 1 from 6 to 4 +move 6 from 3 to 9 +move 1 from 1 to 9 +move 1 from 4 to 1 +move 14 from 9 to 8 +move 1 from 5 to 7 +move 16 from 3 to 2 +move 2 from 1 to 2 +move 1 from 9 to 2 +move 1 from 8 to 1 +move 1 from 1 to 3 +move 7 from 2 to 9 +move 6 from 9 to 8 +move 1 from 3 to 4 +move 3 from 7 to 6 +move 2 from 2 to 1 +move 1 from 4 to 7 +move 2 from 2 to 5 +move 1 from 9 to 6 +move 2 from 2 to 5 +move 2 from 6 to 2 +move 4 from 5 to 4 +move 5 from 2 to 6 +move 1 from 1 to 7 +move 1 from 1 to 2 +move 13 from 8 to 1 +move 2 from 8 to 4 +move 19 from 7 to 4 +move 3 from 1 to 6 +move 11 from 4 to 3 +move 2 from 7 to 9 +move 4 from 2 to 5 +move 2 from 9 to 5 +move 1 from 7 to 4 +move 2 from 5 to 7 +move 4 from 3 to 4 +move 3 from 4 to 1 +move 3 from 5 to 1 +move 9 from 6 to 4 +move 1 from 7 to 9 +move 1 from 7 to 5 +move 10 from 1 to 4 +move 1 from 9 to 6 +move 1 from 6 to 8 +move 32 from 4 to 5 +move 7 from 5 to 4 +move 27 from 5 to 9 +move 5 from 3 to 2 +move 3 from 2 to 8 +move 1 from 6 to 2 +move 8 from 4 to 9 +move 1 from 2 to 9 +move 8 from 8 to 6 +move 2 from 4 to 3 +move 1 from 2 to 3 +move 15 from 9 to 8 +move 4 from 1 to 4 +move 3 from 4 to 8 +move 6 from 9 to 7 +move 1 from 4 to 9 +move 8 from 8 to 2 +move 2 from 1 to 9 +move 2 from 7 to 9 +move 10 from 8 to 3 +move 6 from 2 to 6 +move 2 from 3 to 2 +move 6 from 6 to 3 +move 1 from 7 to 5 +move 8 from 3 to 2 +move 4 from 3 to 2 +move 1 from 3 to 5 +move 6 from 6 to 1 +move 4 from 3 to 7 +move 2 from 5 to 8 +move 3 from 7 to 5 +move 6 from 1 to 7 +move 1 from 3 to 4 +move 1 from 3 to 9 +move 10 from 7 to 4 +move 8 from 2 to 8 +move 11 from 9 to 5 +move 11 from 4 to 1 +move 5 from 2 to 6 +move 3 from 2 to 7 +move 11 from 1 to 6 +move 1 from 5 to 6 +move 8 from 5 to 4 +move 19 from 6 to 7 +move 3 from 7 to 9 +move 3 from 5 to 4 +move 1 from 2 to 5 +move 3 from 5 to 7 +move 8 from 9 to 6 +move 2 from 4 to 1 +move 1 from 1 to 9 +move 2 from 9 to 7 +move 6 from 6 to 2 +move 2 from 4 to 6 +move 4 from 8 to 6 +move 1 from 8 to 1 +move 7 from 6 to 7 +move 1 from 9 to 4 +move 5 from 8 to 4 +move 3 from 2 to 6 +move 4 from 6 to 4 +move 2 from 9 to 6 +move 3 from 2 to 9 +move 16 from 4 to 8 +move 1 from 6 to 8 +move 2 from 9 to 5 +move 1 from 9 to 7 +move 2 from 5 to 2 +move 1 from 4 to 6 +move 2 from 2 to 5 +move 1 from 9 to 6 +move 3 from 7 to 3 +move 7 from 7 to 8 +move 2 from 7 to 1 +move 3 from 8 to 5 +move 3 from 6 to 2 +move 4 from 7 to 4 +move 1 from 5 to 1 +move 1 from 5 to 7 +move 3 from 3 to 4 +move 5 from 1 to 4 +move 16 from 7 to 2 +move 5 from 4 to 7 +move 19 from 8 to 1 +move 11 from 2 to 9 +move 11 from 9 to 6 +move 2 from 1 to 6 +move 2 from 4 to 1 +move 5 from 4 to 6 +move 1 from 5 to 9 +move 1 from 9 to 6 +move 2 from 2 to 6 +move 1 from 5 to 4 +move 8 from 6 to 5 +move 16 from 1 to 6 +move 1 from 4 to 9 +move 3 from 2 to 9 +move 2 from 2 to 5 +move 2 from 5 to 8 +move 4 from 8 to 4 +move 4 from 9 to 7 +move 2 from 1 to 3 +move 5 from 6 to 4 +move 21 from 6 to 2 +move 9 from 7 to 3 +move 1 from 1 to 2 +move 1 from 5 to 3 +move 23 from 2 to 7 +move 1 from 7 to 5 +move 3 from 6 to 1 +move 9 from 4 to 5 +move 11 from 7 to 1 +move 2 from 3 to 4 +move 1 from 3 to 7 +move 1 from 4 to 1 +move 10 from 1 to 6 +move 5 from 7 to 1 +move 3 from 1 to 4 +move 7 from 1 to 7 +move 4 from 3 to 8 +move 4 from 7 to 4 +move 5 from 7 to 3 +move 2 from 4 to 9 +move 1 from 8 to 1 +move 4 from 4 to 1 +move 1 from 6 to 1 +move 1 from 6 to 5 +move 16 from 5 to 1 +move 2 from 5 to 7 +move 1 from 5 to 6 +move 2 from 8 to 2 +move 1 from 7 to 9 +move 3 from 9 to 5 +move 2 from 5 to 4 +move 6 from 7 to 1 +move 3 from 4 to 7 +move 1 from 8 to 6 +move 5 from 1 to 4 +move 1 from 6 to 1 +move 19 from 1 to 5 +move 1 from 7 to 6 +move 9 from 3 to 1 +move 6 from 6 to 5 +move 4 from 6 to 9 +move 3 from 9 to 4 +move 13 from 1 to 4 +move 1 from 3 to 1 +move 2 from 5 to 1 +move 1 from 2 to 3 +move 1 from 3 to 9 +move 4 from 5 to 4 +move 1 from 2 to 3 +move 1 from 3 to 5 +move 1 from 9 to 1 +move 1 from 9 to 5 +move 19 from 4 to 7 +move 4 from 1 to 6 +move 5 from 4 to 3 +move 3 from 6 to 1 +move 1 from 6 to 8 +move 2 from 1 to 6 +move 2 from 1 to 7 +move 2 from 6 to 3 +move 2 from 3 to 1 +move 8 from 7 to 6 +move 5 from 3 to 9 +move 2 from 4 to 9 +move 2 from 6 to 8 +move 10 from 7 to 2 +move 7 from 2 to 9 +move 1 from 8 to 9 +move 1 from 1 to 2 +move 2 from 9 to 3 +move 2 from 8 to 7 +move 1 from 1 to 6 +move 1 from 2 to 8 +move 2 from 2 to 5 +move 4 from 5 to 7 +move 5 from 6 to 1 +move 1 from 3 to 4 diff --git a/aoc_2022/input/day_6.txt b/aoc_2022/input/day_6.txt new file mode 100644 index 0000000..5f190e2 --- /dev/null +++ b/aoc_2022/input/day_6.txt @@ -0,0 +1 @@ +hqhnqhqshhslswsffchfcfbblvlblqlggfwwqfwwqdddbbbhzhjjrqjqbjqjwqjwqwhwrrmcrrjqjjlllcvcrrnpptzpzmmswmmzrzjrrfcrfccpbpzzvrrdndllttwftwwgzzwhwggdvdnnlrnncscbcfcctchcdchdccztzgzjjtdtcdtcchrrgpgzgsgpsggvtvppdccfhcfclfcfdfnddlbbptbtdbtdtjdjgdjjzljlssgbgcgqcqzccfnftfjjsgstggsngsscvssjzjnjtntvnvssrqqhtqtvqtvvjbvvbnvvqvmvrmmdsdvdwwnbnvbnvvcgvcczcfzftfsfrfsfttldtdrrgrgmgbbdvvbqbhqbqlqsqbsbpbgbvgbgwwrswrwrwttvnnzdnzzwggrmrfmmvllzwlwzzlvlbvllgsllpnlnvncvcvqqrwwcmcczhchzczbccdwcwvwzwwvddlwlhljlqjqnncntnctczzmwmlmccpggljlssqswsmmpvmvwvrrcpcrprmprrtdrtdrrsjsmshmmdpdlppbnbvvmmflmmjvjhvhjvjsjbjwjvvblvbvlbbllwlslvljvlvdvdgvgcchnhpnhnvhhtfhhvssczztlzzgvvqqghqgqssdscsnsrsmrmmwgwmgmlmdmggbgzbgzgdzdzccghgfgddtntftddpdrdrmrjmmmzttqmttnwngggtgtqtqnqhnqqpnnntrntrnnshhjtjzzfqqblqqlblslflmlttcwtwzzrlrnrcrrrgtrrftfhthzhggwggvgvvfvddcnddfjddzqzrrvtrvrfrrgpgrgngsgddlmddzgzppdzzjzhjhjhqqbpbvvlrvrsvrvnrrsgsttndnbngnppmlppvgvfggvcvrvnnsnfnnfqfwwppnddrrfqqgbqqfmmlnlnngwgcgjgnjgjsgjgqjjnccdttpqttswwcgcmgmccrppmqmbbfwwvdwdfwfjwfjjblldsdrdvvgcvcwwllfpllcslsvssnvsnvvhnvnvwwcgwccslsbbnlbnbrrrtprptpdpdvdttgsgwswppcdchhqbqcbqbzbgbbstshthsttqgtqtpqqzhhwhghwwmbbdlbbtlltsllbvbnvvmqvqtvqvttlwtltmmrttwgtwwfdddwcchtchhbthbbclczzqbzzpvvwzwswggjddntnrnnwmnnbdbmbccqgqvvsnvvqbvbzvvzmvzzrfrlfrfhhdvddnmnnmhmqhhrhlrldljlbljjgqqvdvhhgmgvgddmmznndmmhssznsswvwdvdzdhhscssntnftfmmrggbmbmgmlltctbtbntnqqscqcscrcrhrlhhdchhzccvvbfvvpfffbwbsbjjmgmwgmgppjnpjphhlmhhpwwhwzhhhzbbzzcbchhpnnptpvphhsdsccffqbqllchlhlwlcljlppnccqsstzstswtwwljwjmmpttvqqspsjjclljqqlhqqtnnbrrsbrbjjllrmrjmjzmmclmclmmcvvbddhnnmhmbbwqqqhrqqtqmqbqdbdtdvvcscshccmffhqffdgdcgddljdjbdbjbdbrrtjjtnntpntpnpmnpmpgghffrnfrnnmdnmnhmmjcjffftrrttfwfvwvcwwrmwmpwmmnvntthmmgmbbcdclcppjhpjhjwwlppgsszqqwggmttfrfqflfsfmmmhchshmmjtjjgdjjnnsvsmsnwcgdfqljmnphlfdrhpggfqnhnszgpndhdqcgfhtdcgbsbtmhvnnrmqzqqcjdqndzbnrhwjvbvcldmnwltgpqbmstntnggtbqjzzqrfdsfttdfrcnsrpwrjrjqbgtjfmlwsrzdbdqvbtczgsjqhtgmctjfmdglfrsvqtgwpbqghzgzdfwzhbdhlmhdvhwjrdhhtjptvwpmjnmfcjdmdczmczvdqwvbgtvlwvwnvdlbqfshmlmvzzcmjbtpwpwgsqhfsgljzhbppcztfjdntzcvllqnzrqjwfjrlgvhmbpvbtqjrdzcsmcjzcdsmvcmhrbhgnscnfrfmscqsqpqplbrzhsrlsvvpmfdtdmtlrtvspmlljmfpshfmstjgnrrwmqlbnwbndcfdstrtqtnzpfqlcgrzmsnmhllljdgtmvftjttbwhqzcqwbwdbshgcqrptfjwbbfsjnvzztlbdchqrlbbrcnsswmhwphfwrbnvrncbrthprmltlwwlfpbqhdfqzwwcwjgqzdnvmhwpzpbtpwwvzcpfcsfqpwjljzzfwzmlfvhsccppzlzjlrvlpdtjpcptnvqjwtdbzrqwnfwmmjndflqqggczrfjlpdfjffctprnmhfdqvnzbfvhszzdmngnlmwzfdrbvlvjnmbllgrczssqcrhbmnpmqlrzgmqmhgsvcdlqnmlhlzvqzhnccbctslzlbcpdvqltqncpcrzwdchrqmwfwlcbcvfnnpjntfrznqdjsdtzqjjttddwvnfqmznhflblzvvtbwdzrrlqlmndzzzwnpbhhlvlbswfjtbnhlccscbnfgjtwbfdlwvzszwnwzhlbcdpvgqjcrpzsvvnfwqcqvrmhzhggvmzwggdpbfrdscjwhsdsbbjcnzldhzcvqtjrhsbfjlrlpvtcqhnnsvslfrdjvjhfhdcfzqchpvvhzbpqglqlrdttrdtndzhnzhtqndghtgmpsnhptprqzhbbdcrgmbvrvqmbptqgnmsccwmhrlpddvmhjntllwrzqwnsjchnblcgndjtmpswwgcstdftqcbhzgttrhnpvrhspjznhhvrlpdqbzzrvzjphcswhljdldvsrdhzltwgrcsvqwnhtqqjjrjgrplzmsnjhzrfbtqgdfgnbpvjrfzrrpdphgzrfbswdhzgbzswqtwwdtrvvswmjvwhqddfzjhgdqsfnwbmlcfwtmpldrdpwjwggbpmncvbghzjmpsqpvnmbhjfzzpsjdgmrtnndhzrphjzdbgrrnthtrfnspdngbdmwbnfjlsndqswfsvfqftqlgqjpfsfpmdbsjfrptvbpvflqgvlmmbchhghhrwmvdlrhlsdtvjjchwglcrwfsfnnbhjbtccbjsfwrbzrvgsbfnvzghhrqblqchjvdtrrbrwwwmfnczzmmrqdggsfrqbldbbfbbcthtsvpcnlbjjztwvhctbrjltqdwbzmrrfslbmjpnqwllbvjzgfsfqqtwbgwgclgdflshfhwggwdqlgbmdmdqglrtfwbddtsltmsvswhgjtqwtnrncpdzhnpfqcjnjzmtbjfzpjwgfbfggmsmfdhfbjctnhchpgfspthdbfpmvrmdbbspvwzqqwnmfwdnnblbcjszbccgflngnjjwsqshfbhjwgzrmvsgnrdbgwfhdvpmznpnvznfcqdclztcptjrrpbmpztwwbvlvtmngfhmfbfmrjbjzlrcvgllrlgthltstnwmffntqrwsrndlzqhztwpcwbdjjztgdzmgtthcvtvnjzzhvstfqhgddddgdsrbcqzqspjrncphhtbnslzphrtfqphffjrrlgwbrwqfzzqvzhnffcwvrncttgplshccglvchvlcbnlthhmzvcrfjvjqfsjjzzgqlpslfwngqnbgcwffpcqhlmlhvwssrpjbrcbftpzbbpptzrdqwpzpdjhtwbvwcqbfnwtflfgzgttglpcwdnzsmjffgfftdnpzlpszmzrrhvlzdfpgbzqlvvfslnndcmjvvpwzwcdzpcttfwbsdswmfqbbhbfbjvbvtspbbhmphzjsjcmmzpvvzhtvzlgwlqqvbnrgtszvghjfmchrwwhpmbsvfmgvqdtmvdtjppchbsgqrtgtnzczqmpgjdbmmflfpjbcdmhldwpgdtdvsbzhztjzfhcsbndfjntbldjnqwdffqspfnlplbtcdjtwdjhldtsdfrnmpfhzghnpcqlhhgblmqjvwhndqfbccvzzlbzbdprvcpwjjhrqnjptwssbjhgvpgtfzqwrzjvbdgwtnmptvdjrffcmbzmzcmrfbjv diff --git a/aoc_2022/input/day_7.txt b/aoc_2022/input/day_7.txt new file mode 100644 index 0000000..ca23499 --- /dev/null +++ b/aoc_2022/input/day_7.txt @@ -0,0 +1,1082 @@ +$ cd / +$ ls +dir brhvclj +dir clnvqg +dir dtqtvvrn +dir lcz +dir pcqjncwl +dir qwvfpgl +dir rtmj +dir shg +dir tcdmgwp +$ cd brhvclj +$ ls +40016 mtlscfrd.gdr +dir mvslzl +112449 npp.vjv +46674 pbgjwb +dir qdtls +dir tfns +$ cd mvslzl +$ ls +dir dngldfww +dir dzplphqw +$ cd dngldfww +$ ls +102218 wcrvztrh.mzb +$ cd .. +$ cd dzplphqw +$ ls +93724 brhvclj +169467 cwqwcjc.lgd +$ cd .. +$ cd .. +$ cd qdtls +$ ls +dir nnlzrwgh +dir svc +168425 tcq.lng +99608 vjrntvbz.sgn +dir wshf +dir wtmdzgvg +$ cd nnlzrwgh +$ ls +141976 fnb +$ cd .. +$ cd svc +$ ls +87249 hzrml +46855 qbmgmmc +147235 zsbsq.cvq +$ cd .. +$ cd wshf +$ ls +25072 npp.vjv +$ cd .. +$ cd wtmdzgvg +$ ls +165660 cfpfdqq.vfd +dir dhbrmn +176203 dscvmj.wpn +dir rcdwft +$ cd dhbrmn +$ ls +200474 brhvclj.hcf +233675 npp.vjv +218734 ttntt +$ cd .. +$ cd rcdwft +$ ls +dir wvfdjv +$ cd wvfdjv +$ ls +104669 mdrr +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd tfns +$ ls +dir clnvqg +15637 mlft.cvp +dir pqp +77675 svc.mqv +dir ttntt +dir wfcczs +dir wshwhzw +$ cd clnvqg +$ ls +dir brhvclj +103188 cdfj +256254 svc +72302 tndnh.vgg +$ cd brhvclj +$ ls +dir brhvclj +$ cd brhvclj +$ ls +246966 mlrcgl +93485 ttntt.ztq +$ cd .. +$ cd .. +$ cd .. +$ cd pqp +$ ls +dir svc +206837 ttntt.qpm +$ cd svc +$ ls +202934 bsczwq +$ cd .. +$ cd .. +$ cd ttntt +$ ls +dir dfmgqmvm +126511 hpdm.ctv +$ cd dfmgqmvm +$ ls +dir qbms +201736 wczpvsw.ddr +dir wshwhzw +$ cd qbms +$ ls +20046 lvfphhpw.sjv +186516 pdbtbmf +149493 svc.dqh +dir tdvtcmwz +$ cd tdvtcmwz +$ ls +100584 hpdm.ctv +$ cd .. +$ cd .. +$ cd wshwhzw +$ ls +116856 hwvgnwf +$ cd .. +$ cd .. +$ cd .. +$ cd wfcczs +$ ls +dir rlbnv +$ cd rlbnv +$ ls +55214 ttntt.mnl +$ cd .. +$ cd .. +$ cd wshwhzw +$ ls +34867 clnvqg +$ cd .. +$ cd .. +$ cd .. +$ cd clnvqg +$ ls +dir bchstbpm +dir bgbdbr +dir clnvqg +25956 clnvqg.rbr +60939 gzzpwvzn.zzr +212583 jjfrh.ttr +dir jlsvjcdm +dir mzmqr +dir rtmg +dir tqnmwdl +$ cd bchstbpm +$ ls +dir sgbwd +dir ttntt +$ cd sgbwd +$ ls +267083 clnvqg +$ cd .. +$ cd ttntt +$ ls +243283 rwcmtrr.nvf +$ cd .. +$ cd .. +$ cd bgbdbr +$ ls +dir jshpz +$ cd jshpz +$ ls +dir dpnqrg +dir gsvwsc +173172 jjfrh.ttr +203836 jzm.fcn +83990 pdbtbmf +276348 pqcmhzhv.ltv +dir ttntt +dir wshwhzw +$ cd dpnqrg +$ ls +140379 dvmnw.gmd +$ cd .. +$ cd gsvwsc +$ ls +84951 pdbtbmf +$ cd .. +$ cd ttntt +$ ls +149785 brhvclj +dir rfcssr +$ cd rfcssr +$ ls +13174 lgwztd.fcm +$ cd .. +$ cd .. +$ cd wshwhzw +$ ls +55302 clnvqg.nqz +dir cpbh +dir mrv +139006 wshwhzw.chb +dir zgtnfm +$ cd cpbh +$ ls +13930 wvnzlj +$ cd .. +$ cd mrv +$ ls +207468 cqhpvpzf.zjn +dir drgcn +211947 pdbtbmf +dir svc +$ cd drgcn +$ ls +dir brhvclj +247117 gnrdmjls.tps +$ cd brhvclj +$ ls +162309 hpdm.ctv +231880 jjfrh.ttr +$ cd .. +$ cd .. +$ cd svc +$ ls +270511 cjsh +dir ttntt +$ cd ttntt +$ ls +43248 ssrrt.dqr +$ cd .. +$ cd .. +$ cd .. +$ cd zgtnfm +$ ls +dir vhjtgv +$ cd vhjtgv +$ ls +98550 svc +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd clnvqg +$ ls +dir gcnc +141966 nrlptqrq.jtv +$ cd gcnc +$ ls +268141 bqzr +dir brhvclj +dir cjcpzv +262869 npp.vjv +$ cd brhvclj +$ ls +dir qqr +dir qwwl +265677 rcnn +$ cd qqr +$ ls +143274 stpjr +$ cd .. +$ cd qwwl +$ ls +dir clnvqg +213885 mfctzj +27640 tvp.fqv +$ cd clnvqg +$ ls +dir brhvclj +dir zzhwq +$ cd brhvclj +$ ls +67021 ttntt.fjp +$ cd .. +$ cd zzhwq +$ ls +dir gsplfsvm +$ cd gsplfsvm +$ ls +103196 qgjmbn +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd cjcpzv +$ ls +173344 bjpb.tln +$ cd .. +$ cd .. +$ cd .. +$ cd jlsvjcdm +$ ls +dir bmgbjnbr +dir brhvclj +106074 brhvclj.cwn +96364 gwgzvwf +199266 hpdm.ctv +dir svc +168747 tsb.grv +170407 ttntt +$ cd bmgbjnbr +$ ls +dir bddbffsf +dir brhvclj +143376 clnvqg +dir ddbcvhqr +199097 flq.rls +156627 hbjcftfb.vvj +41970 jjfrh.ttr +dir rlj +dir svc +dir wshwhzw +dir zhczqq +$ cd bddbffsf +$ ls +181609 svc.vdv +$ cd .. +$ cd brhvclj +$ ls +dir brhvclj +64387 cdfj +168933 fhq.lzh +193119 njrrzm +129346 svc.tqs +$ cd brhvclj +$ ls +dir bpgmc +dir brhvclj +dir nrrpsn +dir ttntt +$ cd bpgmc +$ ls +42515 npp.vjv +dir wshwhzw +$ cd wshwhzw +$ ls +80221 pdbtbmf +$ cd .. +$ cd .. +$ cd brhvclj +$ ls +74083 qfwj +$ cd .. +$ cd nrrpsn +$ ls +58623 cdfj +$ cd .. +$ cd ttntt +$ ls +117488 ddd.sbj +69152 npp.vjv +$ cd .. +$ cd .. +$ cd .. +$ cd ddbcvhqr +$ ls +3037 brhvclj.ngg +dir flz +85361 hhjw.czf +193196 npp.vjv +dir svc +173507 tmfc +274216 ttntt.ddw +$ cd flz +$ ls +249582 pdbtbmf +$ cd .. +$ cd svc +$ ls +dir ddrthl +dir dptjfd +dir hqncdcdh +$ cd ddrthl +$ ls +148058 clnvqg +185720 svc.wch +$ cd .. +$ cd dptjfd +$ ls +101663 cdfj +80244 clnvqg.qzn +98435 jrsmdsjv.dft +dir nhjthr +$ cd nhjthr +$ ls +105069 fnvztg.pwp +dir pmgzdp +dir qgvzbclg +$ cd pmgzdp +$ ls +94671 pdbtbmf +$ cd .. +$ cd qgvzbclg +$ ls +183904 pdbtbmf +$ cd .. +$ cd .. +$ cd .. +$ cd hqncdcdh +$ ls +105956 cwdsppc.hnn +91439 pdbtbmf +21314 wshwhzw.dcn +$ cd .. +$ cd .. +$ cd .. +$ cd rlj +$ ls +173111 clnvqg +dir gsfzgvpz +dir ljwrdb +102231 pdbtbmf +$ cd gsfzgvpz +$ ls +266749 bcdrtwzd.nrz +$ cd .. +$ cd ljwrdb +$ ls +dir dlmhm +dir mpmtj +$ cd dlmhm +$ ls +50087 ttntt.rdv +$ cd .. +$ cd mpmtj +$ ls +254330 czh +$ cd .. +$ cd .. +$ cd .. +$ cd svc +$ ls +131211 pdbtbmf +214730 tgpprcnb.dfv +$ cd .. +$ cd wshwhzw +$ ls +225058 cppwqrg +dir hrzsfhct +228371 tzvn.hhj +dir vjjgrt +$ cd hrzsfhct +$ ls +dir pqvlqpdt +139531 pvlhtz.grj +$ cd pqvlqpdt +$ ls +211827 hwnlsv.hhq +$ cd .. +$ cd .. +$ cd vjjgrt +$ ls +dir hdlcnfm +266998 npp.vjv +259189 qndrvvqv +$ cd hdlcnfm +$ ls +dir snhftjr +$ cd snhftjr +$ ls +198904 svc.wwb +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd zhczqq +$ ls +dir brhvclj +$ cd brhvclj +$ ls +123699 ttntt.cds +$ cd .. +$ cd .. +$ cd .. +$ cd brhvclj +$ ls +dir dvqszvl +dir ttr +$ cd dvqszvl +$ ls +172068 jjfrh.ttr +$ cd .. +$ cd ttr +$ ls +dir rzsqqhn +$ cd rzsqqhn +$ ls +129077 cbpg +dir clnvqg +12120 jjfrh.ttr +211464 npp.vjv +12541 qgl.tvn +136465 snbrwg.cpg +$ cd clnvqg +$ ls +263592 cdfj +249813 pdbtbmf +190382 vpzfll.wqw +dir wshwhzw +$ cd wshwhzw +$ ls +57060 cdfj +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd svc +$ ls +dir clnqz +dir ggrwpjjg +dir mjvm +217220 ngntgnrw.brd +dir svc +146817 wshwhzw +dir zmchn +$ cd clnqz +$ ls +108229 clnvqg +195990 svc +29403 swf +$ cd .. +$ cd ggrwpjjg +$ ls +dir gdftglf +142336 hpdm.ctv +190941 npp.vjv +$ cd gdftglf +$ ls +209357 csfsthp.cnc +30622 rjs +dir ttntt +15836 wvqc.zsz +$ cd ttntt +$ ls +224617 rvsvs.dfh +$ cd .. +$ cd .. +$ cd .. +$ cd mjvm +$ ls +dir ctlddnj +dir ddwg +207564 ncls.nwh +139671 npp.vjv +212692 wbqnvn.qhq +$ cd ctlddnj +$ ls +254493 dzr.dfv +123026 fmbzjww +79075 svc +43782 svc.vnw +dir vgqf +258169 vtljbndt.tvc +$ cd vgqf +$ ls +277076 dhqhfb +dir ffqg +dir svc +$ cd ffqg +$ ls +dir nrd +$ cd nrd +$ ls +205734 vrwph.bgp +$ cd .. +$ cd .. +$ cd svc +$ ls +dir brhvclj +111819 hpdm.ctv +68407 nglt +168768 ttntt +$ cd brhvclj +$ ls +75177 hvppncbd.sgs +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd ddwg +$ ls +21210 phwqwshr +207062 rftdb.mcq +dir tthrf +$ cd tthrf +$ ls +dir czjnvnn +236764 dhhw.mbs +25583 ljdwgwhm.fbm +dir lrgtg +113563 srsh.fpb +dir vzhpqb +110004 zgcvsc.pmm +$ cd czjnvnn +$ ls +143802 cbqmvtw.zjv +37329 svc.rwf +$ cd .. +$ cd lrgtg +$ ls +dir gpwpc +$ cd gpwpc +$ ls +257389 jjfrh.ttr +$ cd .. +$ cd .. +$ cd vzhpqb +$ ls +95696 clnvqg +218063 clnvqg.qtd +dir hnqqrdf +dir ttntt +$ cd hnqqrdf +$ ls +dir brhvclj +$ cd brhvclj +$ ls +dir ttntt +$ cd ttntt +$ ls +40453 npp.vjv +$ cd .. +$ cd .. +$ cd .. +$ cd ttntt +$ ls +30351 clnvqg.fwm +60519 pdbtbmf +dir pfhrgj +247371 qcvs.rbj +155276 qdjqgqqw +$ cd pfhrgj +$ ls +41975 svc.fwm +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd svc +$ ls +110021 jftcvbl.lhh +$ cd .. +$ cd zmchn +$ ls +188817 brhvclj.zcq +dir ddzjr +dir fnmhc +dir tbhwr +dir vbtmfp +dir zrzrjm +$ cd ddzjr +$ ls +217591 clnvqg.css +dir ttntt +dir wshwhzw +$ cd ttntt +$ ls +dir bscqn +132748 svc.pbh +$ cd bscqn +$ ls +25049 tlcwbbng.spf +$ cd .. +$ cd .. +$ cd wshwhzw +$ ls +164106 brhvclj +193910 chnrbb +dir njsnwmrc +dir nnhcsb +195858 qrrt.pmp +43854 ttntt +90698 vdvfdgcl.mpr +$ cd njsnwmrc +$ ls +273188 hpdm.ctv +261368 wzpzjgw +$ cd .. +$ cd nnhcsb +$ ls +dir dmnmcgr +67701 pdbtbmf +145277 ptlqcl.sgt +dir pwrjt +13031 svc.jbb +263232 svc.mvh +91724 vggpwj +$ cd dmnmcgr +$ ls +43175 szbcvp +109544 vjqjzp +$ cd .. +$ cd pwrjt +$ ls +dir ffqfqvjv +dir svc +$ cd ffqfqvjv +$ ls +102537 bgmgwt.gmg +$ cd .. +$ cd svc +$ ls +177913 jswrfjvp.vgc +145714 npp.vjv +272487 zzsl +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd fnmhc +$ ls +dir dhhwdbb +dir ttntt +dir wshwhzw +$ cd dhhwdbb +$ ls +201253 zpvv +$ cd .. +$ cd ttntt +$ ls +dir brhvclj +40561 chb.fbh +159663 gzwrtwtd +119970 wwz.rft +$ cd brhvclj +$ ls +19488 gwtvbzph +98427 hpdm.ctv +8547 swncltj.sbn +54698 wshwhzw.fmj +dir ztlvdwq +$ cd ztlvdwq +$ ls +259702 cdfj +230030 mbz.ttq +$ cd .. +$ cd .. +$ cd .. +$ cd wshwhzw +$ ls +dir clnvqg +dir gwcsprqv +259902 hmrb.njt +125791 pdbtbmf +dir spffhcnz +268942 srwjphc.lbp +dir wshwhzw +$ cd clnvqg +$ ls +208408 hdwf.ppm +163498 npp.vjv +$ cd .. +$ cd gwcsprqv +$ ls +135381 hpdm.ctv +150197 jjfrh.ttr +61236 lwjhqc +150026 tgwjwdwj +dir wshwhzw +$ cd wshwhzw +$ ls +51089 wshwhzw.qtb +$ cd .. +$ cd .. +$ cd spffhcnz +$ ls +79855 bmrcdm +dir clnvqg +180748 jjfrh.ttr +122314 pdbtbmf +85765 tbpsjv.tfw +$ cd clnvqg +$ ls +dir nvjj +dir tqr +$ cd nvjj +$ ls +dir gqhqmlhm +dir mbfftpbj +$ cd gqhqmlhm +$ ls +211887 brhvclj +$ cd .. +$ cd mbfftpbj +$ ls +60539 clnvqg.gqw +$ cd .. +$ cd .. +$ cd tqr +$ ls +dir fvdch +$ cd fvdch +$ ls +124864 svc +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd wshwhzw +$ ls +dir jrzmrg +103956 npp.vjv +126932 zvwpmnqh.zmh +$ cd jrzmrg +$ ls +dir svc +$ cd svc +$ ls +143992 jhcvmjp.flt +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd tbhwr +$ ls +42758 jjfrh.ttr +$ cd .. +$ cd vbtmfp +$ ls +171021 npp.vjv +$ cd .. +$ cd zrzrjm +$ ls +dir brhvclj +201331 cgtqdtqq.gsc +206771 clnvqg.zpr +55754 jgprc +dir jrww +dir sqtzndzg +$ cd brhvclj +$ ls +190144 brhvclj +198432 rvbqglv.gzg +$ cd .. +$ cd jrww +$ ls +110574 clnvqg +$ cd .. +$ cd sqtzndzg +$ ls +189854 clnvqg.qbc +260937 ldm +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd mzmqr +$ ls +117135 dfws +98546 jjfrh.ttr +dir jptq +dir sctfsvs +dir svc +dir swsjjr +dir tstct +86793 vhfcwbv.wfq +$ cd jptq +$ ls +dir brhvclj +52040 cnmb +dir fvqh +240539 rrdsr +dir tczvhsgn +dir zbbq +$ cd brhvclj +$ ls +254250 vtgsqs +$ cd .. +$ cd fvqh +$ ls +18471 hpdm.ctv +$ cd .. +$ cd tczvhsgn +$ ls +241619 wshwhzw.cmh +$ cd .. +$ cd zbbq +$ ls +82844 vtjbg.svl +$ cd .. +$ cd .. +$ cd sctfsvs +$ ls +dir nbjljt +dir rszwnh +56137 stcmw.wwr +$ cd nbjljt +$ ls +214471 fst.pwm +$ cd .. +$ cd rszwnh +$ ls +dir brhvclj +dir ldrsbj +280840 pzs +274286 vpsnwfvc.bqg +$ cd brhvclj +$ ls +60019 fwbgt.rmb +$ cd .. +$ cd ldrsbj +$ ls +23175 jjfrh.ttr +120171 lpb +$ cd .. +$ cd .. +$ cd .. +$ cd svc +$ ls +dir rpgm +$ cd rpgm +$ ls +205836 ttntt +$ cd .. +$ cd .. +$ cd swsjjr +$ ls +100874 cdfj +229131 dcdm.jcz +18144 mspnwqmw.bpc +$ cd .. +$ cd tstct +$ ls +94293 clnvqg +110519 hpdm.ctv +$ cd .. +$ cd .. +$ cd rtmg +$ ls +dir clnvqg +260745 gvmlqpbs.mqm +dir ldcwjlm +192472 ttntt.gnf +$ cd clnvqg +$ ls +121970 zsmwvt.sbw +$ cd .. +$ cd ldcwjlm +$ ls +254060 hpdm.ctv +225558 svc.cmz +229614 wshwhzw.dzn +$ cd .. +$ cd .. +$ cd tqnmwdl +$ ls +50489 cdfj +dir gltsgnf +265020 hqnjnt.gtc +dir psltbtl +$ cd gltsgnf +$ ls +dir ttntt +dir wgwvd +$ cd ttntt +$ ls +120262 zvjh.mzl +$ cd .. +$ cd wgwvd +$ ls +172875 flt.jbn +173182 pdbtbmf +$ cd .. +$ cd .. +$ cd psltbtl +$ ls +dir sgqvlr +88647 svc.jnw +208354 svc.jzb +98962 zsld.hjs +$ cd sgqvlr +$ ls +151451 brhvclj.thj +213287 pdbtbmf +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd dtqtvvrn +$ ls +253546 ttntt.dtl +257990 wshwhzw.rqp +$ cd .. +$ cd lcz +$ ls +dir csqfmjz +dir nfgnnt +dir rwzmjgqz +dir wshwhzw +dir wtvtszw +$ cd csqfmjz +$ ls +124616 wwbvnjg +$ cd .. +$ cd nfgnnt +$ ls +dir dvslq +dir fbzss +dir ttntt +$ cd dvslq +$ ls +132520 cdfj +dir nsq +1447 svc.spv +$ cd nsq +$ ls +265807 hpdm.ctv +95487 wpqhvf.dqg +$ cd .. +$ cd .. +$ cd fbzss +$ ls +153744 rccwtz.tfs +$ cd .. +$ cd ttntt +$ ls +109641 wshwhzw +$ cd .. +$ cd .. +$ cd rwzmjgqz +$ ls +12039 tpggbsd +$ cd .. +$ cd wshwhzw +$ ls +57458 qqnznsvj +$ cd .. +$ cd wtvtszw +$ ls +dir dlr +151194 dzwmwjz +dir nzq +$ cd dlr +$ ls +142748 nchwzm +$ cd .. +$ cd nzq +$ ls +242998 wqzpw.hvh +$ cd .. +$ cd .. +$ cd .. +$ cd pcqjncwl +$ ls +10646 wpst.sds +$ cd .. +$ cd qwvfpgl +$ ls +65156 bfmt.zcb +157745 hpdm.ctv +104612 rtbbgjr.wpv +$ cd .. +$ cd rtmj +$ ls +79449 wngz +$ cd .. +$ cd shg +$ ls +27187 srtj.qwz +$ cd .. +$ cd tcdmgwp +$ ls +277338 wshwhzw diff --git a/aoc_2022/input/day_8.txt b/aoc_2022/input/day_8.txt new file mode 100644 index 0000000..8f78128 --- /dev/null +++ b/aoc_2022/input/day_8.txt @@ -0,0 +1,99 @@ +202002313322443443333413205214140320025450316364504141264123114304203303114001123204003420102030300 +212313000221124342025540453251212255520310035503014622512241404324240404402541331004400300331322110 +332010030224230340301531501004040246520352260460326354116252046344244524210334140401240030314221201 +221301221024131121450340303252214260131364111213343344405130626304123155314054543541311324344211033 +001134433000214135052445324455546624654355260523323125133253553045204251430400315121003433044422220 +110024340203302220432202030041005313231555605566115533505425534600532263042244310025013301002122432 +202142343241025110345415445624446445344113355202423663433331226040240361512310234150014422014312341 +120231221014040554044220640131325544631255541041127752253252103362402320335611055442052140412241043 +304101021100233012133444436554401661205535772414667667451754115102616366431662351045410402233002402 +230331042045503255333014364102251313262666434422256626256566764614412322001313140132320342244311432 +301141102400324512330561535320415044526674414642717654456164545365745044506116261040015244323140033 +231132220241110100324130130545143322166173563556616563372125554727356021654340613261035251251413332 +203320424451202552446214505356253135265527113533231423523554524551155161163143626222334550222001114 +024231523321503230631342521245372255435215736461556537371121121751317427505314306502002123010412034 +040145510232550020202124627124455516526155425234552673277347264467144563753114463520045522011145324 +240244304425550155132364624615433274255211852862645772235364532654142113137206602450504451232422342 +424334205511552415565560671715111772112734875278832283468554433426522451521742450535105641322532120 +133100401525326032650034477716317357844566548887884636586578835685745454237757622666646610535221104 +242223305304135213415343353725345243424627362843632335577356738268866222511635745254444064454403022 +331241503204144326221625132445526654437248248754447372872277553375762277344562444520505011503314140 +222451434543300006524657732724686755826462744865327773328272774372386881361277646413144100602223020 +414454544234262543464462244368365765473624458443347748378276353357284728521731472310150061145432122 +431102216135016433434413645583863866258756823459689676856722332224673767726144732654216036601312045 +110042056021302336337562427723268467778543586356696798849484555383634828423561624661541545036033040 +233130533366340424442262664763637476353997734438457636478474458384564333326465264262124602145421015 +241204063143034137555565335625773883567883575869635693564466395342787853372316311463254316554250312 +204021106434203474532574577732644238364483977987654549695578595965788345665673122334133343010255050 +545511454122526751271377583327826879494576898565775448864596738363442346635565474635455064243232543 +124015635625434375317238826384863483959359789986783666664869677434837343823842652356111546364644132 +354241210264473276647664584326653653647946783946785857466783387358894383428654661215717710324561130 +244056226450134737153283634386947648667343795757554497954898635566776763644735545173126352624425020 +501324141203722175363238762648494967439479987887696675878464444733446494872553246567237465053516212 +124454612231317724443537666649848658354577798467554676466685998895664436347585644634216747461605663 +444220351051321723632583255595773459868897594678655845666879757469695495456426765727653232001214613 +543415566433561456232786335548987337775874478855474645667479645683933635533375645234665367636633651 +530466162316434373545644848445489775499587455748589658584498988576664989538548655685716224502165333 +235553430155252418662326494855584476654765446847698998974986756847936484493638765583146163725434525 +310360654533722362728523488436493558969996756767575985755767774769466767793646674763166562576015621 +325614303744164255433237739477846644568969987655575799855985845775957857639672455744841244170500440 +503515002355336284762634697976487678966879556557679889675955589869487648536567234728851425445561434 +543324643653742448624433599753598966565767666598867958799856754678485656376459464724213745353256500 +424103217216134323283434554946357547857767597585675689859575974787896473853787835228441512611606640 +250304641276277558773624439786746445898556998895887655878685889784588785835399278825226257656316456 +345463264572334567387256787858445544645556959975787756996857575877564946576444487536853156173434515 +161602652143411253367838475869799955968676977879766978885597865889664759447954958773226534633601264 +425255315411463546634735936474878586798978997677669676798889865697568457553348834768551317414265641 +234033463437423662763283959368645469455555866987776986698877578774866488666969955245374145544441623 +263636217315313825577865757479668665967695777867766779768668996864488656989883458726646674514525511 +414022642352612738772698548548946555775959857777688888669975865965945954569559444566834371561235240 +626645264156227353287767567366856886676578966679977979667696756679988685477675656584254614315521534 +141252624567664677828886434838768857955979876666969698786698969754567989787396562527238135476552660 +561116074375644526333736555595544896786968966976977997766676677666986777499545768822354754143466332 +640134335336664367747687845787987597685679698978788978879896585767488999869854847362476731511356241 +122566575557672854685858389735665896958579588778989888987596889896554676975794558735663243216725024 +622222555471614528744598736564486874589976996698777696679756695597854959586596528866486767125750425 +420556462341434263425678855644549848459689687977998667968775668946499845947638767286571573445302316 +153401561272311464882769939493697496869895765798867978898769959646765788757935955564662266664350020 +013313231114626266432864594633565767798995787676787879588887569996649773766959635454884663212340545 +532215627116623645744769753668949665878576988558956966987866657689789897574757843566561641651164202 +450601415622125355356368488837847498867787786799888699666587767988546989739799625367647376766514525 +132355556713615268557775868585955849749679856695885666656767667454658976438866274426545173713503424 +140363023176115776535475859453935445956676569686687689879769756896678849374653357232443563250603624 +555455453332353643328265463674488487677659785966787969895954479496764396934557558828651662273322156 +126055665555676465455653358794473489784867699566988677887774657674865436594725534325162527364425454 +424236562661632716477544757996995899646765977676757796446899758789936969594733554244341314246106356 +135664342046737243753657865736877354784767579696499494585854598586968344888482585764775221150460432 +344344143357321137635487849484434336494875487675577984647444795955996398565666287683142755200412361 +414412353051761177373387236955658343565579456876599987585868476443368777592334237632432165500034134 +344222350343246157155255424535673748655865864986555696699778567479637584386522672344234517610314264 +303525035340142365235266633256899897484946659875878967575986439538577438532348255423232624315603544 +510360601501172132135462465243343789945984697644794559468647896656775633328382288156772775241356112 +244355065300035434315633638622366843368655487769664895769979663363655675357453742377443633663346142 +543050131342642155264665386866379467794949993697734675839557966585757563732683714633526145166334412 +251422612632162765477554485862386899688967865977755368655846774644737246723864225342434523316423234 +535030453166161574317736827787562575357946899856345696768476976499427585553774225613174414155545203 +451512340514125213652261633852837673947556656599369877579547445535876827567436531662350302444041243 +033335530105503441451253564883648443326876639459998839433543553388842558572361376415226141134602541 +304432111501100651754116177585225473385738444645866989935538477775342885231334255374502153460230350 +532031530144611101611317655656232366528772853465566773976378637453482452343331275146210626455403524 +012504432204304640225665641317778444385425328864724366378324622327743456125442217372022160305110234 +423330153504112303542265616531228643228676746426328835672356636538675673621573612560004436420330151 +323321500212164213037737677445413688473546378425227262668778538578545546734311666243650663254002451 +040305323234252401530453457637172235782628463783548274258737388837337454577642612225610462012021013 +014421203421445064446506474465661471783776826638336854777768476773252621522666325565433244545553213 +203353533234533642651045661415434436734475362377466258588352323543664136375224260403562354030401203 +430143224545323216313162327161435122244647775242765557228261267335671742531564542126211410421135434 +311115413443044633036265137463752661235223746112744444721551372635624713663424662444323552052513344 +134313534132001040304122015236726566356671331522244364434524166341154325353311501362040351444450020 +411143423205141252652033316260315365572263763132742674322315253667543711643300545065310242032324020 +144341145402305205020640440563232327377646232274132447222637451213446334050331022204312235341032244 +100112332452301131334340450350201034154563646746333747731225537677742552525011500010314510431132014 +221320130310004120220446050664152326055763773453162437516516576134605322403126405442152350241130304 +241101113220305530315466104556331100306117166126725673116524503062565103142063320533420154322010431 +300413413431025050053455545511501350201353245414366717162612025321566536123553051412314441133131101 +330231204004004415320523326541625211601352531640552445135123515524650251203003153345052023224223041 +323031413443333543540440514335332454342430446605433036305445612534333404345522552510512242414121433 +201012341123333315224534110123345050436205551211152343641503546320233130510552230421204123134014033 +030231013300430225134314421310156226302452500603162133325435662050366331135501505435404110101401101 +301302243133113000115553304435551505352615146115031661551161050412521420141400134222424010304012133 diff --git a/aoc_2022/src/day_1.rs b/aoc_2022/src/day_1.rs new file mode 100644 index 0000000..c8a7672 --- /dev/null +++ b/aoc_2022/src/day_1.rs @@ -0,0 +1,36 @@ +use anyhow::{Context, Result}; + +use aoc::{Problem, Solution}; + +pub struct Day1; + +impl Problem for Day1 { + const DAY: u8 = 1; + + const INPUT: &'static str = include_str!("../input/day_1.txt"); +} + +impl Solution for Day1 { + type Answer1 = usize; + + type Answer2 = usize; + + fn part_1(input: &str) -> Result { + input + .split("\n\n") + .map(|e| e.split('\n').flat_map(|l| l.parse::()).sum()) + .max() + .context("Failed to find max") + } + + fn part_2(input: &str) -> Result { + let mut vec = input + .split("\n\n") + .map(|e| e.split('\n').flat_map(|l| l.parse::()).sum()) + .collect::>(); + + vec.sort_unstable(); + + Ok(vec.iter().rev().take(3).sum()) + } +} diff --git a/aoc_2022/src/day_2.rs b/aoc_2022/src/day_2.rs new file mode 100644 index 0000000..d14b97d --- /dev/null +++ b/aoc_2022/src/day_2.rs @@ -0,0 +1,170 @@ +use std::str::FromStr; + +use anyhow::{anyhow, Result}; + +use aoc::{Problem, Solution}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +struct Game { + shapes: (Shape, Shape), + outcome: Outcome, + score: usize, +} + +impl Game { + fn new(a: Shape, b: Shape, outcome: Outcome) -> Self { + Self { + shapes: (a, b), + outcome, + score: b as usize + outcome as usize, + } + } +} + +impl From<(Shape, Shape)> for Game { + fn from((a, b): (Shape, Shape)) -> Self { + Self::new(a, b, (a, b).into()) + } +} + +impl From<(Shape, Outcome)> for Game { + fn from((a, outcome): (Shape, Outcome)) -> Self { + Self::new(a, (a, outcome).into(), outcome) + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u8)] +enum Outcome { + Loss = 0, + Draw = 3, + Win = 6, +} + +impl From<(Shape, Shape)> for Outcome { + fn from((a, b): (Shape, Shape)) -> Self { + match (a, b) { + (Shape::Rock, Shape::Rock) => Outcome::Draw, + (Shape::Rock, Shape::Paper) => Outcome::Win, + (Shape::Rock, Shape::Scissors) => Outcome::Loss, + (Shape::Paper, Shape::Rock) => Outcome::Loss, + (Shape::Paper, Shape::Paper) => Outcome::Draw, + (Shape::Paper, Shape::Scissors) => Outcome::Win, + (Shape::Scissors, Shape::Rock) => Outcome::Win, + (Shape::Scissors, Shape::Paper) => Outcome::Loss, + (Shape::Scissors, Shape::Scissors) => Outcome::Draw, + } + } +} + +impl FromStr for Outcome { + type Err = anyhow::Error; + + fn from_str(s: &str) -> Result { + match s { + "X" => Ok(Outcome::Loss), + "Y" => Ok(Outcome::Draw), + "Z" => Ok(Outcome::Win), + s => Err(anyhow!("Unknown symbol: {}", s)), + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum Shape { + Rock = 1, + Paper = 2, + Scissors = 3, +} + +impl From<(Shape, Outcome)> for Shape { + fn from((shape, outcome): (Shape, Outcome)) -> Self { + match (shape, outcome) { + (Shape::Rock, Outcome::Draw) => Shape::Rock, + (Shape::Rock, Outcome::Win) => Shape::Paper, + (Shape::Rock, Outcome::Loss) => Shape::Scissors, + (Shape::Paper, Outcome::Loss) => Shape::Rock, + (Shape::Paper, Outcome::Draw) => Shape::Paper, + (Shape::Paper, Outcome::Win) => Shape::Scissors, + (Shape::Scissors, Outcome::Win) => Shape::Rock, + (Shape::Scissors, Outcome::Loss) => Shape::Paper, + (Shape::Scissors, Outcome::Draw) => Shape::Scissors, + } + } +} + +impl FromStr for Shape { + type Err = anyhow::Error; + + fn from_str(s: &str) -> Result { + match s { + "A" | "X" => Ok(Shape::Rock), + "B" | "Y" => Ok(Shape::Paper), + "C" | "Z" => Ok(Shape::Scissors), + s => Err(anyhow!("Unknown symbol: {}", s)), + } + } +} + +pub struct Day2; + +impl Problem for Day2 { + const DAY: u8 = 3; + + const INPUT: &'static str = include_str!("../input/day_2.txt"); +} + +impl Solution for Day2 { + type Answer1 = usize; + + type Answer2 = usize; + + fn part_1(input: &str) -> Result { + input.lines().try_fold(0, |acc, l| { + let (a, b) = l + .split_once(' ') + .ok_or_else(|| anyhow!("Missing deliminator"))?; + + let a: Shape = a.parse()?; + let b: Shape = b.parse()?; + let game: Game = (a, b).into(); + + Ok(acc + game.score) + }) + } + + fn part_2(input: &str) -> Result { + input.lines().try_fold(0, |acc, l| { + let (a, outcome) = l + .split_once(' ') + .ok_or_else(|| anyhow!("Missing deliminator"))?; + + let a: Shape = a.parse()?; + let outcome: Outcome = outcome.parse()?; + let game: Game = (a, outcome).into(); + + Ok(acc + game.score) + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + const INPUT: &str = indoc::indoc! {" + A Y + B X + C Z + "}; + + #[test] + fn test_part_1_example() -> Result<()> { + Ok(assert_eq!(15, Day2::part_1(INPUT)?)) + } + + #[test] + fn test_part_2_example() -> Result<()> { + Ok(assert_eq!(12, Day2::part_2(INPUT)?)) + } +} diff --git a/aoc_2022/src/day_3.rs b/aoc_2022/src/day_3.rs new file mode 100644 index 0000000..0595f14 --- /dev/null +++ b/aoc_2022/src/day_3.rs @@ -0,0 +1,122 @@ +use std::{ops::Deref, str::FromStr}; + +use anyhow::{anyhow, Context, Result}; + +use aoc::{Problem, Solution}; + +trait Priority { + fn priority(self) -> Result; +} + +impl Priority for char { + fn priority(self) -> Result { + match self as u8 { + c @ 65..=90 => Ok(c - 65 + 27), + c @ 97..=122 => Ok(c - 97 + 1), + c => Err(anyhow!("failed to get priority of {}", c as char)), + } + } +} + +#[derive(Debug, Clone)] +struct Backpack(Vec); + +impl Backpack { + fn get_local_union(self) -> Result { + let (left, right) = self.split_at(self.len() / 2); + left.iter() + .cloned() + .find(|&item| right.contains(&item)) + .context(format!("Failed to find union in {:?}", &self)) + } + + fn get_group_union(group: &mut Vec) -> Result { + group + .split_first_mut() + .and_then(|(first, others)| { + first + .iter() + .cloned() + .find(|item| others.iter_mut().all(|b| b.contains(item))) + }) + .context(format!("Failed to find union in {:?}", group)) + } +} +impl Deref for Backpack { + type Target = Vec; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl std::str::FromStr for Backpack { + type Err = anyhow::Error; + + fn from_str(s: &str) -> Result { + Ok(Backpack(s.as_bytes().iter().map(|c| *c as char).collect())) + } +} + +pub struct Day3; + +impl Problem for Day3 { + const DAY: u8 = 3; + + const INPUT: &'static str = include_str!("../input/day_3.txt"); +} + +impl Solution for Day3 { + type Answer1 = usize; + + type Answer2 = usize; + + fn part_1(input: &str) -> Result { + input + .lines() + .map(Backpack::from_str) + .try_collect::>()? + .into_iter() + .map(|b| b.get_local_union()) + .try_collect::>()? + .into_iter() + .try_fold(0, |sum, c| c.priority().map(|p| sum + p as usize)) + } + + fn part_2(input: &str) -> Result { + let lines: Vec<&str> = input.lines().collect(); + lines.as_slice().chunks(3).try_fold(0, |acc, g| { + let mut group = g + .iter() + .cloned() + .map(Backpack::from_str) + .try_collect::>()?; + + Ok(Backpack::get_group_union(&mut group)?.priority()? as usize + acc) + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + const INPUT: &str = indoc::indoc! {r#" + vJrwpWtwJgWrhcsFMMfFFhFp + jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL + PmmdzqPrVvPwwTWBwg + wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn + ttgJtRGJQctTZtZT + CrZsJsPPZsGzwwsLwLmpwMDw + "#}; + + #[test] + fn test_part_1_example() -> Result<()> { + Ok(assert_eq!(157, Day3::part_1(INPUT)?)) + } + + #[test] + fn test_part_2_example() -> Result<()> { + Ok(assert_eq!(70, Day3::part_2(INPUT)?)) + } +} diff --git a/aoc_2022/src/day_4.rs b/aoc_2022/src/day_4.rs new file mode 100644 index 0000000..659f76d --- /dev/null +++ b/aoc_2022/src/day_4.rs @@ -0,0 +1,74 @@ +use std::ops::Range; + +use anyhow::Result; + +use aoc::{Problem, Solution}; + +pub fn parse_range(section: &str) -> Result> { + let (start, end) = section.split_once('-').unwrap(); + let start = start.parse::()?; + let end = end.parse::()?; + Ok(Range { start, end }) +} + +fn parse_pair(input: &str) -> Result<(Range, Range)> { + let (section_a, section_b) = input.split_once(',').unwrap(); + + Ok((parse_range(section_a)?, parse_range(section_b)?)) +} + +fn range_is_subset((a, b): &(Range, Range)) -> bool { + (a.start <= b.start && a.end >= b.end) || (b.start <= a.start && b.end >= a.end) +} + +fn range_is_union((a, b): &(Range, Range)) -> bool { + (a.start <= b.start && a.end >= b.start) || (b.start <= a.start && b.end >= a.start) +} + +pub struct Day4; + +impl Problem for Day4 { + const DAY: u8 = 4; + + const INPUT: &'static str = include_str!("../input/day_4.txt"); +} + +impl Solution for Day4 { + type Answer1 = usize; + + type Answer2 = usize; + + fn part_1(input: &str) -> Result { + let ranges: Vec<_> = input.lines().map(parse_pair).collect::>()?; + Ok(ranges.into_iter().filter(range_is_subset).count()) + } + + fn part_2(input: &str) -> Result { + let ranges: Vec<_> = input.lines().map(parse_pair).collect::>()?; + Ok(ranges.into_iter().filter(range_is_union).count()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + const TEST_INPUT: &str = r#"2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8"#; + + #[test] + fn test_part_1_example() -> Result<()> { + assert_eq!(2, Day4::part_1(TEST_INPUT)?); + Ok(()) + } + + #[test] + fn test_part_2_example() -> Result<()> { + assert_eq!(4, Day4::part_2(TEST_INPUT)?); + Ok(()) + } +} diff --git a/aoc_2022/src/day_5.rs b/aoc_2022/src/day_5.rs new file mode 100644 index 0000000..11347ce --- /dev/null +++ b/aoc_2022/src/day_5.rs @@ -0,0 +1,212 @@ +use std::{ + fmt::Display, + ops::{Deref, DerefMut}, + str::FromStr, +}; + +use anyhow::{Context, Result}; + +use aoc::{Problem, Solution}; + +#[derive(Debug)] +struct Procedure(Vec); + +impl Procedure { + fn run(self, mut stacks: Stacks, in_order: bool) -> Result { + for step in self.0 { + let mut move_stack = Vec::new(); + for _ in 0..step.count { + let cargo = stacks[step.from - 1] + .pop() + .ok_or_else(|| anyhow::anyhow!("ran out of cargo"))?; + move_stack.push(cargo) + } + + if in_order { + move_stack.reverse() + } + + stacks[step.to - 1].append(&mut move_stack); + } + Ok(stacks) + } +} + +impl FromStr for Procedure { + type Err = anyhow::Error; + + fn from_str(s: &str) -> Result { + let mut procedure = Procedure(Vec::new()); + for (linenr, step) in s.lines().enumerate() { + procedure.push( + step.parse() + .context(format!("Error in procedure step {}: '{}'", linenr, step))?, + ) + } + Ok(procedure) + } +} + +impl Deref for Procedure { + type Target = Vec; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for Procedure { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +#[derive(Debug)] +struct Step { + count: usize, + from: usize, + to: usize, +} + +impl FromStr for Step { + type Err = anyhow::Error; + + fn from_str(s: &str) -> Result { + let mut items = s.split_whitespace(); + Ok(Self { + count: items.next_chunk::<2>().unwrap().last().unwrap().parse()?, + from: items.next_chunk::<2>().unwrap().last().unwrap().parse()?, + to: items.next_chunk::<2>().unwrap().last().unwrap().parse()?, + }) + } +} + +#[derive(Debug)] +struct Stacks(Vec>); + +impl Stacks { + fn top(mut self) -> String { + self.iter_mut().fold( + "".to_owned(), + |mut acc: String, s: &mut std::vec::Vec| { + if let Some(c) = s.pop() { + acc.push(c) + } + acc + }, + ) + } +} + +impl Deref for Stacks { + type Target = Vec>; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for Stacks { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl FromStr for Stacks { + type Err = anyhow::Error; + + fn from_str(s: &str) -> Result { + let mut stacks = Self(Vec::new()); + for line in s.lines().rev().skip(1) { + let mut chars = line.chars().skip(1).enumerate(); + loop { + let (stack, cargo) = match chars.next() { + Some((_, '[' | ']' | ' ')) => continue, + Some((index, c)) => (index / 4, c), + None => break, + }; + if stacks.len() < stack + 1 { + stacks.push(Vec::new()) + } + stacks[stack].push(cargo) + } + } + Ok(stacks) + } +} + +impl Display for Stacks { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let Some(max_len) = self.0.iter().map(|v| v.len()).max() else { + return Ok(()) + }; + + for i in (0..max_len).rev() { + let mut cargos = Vec::new(); + for stack in &self.0 { + let cargo = match stack.get(i) { + Some(c) => format!("[{}]", c), + None => " ".to_owned(), + }; + cargos.push(cargo); + } + writeln!(f, "{}", cargos.join(" "))? + } + Ok(()) + } +} + +pub struct Day5; + +impl Problem for Day5 { + const DAY: u8 = 5; + + const INPUT: &'static str = include_str!("../input/day_5.txt"); +} + +impl Solution for Day5 { + type Answer1 = String; + + type Answer2 = String; + + fn part_1(input: &str) -> Result { + let (stacks, procedure) = input.split_once("\n\n").unwrap(); + let stacks = Stacks::from_str(stacks)?; + let procedure = Procedure::from_str(procedure)?; + Ok(procedure.run(stacks, false)?.top()) + } + + fn part_2(input: &str) -> Result { + let (stacks, procedure) = input.split_once("\n\n").unwrap(); + let stacks = Stacks::from_str(stacks)?; + let procedure = Procedure::from_str(procedure)?; + Ok(procedure.run(stacks, true)?.top()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + const TEST_INPUT: &str = indoc::indoc! {r#" + [D] + [N] [C] + [Z] [M] [P] + 1 2 3 + + move 1 from 2 to 1 + move 3 from 1 to 3 + move 2 from 2 to 1 + move 1 from 1 to 2 + "#}; + + #[test] + fn test_part_1_example() -> Result<()> { + Ok(assert_eq!("CMZ", Day5::part_1(TEST_INPUT)?)) + } + + #[test] + fn test_part_2_example() -> Result<()> { + Ok(assert_eq!("MCD", Day5::part_2(TEST_INPUT)?)) + } +} diff --git a/aoc_2022/src/day_6.rs b/aoc_2022/src/day_6.rs new file mode 100644 index 0000000..5abef0a --- /dev/null +++ b/aoc_2022/src/day_6.rs @@ -0,0 +1,80 @@ +use std::collections::HashSet; + +use anyhow::Result; + +use aoc::{Problem, Solution}; + +fn get_window_pos(input: &str, win_size: usize) -> Option { + input + .as_bytes() + .windows(win_size) + .position(|set| { + let mut h = HashSet::new(); + for &c in set { + if !h.insert(c) { + return false; + } + } + true + }) + .map(|i| i + win_size) +} + +pub struct Day6; + +impl Problem for Day6 { + const DAY: u8 = 6; + + const INPUT: &'static str = include_str!("../input/day_6.txt"); +} + +impl Solution for Day6 { + type Answer1 = usize; + + type Answer2 = usize; + + fn part_1(input: &str) -> Result { + get_window_pos(input, 4).ok_or_else(|| anyhow::anyhow!("Failed to find item")) + } + + fn part_2(input: &str) -> Result { + get_window_pos(input, 14).ok_or_else(|| anyhow::anyhow!("Failed to find item")) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_part_1_example() -> Result<()> { + let tests = vec![ + ("mjqjpqmgbljsphdztnvjfqwrcgsmlb", 7), + ("bvwbjplbgvbhsrlpgdmjqwftvncz", 5), + ("nppdvjthqldpwncqszvftbrmjlhg", 6), + ("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg", 10), + ("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw", 11), + ]; + for test in tests { + assert_eq!(test.1, Day6::part_1(test.0)?); + } + + Ok(()) + } + + #[test] + fn test_part_2_example() -> Result<()> { + let tests = vec![ + ("mjqjpqmgbljsphdztnvjfqwrcgsmlb", 19), + ("bvwbjplbgvbhsrlpgdmjqwftvncz", 23), + ("nppdvjthqldpwncqszvftbrmjlhg", 23), + ("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg", 29), + ("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw", 26), + ]; + for test in tests { + assert_eq!(test.1, Day6::part_2(test.0)?); + } + + Ok(()) + } +} diff --git a/aoc_2022/src/day_7.rs b/aoc_2022/src/day_7.rs new file mode 100644 index 0000000..09eb1ef --- /dev/null +++ b/aoc_2022/src/day_7.rs @@ -0,0 +1,217 @@ +use std::{collections::HashMap, fmt::Display, ops::Deref, str::FromStr}; + +use anyhow::{anyhow, Context, Result}; + +use aoc::{Problem, Solution}; + +enum Cmd { + Root, + Parent, + Child(String), + LS(Vec), +} + +impl FromStr for Cmd { + type Err = anyhow::Error; + + fn from_str(s: &str) -> Result { + let (cmd, arg) = s.trim().split_at(2); + let cmd_arg = (cmd.trim(), arg.trim()); + match cmd_arg { + ("cd", "/") => Ok(Self::Root), + ("cd", "..") => Ok(Self::Parent), + ("cd", child) => Ok(Self::Child(child.to_owned())), + ("ls", arg) => { + let entries = arg + .trim() + .lines() + .map(Entry::from_str) + .collect::>>()?; + Ok(Cmd::LS(entries)) + } + _ => Err(anyhow!("Failed to parse Command from str: {}", s)), + } + } +} + +enum Entry { + Dir(String), + File((String, usize)), +} + +impl FromStr for Entry { + type Err = anyhow::Error; + + fn from_str(s: &str) -> Result { + let (entry_type, name) = s + .split_once(' ') + .context(format!("Failed to parse Command from str: {}", s))?; + match entry_type { + "dir" => Ok(Self::Dir(name.to_owned())), + t => Ok(Self::File((name.to_owned(), t.parse()?))), + } + } +} + +#[derive(Default, Debug)] +struct FileSystem { + entries: HashMap, usize>, + cwd: Vec, +} + +impl FileSystem { + fn add(&mut self, size: usize) { + self.entries + .entry(self.cwd.to_owned()) + .and_modify(|n| *n += size) + .or_insert(size); + } + + fn pop_and_add(&mut self) -> Option { + let size = *self.entries.get(&self.cwd).unwrap_or(&0); + let value = self.cwd.pop(); + self.add(size); + value + } + + fn exec_cmd(&mut self, cmd: Cmd) { + match cmd { + Cmd::Root => self.cwd = vec![], + Cmd::Parent => { + self.pop_and_add(); + } + Cmd::Child(d) => self.cwd.push(d), + Cmd::LS(entries) => { + for entry in entries.into_iter() { + match entry { + Entry::File((_, size)) => self.add(size), + Entry::Dir(_) => {} + } + } + } + } + } +} + +impl Deref for FileSystem { + type Target = HashMap, usize>; + + fn deref(&self) -> &Self::Target { + &self.entries + } +} + +impl FromStr for FileSystem { + type Err = anyhow::Error; + + fn from_str(s: &str) -> Result { + s.split('$') + .filter_map(|l| match l.trim() { + _ if l.is_empty() => None, + l => Some(l), + }) + .flat_map(Cmd::from_str) + .collect::>() + .try_into() + } +} + +impl TryFrom> for FileSystem { + type Error = anyhow::Error; + + fn try_from(value: Vec) -> Result { + let mut fs = Self::default(); + for cmd in value { + fs.exec_cmd(cmd) + } + + while !fs.cwd.is_empty() { + fs.exec_cmd(Cmd::Parent) + } + + Ok(fs) + } +} + +impl Display for FileSystem { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + writeln!(f, "path\tsize")?; + for (path, size) in &self.entries { + writeln!(f, "/{}\t{}", path.join("/"), size)?; + } + Ok(()) + } +} + +pub struct Day7; + +impl Problem for Day7 { + const DAY: u8 = 7; + + const INPUT: &'static str = include_str!("../input/day_7.txt"); +} + +impl Solution for Day7 { + type Answer1 = usize; + + type Answer2 = usize; + + fn part_1(input: &str) -> Result { + let fs: FileSystem = input.parse()?; + Ok(fs.values().filter(|&s| *s < 100_000).sum()) + } + + fn part_2(input: &str) -> Result { + let fs: FileSystem = input.parse()?; + let used = *fs.get(&Vec::new()).context("Failed to get root size")?; + + fs.values() + .filter_map(|&dir_size| match dir_size { + k if used - k < 40_000_000 => Some(k), + _ => None, + }) + .min() + .context("No directory found") + } +} + +#[cfg(test)] +mod tests { + use super::*; + + const TEST_INPUT: &str = indoc::indoc! {r#" + $ cd / + $ ls + dir a + 14848514 b.txt + 8504156 c.dat + dir d + $ cd a + $ ls + dir e + 29116 f + 2557 g + 62596 h.lst + $ cd e + $ ls + 584 i + $ cd .. + $ cd .. + $ cd d + $ ls + 4060174 j + 8033020 d.log + 5626152 d.ext + 7214296 k + "#}; + + #[test] + fn test_part_1_example() -> Result<()> { + Ok(assert_eq!(95437, Day7::part_1(TEST_INPUT)?)) + } + + #[test] + fn test_part_2_example() -> Result<()> { + Ok(assert_eq!(24933642, Day7::part_2(TEST_INPUT)?)) + } +} diff --git a/aoc_2022/src/day_8.rs b/aoc_2022/src/day_8.rs new file mode 100644 index 0000000..6c44462 --- /dev/null +++ b/aoc_2022/src/day_8.rs @@ -0,0 +1,326 @@ +use std::{collections::HashSet, fmt::Display}; + +use anyhow::Result; + +use aoc::{Problem, Solution}; + +type TreeHeight = i8; + +struct Visibility { + capacity_x: usize, + capacity_y: usize, + trees_seen: HashSet<(usize, usize)>, + max_north: Vec, + max_east: Vec, + max_south: Vec, + max_west: Vec, +} + +impl Visibility { + fn with_capacity(capacity_x: usize, capacity_y: usize) -> Self { + Self { + capacity_x, + capacity_y, + trees_seen: HashSet::new(), + max_north: vec![-1; capacity_x], + max_east: vec![-1; capacity_y], + max_south: vec![-1; capacity_x], + max_west: vec![-1; capacity_y], + } + } + + fn check_trees(&mut self, tree_grid: Vec>) { + self.check_trees_nw(&tree_grid); + self.check_trees_se(&tree_grid); + } + + fn check_trees_nw(&mut self, tree_grid: &[Vec]) { + for (y, trees) in tree_grid.iter().enumerate() { + for (x, tree) in trees.iter().enumerate() { + self.check_tree_nw(x, y, *tree) + } + } + } + + fn check_trees_se(&mut self, tree_grid: &[Vec]) { + for (y, trees) in tree_grid.iter().enumerate().rev() { + for (x, tree) in trees.iter().enumerate().rev() { + self.check_tree_se(x, y, *tree) + } + } + } + + fn check_tree_nw(&mut self, x: usize, y: usize, tree: TreeHeight) { + if tree > self.max_north[x] { + self.trees_seen.insert((x, y)); + self.max_north[x] = tree; + } + + if tree > self.max_west[y] { + self.trees_seen.insert((x, y)); + self.max_west[y] = tree; + } + } + + fn check_tree_se(&mut self, x: usize, y: usize, tree: TreeHeight) { + if tree > self.max_south[x] { + self.trees_seen.insert((x, y)); + self.max_south[x] = tree; + } + + if tree > self.max_east[y] { + self.trees_seen.insert((x, y)); + self.max_east[y] = tree; + } + } +} + +impl Display for Visibility { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + for y in 0..self.capacity_y { + let mut l = String::new(); + for x in 0..self.capacity_x { + l.push(if self.trees_seen.contains(&(x, y)) { + 'X' + } else { + ' ' + }) + } + writeln!(f, "{}", l)?; + } + Ok(()) + } +} + +#[derive(Debug, Default)] +struct ScenicScore { + tree: Tree, + north: Vec, + east: Vec, + south: Vec, + west: Vec, +} + +impl ScenicScore { + fn new( + tree: Tree, + north: Vec, + east: Vec, + south: Vec, + west: Vec, + ) -> Self { + Self { + tree, + north, + east, + south, + west, + } + } + fn score(&self) -> usize { + self.north.len() * self.east.len() * self.south.len() * self.west.len() + } +} + +impl Display for ScenicScore { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + for t in &self.north { + for _ in 0..self.tree.x { + write!(f, "x")?; + } + write!(f, "{t:>width$}", width = self.tree.x)?; + for _ in self.tree.x..self.east.len() { + write!(f, "x")?; + } + writeln!(f)?; + } + + let line = self + .west + .iter() + .chain([&self.tree]) + .chain(self.east.iter()) + .map(|t| t.to_string()) + .collect::>() + .join(""); + + let offset = self.tree.x - self.west.len(); + writeln!(f, "{:offset$}", line)?; + + for t in &self.south { + for _ in 0..self.tree.x { + write!(f, "x")?; + } + writeln!(f, "{t:>width$}", width = self.tree.x)?; + for _ in self.tree.x..self.east.len() { + write!(f, "x")?; + } + } + + Ok(()) + } +} + +impl PartialEq for ScenicScore { + fn eq(&self, other: &Self) -> bool { + self.score() == other.score() + } +} + +impl Eq for ScenicScore {} + +impl PartialOrd for ScenicScore { + fn partial_cmp(&self, other: &Self) -> Option { + self.score().partial_cmp(&other.score()) + } +} + +impl Ord for ScenicScore { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.score().cmp(&other.score()) + } +} + +#[derive(Debug, Default, Clone, Copy)] +struct Tree { + x: usize, + y: usize, + height: TreeHeight, +} + +impl Tree { + fn new(x: usize, y: usize, height: TreeHeight) -> Self { + Self { x, y, height } + } + + fn scenic_score(&self, tree_grid: &[Vec]) -> ScenicScore { + let mut north: Vec = Vec::new(); + for t in tree_grid.iter().map(|v| v[self.x]).take(self.y).rev() { + north.push(t); + if t >= *self { + break; + } + } + north.reverse(); + + let mut east: Vec = Vec::new(); + for t in tree_grid[self.y].iter().skip(self.x + 1) { + east.push(*t); + if t >= self { + break; + } + } + + let mut south: Vec = Vec::new(); + for t in tree_grid.iter().map(|v| v[self.x]).skip(self.y + 1) { + south.push(t); + if t >= *self { + break; + } + } + + let mut west: Vec = Vec::new(); + for t in tree_grid[self.y].iter().take(self.x).rev() { + west.push(*t); + if t >= self { + break; + } + } + west.reverse(); + + ScenicScore::new(*self, north, east, south, west) + } +} + +impl PartialEq for Tree { + fn eq(&self, other: &Self) -> bool { + self.height == other.height + } +} + +impl PartialOrd for Tree { + fn partial_cmp(&self, other: &Self) -> Option { + self.height.partial_cmp(&other.height) + } +} + +impl Display for Tree { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.height) + } +} + +pub struct Day8; + +impl Problem for Day8 { + const DAY: u8 = 8; + + const INPUT: &'static str = include_str!("../input/day_8.txt"); +} + +impl Solution for Day8 { + type Answer1 = usize; + + type Answer2 = usize; + + fn part_1(input: &str) -> Result { + let tree_grid: Vec> = input + .lines() + .map(|l| { + l.chars() + .filter_map(|c| c.to_digit(10).map(|d| d as TreeHeight)) + .collect() + }) + .collect(); + + let mut visibility = Visibility::with_capacity(tree_grid[0].len(), tree_grid.len()); + visibility.check_trees(tree_grid); + Ok(visibility.trees_seen.len()) + } + + fn part_2(input: &str) -> Result { + let tree_grid: Vec> = input + .lines() + .enumerate() + .map(|(y, l)| { + l.chars() + .enumerate() + .filter_map(|(x, c)| c.to_digit(10).map(|d| Tree::new(x, y, d as TreeHeight))) + .collect() + }) + .collect(); + + let trees = tree_grid.iter().flatten(); + + let max_score = trees + .map(|t| t.scenic_score(&tree_grid)) + .max() + .ok_or_else(|| anyhow::anyhow!("Failed to find max"))?; + + Ok(max_score.score()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + const TEST_INPUT: &str = indoc::indoc! {r#" + 30373 + 25512 + 65332 + 33549 + 35390 + "#}; + + #[test] + fn test_part_1_example() -> Result<()> { + Ok(assert_eq!(21, Day8::part_1(TEST_INPUT)?)) + } + + #[test] + fn test_part_2_example() -> Result<()> { + println!("{TEST_INPUT}"); + Ok(assert_eq!(8, Day8::part_2(TEST_INPUT)?)) + } +} diff --git a/aoc_2022/src/lib.rs b/aoc_2022/src/lib.rs new file mode 100644 index 0000000..d3d4aea --- /dev/null +++ b/aoc_2022/src/lib.rs @@ -0,0 +1,11 @@ +#![feature(iterator_try_collect)] +#![feature(iter_next_chunk)] + +pub mod day_1; +pub mod day_2; +pub mod day_3; +pub mod day_4; +pub mod day_5; +pub mod day_6; +pub mod day_7; +pub mod day_8; diff --git a/aoc_2022/src/main.rs b/aoc_2022/src/main.rs new file mode 100644 index 0000000..3c26a16 --- /dev/null +++ b/aoc_2022/src/main.rs @@ -0,0 +1,19 @@ +use anyhow::Result; +use aoc::Solution; +use aoc_2022::{ + day_1::Day1, day_2::Day2, day_3::Day3, day_4::Day4, day_5::Day5, day_6::Day6, day_7::Day7, + day_8::Day8, +}; + +fn main() -> Result<()> { + Day1::solve()?; + Day2::solve()?; + Day3::solve()?; + Day4::solve()?; + Day5::solve()?; + Day6::solve()?; + Day7::solve()?; + Day8::solve()?; + + Ok(()) +} diff --git a/input/day_1.txt b/input/day_1.txt deleted file mode 100644 index e329ff7..0000000 --- a/input/day_1.txt +++ /dev/null @@ -1,2249 +0,0 @@ -6110 -2550 -6915 -5699 -4954 -5093 -3141 -5939 -4177 -3544 -5438 -5391 -3019 - -4691 -6961 -7515 -4545 -11145 -8346 -9225 - -9005 -2121 -4267 -1808 -3305 -9701 -1419 - -7178 -4921 -6687 -1918 -4856 -4538 -2786 -5071 -2689 -1803 -5763 - -12515 -15649 -17846 -14135 - -3290 -2875 -1184 -3166 -3473 -1683 -2706 -6297 -2900 -1684 -4688 -3074 - -3729 -6105 -7107 -7027 -5390 -11429 -8245 - -13381 -12304 -20944 - -18485 - -2108 -5008 -5779 -3539 -1633 -3957 -5475 -1345 -1526 -1809 -4355 -3237 -5006 -2573 -4353 - -1212 -5163 -3415 -3937 -2300 -3454 -4499 -3970 -5106 -3476 -5231 -5849 -5685 -3991 - -4916 -3093 -4965 -1996 -3298 -3331 -3564 -4052 -2850 -6755 -5818 -5390 -1179 - -4494 -1573 -5304 -5702 -2908 -3673 -1518 -2821 -3399 -3680 -1994 -1781 -3453 -5262 -2024 - -2817 -4683 -3484 -4726 -5292 -5647 -1371 -3251 -4694 -2239 -5457 -3252 -2558 -3081 -4813 - -6143 -6010 -4636 -1540 -2351 -1114 -1075 -1411 -2683 -2107 -1695 -1554 -6147 -1861 - -10945 -8590 - -17590 -15122 -2075 - -66239 - -4958 -6507 -9535 -5538 -2204 -8401 -6005 - -12195 -22957 -21872 - -6147 -5264 -6686 -2662 -9266 -10561 -9894 -1225 - -4431 -13046 -1127 -18157 - -3535 -5094 -7349 -7820 -6967 -3345 -7631 -6795 -5954 -2901 - -6202 -4413 -6345 -1171 -4765 -3423 -4403 -2940 -6516 -5968 -1697 -1868 -5429 - -17229 -10458 -1601 - -4637 -1385 -3460 -1955 -4774 -2037 -6428 -1620 -4279 -3459 -6101 -1027 - -5038 -5499 -5468 -3265 -4014 -4694 -3766 -3548 -5761 -5042 -4874 -5590 -1852 -2250 -5945 - -9655 -2813 -13235 -4421 -5676 -4059 - -4273 -11798 -11018 -12068 -1284 -10417 -2918 - -1358 -6723 -3461 -1450 -3975 -4723 -1166 -6732 -6140 -8746 - -1489 -1442 -13133 -12668 -12772 - -4116 -5431 -4612 -7136 -7684 -10312 -1377 - -4022 -5063 -3069 -4147 -3274 -2114 -2369 -5722 -4159 -4074 -4971 -1046 -5899 -5525 -2131 - -2422 -3086 -7519 -3820 -5993 -6375 -8142 -2993 -7202 - -9855 -36690 - -20852 -24060 -8384 - -6991 -21756 -4202 - -4029 -13074 -8711 -9491 -3020 - -10546 -4261 -6345 -1451 -3556 -7848 -1083 -7119 - -6059 -1982 -2101 -5916 -6447 -4244 -6947 -4484 -4184 -3602 -3309 -5663 -1453 - -5997 -3063 -4466 -1905 -4055 -3405 -5462 -2120 -5155 -4597 -2516 - -5803 -2603 -8894 -4316 -3949 - -4439 -4652 -3348 -2196 -4186 -2850 -2218 -1721 -6827 -4768 -7358 - -3004 -3210 -1281 -4206 -3540 -6025 -4411 -4765 -1782 -7126 -5710 - -3985 -7018 -1713 -7565 -2192 -6903 -4399 -6537 -1072 -6393 -2184 - -3443 -1385 -1670 -5400 -6885 -5391 -7668 -1248 -6523 - -20403 -21090 -1281 - -2435 -4119 -3181 -1687 -5239 -3980 -1274 -4202 -4218 -4174 -3090 -1417 -4875 -4176 - -1224 -10021 -2363 -7798 -8380 -10136 -5749 - -13994 -6701 -8270 -2278 - -3164 -4130 -1407 -3510 -2551 -5144 -3011 -3557 -5410 -5019 -1912 -5889 -5356 -1139 - -7704 -5596 -11858 -6497 -10778 -8479 -4638 - -2717 -8274 -14760 -2591 -1135 - -3752 -6482 -5847 -2548 -5054 -6225 -4262 -6461 -4939 -4170 -5185 -1956 -3863 - -4014 -5392 -6117 -8551 -5182 -6040 -7659 -3460 -6445 -3731 - -5137 -8809 -9393 -10116 -7912 -8936 -2821 -5535 - -4838 -2062 -3104 -4446 -5603 -1617 -1578 -3740 -5059 -2471 -1718 -4530 -2747 -1932 -2029 - -56887 - -8805 -8089 -3794 -8073 -3530 -3522 -2420 -5049 -5619 - -1200 -2268 -5872 -8108 -1220 -8411 -5234 -4288 -1117 - -2379 -4275 -3508 -4889 -4640 -3905 -7002 -2263 -7093 -2288 -3270 - -6171 -19996 - -4067 -4754 -6380 -2843 -8385 -4201 -7631 -4387 -2599 -7088 - -1522 -2360 -2515 -3834 -3958 -6926 -8060 -5358 -4355 - -19530 - -7501 -21086 -2310 - -3561 -1159 -5630 -6114 -4612 -1408 -3502 -4956 -5184 -5842 -2132 -1483 - -5056 -9746 -4504 -9019 -9021 -10289 -7094 - -4750 -11314 - -8676 -6672 -11494 -11044 -5380 -8643 -4934 - -1521 -1632 -2978 -5738 -5740 -4229 -5228 -1590 -4375 -3152 -2841 -6278 -5895 - -2120 -13307 -11773 -5906 -7961 - -20546 - -32304 - -6126 -9197 -1407 -4821 -11686 -2911 -1809 - -11052 -9610 -13895 -10903 -2730 -9753 - -25478 -4681 - -4588 -7758 -7746 -4496 -1521 -5217 -4325 -2242 -5547 -6018 -2099 - -5440 -4951 -4044 -3481 -4718 -1442 -4919 -5198 -1032 -5857 -4014 -1844 -3141 -6081 -3480 - -1311 -7390 -5777 -8124 -7703 -2441 -1849 -6597 -6202 -7848 - -8348 -10633 -15815 -1855 -8177 - -8951 -2899 -11227 -8207 -6741 -2921 -7614 - -3537 -1838 -2686 -5037 -1760 -3175 -3339 -3698 -1591 -3917 -5608 -3296 -5990 - -11248 -12466 -8712 -17366 - -6204 -3307 -6487 -1816 -2964 -4185 -5876 -1960 -3272 -7154 - -4264 -12009 -10916 -2329 -15852 - -2918 -3111 -1397 -6901 -3637 -8521 -1613 -4646 -1275 - -2378 -3601 -2856 -7283 -6269 -4980 -5453 -6274 -6481 -6402 - -9498 - -5368 -5215 -4931 -2638 -4925 -8673 -9606 -9301 -3330 - -19237 - -3272 -3631 -10887 -8302 -5286 -3006 - -5278 -10984 -9411 -1960 -9757 -4346 - -3852 -6281 -5839 -4446 -4445 -5711 -4111 -3201 -3258 -1236 -6237 -5595 -1089 -3002 - -3075 -9388 -3756 -6115 -4759 -2877 -4662 -2003 - -4686 -4103 -4316 -6771 -1945 -1138 -2938 -5802 -8579 -2573 - -8798 -2461 -6245 -5287 -11798 -10103 -3027 - -10348 -18709 -13427 -6693 - -8050 -5154 -3149 -7498 -7688 -6110 -3508 -8476 - -5567 -4365 -2847 -6503 -5903 -3712 -5377 -6888 -5713 -3586 -1586 - -6705 -3204 -7685 -4453 -8534 -5651 -5065 -8081 -6133 -1149 - -4483 -4954 -4851 -3999 -4945 -1362 -4185 -3725 -2950 -5058 -2254 -1800 -1842 -4694 -3281 - -6208 -5547 -3600 -4001 -2231 -4922 -5790 -1948 -4573 -3413 -4322 -4293 -4824 -1527 - -29021 - -2898 -3348 -3531 -5600 -2971 -3338 -5408 -4321 -3717 -4008 -2507 -1941 -2752 -5526 -3739 - -2697 -5679 -1433 -6811 -3980 -4167 -6041 -4697 -2502 -6879 -2025 -4208 -1228 - -4445 -2147 -7149 -5364 -5550 -2898 -1065 -3657 -6576 -6055 -3931 -5395 - -1303 -3297 -4116 -4097 -3206 -4908 -3991 -3820 -5987 -2689 -1026 -4494 -5668 -2364 - -3759 -7034 -12531 -6043 -5183 -2198 - -4924 -2362 -2522 -4904 -6009 -1737 -6787 -6494 -5298 -2737 -3593 -4537 -1031 - -4021 -3441 -2569 -1275 -6548 -8416 -5307 -3190 -3818 -2723 - -8685 -7967 -7708 -11926 - -12403 -9683 -13631 -10653 -7314 - -7316 -3547 -1915 -3356 -1414 -1492 -4886 -5530 -4692 -3502 -6184 -3557 - -5851 -4399 -2012 -2190 -2617 -2159 -2862 -1893 -2469 -2989 -5449 -2108 -1048 -2542 -1284 - -3705 -3689 -3695 -3966 -1879 -2717 -4394 -2586 -7253 -2340 -7181 - -18748 -3187 -11786 - -4576 -3311 -6355 -9688 -1070 -9779 -10843 - -6286 -2030 -1457 -3321 -2340 -5372 -2472 -2688 -3481 -3520 -2017 -4052 -3613 - -8703 -3801 -5806 -1194 -9099 -8051 -6266 -4389 -2806 - -8497 -6721 -4559 -5379 -8359 -2283 -3251 -8600 -3045 -3892 - -5771 -4622 -6452 -2910 -1336 -2028 -4483 -2200 -1261 -7928 -4897 - -4063 -5564 -4386 -4480 -7427 -7328 -4097 -4660 -2058 -2435 -1404 - -1765 -4959 -3595 -5417 -2459 -3727 -1003 -3933 -2074 -3492 -5181 -2748 -2691 -4250 -2233 - -6427 -2023 -5347 -4376 -3351 -5329 -7656 -3114 -2242 -6535 -5010 - -6335 -1288 -1509 -5055 -6435 -4259 -3766 -5446 -2275 -5759 -1658 -5648 -6337 -3140 - -19523 -9958 -7466 -10185 - -5056 -3745 -6112 -3496 -2919 -3307 -10013 - -5709 -1141 -6752 -14817 -1570 - -5994 -19335 -17039 - -8057 -7193 -6660 -10996 -4355 -7284 -9163 - -7243 -13354 -3937 -12804 -8327 -8024 - -1665 -11179 -17488 - -6093 -6097 -1884 -5083 -9616 -5268 -5129 -6153 -1145 - -7401 -2094 -4488 -5499 -6029 -7359 -1952 -3834 -4051 -3015 -2400 -5203 - -1037 -5318 -2600 -1438 -1882 -1667 -2577 -4671 -4614 -5335 -4666 - -3209 -4139 -1011 -6467 -3874 -2866 -2997 -1588 -1474 -4173 -1393 -4486 - -6091 -3128 -6230 -3830 -3837 -6176 -2659 -3036 -5598 -3045 -5889 -1270 -5451 - -2284 -5647 -5472 -2536 -2632 -1354 -2409 -5948 -3176 -5061 -1342 -1929 -3111 -2807 -2756 - -4056 -6430 -16073 -15446 - -8687 - -2610 -15342 -3943 -14628 -3545 - -4230 -4793 -2361 -4513 -5144 -6035 -3039 -5388 -5081 -3138 -4288 -2933 -1584 -2471 - -9066 -2772 -8183 -12049 -3585 -8452 -6792 - -3243 -1533 -5460 -5187 -1851 -3515 -4662 -3355 -5089 -3764 -1723 -4719 -5292 -5615 -1794 - -8661 -16368 -6930 -11440 - -35648 - -5079 -13796 -11334 -4677 - -8876 -24018 -16839 - -5092 -3404 -5504 -1093 -2884 -3871 -1341 -1652 -6410 -2617 -5703 -5414 -3033 -4846 - -29773 - -9474 -7432 -8272 -2002 -2667 -2456 -8304 -6334 -7922 - -4886 -5478 -3204 -3276 -2449 -3768 -1075 -6172 -1986 -6177 -3934 -3968 -4794 -4506 - -13497 -14301 -13442 - -61887 - -5216 -2359 -5537 -12769 -12794 -6740 - -5664 -2729 -5686 -3513 -2411 -3689 -2650 -3459 -2400 -3676 -4652 -4985 -3850 -1949 -1900 - -2841 -5334 -1280 -5989 -6006 -3916 -1715 -5624 -1476 -1209 -3713 -1376 -2545 -5123 -3985 - -2390 -1661 -4703 -6098 -4512 -3216 -2999 -6252 -1394 -1895 -1913 -1801 -3159 - -3322 -11142 -10847 -3906 -1419 -2000 -7233 - -2702 -1048 -5466 -6814 -3528 -3644 -4044 -2019 -4490 -1737 -6813 -5015 - -7855 -9990 -8750 -8581 -2368 -9358 -1568 -7690 - -2953 -1038 -6875 -4560 -6581 -6293 -2047 -1900 -6416 -5569 -4654 -5415 -4408 - -3720 -2562 -2393 -4639 -3641 -2911 -1312 -2697 -6195 -6576 -3644 -3128 - -28955 -5123 - -8445 - -4703 -12165 -7074 - -11707 -13879 -7866 - -4800 -5449 -2036 -5941 -4559 -2548 -4644 -4543 -2322 -2036 -3908 -5780 -5345 -2549 -1751 - -7859 -10697 -10414 -8986 -1373 -3111 -7807 - -2938 -4802 -5235 -3940 -2567 -2461 -7133 -4883 -2447 -1032 -3587 -5788 - -3080 -13380 -7178 -6656 -10753 -11646 - -1948 -3803 -1627 -1426 -6886 -1633 -1545 -3274 -6768 -3241 -4031 - -15127 -1778 -14074 -11149 - -4026 -3948 -5822 -2855 -2093 -6113 -5983 -1709 -6000 -4552 -2594 -1152 -2799 -1401 - -3226 -9386 -6030 -7930 -6490 -5736 -1574 -2360 -3167 - -8084 -7950 -10634 -2320 -3186 -4598 -9171 -7892 - -4968 -10880 -13264 -11047 -12412 -3450 - -28780 -26728 - -7945 -1296 -1773 -5426 -7765 -1785 -2377 -2434 -7809 -4140 -3727 - -1308 -6148 -21591 - -23972 -19371 - -5256 -12843 -23975 - -5911 -1161 -4312 -2088 -7105 -3023 -3772 -1650 -5065 -2713 -4336 -5514 - -5847 -11518 -11799 -11015 -3026 -10915 -1483 - -21170 - -2317 -5499 -4732 -5102 -2989 -3648 -1868 -1910 -5775 -3761 -2119 -3636 -1272 -1199 -2256 - -7780 - -9298 -16719 -25032 - -22138 -34813 - -4414 -2839 -1057 -5746 -5992 -3241 -6411 -4296 -3151 -6393 -3580 -6848 -2757 - -2137 -2976 -13805 -10178 - -1209 -5133 -6097 -3798 -1191 -5846 -1664 -6348 -3490 -6995 - -5102 -1531 -2487 -5914 -9420 -7252 -5464 -5663 - -7279 -1823 -1050 -4389 -7430 -5169 -7345 -1029 -7268 -7171 -1084 -5147 - -7352 -4540 -2007 -10929 -11713 -10909 -1151 - -10392 -5900 -10100 -11267 -11785 -11833 -8224 - -52397 - -4210 -2185 -7522 -2334 -1478 -3920 -2883 -6788 -4548 -6152 -3280 - -3410 -5271 -2300 -1970 -3784 -3548 -1977 -3077 -3306 -1020 -2594 -6537 - -5309 -9473 -16702 - -7650 -13750 - -17582 -4937 -12672 - -29349 -20611 - -6546 -7623 -1911 -2747 -7617 -3987 -7752 -5852 -1233 -1540 -4073 - -5695 -3845 -4041 -8076 -9015 -4289 -4259 -9920 - -5573 -2607 -4056 -2369 -3969 -1080 -2130 -6473 -2130 -3372 -4051 -3963 -2606 -5906 - -26141 -19389 - -12853 -12859 -3938 -9501 -1818 -5496 - -6529 -5972 -9280 - -9836 -3884 -4956 -10149 -5736 -5586 -2755 - -17543 -8648 -17976 -13773 - -1694 -3739 -2053 -1096 -2150 -1489 -4221 -3229 -2995 -4264 -1196 -3597 -3499 -4516 -2236 - -5612 -6240 -4378 -1014 -2163 -1935 -3429 -2831 -4749 -4245 -2239 -4559 -1693 -5657 - -11226 -1962 -9824 -10528 -6845 -6882 -3890 - -1975 -2792 -8087 -1459 -3226 -2909 -1094 -7529 -8035 -3212 -3353 - -13079 -18234 - -5218 -4074 -1663 -7056 -1783 -1857 -5490 -3184 -6300 -6151 -3879 - -2316 -1182 -2366 -4076 -1226 -3753 -6822 -4650 -2065 -6703 -3732 -1622 - -4283 -6886 -1713 -7954 -1408 -8538 -8336 -7599 -2739 -4374 - -4884 -4508 -4068 -2780 -1107 -2157 -3272 -5580 -1487 -4923 -1167 -5056 -2323 -2094 -4311 - -3709 -1743 -3607 -4700 -5983 -6508 -7310 -4932 -2986 -7994 -4138 - -2564 -5468 -7511 -3466 -7763 -4015 -6306 -2291 -7884 -1256 -3286 - -26272 -18770 - -10655 -4092 -13958 -19758 - -4937 -2529 -6704 -11459 -9749 -5660 - -5757 -2813 -2548 -5686 -1350 -2079 -5652 -3366 -2101 -4620 -6250 -2971 -3762 -6068 - -22115 - -15523 -15141 -12498 -2271 - -2307 -5729 -1509 -3105 -3410 -3816 -4078 -5564 -4357 -2989 -6192 -1974 -5607 -6183 - -4548 -1955 -1227 -9884 -6622 -6663 -2549 - -34829 -10698 - -1891 -3378 -1535 -5895 -8254 -3232 -6831 -5472 -7545 -6751 - -2971 -2462 -8484 -3898 -1911 -7516 -1435 -7853 -6027 -6130 - -59206 - -7822 -1506 -13885 -1017 -5150 - -6677 -3808 -14470 -1962 - -2816 -8043 -1593 -4462 -7112 -8563 -9026 -1660 -5553 - -5282 -4451 -1256 -7336 -3724 -2212 -5895 -2488 -8009 -1457 -7634 - -9604 - -3927 -10103 -5636 -11401 -12234 - -11006 -17248 - -10936 -8651 -10252 -7868 -7295 -3070 -1520 - -12324 -5230 -3847 -9922 -5525 -6929 - -13863 -1248 -13247 -11387 -6677 -9255 - -23703 -8659 -10869 - -7358 -2431 -3112 -4743 -6684 -6343 -4335 -1058 -8303 -1262 - -9600 -1977 -4524 -12701 -7686 -1120 - -27377 -9632 - -10910 -14343 - -6305 -5171 -3950 -4167 -2806 -5576 -5066 -4874 -3260 -7138 -5510 -3732 - -20922 -8396 -4707 - -1965 -3603 -1494 -4544 -4911 -1179 -2335 -1333 -2831 -4394 -5038 -6068 -3449 -5419 - -4597 -3641 -5977 -3109 -5448 -5290 -3587 -3195 -4096 -4134 -6191 -6420 -3329 -5404 diff --git a/input/day_1.txt:Zone.Identifier b/input/day_1.txt:Zone.Identifier deleted file mode 100644 index 976d49d..0000000 --- a/input/day_1.txt:Zone.Identifier +++ /dev/null @@ -1,4 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -ReferrerUrl=https://adventofcode.com/2022/day/1 -HostUrl=https://adventofcode.com/2022/day/1/input diff --git a/input/day_2.txt b/input/day_2.txt deleted file mode 100644 index 787ae71..0000000 --- a/input/day_2.txt +++ /dev/null @@ -1,2500 +0,0 @@ -B Y -A Z -A Z -C Z -B Y -B Y -B X -B Z -C Z -B X -B Y -A Z -B Y -B Z -B Y -C Z -B Z -B Y -B Z -C Y -B Y -A Z -B Y -B Y -B Y -C Y -A Z -B Y -B X -A Z -B X -A Z -A Z -B Y -B Y -B X -A Z -B Y -B Z -C X -C X -B Y -B Y -B X -B X -C X -B X -A Z -B Y -B Y -C X -A Z -B Y -B Z -B X -B X -A Z -A X -B Y -B Y -B Z -C Z -B Z -B Z -B Z -A Z -A Z -B X -B X -B Y -B X -B X -C Z -C Z -A Z -A Y -A Z -B Z -A Z -B Y -C X -B X -C X -B Z -B Z -C Z -B Z -B X -C X -A Z -C X -B Z -A Y -C Z -B Y -C Y -B X -A X -B Y -B X -B X -B Z -B Y -A Z -B Z -B Y -B Y -A X -A Z -B X -B X -B X -B X -B Z -B Z -B Y -C X -A Z -A Z -B Y -B Z -B Y -A Z -B Z -A Z -A Z -C X -B Z -A Z -A Z -B Y -B Z -A Z -B Y -B Y -A Z -B Y -C X -B Z -B Y -B X -C X -B X -B X -B X -A Z -A Z -C Y -A Z -B Y -A Z -C X -B Z -B Z -C X -B Y -C X -B X -B X -C X -A Z -B Y -C X -B X -B Y -A Z -B Y -B Y -C X -B Y -C X -A Z -A Z -A Z -B Y -B Y -A X -A Z -A Z -B Y -C X -C Y -B Y -C X -A Z -B X -A Z -A Z -C X -B Y -A Z -B Y -C X -A Z -B X -B Y -A Z -B Y -B X -B X -C X -B Y -C Y -A Z -B Y -B Y -C Y -B Y -C Y -C X -A Y -A Y -B Z -B Y -A Z -B Z -B X -B X -B Y -A Z -B Y -B X -B Y -B Y -C Z -B Y -B Y -A Z -A Z -B Z -A Y -C X -B Y -B Y -B Z -B Z -B Y -C X -B Y -B X -B Z -B Y -B X -B Y -C Z -B Y -B X -A Z -B Z -B Z -A Z -C X -B Y -C Z -A Z -B Y -C Z -B Y -B X -B Y -B X -C Z -B Z -A Z -A Z -A Z -A X -B Z -B Y -B X -B Y -A Z -B Z -C Z -B X -B Z -B Z -A Z -B Y -B X -A Z -A Z -B Y -B X -A Z -A Z -C Z -A Z -C Z -B Y -B Y -B Z -C X -A Z -B X -B Y -B X -B Y -B Y -B X -B Z -B X -C Z -C X -C X -A Z -A Z -B X -B X -A Y -C X -B Y -A Y -B Z -B X -A Z -B X -B Y -B Y -B Y -B Y -A Z -A Z -B Y -B X -C Z -B Z -C X -B Z -B Y -C X -A Z -B Y -A Z -A Z -B Z -B Y -B X -A Z -B X -B Y -A Z -B Z -B X -B X -A Z -C Y -B X -A Z -B X -B Y -C X -B Y -C Z -C X -B Y -B Y -B Y -B X -B Y -B X -A Y -A Z -B Z -B Y -B X -B Z -B Y -C Z -B Y -A Z -B X -A Z -C X -A X -B Z -B Z -C X -A Z -B X -A Z -A Z -B Z -A Z -B Y -B Z -C Z -A Y -A Z -A Z -A Z -C X -B Z -B Z -B Y -B X -B Y -B Y -B Y -B Z -B Y -B Y -A Z -B Z -A Z -C X -B Y -B X -B Y -B X -B Y -B Y -C X -B Y -B Y -B Z -B Y -C X -B Y -B X -B Y -C X -A X -A Z -C Z -B Y -C Z -B X -C Z -C X -C Z -B Y -B Y -C X -C X -B Y -C X -A Y -B Y -B X -B X -B Z -B Y -C Y -C X -B X -B Y -B Z -B X -B Z -B Z -C X -B X -B Y -B Z -B X -C Z -A Y -B Y -B Y -B Y -A Y -C Y -B Y -B Z -B Z -B Y -B Y -B Z -B X -B X -B Y -A Z -C Y -C Z -B Y -B X -B Y -B Y -C X -B Y -C X -A Z -B X -C X -C Z -A Z -A Z -B Y -C X -A Z -A Z -B Y -A Y -B Y -A Z -A Z -B X -C X -A Z -B X -B Z -A Z -A Z -B X -B Y -B X -B Z -B Y -B Y -B Z -C X -C X -B Y -A Z -B X -B X -B Y -B Z -B Y -B X -B Z -B X -B Y -C X -B Y -B Y -C Y -A Z -B Y -B X -B Y -A Z -C X -A Z -A X -B Z -B X -A Z -B Y -B X -B X -A Z -B Y -A Z -B Z -B Y -A Z -B Y -B Y -A Z -B Z -C Z -B Y -B Y -C Y -A Z -B Y -B Y -B Y -B Y -B Z -B Y -B Y -B Y -C X -B Z -B X -A Z -B Z -C X -B Y -B Y -A Z -B Y -B X -A Z -A Z -C Z -B X -B X -B Y -B Z -B Z -B Z -B Y -B Y -B Y -B Y -B Z -B Y -A Z -A Y -A Z -B Y -B Y -A Z -B X -B Y -A Z -C Z -B Z -B Z -B Y -A Z -A Z -B Y -B X -B Z -B X -B Y -B Y -B X -C X -B Z -B X -A Z -B Y -C Z -B X -A Z -C Z -C Z -A Z -B Y -B Y -A Y -B Y -C Z -B X -C X -B Y -B X -B Z -B Y -B Z -B Y -B Y -A Z -B X -B X -A Y -B Z -B X -B Z -A Y -B Z -C X -B X -B X -B Z -B X -C Y -B Y -C X -C X -B Z -B X -C Z -B Z -A Z -C Y -B Y -B Y -B X -B Z -B Y -B Y -B X -C X -B Y -B Y -C Y -B Z -C X -A Z -B X -B X -B Z -B X -B Y -A Z -B Z -B X -A Z -B Y -C X -A Y -A Z -C X -B X -B Z -B X -C X -A Z -B X -B Y -B Y -A Z -B Z -C X -A Z -B Z -C X -B X -A Z -C X -C Z -B Y -B Z -B Y -B X -C Z -B Z -B Z -B Y -A Z -C Z -A Y -B Y -C X -B Y -B Z -A Z -B Z -A Z -B X -C X -B Y -A Z -B Y -B X -C Z -B Z -C X -B Y -B X -C Y -B Y -C X -B Y -B Y -B Y -B Z -B Y -B X -B Y -B Y -A Z -A Z -C X -B Z -B Y -A Z -B X -C X -B Y -B X -A Z -C Z -A Z -B Z -B Y -B X -B Z -B Y -A Z -C X -C Z -A Y -A Z -C X -C Y -C Z -B Y -B X -B Z -B Y -B X -B Y -A Z -B Y -C X -B X -B Y -C Z -B Y -B Y -B Y -B X -B Y -C Z -B X -B Y -B Y -B Z -B X -B X -B Z -B Z -A Z -A Z -C X -B Y -B Y -C X -B Y -B X -A Y -C Z -B Y -B Z -B Y -B Y -A Z -B Y -B Z -B Y -B Z -B X -B Z -B Y -A Z -B X -B Z -B Y -B Y -B Z -B Y -A Z -B X -B Y -B Z -B X -B Y -B X -B X -B Y -B X -C Y -B Z -B Y -B Z -C Y -A Z -B Y -A Z -B X -A Z -A Z -C Z -B X -C Y -A Z -B Z -B Z -B X -B Z -B Y -A Z -B Z -C Z -A Z -C Y -A Z -B Y -A Z -B Y -A Z -B X -A Z -B Z -C X -B Y -B Y -B Y -C X -B Z -C X -A Z -A Z -C X -B Y -B Z -B X -B Y -B X -A Z -B Y -B Y -A Z -B Y -B Z -B Z -B X -B Z -B Y -B X -B Y -B Y -C X -C Z -B Y -B Y -B Y -B Z -B Y -B Y -B Y -A Z -B Y -B X -B Y -B X -B Z -B Y -B X -B X -A Y -B Y -B X -B Y -B Y -B Y -B Z -B X -A Z -B Y -B Y -B Y -A Z -B X -B X -C Z -B Y -B Y -A Z -B Y -B Z -B X -C X -B Y -B Y -C X -C Z -B X -A Z -B Y -B Y -B X -B X -B X -B Y -B Y -A Z -A Z -B Y -B Y -A Z -B Z -A Z -C X -C X -B Y -B Y -A Z -A Z -C Z -B Z -B X -A Z -B X -B Y -B Y -B X -B Y -B Y -C Z -B Y -B X -C Z -C Z -B X -B Y -B Y -B Z -A Z -B Y -B Y -B Y -B X -B X -A Z -A Z -B X -B Y -B Z -B Y -B Z -B Y -B Z -C X -B Y -C X -B Y -B Y -C Y -A Z -B X -C Z -B Y -B Z -B Y -B Y -B Y -C X -B X -B Y -A Z -C Y -B Y -A Z -B Y -B Z -B Z -B Y -B Y -B Y -C X -B Y -A Y -C Y -B X -B X -B X -B X -B Z -B X -B Z -B Y -B Y -A Z -B X -B X -A Z -A Y -B Y -B Z -B Y -C X -B Y -B X -B Z -C X -B Z -B Y -B X -B X -A Z -B Y -B Y -B Y -C X -A X -B X -C X -B X -C X -B X -A X -B Y -B Y -B Y -B Y -B Z -C Y -C X -A Z -B Z -B Z -B Y -B Z -B Y -B Y -B X -B Z -A Z -A Z -B Z -B X -B Z -A Z -B Y -B Y -B Y -B Z -A Y -B X -B Z -B Y -B Y -B Y -B Y -C X -B Z -C X -A Z -A Z -B Z -A Y -C X -B X -B X -C X -A Z -A Z -A Z -B Y -B Z -A X -A X -B Y -C X -A Z -B Z -A Z -B Y -B Y -B X -B X -B Y -C X -B Z -B Y -B X -B X -B Y -B Z -B Y -B Y -B X -B X -B X -B Y -C X -B Y -B Y -B X -B Y -B Y -B X -B X -A Z -C X -B X -A Z -B Y -B Y -B Z -B Y -B X -A Z -C Y -B X -B Z -B Y -C X -A Z -B X -A Z -A Z -B Y -B Z -B Y -A Z -B Y -B Z -A Z -C Z -B Y -B Y -B X -B Z -B Y -B X -B X -B Y -B Z -B X -B Y -C Z -A X -B Y -C X -A X -B X -B X -B Z -A X -B X -B Y -B X -A Z -B Z -C Z -B X -B X -A Z -B X -B X -B Z -B Y -B Y -A Z -B Y -B Y -B X -B X -B X -B Y -A Y -C X -B X -A Z -B X -B Y -C Z -B Y -B Y -A Z -B Y -A Z -B Y -A Z -B Y -B Y -A Z -B X -B X -B Y -B Y -B Y -A Z -B Y -B Y -A Z -B X -A X -A Z -B Y -B X -B Z -B Z -B Y -B Y -C Y -B Y -B Y -B X -B Y -A Z -C X -B Z -B X -B Z -A Z -B Y -B Z -B X -A Z -A Z -C X -B X -A Y -C X -B Z -B Z -C Z -B Z -B Z -C Y -A Z -C Z -A Z -C Z -B Z -B Y -C X -B Y -B X -A Z -C Y -B X -B Y -B Y -B X -B Y -A Z -A Z -B Y -B Z -B Y -C X -B X -B Y -B X -A Z -C X -B Y -B Y -B Y -B Y -C Z -B Y -C Z -A X -C Z -B X -B Y -B Y -B X -B Y -C X -C X -A Z -B Y -B Y -C X -B Z -C Y -B Z -B Z -B Z -B X -B X -B X -B Z -B X -C X -B Y -C X -B X -C Z -B Y -B X -B Z -B Y -B Y -B Y -B Y -B Y -B X -B X -A Z -B Y -B X -B Y -B Y -A Y -B Y -B Y -A Z -A Z -C Z -B X -B Y -B Y -B Z -C Z -C X -A Z -C X -A X -B X -B Z -B Y -A Z -C Z -B Y -C Z -B X -A Z -B X -A Z -B Y -A Y -B Y -B Y -A Z -C X -B X -B Y -A Z -B Z -B Y -B X -B X -C Y -B X -A Z -B Z -A Z -C X -C Y -B Z -B Z -A Z -B X -B Y -B X -C X -B Y -B Y -B X -C X -B X -B Y -B X -B Y -B Z -B Y -B X -B X -A Z -B Y -B Y -C X -C Y -C X -A Z -A Z -B X -B X -B Z -A Z -A Z -C Z -B Z -A X -B X -B Y -B Y -A Z -B Y -B X -B X -B X -B Y -B X -B Y -B Y -B Y -B Y -B Y -B Y -B Z -A Z -B Y -B X -C X -A Y -B Y -B Y -B Z -C Z -B X -C X -B Z -B Y -B Y -B X -B X -B X -A Z -B X -A Y -B Y -B Y -C X -A Z -B Y -C X -B Y -B X -B X -B X -C Z -B X -A Z -B Y -B Y -B Y -A Z -A Z -B X -A Y -B Y -B Y -B Y -B X -B X -B Z -B X -B Z -B X -B Y -A Y -A Z -C Y -B Z -C X -B Z -B Y -B X -A Y -B Y -B X -B Y -B X -C Z -B X -C Z -B Y -B X -B Z -A Y -A Y -C Z -B X -B X -B Y -A Z -B Y -B Z -A Z -B X -B X -B X -B X -B X -B Z -A Z -A Z -C Y -C X -A Z -A Z -C X -B X -B X -B Z -B X -A Z -B Y -B X -B Y -C X -A Z -B Z -C X -B Y -B Y -A Z -B Y -B Y -B X -B Y -C Y -B X -B Z -B Y -A Z -B Z -A Y -B Y -A Z -B X -B Y -A Z -B Y -C Z -B Z -B Y -C X -C X -B X -B Z -B Y -B Z -B Z -B Z -B Z -A Z -B Y -B X -B Z -B Y -B X -A Z -A Z -A Z -B Y -C Y -C Z -B Z -B X -B Y -B Z -B Y -A Z -A Z -C Z -B X -B Y -B Z -B X -A Y -A Y -B Y -A Y -B Z -B Y -A Z -B Y -B Y -B Y -C Z -B X -B Z -B X -B Y -B Y -B Y -C X -B X -B Y -B Z -B X -B Y -B Y -B Y -B X -B X -B X -A Z -B Y -B Y -C X -C X -C X -C X -B Z -A Z -A Z -B Z -B Y -B X -A Z -C Z -B Y -B X -C Z -C X -B X -B Y -B Y -B X -B X -B Y -A Z -B X -B X -B X -B Y -A Y -B X -A Z -B Y -B Y -B Y -C Y -B Z -B X -B Z -C X -B Y -B Z -C X -B X -B X -B Y -B Y -B Y -A Z -A Z -A Z -B Y -B X -C Z -B Z -B Y -B Y -B Y -B Y -B Z -C X -A Z -C Z -B Z -B X -B X -A Z -B X -B Z -A Z -B Y -B Y -A Z -B Y -B Y -C Y -C Z -B X -A Z -B Z -B Y -C Z -C X -B X -A Z -B Y -B Z -B X -A Z -A Z -A Z -B Y -B X -C X -B Z -B Z -B X -B X -B Y -A Z -B X -B X -B Z -A Z -C X -B X -B Y -B Z -A Z -B Y -B Y -B Y -C X -B Z -A Y -A Z -B Z -C X -A Z -A Z -B Y -C X -B Y -B Z -C X -B Y -B Y -A Z -B Z -A Z -C Z -A Z -B X -B Z -A Z -B X -B Y -C Z -A Y -B Y -B Y -B Y -A Z -B Z -A Y -A Z -B Z -B Y -B Y -A Y -B Y -C X -B Z -B Z -A Z -B X -B X -A Z -B Z -C Y -A Z -A Z -B Y -B Z -B X -C Y -B Y -B Y -B Z -B Y -B Z -B X -B X -B Y -B Y -C X -C X -B X -B X -C X -A Z -B Y -C Z -A Z -B X -B Y -B Z -A Z -C Y -A Z -B Z -A Z -C X -C X -B X -B X -B Y -B Y -B Y -B Y -B Z -B X -B Z -C Y -B Y -A Z -B Y -B X -A Y -B Y -B Z -C X -B X -A Z -A Z -B Y -B Y -A Z -C X -B X -B Y -B Y -B Z -A Z -A Z -C Z -A Z -B Y -B Y -B Y -A Z -B Z -B Y -A Z -A Y -B Y -B Y -B Z -A X -A Z -B Z -B X -A Z -B Z -B Y -B Y -B X -A Y -C Y -B Y -B Y -B X -B Z -A Z -B X -B X -B Y -B Y -A Z -B X -C X -B X -B X -A Z -B Y -C X -A Z -B X -C Z -A Z -B Y -B Y -B X -B X -A Z -C Z -B X -B X -B Y -A Z -B Y -B Y -B X -B Y -B X -A Z -B Y -B Z -B X -A Z -B Y -C Z -C X -A Z -A Y -B X -B Z -B Y -B Y -B Y -B Z -B Z -A Y -C X -B X -C X -B Y -B Y -B Z -B Y -C Y -C X -B Z -C X -B Y -B X -B Y -B Y -A Z -B Y -A Z -A Z -A Z -A Z -B Y -A Z -B X -B X -B X -C Z -B Z -C Y -B Y -A Z -B Z -B Y -B Y -B Y -A Z -B Z -C Y -C X -B Y -B Y -B Y -B X -B Y -B Z -A Z -B Y -B Y -C Y -B Z -B X -B Y -B X -B Z -B Y -C Y -C Y -A Z -B X -B X -A Y -B Z -A Z -B Y -B X -B X -B Z -B X -A Z -B Y -C X -C X -B Z -A Z -B Y -B Y -B Y -B Y -B Y -B X -B Y -B Y -B Z -B Z -A X -A Z -A Z -A Z -A Y -C X -B Y -B Z -B X -A Z -B Y -B Y -B X -B Y -B Y -C Y -C Y -B X -A Z -B Y -C X -B Y -A Y -B X -B X -B Y -C X -A Z -B Y -B X -C X -C Z -B Y -B Y -B Y -A Z -B X -A Z -C Z -B Z -B Y -B Y -B X -B Y -B Y -B X -A Z -C X -C Z -B X -B Y -C Y -B X -A Z -B Y -A Z -B Y -A Y -A Z -A Z -B Y -B Y -B Z -C Z -C X -B Y -B Z -B Y -A Z -B Y -B Z -B Y -B X -B Y -B Z -B Y -B Z -C X -B Y -B Y -C Z -A Z -B Y -C X -B X -A Y -B Y -A Z -B Y -B X -B Y -B Y -B X -B X -B X -B Y -B Y -C Z -B Z -C X -C Z -B Y -C X -B X -A Z -B Y -C Z -A Y -B Y -B Y -B Y -C X -B X -B Y -B Y -B Z -C X -B X -B Z -A Z -B X -B Z -B X -A Z -B Y -B Z -C X -B X -C X -B X -B Y -B Z -B Z -B Z -A Z -B Y -B X -B Y -B Y -B X -B Z -B Y -C X -A Z -B Z -B X -A Z -B Y -B Y -B Y -A Z -A Z -C X -B X -A Y -B Y -B Y -B Y -A Z -A Z -A Z -C Y -B Z -A Y -B Y -B X -B X -B Y -C X -B Y -C Z -B Y -A X -B Y -B X -B Y -B X -C Z -B Y -B Z -B X -B Z -A Z -B Y -B X -B Y -A Z -B X -C Y -B X -B Y -B Y -B Y -C X -B Y -B Y -B Y -A Z -B Z -C X -A Z -B Y -C Y -B X -A Z -C Z -B X -B Y -B X -C Z -B X -B Z -C Y -B X -B Y -B X -B Z -B X -B Z -B Y -B Z -B X -A Z -B X -A X -B X -B Y -B Y -B Y -A Z -B Y -B Y -B Z -C X -B Y -B Y -B Y -B X -B X -B X -C Z -B Z -B X -A Z -B Y -B Z -B Y -B Y -B Y -B Y -C X -A Z -B Z -B Y -B Y -B Z -A Z -B Y -B Z -B Y -B Y -C Y -A Z -B Z -C X -B X -C Z -B X -B X -B Y -B Y -A X -B Y -C Z -A Z -B X -C Z -C Z -B X -A Z -B X -C Z -B Z -B Y -B Y -C X -A Z -B X -B Y -B X -B X -B X -B Y -C X -B Z -B Y -B Y -B Y -B X -A Z -A Z -B Y -B Z -B Y -A Z -B Y -B X -A Z -B Z -B Y -B X -B Y -A Y -B Y -B Y -B Y -B Z -B X -B Y -C Z -C X -B Y -C Y -B Z -A Z -A Z -B Y -B Y -A Z -B Z -B Y -B X -A Z -A Z -C X -A Z -C X -A Z -B Y -C X -B X -B X -B Y -A Y -B Y -B Z -B X -B Y -B Y -A Z -B X -B Y -A Z -A Y -A Z -C X -A Z -C X -A X -B Y -B Y -A Z -B X -B Z -B Y -B Y -B Z -B Y -B Y -B X -B Y -C X -C X -B Y -B Y -B X -C Z -C Z -C Z -C X -B Y -C Z -A Z -C Z -B Y -A Z -B Z -B X -A Y -B Y -B Y -B X -B Y -B Y -C X -B Y -A Z -B Y -A Z -C Z -A Z -B Y -B Z -A Z -B X -B X -B Z -B X -B Y -A Z -B Y -C X -A Z -C Z -B X -A Z -B Y -B Y -C Z -B Z -A Z -B Y -B X -B Y -B Z -C Z -A Y -A Z -B X -B X -A Z -C Y -B Y -A X -A Z -B X -B Y -B X -A Z -C X -B Y -B Y -C X -A X -B Y -A Z -A Z -B Y -B Z -B Y -B Y -B Y -B X -B Y -B X -B X -B X -B Y -A Z -C X -A Z -A Z -A X -A Z -B X -B Z -B Y -A Z diff --git a/input/day_3.txt b/input/day_3.txt deleted file mode 100644 index 5533a94..0000000 --- a/input/day_3.txt +++ /dev/null @@ -1,300 +0,0 @@ -zBBtHnnHtwwHplmlRlzPLCpp -vvhJccJFGFcNsdNNJbhJsJQplQMRLQMlfdfTPCLfQQCT -GPhjcjhZDjWtnSVH -BNhHVhrGNVTbDHdDJdJRPJdSQQSJwPjR -lvtsfbsqzwSnJcvjSm -MftttFLftZMLgtgMbltMqZzbDNrTpVGhNWrDTrpTGNpZGZhD -VSSHcTgTtTdtllZlzmmbljTn -RqMqsFfQLLFLQFMMfRLPZLvPpCfWrbpmCbjCnfjlWmnrmmnm -hqRDqPDRsqNHwtHSNBZtJd -tNFDpDFrtdjfmjjjFmFFdScpZhZScTJgpHccHhMJgS -lLzSlSCQqbsVhBghggBZgCcJ -zRLVVLQnvQqVVzRldfWrwffjjdwSdfjv -bpWqqqWvHBpwGBCCRl -hJdjdJFQqdBBDMMC -tFFzJZFtJSqtZJQsWLbNSTnffHfvTH -lFhRZhFjPlqMlJqZJlJcRLwrLrwStRwtsVVtVSrgRV -WcpDvDfBmpDHzWBDbpbmWmNVSSTzLTtrVswgttVVzwwr -pbWfmGBpHfDmWnvvGbmWnjjMqPJMlMFPdGcjqPqPhP -NjFNRlpVLFCSSlbBWWfw -pssPZQQsMnzmtnQPttzDBbBJBcrrJWbrZSBJSbfC -QTHPHspMNGHdhvRR -QfPdSJfFJmthSthtwbsNLbPLlLTLpbvP -nHnMBnZqqgBMnWrZMqnZVcbCqRwNsvblRwppbllTsRNp -nZHBHznMnWgcrnVBtjFdfmzQNtNddjNF -hFhfPghppPhpRNhzsjsvHVzjpsGnWz -tTjlCCwMqtdMjMctGJWHwWnVwWnwvWGs -rZdrjBBtqdCtlcdgFZQLfhRLFSgRNP -RDHSWrJWffJFlJCgCMCDjCvzjPMP -QtGTndBwBtNzBVjBCMgB -LdwwMpTdwsRHsqSHqHJl -RfsfzvLLFvFzCSvSbDsTpTGMPMZPPTMt -jqWBjwBBNwWqwPGZbTwVwVtD -BnhgglhhNNngqjBjHNWrZLlFLSCJSFFCCQzQvQFCFF -HLvLDQbvnDQDvbHTLhntSnGBSlfGldddcmfMMf -NgFjZjrZZJrlfJfSVcBJGc -scWCNFZpsjzrDLwLhbQzhQwD -SlqJlThDPqpwSTwhcbDdbWDbZGcZNcDb -MsnWWjHjvLvfscjjgdzNdbgbcc -vQQvWVQFLLHfHVBWfsfmFFpJRhhSplqlRJqpBwlqTCPC -DZbDzzZDjQbPGZFFSSgSlFCzTgzm -qLnvwvhddrqMrwrCTLLFJjmtSlFlSH -VdhvsWqdVWvvRhsvqbpbPcZfPpjZGBQNRj -mJNtNFmzDZtzdzrLtwwRqJSchgfGcRfwRB -pWpjQjCTQnHMWCCpjQpHvTqcwTwScfRcBcSGBRThwS -MQHjvjVCCqsvljWnVQzLtNPZzmzLVNLddtPN -QVRPRVDgsRjLssnL -TTGDJDJfbfLHSnsMWWbs -qGqqTFFDqgQgQQQq -nlMnRRjbMjCdJVQJCZ -nGqfLwfNLFNLnPPGFVVCdVGZJtCtCCVzJz -LHHfPNHnPqqLwqPqDPWfNFvMglbhhbMgmclgcllDmgmrcl -cLLWWSThtdLpRcddcgPRZFDMCVPPMCCPCPCZ -NfGbGNzrBNffGNJjbPPZsZmZZPmDHpMH -zlJBfzlQzNjNjfJcpwSdvWhcvLwQWt -cVVQfVCJVrVcTJnfNvlDFmDrmlvrFWlL -snZHpMhZtMbtPNvzHWWvNFNvNW -gppnbbbRgMnZbswRqRwbqTcCCSTCJJdGjgfVGTdcCG -jplgNdrHrrNZgdHmlHNJHddlDSPPSTlzTSlTSDSzCQLfzf -vscvWWWvGWGGscbFMpRWFwQTPzfLQwQwPfLbzSzzDL -GvGBWpqcMVRNNZHgdHdtBJ -LchbZhjjZFjwSmPRqRffqbdtggdR -vWHMWlHJdGqtRqHV -MvzCJlnMnlTNnNNLLdhjjCdjjhDjjL -FNCllHFvCGvwQcPQJfgfmwgh -zjtRpbDLjtsrzbLLQmfBTgTBQQfhbfQB -WLgqRzqsrWvFGFZFZC -qjLlNcLjcNWpQLlQMmvmhCvCgsMZZghj -tGSDJtRGJzHMMGDVZCfvmfhzmZZgZsmv -BSSRDRHBGHtSSSbGJSwHbNcLQddqMNlrqcMQMldBWc -JSfctrtctDpszHvzVQHr -glCWjhWmFjlmlhmdWPhVVznvcHjszbvvpHvznv -FgBmFhCBCGFqglgmhCFmSTSRLJLLZfSRJcDSGMtM -vZGlFFtLMLdShSSShRVtVf -rQNvmznWPNCPNsrCsbWbsPCvjShhhfHBBHJjSJRhjSRnHhSj -mCNsQCmqszNcQzrzrrzWvGgGMgpdFpMLlFZGwcLDdg -QJRJQDlcqLlWbNGL -HCnwwsCrnstLWqtWNgZNgg -rsnTrTCHTnnVwnsVPqqDQcRjcczMPvPRzM -qCzjqnzVdzrdhnhddDbDBMPttcGBDBDPnc -sZgRQWHgWHHLsgsRRZsJbpJlDcDGNcTDFtGNFFcJNFPBPBTc -WggbRQSRRgRSsWWmbHqvVffVwhzvCdmfhmdV -lhqWcNpQGcNmmHmNPWCsQzQsgrQrBMCMbMVM -wDLFFDJvSFFZRDZSzCrzTzsRgVWbCrMW -dFwDtZfdjFZWFFfmHGPnPPmqfmPNcN -lcMRNJRGGLJnNVFbVrwrwZrD -tjCzQjQhQwgWFShVFS -ffHQsQssQTzBsPnLpMPRwsJP -MQSMSBSRFMQLJChLChjTBh -WmVlPrwnpwDlflNpDrNnDlDwThJCCdLJhhdhCfJTccGjvscd -gnDVnNnwgglwDwptSZFzgQHqbjZgZZ -nwBcFgwTDcNrpZMD -WQWCLZmvhMRvNjsNSD -CGGWmZGHHhtVzHbTqgTdbgzz -RmcTCwvssRbsThTcVRJJfSPqfJwJFqfjfMFq -zQNZDWtQlDZGBQPfFQqjJLjL -rrglggZGWnrnrrHlDhsbsPTVCsCVsTRpHv -wFGfzSvCPGttSzqwmtqmvvPRDDRCWgWWDTBTMcBcBWbCRM -hVJJHQHnpWnDTNnnDb -LJsVVdhQqvmdbbSf -srlJztzsVVsSsVtRlNllTWzzmqGhqWLPCDCgmChPLDdqCmCP -bZQMZpbvMBMgmDGmZLSPZd -MpScMSMpvfjMBcBcfMfSBnzlTjssNszrNrtlTVzlzFVN -rCtgrgClprGGClnJCZmwtMjZRjbjjcjZQv -PWVfBHWPdbNfbbRmRj -sPsVqFPsHWLhBVVqHFqPVddWSDLJgpTCnnrRRLGpJSSTRrgT -zjqpGjrQjGqSHCVvCrRZDN -cTdshMhdmcMNmddRHBhvCCBCCvHZDC -JTmTmJnLTdwzNQpPWJWgpP -BmpZmrzZnznHbpprSbQSQbqdSVqbPQcV -fRGTGJZRTTDwJTJRGDfgJgNFlSSFcldfdccFVlPlFFQPSQ -GvTTTZZLmsntzmCL -VhMcrmbhvzMSnhvftbRbllLtglBBtf -HqqqJqDqPjJPNjjDVFDZCdqBtRtGBGlGRfQQgttQfHlTQl -pCZJPqqZpmhvhpVh -dWLBJHJhGJGMBJRcDLDSQsSQpvcR -ZlnnPqglblfRRpSvSsnz -sPTgZVjjmwVTljrwTTlbwVGdJhBNNdFdMGNHHJMjBNFN -FhFrfbfgbLRdfqfrmvDgLdjrcQtSNStHHHQlSjJJPllt -CnspzZWTpCnMVzzZZGZRCzttHNjNlQlSNtNlNjVcjlQS -GCZsZBRwnvwfbqwFwb -bZnJFJgLFRnqQZqJQJFQGpCLNcGlLllClNtccjGc -rVfvwPDhPHGtlcbClr -mBhshsfMvBvqsQJdTbgnqQ -jgWHqMSWMGqWjWjqbWGJQDfVqLfrfDfJhVLfTr -pPplwsRZPFZFtLhfwgfwrhJL -zlRsdgFcRgmjdBCMHdjHWB -qJSGJSPQWzcprtQZtt -mBMVfsNBnZzcNtcc -LMLBsmMlvBgFsghVVvfgLBvbJJSqgGHqPGPtCWwbJHqCPG -ZvZLcdMGVMlHDvDpvqhH -NNSrQNbJbrTnnWZDDZqqhqpW -wbgNJrsrCwwJQZbsrJBFzjCCdzGdjcGzMdzj -JbVmdVLJJJdQMnzmmMgHjPqqjNgvqwngHNNP -ZfffDZZsRpcpRDcCRrlpplcWSSgwgSwjvvsjPSwhNSWggh -cCtfppZrpjtMMmdQQTLz -TtbnmbdmTmgTlPNhqvqj -wrwrLsVZRsJJJsfHjvPPWfhjHqRN -sDZwDvsCCQLJZQJQsMCMzZBtSMpndcSFnnSBFtSBmdBc -mWFTZdmQdZFrFQbCRsrspjSjnvCLRS -GwlDqcNHDzwGfHSRqCgJsSpnvpSL -NGlcNwHLLGfDDHDhDwDcwVczbPddZtMFWttWWtdPPdQdhPWd -mnfcZgcdZqnqdfFqPmHfhqsbgVMCJNMtvCJtMvtblTJtvb -rRLDDjPSjjPDGBQSBNbtLVtbMNNJlTMtbl -SzjDDzRRpGQDDDPHzdsmnnhsqcqdFq -ZDGNRDGjSdwnnmnsVNsHJJ -tMBWWrddLPLhvWTTPLccvmmbVpgsJHmccppJ -ClPrtBWWrhrFLBPlCRzjzGqdRzjRdRGZjF -csTRNQNJcNBDLfhfMf -qGmWpGHqrqPLChPRhVFPDD -tgHrtnrrJnZRTZcv -FLqrfmLDrqCmqjTqcbGqRTGVvb -FMtWMSWzzFStJzPzhWzhQvTvHVjjTjHTTHvbHc -PgtWWstWtSpZWPzWwnrBsdBDdFLfllLlfC -mThbMDMQDCDbwLqWpqPpdhwR -zgrcffgHNZltZSgHLsRsLLWRWgLqppsW -SVlSrfSHlSSVlrJfVctlNDMCmMFbnbRDbDBFJFbBRM -PrBrWqtRPdBLLrBwqpswgpwhgpnZhhzsgw -FTFRSVJQVJflFfQQgggGMZngGQZszZ -TbmfFJFSDFblSTDSFFbmVSDrPLLWtcmBqqRmBtmcLtcrjP -DjPsMwDjLVVTsvNNRTNTRT -ztdQQHqHlFNtfRNNNMgg -FzhMhHQlDcCrhCCc -zSHGzzmHgnnMDLTNTG -lPVBtvhQjpNSMWTLBD -VCftbjvbVCfPbZwsJsrSgSSZwC -CbwgmvMnmnCwMmwRQqJBGBgHZHpJHdtdZpJt -zVSlNSDlrzNhqlNTScDzVWfBBZZZZGBstGsdsWFpdHdJsW -NDlLzhrVcqRPCMRwLLLw -TjTHHLwnLjVlTwLjgVfvsFvDsdWfvDvFMd -qbRRRpmpcmDcczppztSqSvWFssFGfWdMvfQWdfsG -RZpqDBmtrzhzphjTgjHlnwjgJhgJ -dLmMgdgzwDLzDWFhBWvzFzzBZJ -tTVcppbSTfstTMMHfTbhBchhJFCWcjWBZhjGGB -SSSSNbsNRpRRsRrfVHfRpNtlPgQDLPdMmlDLlrPnqPdPLl -qqbTCSqdqqFZdRLZhwhZ -HWWlHtlrBfGtVssnsLnHfJVPPMMFzhPRwMPwFhzPZzPMGM -nfmtsrlsnrfVnHJrVBWlsVfgbbNTNSvmvvpcTjLjLbqvvS -GGhFvGPFcThqffPdnfNLqZZCSwtQSwZpwQQBsL -RglMRrJJgHBCBZSQQpdr -WmbRHHbzDgJMDzRDMdWmWHzHNFFvvGGhnvVvvfcvnFfcbvnT -QsfQmsLfZZZcshnJ -dSgdWgSVVFvzSpqFdqTgWRHbJNcbZNCTJCNNZRRCCh -FcpVjgDvVVFdVWFvzjwwQtBMLtBBGDwftPrB -rqsRrHsvsPqswNcJcNJrnnBrNn -bFjgGFdbVRNNnpRQpV -GSthhggGDSvMRqtHvMfM -ZwVPgMsgVsGzVsRZpgpzzgpFMrNbbLFrDLFFrrSDLfrNBN -qvnjBhQhntbfDLrF -CJlHHcHcTWqvpBdsWRpdPdgs -BjmTDjJBCBWrgQRPFlWWlW -dHphshtdtVHVhpJqspdvRrqFPgrLPPFPrrRPvQ -sdMsMtStVszpwMzHjJGjCcZjmScNfCDf -DmGdDffgDSDDdJstqdJldlRt -MhnvMCZCbbZHMvsCHtrcVrPjJcRqVtlt -LsQbsFZvZhQzZwhQWTNgBWpNwSGpTmfS -RRJQnCzbZZLTZJCBtWvFtsfqBqtfWb -prjlChGNldGNdlSVMhWfqWtfsvwvqsFtdtsq -GGjNDNhpMGMGVhrnZZTzcTHCCJcDHc -RmbMmjgpPjMBsBMfchhVsc -HwFWFTztSrtFpcQvBsSqVscBBC -zWwnJFHtWWHDgbGgdpGpnl -mnbWbRRLRFnmmWcCDTBVwCDBlwNW -ggJPtpdHGfdZtMHgtZgVPPBCVsPNBcsBTTDDCC -hpvJJTpGhdhtJdMHqvmmnLvSbmnFnRFm -WWtrWrNgVbRjMrQCNzqJFwQJFNTJ -LdHPhcdchQQssLzJrz -pBccnHpnrrcGHnnSlWjnRMSlbt -NMMfNFnZgMVThhTMcgTDJDJjsVvvJJqJmHsqHG -LQpwwprCQzBNBdGjGjHswswdvm -CBCzzCrbWbSlNQnTRgPPfFRWnfgc -RFwHVQRwFgTQSFVhdsdHsBdDBnnqnq -LGftLtPGGMzlNrhlPqPsrJ -fvGpWpMtccpTwwpRRQhh -TTJCGdTGtZRQQCnzcnCv -FWWHPSFNFbDbDDqSWnVmLRRjRRQLhcmLjS -qPwPWwFppbwggGZGfdJZgdnGdd -zSTWzrzWTLWpCtCGpqqGgplc -nZWwsJVZZBnJHJCclHllgtChgCgc -DFnVBJsFssVVFBFnBdfvjDSmTMWzrmMfRmTv -MJmgMssrsggqqMVstbwTcTbPbTTwThmw -NRBBGRjHVRRcRbCp -QnSfzLWzNHzNVQQVjrglJMsMFvgJdFWrgZ -ggLLGnhgnPvJHZnN -VBtmVSldbSBVlcNPHvjmNcwNZZ -tdWqSVSSBztVWGrThLhfrfvG -TDqrjdSwLqDppdTCdzPBFmmjQmhHFPFQhPFR -zlGbMcVcVtsPHFRhWRRsPF -btgvlVVcDZZZqgrz -DgwlgbbFDDjjPTHDrmddPhPV -WqtMBBtQsttMNWQBqsbJpGGzdPdTHLVmTzJhmTPhHHPTmH -qQsqGZNQtZGMNsNtZpFnjnCRbZffwwSRljFf -gMdFLCdnMZCTFFCqnTgWLCHfSgPgPHStcQQmfSBBSfHg -vrwwrwzbGjjswjvhGGsjPQmqRmHPbBtcBQtqfmcH -qzJllVsGVGljjsrzwDzhwzDGTddNLFnZWNdpCVWTNTZTLZCF -LtwMhDtctwbwwppdWBJQJBWPvPfDfqvG -FTzrNrgSRFrgzFRHNVFQJvlqHjBvQWlQWqPBfq -sFgNzmVmNzgTvVTMwhMhstMwZtsbsc -MrBDQVzzlrvhQzQrDMVQrzrzgRJnRRwwRbwSwwVRRNSgwwwJ -qFTPTvfTHcqqncpcwR -LmtdGGPmTPGCTLHLWsZMhvZMMMzrzzdlMQ -ZVNpjfpZNpfNgNjzNVfWtnbbWmBHtsZWBSZBGS -MrDrQvvDrPLDMvFvdmBGGsBBCtsHrnrGCm -ltRMwLLDDRlvQwvlQcwhqfcJNpgzjJpjhJ -sRRRlRbcFbBBdnFBwCGppNvGrTCDDGVNlr -PPSLQzHjzZZPLZPjgTNTgpCbVJvGrNCTGr -ZLHHPQjhQmWWSRRnssdtbnmfwF -GRwrMrHJGwJPGWsgfqQgsc -VbTvLQCZLSWWsgWf -TVDvVCvppvTDmzZVTbZpTzBBNQQQJlJBBJBNNJmRBwRH -shJRWJsjZGNjSTrjFS -dMLCddggldQzMCCVgzVVLmLvTwNFFSqpNSqSbFGSqTTpMTFN -VGQvVglCLcVzgdddCDVvlsPZRRBDJPHZWZZnBsWJRR -CrwlwhRCMrswnsHBFccHHWFc -QJTmtfQgLtzQfLQfdPcWSFHHDDSpcFpFBg -jTQTqbfQfmLbLQJbJrRCWjljZGjNrZlZlC -JmthDmLShtJmHphphJQCwjdjdFDzFgzFdgdNlC -sbMTVBrWMbNvVMnsWMnVzjsjwCfjFgfZzfdgdzlj -NvqbbBcMMPPSqLSpGGthmp -RfGWFHlPFFNWGFZRZBjvwCvzBwhhrvvjzmrr -sLJSLMSTSJTbStJtMSqSqbpMrvmrzWdvhmjDCzzwrrpjdDDv -SbQqsqsWcZPcQGFG -BjqbMqMVBsfqGqFqGLmF -ZZQbQPddPcwbPnRQltdtQZdnmFNrvfhGrhrWWFNWWtmNFNNW -dJJQccnRPpcbQcMHsSgSMsDMTJSg -WWGBBvPflnWbBWhvhbPvNfnnVCFZmVRVZmVGMVwRLCCCGwVC -gjszgTMrgzgqCRRdmJRjJLVw -grzQHzqczMSzqSHcgQsqPvPlbNblpPhhPPbHvnhp -sJDDNWdnRLTTvqwSFPCmLCCrCq -thzplgfjglflFcbMclpppMfcwPqCZQCmqCwrzCqmQmHSqPqq -MhcpFBMBlhjbBTdnNJWvNvsvBd -czwwghnWWfcfgwfWthfrvVvrjdrdvDDVrbzrLF -RHPPMRpQPRMPPJRjJQsZsrrvvJBDDVDVdFqrBrFdBv -smjMsGZHRsHSmRQNGHPpSTwwttCflwngnChcCtWW -bprrrwrtLDtrWwrQjRDQDbPPVHVmmmmHNWlPlVNPZZlv -hqqhfnBCTfnnhzJwzsqzfPZZMCCVZVHHFvZMFvZmlC -TzhhdJTqJzcBdJJnzjtQrLdjwgLtpbgrLQ -qzQvzzgWSCqtqqGpddGc -jLrZNZhZrNRLHNffhrjNjNdtdZtGcPFwFwpbGwbVpdwC -nHnhrLNCCMHmhHBMhrzvgJvsWSWMWzzWzSlv -RzcbzdRFzbbzbzbFdZFTHMZPhVhVQMLrlrQPhLZlMM -BNGfBvsNttVmMhlMLm -BwGjpllswfjwpcFDWcWcbpdb -SjzpswrLSDjVSpwlmZJBTBdNJLvBNvHQZT -rCcCtbqgCfthggtbGGMqqghqZQvvQTBNJQHQZQTcZTJFZFFd -CggGMtqMfWbbGghPhhbCMtmsSppSspjpmWzjVSWlVrrm -PmWTPThTQWnLWQFl -VNcSVfMbtsddBQNnNpdl -sSjctwjVSzzccjgnTnDTHRDhqjRR -WfMWfCNCjWWHNTccMjRjfRcMbqSwfVwqwsfGGbssrJSrswVw -llLFQLlvlPFnhQBPBZQBqvBwzSzGGhShJVwShmsJbbmzSG -lnPqvQZBFFBnnpgplFvtvHDjTdcTjTMMjCRNCMWgRC -rprFNFFNjNLmMdgcqL -BvzCQQbBQgffsDbvVHMdbcVqmLVqlmqq -JvJCzBDJwnsRnQDszCBnnnQBrjZPjFpgZFTFZRpTrpZFGFtT -wBHQQZHVCcpwDgdZdMsZjvMZFn -GPSzlNlJLfzzzvsWdWLMmFWLMM -NfqGSfrTNzRTqJfRbptQHFQFrwrFHBHw -sNjVMVNVMzPzQgghcMsNzJtjSJtTFDTJtJnnDLjDnL -CHwrdCpvCrwrWdpZqcpFttJSFJTLLHLJfbnbfD -qrlZCwlqZrqqpWdlRqCRqdqcVNsVMzQzmNgNPBsRhVQVVzMs diff --git a/input/day_4.txt b/input/day_4.txt deleted file mode 100644 index c2c3af1..0000000 --- a/input/day_4.txt +++ /dev/null @@ -1,1000 +0,0 @@ -24-91,80-92 -28-93,5-94 -30-81,33-82 -28-97,59-72 -65-66,54-70 -35-35,5-36 -3-5,4-91 -73-97,20-72 -53-77,2-54 -47-96,48-95 -7-75,8-75 -66-89,67-86 -23-25,24-95 -97-98,5-98 -58-61,13-57 -53-62,52-52 -5-93,92-93 -52-61,34-61 -83-85,82-92 -90-90,46-91 -35-95,94-98 -89-91,72-90 -3-98,81-97 -26-26,27-96 -41-54,53-55 -9-43,8-54 -14-14,14-86 -36-50,50-50 -79-84,78-78 -44-69,70-73 -6-51,5-5 -40-40,39-73 -10-65,9-11 -1-2,4-99 -8-36,5-5 -72-72,25-71 -66-66,67-96 -69-79,62-68 -46-57,5-56 -97-98,39-98 -98-99,4-97 -9-94,10-84 -3-15,6-14 -9-10,11-80 -9-9,9-69 -60-79,78-82 -50-70,70-90 -12-12,13-64 -8-92,3-8 -29-79,30-78 -96-97,5-97 -13-75,59-63 -45-78,45-79 -38-70,38-69 -13-33,19-25 -79-87,47-88 -9-67,8-67 -51-59,58-60 -28-61,28-62 -7-90,33-87 -5-5,5-33 -78-85,43-84 -18-94,18-95 -42-42,42-81 -12-93,11-92 -16-64,17-64 -2-99,1-98 -32-68,31-69 -14-73,15-15 -43-55,43-81 -13-65,66-66 -79-85,79-91 -81-84,52-80 -21-68,22-67 -32-80,33-80 -17-76,83-83 -11-65,39-65 -32-85,33-84 -25-58,26-57 -14-28,8-15 -64-87,20-86 -62-99,29-61 -26-40,27-47 -9-76,9-83 -42-90,43-89 -5-97,5-93 -6-16,15-87 -45-91,9-91 -34-34,35-85 -21-56,21-21 -38-79,47-80 -79-98,36-96 -25-99,73-99 -4-51,12-50 -9-10,14-50 -65-89,26-48 -17-19,18-18 -39-60,34-75 -61-76,61-61 -38-90,37-37 -36-67,68-68 -6-19,10-20 -3-91,3-97 -35-93,35-94 -63-89,59-62 -46-76,66-76 -31-63,31-64 -17-44,33-37 -35-43,35-68 -11-13,12-90 -39-83,40-63 -41-99,24-86 -41-76,41-56 -9-62,10-62 -3-92,92-92 -36-41,36-46 -6-21,5-26 -7-98,5-97 -24-95,9-35 -4-82,3-81 -45-74,7-35 -7-74,59-75 -62-68,32-61 -45-66,44-83 -36-94,36-37 -57-76,57-77 -34-71,71-72 -95-95,95-95 -58-75,57-79 -48-75,40-53 -21-94,21-31 -55-55,3-56 -48-80,3-80 -10-81,9-81 -13-66,6-7 -1-91,90-92 -4-5,4-83 -22-76,20-45 -4-13,3-3 -10-22,6-6 -18-91,18-90 -50-53,51-52 -23-33,21-24 -1-49,1-48 -8-40,8-39 -11-97,2-96 -79-81,55-75 -82-95,81-81 -9-10,10-68 -59-59,58-58 -2-99,2-2 -22-36,21-22 -49-77,49-50 -7-21,7-7 -65-98,66-72 -1-43,39-40 -25-60,25-25 -12-79,38-80 -89-90,26-90 -52-72,53-53 -15-96,97-99 -4-8,4-72 -2-73,72-72 -11-35,15-35 -99-99,1-98 -72-83,8-88 -29-35,1-3 -32-72,15-33 -50-86,51-51 -27-65,59-87 -11-11,11-52 -16-87,17-87 -60-62,61-61 -50-90,81-92 -86-86,43-86 -42-82,11-82 -93-94,3-94 -22-91,90-92 -14-91,13-75 -11-28,14-19 -76-85,75-77 -7-98,6-98 -25-40,2-41 -4-96,12-90 -61-75,1-62 -17-97,16-17 -38-93,38-52 -16-34,17-39 -61-78,29-79 -7-91,90-90 -30-59,20-60 -5-98,4-98 -55-55,55-99 -1-95,1-94 -15-87,14-14 -56-92,23-55 -9-97,46-58 -9-93,8-94 -4-10,16-96 -52-53,24-53 -11-59,10-59 -61-76,53-65 -26-45,45-46 -4-38,38-92 -46-46,46-87 -41-61,40-95 -7-17,2-17 -26-27,27-33 -58-92,58-90 -13-96,13-98 -76-76,1-77 -12-97,12-96 -30-30,29-79 -38-86,38-86 -6-94,93-93 -5-9,11-55 -52-52,51-51 -29-88,29-29 -22-65,2-22 -51-60,57-77 -16-78,4-77 -99-99,40-98 -90-90,71-91 -16-86,16-87 -37-92,37-86 -42-79,48-56 -25-47,24-49 -32-35,33-36 -64-75,5-53 -18-53,32-54 -59-74,64-75 -22-76,21-76 -3-90,3-90 -98-98,15-99 -4-17,17-77 -97-97,7-97 -94-95,13-95 -19-56,4-56 -8-12,12-95 -9-75,9-21 -1-45,25-43 -65-82,65-66 -27-63,27-27 -97-99,5-96 -15-85,14-15 -24-75,24-74 -34-81,34-82 -29-97,18-96 -13-80,13-17 -7-93,8-93 -81-82,16-82 -16-59,60-98 -88-93,22-88 -91-93,41-92 -16-57,16-85 -19-46,15-20 -16-52,16-72 -7-7,8-61 -80-86,80-82 -65-75,1-88 -7-78,1-77 -5-94,4-94 -59-88,60-87 -69-73,69-70 -16-16,17-52 -50-91,51-91 -39-57,38-40 -12-73,72-74 -2-4,10-66 -36-38,36-71 -23-80,63-98 -85-91,40-84 -47-48,6-48 -1-3,3-97 -33-33,33-34 -16-18,17-61 -81-83,1-82 -53-82,15-54 -54-84,63-84 -1-98,97-97 -3-77,4-61 -34-79,35-54 -24-24,25-82 -6-99,4-6 -29-49,30-49 -1-2,1-90 -1-37,1-1 -3-4,8-62 -10-85,11-86 -57-59,54-63 -3-93,1-93 -58-59,9-59 -37-38,25-38 -32-96,31-96 -2-91,23-90 -31-70,37-47 -18-77,67-76 -58-91,66-97 -21-44,45-45 -60-61,61-78 -12-12,11-55 -43-65,15-66 -21-70,20-21 -10-10,10-88 -11-71,12-72 -75-75,50-76 -29-29,11-28 -4-81,1-98 -36-54,37-53 -8-92,91-93 -37-76,37-77 -74-99,75-99 -3-98,12-97 -19-83,20-83 -97-99,2-96 -45-45,45-95 -3-87,2-86 -66-74,50-65 -12-12,12-77 -1-93,5-85 -40-52,43-82 -5-69,9-70 -2-11,10-31 -31-74,31-99 -40-96,41-64 -12-38,11-13 -18-55,18-88 -54-84,53-54 -10-95,5-94 -32-70,63-71 -20-84,8-47 -61-87,86-87 -16-31,4-16 -1-97,1-96 -1-5,6-28 -73-73,38-72 -23-50,22-22 -27-93,27-36 -99-99,6-99 -99-99,1-99 -99-99,34-75 -7-24,18-24 -5-43,9-18 -3-6,5-62 -35-67,17-66 -16-45,8-44 -2-90,2-91 -48-97,96-97 -35-74,7-73 -25-86,85-85 -13-78,13-89 -2-79,79-79 -5-98,1-98 -66-66,64-68 -15-85,20-86 -25-41,42-73 -18-30,29-29 -16-20,16-75 -4-6,5-89 -7-56,8-57 -11-64,11-65 -7-7,9-86 -6-68,6-72 -4-92,4-91 -26-28,25-65 -2-57,1-58 -96-98,22-95 -2-82,82-82 -96-98,95-97 -11-91,90-90 -8-87,7-8 -64-92,76-93 -2-4,4-30 -53-92,49-61 -17-50,18-51 -8-64,7-64 -35-60,5-36 -1-6,6-85 -7-62,62-62 -38-42,50-54 -3-3,3-60 -39-48,50-86 -1-97,16-89 -44-72,73-84 -14-68,16-68 -7-55,8-8 -13-79,19-79 -31-94,95-97 -30-63,19-31 -15-83,52-83 -27-27,27-83 -72-72,3-71 -35-99,1-98 -29-80,29-88 -40-71,20-70 -61-93,60-94 -3-93,1-93 -4-4,5-99 -22-69,10-26 -42-74,42-75 -18-39,19-38 -37-43,43-92 -29-31,16-30 -7-95,7-7 -72-73,72-72 -9-90,91-98 -7-51,8-47 -28-88,89-94 -3-94,4-94 -20-41,37-51 -19-34,4-34 -13-63,64-68 -5-98,5-90 -24-93,24-73 -26-56,11-56 -2-75,33-76 -1-99,2-96 -44-55,54-56 -64-99,64-80 -41-64,41-64 -15-80,17-75 -57-59,58-90 -5-12,7-58 -16-50,17-17 -41-48,40-47 -31-32,31-92 -1-91,1-37 -53-67,49-77 -3-75,2-79 -55-76,47-60 -42-42,42-58 -20-42,20-41 -94-98,51-97 -1-44,1-45 -19-50,2-51 -28-82,29-94 -18-97,18-18 -41-89,14-41 -3-36,5-35 -64-85,31-86 -72-96,95-96 -11-18,18-87 -19-63,62-62 -16-17,16-94 -97-97,1-98 -22-95,23-96 -16-16,17-35 -25-96,43-96 -50-87,50-50 -3-92,3-89 -20-78,20-20 -53-53,54-89 -5-43,8-44 -39-85,38-38 -47-76,46-77 -35-78,77-79 -28-47,27-29 -39-39,36-40 -87-98,76-78 -30-35,30-63 -39-53,21-30 -30-30,30-93 -65-97,19-96 -74-77,73-98 -21-95,6-22 -36-89,47-88 -99-99,8-98 -22-68,25-69 -38-90,38-42 -39-88,17-39 -79-85,78-84 -11-74,7-7 -38-45,38-45 -57-90,56-58 -1-2,3-83 -2-48,7-49 -30-95,30-96 -71-96,71-79 -4-89,96-99 -44-93,44-99 -16-16,15-98 -7-95,10-91 -12-15,23-41 -39-62,38-92 -5-10,7-12 -51-91,14-52 -12-12,12-76 -54-58,56-59 -9-9,10-56 -11-42,49-70 -14-76,19-77 -24-33,27-33 -23-98,23-88 -35-78,51-85 -1-1,3-86 -1-2,2-94 -30-36,22-58 -48-48,47-51 -7-82,83-99 -31-77,31-31 -4-6,9-97 -63-85,10-86 -30-80,28-81 -1-1,1-98 -7-97,18-89 -52-89,21-88 -9-69,14-70 -71-72,34-72 -55-61,10-97 -59-88,55-55 -31-54,31-53 -26-35,45-98 -36-79,6-99 -2-3,2-41 -6-85,6-84 -9-97,1-95 -16-45,43-46 -5-81,4-80 -4-91,90-92 -44-86,30-87 -72-74,53-73 -20-20,15-15 -40-62,40-40 -28-99,34-62 -4-89,4-94 -42-58,46-59 -43-72,42-81 -81-83,22-82 -29-43,10-53 -47-55,46-70 -10-84,4-5 -10-93,11-94 -38-74,74-74 -14-48,13-14 -11-91,10-10 -9-11,10-10 -7-60,6-42 -3-93,92-92 -14-69,14-68 -32-45,41-46 -2-99,3-99 -16-83,15-83 -39-44,39-40 -2-76,75-77 -91-92,20-82 -19-50,24-51 -31-77,9-78 -3-99,70-99 -35-36,36-65 -6-24,7-68 -64-91,64-92 -95-96,95-96 -44-58,2-57 -61-61,44-62 -11-98,11-55 -38-47,20-46 -8-15,8-97 -29-53,27-29 -84-95,59-89 -61-62,61-85 -19-77,20-46 -88-92,92-92 -2-99,98-99 -10-79,10-10 -6-91,20-88 -14-74,10-10 -13-34,12-35 -27-87,86-86 -1-1,1-86 -28-31,27-79 -38-80,21-73 -23-64,22-24 -38-94,93-95 -96-98,10-95 -50-51,49-50 -74-88,81-89 -27-62,24-28 -49-49,48-92 -3-5,5-8 -47-87,47-76 -66-86,50-67 -78-96,77-77 -3-91,2-92 -88-91,5-87 -47-88,49-88 -56-80,55-79 -96-96,2-96 -19-38,30-39 -6-93,93-93 -36-98,36-36 -37-37,14-37 -17-17,18-67 -10-83,66-88 -25-89,28-88 -47-99,1-97 -87-87,18-86 -55-60,55-55 -15-15,23-61 -33-67,32-77 -37-42,38-42 -41-41,23-40 -54-66,53-68 -57-98,53-76 -14-92,14-93 -12-96,12-13 -43-43,14-42 -23-91,45-54 -36-59,58-58 -6-6,7-90 -31-38,37-39 -8-94,7-94 -94-94,87-94 -35-78,36-91 -37-90,68-75 -93-93,9-92 -39-80,35-84 -16-89,16-82 -1-86,2-37 -22-75,31-97 -1-97,96-98 -70-82,66-81 -8-94,93-94 -5-94,5-5 -4-75,5-74 -65-65,44-80 -33-97,96-97 -4-58,48-59 -5-99,5-5 -62-70,49-69 -37-42,36-41 -1-98,1-99 -91-92,5-92 -80-89,1-80 -15-92,74-93 -26-93,25-25 -43-46,41-45 -14-14,15-75 -29-29,30-99 -64-98,64-97 -14-86,87-99 -5-6,5-27 -50-75,34-75 -9-24,23-94 -77-78,76-77 -11-27,2-43 -98-99,58-99 -8-87,8-9 -35-35,35-38 -22-85,2-23 -39-84,49-70 -7-15,15-77 -98-98,7-97 -42-47,15-41 -27-34,27-27 -37-37,38-91 -33-81,33-80 -30-51,11-52 -79-80,76-80 -59-98,13-77 -52-55,33-53 -3-67,68-68 -3-72,72-83 -20-43,24-51 -75-89,29-76 -31-56,55-56 -25-50,24-49 -93-99,98-98 -2-76,2-75 -8-80,8-81 -16-18,45-60 -1-1,2-96 -55-82,54-93 -60-89,83-88 -55-88,11-66 -2-99,98-98 -83-85,11-84 -54-69,12-55 -10-10,10-74 -11-21,16-22 -50-71,68-75 -28-99,11-78 -41-51,39-87 -10-11,16-92 -72-72,13-72 -92-92,2-91 -27-46,45-47 -13-47,9-46 -1-99,2-18 -21-96,21-95 -5-5,5-61 -66-66,59-66 -30-82,30-77 -19-19,20-58 -82-89,2-99 -15-15,15-99 -10-10,11-51 -47-97,47-92 -18-20,19-56 -7-11,20-82 -24-73,24-70 -45-45,46-50 -13-91,65-74 -19-82,19-77 -26-98,2-58 -87-88,17-87 -44-51,22-51 -3-95,11-86 -5-49,15-50 -14-77,13-77 -98-99,1-99 -15-60,14-65 -4-8,8-21 -39-86,85-97 -25-92,24-24 -29-29,29-78 -9-63,8-8 -76-76,14-55 -15-88,16-84 -9-89,90-94 -4-89,3-90 -4-33,32-64 -4-98,2-98 -78-86,20-81 -63-89,62-88 -8-56,7-97 -25-44,25-45 -3-32,4-8 -53-86,53-87 -5-85,3-95 -18-24,8-94 -93-98,92-94 -39-53,54-69 -28-73,17-72 -3-93,4-9 -8-46,8-16 -3-3,2-78 -13-22,23-26 -71-72,47-72 -3-8,7-20 -6-73,1-6 -31-99,33-91 -90-99,89-89 -9-81,7-7 -58-59,58-63 -64-83,83-83 -4-5,4-5 -54-92,19-86 -7-8,8-63 -31-48,48-80 -22-86,8-22 -76-91,73-76 -62-78,9-79 -16-93,19-94 -5-95,5-93 -13-80,14-81 -6-80,79-79 -78-84,77-79 -40-83,78-84 -11-68,5-6 -81-81,23-82 -1-27,29-29 -50-60,51-53 -44-49,44-45 -52-62,51-98 -1-98,1-99 -39-97,98-99 -25-52,15-92 -34-99,34-34 -10-35,5-69 -11-11,12-69 -47-53,53-53 -92-94,7-93 -8-8,8-81 -28-85,28-84 -39-88,33-34 -66-83,65-86 -45-94,45-61 -36-60,14-36 -10-40,11-90 -23-75,24-51 -61-63,7-62 -68-83,82-82 -55-60,55-73 -9-44,2-44 -11-95,95-97 -10-62,9-65 -81-81,82-98 -6-56,6-57 -17-50,34-50 -4-34,34-34 -20-98,19-21 -25-39,25-58 -40-79,8-80 -14-57,14-58 -94-95,67-95 -17-24,15-24 -16-18,17-89 -6-58,5-57 -6-99,6-37 -3-3,3-17 -46-74,47-66 -16-38,17-17 -22-97,13-23 -99-99,38-99 -52-65,62-62 -22-24,17-23 -60-98,1-97 -3-71,7-21 -10-94,10-95 -38-90,38-89 -24-45,23-62 -12-14,13-95 -37-87,38-53 -14-45,13-45 -77-77,27-77 -25-83,17-25 -21-94,9-99 -73-73,49-73 -50-82,49-64 -7-95,95-95 -64-86,63-87 -33-85,2-50 -33-87,34-53 -13-31,30-31 -62-63,63-91 -9-91,91-92 -16-72,15-72 -32-40,39-40 -10-98,10-93 -1-3,2-18 -12-62,12-43 -35-68,34-69 -50-52,32-51 -4-37,4-35 -6-94,65-96 -63-88,44-62 -17-49,9-49 -20-49,20-48 -7-91,6-91 -33-63,34-63 -62-63,63-89 -9-62,10-62 -31-31,32-38 -77-87,15-87 -34-89,42-89 -1-2,3-79 -59-65,58-87 -4-57,2-56 -34-54,13-34 -41-95,5-54 -28-76,77-86 -13-13,12-42 -12-97,12-96 -20-27,26-50 -70-84,70-72 -47-75,48-69 -5-75,75-75 -25-80,22-79 -28-78,79-79 -89-89,11-93 -39-74,75-75 -20-88,20-87 -79-80,37-78 -7-17,16-18 -31-68,31-68 -18-36,18-18 -73-96,35-73 -28-98,27-29 -26-75,19-74 -2-4,3-48 -2-3,4-79 -4-93,92-92 -58-89,70-89 -1-99,2-68 -57-78,56-56 -10-46,10-39 -6-61,6-60 -51-90,50-90 -27-90,27-28 -45-45,1-44 -18-31,13-31 -25-51,18-52 -7-28,4-29 -93-93,6-93 -9-50,8-51 -92-94,1-93 -29-91,30-30 -25-75,24-75 -55-55,15-55 -70-73,62-71 -8-84,8-42 -50-76,46-57 -45-80,44-79 -6-86,7-87 -8-83,7-82 -4-30,8-31 -57-95,58-96 -49-50,50-79 -90-92,89-95 -24-24,25-98 -60-75,69-75 -9-83,20-69 -32-33,32-36 -3-3,2-98 -1-84,83-85 -69-99,99-99 -92-97,87-92 -71-96,72-97 -49-49,49-66 -18-18,35-75 -7-94,7-7 -3-48,45-92 -47-86,86-86 -10-42,7-66 -11-85,12-96 -39-77,17-39 -14-24,3-23 -23-23,23-23 -66-66,54-67 -29-29,30-71 -20-89,56-90 -41-56,40-57 -1-99,3-97 -4-92,4-98 -7-39,38-38 -69-71,68-73 -95-97,13-96 -55-84,54-75 -61-79,64-88 -97-98,3-98 -9-42,6-41 -36-86,35-36 -8-91,9-86 -16-45,58-79 -43-43,11-44 -8-74,9-73 -2-78,3-78 -76-86,83-94 -1-96,2-97 -49-79,49-78 -1-1,3-76 -74-89,21-90 -7-97,1-2 -38-73,73-73 -24-76,29-77 -4-43,2-2 -19-20,20-96 -56-77,51-77 -10-82,10-65 -58-71,17-94 -20-74,74-87 -28-84,28-83 -5-81,87-89 -9-40,9-24 -38-80,39-81 -36-36,36-37 -76-76,33-76 -62-62,1-62 -11-27,21-25 -13-59,44-59 -36-89,36-37 -53-70,45-69 -5-42,41-41 -49-49,9-50 -35-59,12-35 -32-63,18-63 -38-69,37-71 -70-97,96-96 -52-80,53-75 -43-43,44-94 -49-83,52-84 -11-76,10-98 -4-91,90-92 -26-54,26-30 -57-86,57-58 -3-97,96-96 -1-1,3-98 -24-36,36-67 -8-64,3-64 -39-98,14-98 -59-62,59-63 -30-42,30-31 -3-87,2-4 -6-79,7-80 -7-66,67-80 -30-48,18-47 -91-96,82-95 -4-78,4-5 -67-68,24-68 -7-7,8-59 -1-83,5-79 -50-67,34-66 -27-74,26-73 -7-94,94-97 -2-27,3-18 -13-55,56-56 -3-3,4-40 -52-66,52-52 -40-40,39-81 -3-54,1-47 diff --git a/input/day_5.txt b/input/day_5.txt deleted file mode 100644 index 922b345..0000000 --- a/input/day_5.txt +++ /dev/null @@ -1,512 +0,0 @@ -[W] [V] [P] -[B] [T] [C] [B] [G] -[G] [S] [V] [H] [N] [T] -[Z] [B] [W] [J] [D] [M] [S] -[R] [C] [N] [N] [F] [W] [C] [W] -[D] [F] [S] [M] [L] [T] [L] [Z] [Z] -[C] [W] [B] [G] [S] [V] [F] [D] [N] -[V] [G] [C] [Q] [T] [J] [P] [B] [M] - 1 2 3 4 5 6 7 8 9 - -move 2 from 8 to 4 -move 2 from 7 to 3 -move 2 from 9 to 2 -move 4 from 1 to 9 -move 1 from 7 to 8 -move 1 from 9 to 6 -move 6 from 6 to 1 -move 6 from 1 to 6 -move 2 from 7 to 1 -move 9 from 4 to 1 -move 6 from 2 to 7 -move 5 from 9 to 7 -move 7 from 3 to 7 -move 19 from 7 to 9 -move 1 from 7 to 1 -move 3 from 6 to 8 -move 4 from 5 to 6 -move 1 from 4 to 1 -move 2 from 5 to 2 -move 8 from 9 to 7 -move 1 from 5 to 1 -move 3 from 9 to 4 -move 1 from 4 to 9 -move 2 from 4 to 7 -move 1 from 7 to 6 -move 3 from 8 to 9 -move 17 from 1 to 7 -move 21 from 7 to 3 -move 4 from 6 to 2 -move 1 from 7 to 2 -move 8 from 9 to 2 -move 2 from 8 to 3 -move 1 from 1 to 7 -move 2 from 7 to 9 -move 1 from 6 to 1 -move 1 from 7 to 4 -move 1 from 1 to 2 -move 4 from 6 to 1 -move 1 from 9 to 2 -move 1 from 7 to 9 -move 1 from 4 to 1 -move 7 from 3 to 7 -move 6 from 2 to 8 -move 3 from 3 to 4 -move 1 from 8 to 4 -move 12 from 2 to 8 -move 2 from 9 to 2 -move 12 from 3 to 2 -move 12 from 8 to 6 -move 3 from 4 to 2 -move 19 from 2 to 8 -move 4 from 1 to 9 -move 1 from 3 to 8 -move 1 from 4 to 6 -move 1 from 2 to 4 -move 1 from 6 to 3 -move 8 from 9 to 6 -move 1 from 4 to 9 -move 1 from 3 to 1 -move 1 from 9 to 5 -move 11 from 6 to 3 -move 5 from 8 to 6 -move 14 from 6 to 9 -move 2 from 1 to 4 -move 3 from 8 to 1 -move 8 from 8 to 4 -move 3 from 3 to 4 -move 8 from 3 to 1 -move 9 from 8 to 2 -move 12 from 4 to 2 -move 12 from 9 to 3 -move 9 from 3 to 4 -move 1 from 5 to 3 -move 7 from 7 to 1 -move 2 from 9 to 1 -move 2 from 4 to 6 -move 16 from 2 to 6 -move 1 from 2 to 8 -move 10 from 1 to 4 -move 1 from 8 to 2 -move 4 from 1 to 6 -move 15 from 4 to 8 -move 1 from 4 to 2 -move 2 from 6 to 8 -move 5 from 2 to 8 -move 21 from 8 to 3 -move 6 from 1 to 3 -move 15 from 6 to 1 -move 1 from 2 to 1 -move 1 from 8 to 9 -move 15 from 1 to 3 -move 7 from 3 to 8 -move 1 from 7 to 9 -move 2 from 9 to 8 -move 2 from 3 to 7 -move 4 from 6 to 1 -move 2 from 7 to 8 -move 1 from 6 to 2 -move 4 from 8 to 3 -move 2 from 4 to 8 -move 1 from 2 to 1 -move 4 from 1 to 5 -move 3 from 5 to 8 -move 1 from 5 to 1 -move 12 from 8 to 3 -move 3 from 1 to 2 -move 17 from 3 to 5 -move 2 from 5 to 3 -move 15 from 5 to 1 -move 1 from 1 to 4 -move 17 from 3 to 2 -move 5 from 2 to 8 -move 17 from 3 to 6 -move 6 from 1 to 3 -move 5 from 1 to 6 -move 4 from 8 to 9 -move 10 from 3 to 8 -move 7 from 2 to 9 -move 2 from 6 to 3 -move 2 from 2 to 8 -move 1 from 1 to 4 -move 17 from 6 to 9 -move 13 from 8 to 2 -move 2 from 4 to 1 -move 1 from 6 to 7 -move 2 from 2 to 4 -move 8 from 2 to 7 -move 1 from 6 to 1 -move 4 from 7 to 9 -move 1 from 4 to 7 -move 1 from 4 to 6 -move 1 from 1 to 7 -move 5 from 2 to 4 -move 2 from 3 to 8 -move 6 from 7 to 1 -move 1 from 7 to 4 -move 11 from 9 to 7 -move 1 from 8 to 4 -move 8 from 1 to 2 -move 1 from 1 to 4 -move 1 from 1 to 9 -move 1 from 6 to 1 -move 1 from 8 to 4 -move 6 from 2 to 3 -move 1 from 1 to 3 -move 1 from 6 to 7 -move 1 from 4 to 6 -move 6 from 2 to 5 -move 7 from 3 to 4 -move 2 from 7 to 6 -move 2 from 7 to 3 -move 8 from 7 to 5 -move 3 from 6 to 7 -move 1 from 5 to 7 -move 1 from 7 to 5 -move 13 from 9 to 3 -move 1 from 3 to 8 -move 8 from 4 to 3 -move 3 from 5 to 1 -move 7 from 4 to 1 -move 5 from 1 to 4 -move 3 from 1 to 4 -move 2 from 1 to 8 -move 2 from 7 to 5 -move 2 from 8 to 9 -move 1 from 7 to 6 -move 1 from 8 to 7 -move 4 from 5 to 1 -move 1 from 7 to 2 -move 2 from 1 to 8 -move 1 from 2 to 1 -move 5 from 9 to 7 -move 3 from 9 to 4 -move 8 from 4 to 8 -move 6 from 8 to 5 -move 11 from 5 to 1 -move 3 from 4 to 2 -move 9 from 3 to 7 -move 6 from 7 to 2 -move 13 from 3 to 2 -move 3 from 8 to 1 -move 2 from 2 to 8 -move 1 from 6 to 7 -move 3 from 8 to 4 -move 9 from 1 to 5 -move 5 from 5 to 8 -move 2 from 8 to 4 -move 3 from 9 to 4 -move 2 from 8 to 2 -move 8 from 1 to 5 -move 8 from 7 to 9 -move 1 from 8 to 3 -move 15 from 5 to 9 -move 6 from 4 to 1 -move 1 from 7 to 2 -move 4 from 2 to 1 -move 1 from 3 to 4 -move 5 from 1 to 7 -move 3 from 7 to 3 -move 14 from 9 to 8 -move 1 from 4 to 8 -move 1 from 7 to 6 -move 2 from 4 to 5 -move 4 from 1 to 5 -move 1 from 6 to 5 -move 4 from 9 to 3 -move 5 from 3 to 7 -move 4 from 5 to 9 -move 1 from 3 to 7 -move 1 from 3 to 2 -move 4 from 5 to 2 -move 4 from 7 to 5 -move 4 from 2 to 1 -move 1 from 5 to 4 -move 7 from 9 to 7 -move 1 from 4 to 2 -move 1 from 5 to 8 -move 21 from 2 to 4 -move 1 from 9 to 8 -move 1 from 9 to 4 -move 3 from 4 to 1 -move 7 from 1 to 6 -move 1 from 5 to 1 -move 18 from 4 to 7 -move 1 from 5 to 8 -move 27 from 7 to 8 -move 1 from 7 to 3 -move 1 from 3 to 7 -move 1 from 7 to 2 -move 1 from 2 to 1 -move 42 from 8 to 9 -move 1 from 8 to 7 -move 1 from 8 to 2 -move 1 from 4 to 6 -move 1 from 2 to 9 -move 2 from 1 to 2 -move 1 from 7 to 3 -move 7 from 6 to 4 -move 4 from 9 to 6 -move 1 from 3 to 2 -move 1 from 2 to 7 -move 2 from 2 to 5 -move 1 from 8 to 4 -move 1 from 9 to 3 -move 5 from 4 to 7 -move 1 from 5 to 6 -move 1 from 5 to 9 -move 1 from 6 to 3 -move 1 from 7 to 5 -move 2 from 3 to 2 -move 22 from 9 to 7 -move 2 from 2 to 3 -move 18 from 7 to 9 -move 1 from 4 to 9 -move 1 from 1 to 4 -move 4 from 7 to 3 -move 4 from 3 to 2 -move 3 from 4 to 5 -move 1 from 2 to 4 -move 5 from 6 to 9 -move 1 from 5 to 3 -move 1 from 4 to 7 -move 2 from 5 to 1 -move 3 from 2 to 4 -move 1 from 5 to 6 -move 2 from 7 to 9 -move 1 from 6 to 8 -move 2 from 3 to 2 -move 2 from 4 to 7 -move 1 from 8 to 7 -move 1 from 4 to 6 -move 35 from 9 to 7 -move 13 from 7 to 3 -move 1 from 2 to 7 -move 1 from 2 to 5 -move 1 from 5 to 8 -move 1 from 8 to 5 -move 8 from 7 to 3 -move 1 from 6 to 4 -move 6 from 3 to 9 -move 1 from 1 to 9 -move 1 from 4 to 1 -move 14 from 9 to 8 -move 1 from 5 to 7 -move 16 from 3 to 2 -move 2 from 1 to 2 -move 1 from 9 to 2 -move 1 from 8 to 1 -move 1 from 1 to 3 -move 7 from 2 to 9 -move 6 from 9 to 8 -move 1 from 3 to 4 -move 3 from 7 to 6 -move 2 from 2 to 1 -move 1 from 4 to 7 -move 2 from 2 to 5 -move 1 from 9 to 6 -move 2 from 2 to 5 -move 2 from 6 to 2 -move 4 from 5 to 4 -move 5 from 2 to 6 -move 1 from 1 to 7 -move 1 from 1 to 2 -move 13 from 8 to 1 -move 2 from 8 to 4 -move 19 from 7 to 4 -move 3 from 1 to 6 -move 11 from 4 to 3 -move 2 from 7 to 9 -move 4 from 2 to 5 -move 2 from 9 to 5 -move 1 from 7 to 4 -move 2 from 5 to 7 -move 4 from 3 to 4 -move 3 from 4 to 1 -move 3 from 5 to 1 -move 9 from 6 to 4 -move 1 from 7 to 9 -move 1 from 7 to 5 -move 10 from 1 to 4 -move 1 from 9 to 6 -move 1 from 6 to 8 -move 32 from 4 to 5 -move 7 from 5 to 4 -move 27 from 5 to 9 -move 5 from 3 to 2 -move 3 from 2 to 8 -move 1 from 6 to 2 -move 8 from 4 to 9 -move 1 from 2 to 9 -move 8 from 8 to 6 -move 2 from 4 to 3 -move 1 from 2 to 3 -move 15 from 9 to 8 -move 4 from 1 to 4 -move 3 from 4 to 8 -move 6 from 9 to 7 -move 1 from 4 to 9 -move 8 from 8 to 2 -move 2 from 1 to 9 -move 2 from 7 to 9 -move 10 from 8 to 3 -move 6 from 2 to 6 -move 2 from 3 to 2 -move 6 from 6 to 3 -move 1 from 7 to 5 -move 8 from 3 to 2 -move 4 from 3 to 2 -move 1 from 3 to 5 -move 6 from 6 to 1 -move 4 from 3 to 7 -move 2 from 5 to 8 -move 3 from 7 to 5 -move 6 from 1 to 7 -move 1 from 3 to 4 -move 1 from 3 to 9 -move 10 from 7 to 4 -move 8 from 2 to 8 -move 11 from 9 to 5 -move 11 from 4 to 1 -move 5 from 2 to 6 -move 3 from 2 to 7 -move 11 from 1 to 6 -move 1 from 5 to 6 -move 8 from 5 to 4 -move 19 from 6 to 7 -move 3 from 7 to 9 -move 3 from 5 to 4 -move 1 from 2 to 5 -move 3 from 5 to 7 -move 8 from 9 to 6 -move 2 from 4 to 1 -move 1 from 1 to 9 -move 2 from 9 to 7 -move 6 from 6 to 2 -move 2 from 4 to 6 -move 4 from 8 to 6 -move 1 from 8 to 1 -move 7 from 6 to 7 -move 1 from 9 to 4 -move 5 from 8 to 4 -move 3 from 2 to 6 -move 4 from 6 to 4 -move 2 from 9 to 6 -move 3 from 2 to 9 -move 16 from 4 to 8 -move 1 from 6 to 8 -move 2 from 9 to 5 -move 1 from 9 to 7 -move 2 from 5 to 2 -move 1 from 4 to 6 -move 2 from 2 to 5 -move 1 from 9 to 6 -move 3 from 7 to 3 -move 7 from 7 to 8 -move 2 from 7 to 1 -move 3 from 8 to 5 -move 3 from 6 to 2 -move 4 from 7 to 4 -move 1 from 5 to 1 -move 1 from 5 to 7 -move 3 from 3 to 4 -move 5 from 1 to 4 -move 16 from 7 to 2 -move 5 from 4 to 7 -move 19 from 8 to 1 -move 11 from 2 to 9 -move 11 from 9 to 6 -move 2 from 1 to 6 -move 2 from 4 to 1 -move 5 from 4 to 6 -move 1 from 5 to 9 -move 1 from 9 to 6 -move 2 from 2 to 6 -move 1 from 5 to 4 -move 8 from 6 to 5 -move 16 from 1 to 6 -move 1 from 4 to 9 -move 3 from 2 to 9 -move 2 from 2 to 5 -move 2 from 5 to 8 -move 4 from 8 to 4 -move 4 from 9 to 7 -move 2 from 1 to 3 -move 5 from 6 to 4 -move 21 from 6 to 2 -move 9 from 7 to 3 -move 1 from 1 to 2 -move 1 from 5 to 3 -move 23 from 2 to 7 -move 1 from 7 to 5 -move 3 from 6 to 1 -move 9 from 4 to 5 -move 11 from 7 to 1 -move 2 from 3 to 4 -move 1 from 3 to 7 -move 1 from 4 to 1 -move 10 from 1 to 6 -move 5 from 7 to 1 -move 3 from 1 to 4 -move 7 from 1 to 7 -move 4 from 3 to 8 -move 4 from 7 to 4 -move 5 from 7 to 3 -move 2 from 4 to 9 -move 1 from 8 to 1 -move 4 from 4 to 1 -move 1 from 6 to 1 -move 1 from 6 to 5 -move 16 from 5 to 1 -move 2 from 5 to 7 -move 1 from 5 to 6 -move 2 from 8 to 2 -move 1 from 7 to 9 -move 3 from 9 to 5 -move 2 from 5 to 4 -move 6 from 7 to 1 -move 3 from 4 to 7 -move 1 from 8 to 6 -move 5 from 1 to 4 -move 1 from 6 to 1 -move 19 from 1 to 5 -move 1 from 7 to 6 -move 9 from 3 to 1 -move 6 from 6 to 5 -move 4 from 6 to 9 -move 3 from 9 to 4 -move 13 from 1 to 4 -move 1 from 3 to 1 -move 2 from 5 to 1 -move 1 from 2 to 3 -move 1 from 3 to 9 -move 4 from 5 to 4 -move 1 from 2 to 3 -move 1 from 3 to 5 -move 1 from 9 to 1 -move 1 from 9 to 5 -move 19 from 4 to 7 -move 4 from 1 to 6 -move 5 from 4 to 3 -move 3 from 6 to 1 -move 1 from 6 to 8 -move 2 from 1 to 6 -move 2 from 1 to 7 -move 2 from 6 to 3 -move 2 from 3 to 1 -move 8 from 7 to 6 -move 5 from 3 to 9 -move 2 from 4 to 9 -move 2 from 6 to 8 -move 10 from 7 to 2 -move 7 from 2 to 9 -move 1 from 8 to 9 -move 1 from 1 to 2 -move 2 from 9 to 3 -move 2 from 8 to 7 -move 1 from 1 to 6 -move 1 from 2 to 8 -move 2 from 2 to 5 -move 4 from 5 to 7 -move 5 from 6 to 1 -move 1 from 3 to 4 diff --git a/input/day_6.txt b/input/day_6.txt deleted file mode 100644 index 5f190e2..0000000 --- a/input/day_6.txt +++ /dev/null @@ -1 +0,0 @@ -hqhnqhqshhslswsffchfcfbblvlblqlggfwwqfwwqdddbbbhzhjjrqjqbjqjwqjwqwhwrrmcrrjqjjlllcvcrrnpptzpzmmswmmzrzjrrfcrfccpbpzzvrrdndllttwftwwgzzwhwggdvdnnlrnncscbcfcctchcdchdccztzgzjjtdtcdtcchrrgpgzgsgpsggvtvppdccfhcfclfcfdfnddlbbptbtdbtdtjdjgdjjzljlssgbgcgqcqzccfnftfjjsgstggsngsscvssjzjnjtntvnvssrqqhtqtvqtvvjbvvbnvvqvmvrmmdsdvdwwnbnvbnvvcgvcczcfzftfsfrfsfttldtdrrgrgmgbbdvvbqbhqbqlqsqbsbpbgbvgbgwwrswrwrwttvnnzdnzzwggrmrfmmvllzwlwzzlvlbvllgsllpnlnvncvcvqqrwwcmcczhchzczbccdwcwvwzwwvddlwlhljlqjqnncntnctczzmwmlmccpggljlssqswsmmpvmvwvrrcpcrprmprrtdrtdrrsjsmshmmdpdlppbnbvvmmflmmjvjhvhjvjsjbjwjvvblvbvlbbllwlslvljvlvdvdgvgcchnhpnhnvhhtfhhvssczztlzzgvvqqghqgqssdscsnsrsmrmmwgwmgmlmdmggbgzbgzgdzdzccghgfgddtntftddpdrdrmrjmmmzttqmttnwngggtgtqtqnqhnqqpnnntrntrnnshhjtjzzfqqblqqlblslflmlttcwtwzzrlrnrcrrrgtrrftfhthzhggwggvgvvfvddcnddfjddzqzrrvtrvrfrrgpgrgngsgddlmddzgzppdzzjzhjhjhqqbpbvvlrvrsvrvnrrsgsttndnbngnppmlppvgvfggvcvrvnnsnfnnfqfwwppnddrrfqqgbqqfmmlnlnngwgcgjgnjgjsgjgqjjnccdttpqttswwcgcmgmccrppmqmbbfwwvdwdfwfjwfjjblldsdrdvvgcvcwwllfpllcslsvssnvsnvvhnvnvwwcgwccslsbbnlbnbrrrtprptpdpdvdttgsgwswppcdchhqbqcbqbzbgbbstshthsttqgtqtpqqzhhwhghwwmbbdlbbtlltsllbvbnvvmqvqtvqvttlwtltmmrttwgtwwfdddwcchtchhbthbbclczzqbzzpvvwzwswggjddntnrnnwmnnbdbmbccqgqvvsnvvqbvbzvvzmvzzrfrlfrfhhdvddnmnnmhmqhhrhlrldljlbljjgqqvdvhhgmgvgddmmznndmmhssznsswvwdvdzdhhscssntnftfmmrggbmbmgmlltctbtbntnqqscqcscrcrhrlhhdchhzccvvbfvvpfffbwbsbjjmgmwgmgppjnpjphhlmhhpwwhwzhhhzbbzzcbchhpnnptpvphhsdsccffqbqllchlhlwlcljlppnccqsstzstswtwwljwjmmpttvqqspsjjclljqqlhqqtnnbrrsbrbjjllrmrjmjzmmclmclmmcvvbddhnnmhmbbwqqqhrqqtqmqbqdbdtdvvcscshccmffhqffdgdcgddljdjbdbjbdbrrtjjtnntpntpnpmnpmpgghffrnfrnnmdnmnhmmjcjffftrrttfwfvwvcwwrmwmpwmmnvntthmmgmbbcdclcppjhpjhjwwlppgsszqqwggmttfrfqflfsfmmmhchshmmjtjjgdjjnnsvsmsnwcgdfqljmnphlfdrhpggfqnhnszgpndhdqcgfhtdcgbsbtmhvnnrmqzqqcjdqndzbnrhwjvbvcldmnwltgpqbmstntnggtbqjzzqrfdsfttdfrcnsrpwrjrjqbgtjfmlwsrzdbdqvbtczgsjqhtgmctjfmdglfrsvqtgwpbqghzgzdfwzhbdhlmhdvhwjrdhhtjptvwpmjnmfcjdmdczmczvdqwvbgtvlwvwnvdlbqfshmlmvzzcmjbtpwpwgsqhfsgljzhbppcztfjdntzcvllqnzrqjwfjrlgvhmbpvbtqjrdzcsmcjzcdsmvcmhrbhgnscnfrfmscqsqpqplbrzhsrlsvvpmfdtdmtlrtvspmlljmfpshfmstjgnrrwmqlbnwbndcfdstrtqtnzpfqlcgrzmsnmhllljdgtmvftjttbwhqzcqwbwdbshgcqrptfjwbbfsjnvzztlbdchqrlbbrcnsswmhwphfwrbnvrncbrthprmltlwwlfpbqhdfqzwwcwjgqzdnvmhwpzpbtpwwvzcpfcsfqpwjljzzfwzmlfvhsccppzlzjlrvlpdtjpcptnvqjwtdbzrqwnfwmmjndflqqggczrfjlpdfjffctprnmhfdqvnzbfvhszzdmngnlmwzfdrbvlvjnmbllgrczssqcrhbmnpmqlrzgmqmhgsvcdlqnmlhlzvqzhnccbctslzlbcpdvqltqncpcrzwdchrqmwfwlcbcvfnnpjntfrznqdjsdtzqjjttddwvnfqmznhflblzvvtbwdzrrlqlmndzzzwnpbhhlvlbswfjtbnhlccscbnfgjtwbfdlwvzszwnwzhlbcdpvgqjcrpzsvvnfwqcqvrmhzhggvmzwggdpbfrdscjwhsdsbbjcnzldhzcvqtjrhsbfjlrlpvtcqhnnsvslfrdjvjhfhdcfzqchpvvhzbpqglqlrdttrdtndzhnzhtqndghtgmpsnhptprqzhbbdcrgmbvrvqmbptqgnmsccwmhrlpddvmhjntllwrzqwnsjchnblcgndjtmpswwgcstdftqcbhzgttrhnpvrhspjznhhvrlpdqbzzrvzjphcswhljdldvsrdhzltwgrcsvqwnhtqqjjrjgrplzmsnjhzrfbtqgdfgnbpvjrfzrrpdphgzrfbswdhzgbzswqtwwdtrvvswmjvwhqddfzjhgdqsfnwbmlcfwtmpldrdpwjwggbpmncvbghzjmpsqpvnmbhjfzzpsjdgmrtnndhzrphjzdbgrrnthtrfnspdngbdmwbnfjlsndqswfsvfqftqlgqjpfsfpmdbsjfrptvbpvflqgvlmmbchhghhrwmvdlrhlsdtvjjchwglcrwfsfnnbhjbtccbjsfwrbzrvgsbfnvzghhrqblqchjvdtrrbrwwwmfnczzmmrqdggsfrqbldbbfbbcthtsvpcnlbjjztwvhctbrjltqdwbzmrrfslbmjpnqwllbvjzgfsfqqtwbgwgclgdflshfhwggwdqlgbmdmdqglrtfwbddtsltmsvswhgjtqwtnrncpdzhnpfqcjnjzmtbjfzpjwgfbfggmsmfdhfbjctnhchpgfspthdbfpmvrmdbbspvwzqqwnmfwdnnblbcjszbccgflngnjjwsqshfbhjwgzrmvsgnrdbgwfhdvpmznpnvznfcqdclztcptjrrpbmpztwwbvlvtmngfhmfbfmrjbjzlrcvgllrlgthltstnwmffntqrwsrndlzqhztwpcwbdjjztgdzmgtthcvtvnjzzhvstfqhgddddgdsrbcqzqspjrncphhtbnslzphrtfqphffjrrlgwbrwqfzzqvzhnffcwvrncttgplshccglvchvlcbnlthhmzvcrfjvjqfsjjzzgqlpslfwngqnbgcwffpcqhlmlhvwssrpjbrcbftpzbbpptzrdqwpzpdjhtwbvwcqbfnwtflfgzgttglpcwdnzsmjffgfftdnpzlpszmzrrhvlzdfpgbzqlvvfslnndcmjvvpwzwcdzpcttfwbsdswmfqbbhbfbjvbvtspbbhmphzjsjcmmzpvvzhtvzlgwlqqvbnrgtszvghjfmchrwwhpmbsvfmgvqdtmvdtjppchbsgqrtgtnzczqmpgjdbmmflfpjbcdmhldwpgdtdvsbzhztjzfhcsbndfjntbldjnqwdffqspfnlplbtcdjtwdjhldtsdfrnmpfhzghnpcqlhhgblmqjvwhndqfbccvzzlbzbdprvcpwjjhrqnjptwssbjhgvpgtfzqwrzjvbdgwtnmptvdjrffcmbzmzcmrfbjv diff --git a/input/day_7.txt b/input/day_7.txt deleted file mode 100644 index ca23499..0000000 --- a/input/day_7.txt +++ /dev/null @@ -1,1082 +0,0 @@ -$ cd / -$ ls -dir brhvclj -dir clnvqg -dir dtqtvvrn -dir lcz -dir pcqjncwl -dir qwvfpgl -dir rtmj -dir shg -dir tcdmgwp -$ cd brhvclj -$ ls -40016 mtlscfrd.gdr -dir mvslzl -112449 npp.vjv -46674 pbgjwb -dir qdtls -dir tfns -$ cd mvslzl -$ ls -dir dngldfww -dir dzplphqw -$ cd dngldfww -$ ls -102218 wcrvztrh.mzb -$ cd .. -$ cd dzplphqw -$ ls -93724 brhvclj -169467 cwqwcjc.lgd -$ cd .. -$ cd .. -$ cd qdtls -$ ls -dir nnlzrwgh -dir svc -168425 tcq.lng -99608 vjrntvbz.sgn -dir wshf -dir wtmdzgvg -$ cd nnlzrwgh -$ ls -141976 fnb -$ cd .. -$ cd svc -$ ls -87249 hzrml -46855 qbmgmmc -147235 zsbsq.cvq -$ cd .. -$ cd wshf -$ ls -25072 npp.vjv -$ cd .. -$ cd wtmdzgvg -$ ls -165660 cfpfdqq.vfd -dir dhbrmn -176203 dscvmj.wpn -dir rcdwft -$ cd dhbrmn -$ ls -200474 brhvclj.hcf -233675 npp.vjv -218734 ttntt -$ cd .. -$ cd rcdwft -$ ls -dir wvfdjv -$ cd wvfdjv -$ ls -104669 mdrr -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd tfns -$ ls -dir clnvqg -15637 mlft.cvp -dir pqp -77675 svc.mqv -dir ttntt -dir wfcczs -dir wshwhzw -$ cd clnvqg -$ ls -dir brhvclj -103188 cdfj -256254 svc -72302 tndnh.vgg -$ cd brhvclj -$ ls -dir brhvclj -$ cd brhvclj -$ ls -246966 mlrcgl -93485 ttntt.ztq -$ cd .. -$ cd .. -$ cd .. -$ cd pqp -$ ls -dir svc -206837 ttntt.qpm -$ cd svc -$ ls -202934 bsczwq -$ cd .. -$ cd .. -$ cd ttntt -$ ls -dir dfmgqmvm -126511 hpdm.ctv -$ cd dfmgqmvm -$ ls -dir qbms -201736 wczpvsw.ddr -dir wshwhzw -$ cd qbms -$ ls -20046 lvfphhpw.sjv -186516 pdbtbmf -149493 svc.dqh -dir tdvtcmwz -$ cd tdvtcmwz -$ ls -100584 hpdm.ctv -$ cd .. -$ cd .. -$ cd wshwhzw -$ ls -116856 hwvgnwf -$ cd .. -$ cd .. -$ cd .. -$ cd wfcczs -$ ls -dir rlbnv -$ cd rlbnv -$ ls -55214 ttntt.mnl -$ cd .. -$ cd .. -$ cd wshwhzw -$ ls -34867 clnvqg -$ cd .. -$ cd .. -$ cd .. -$ cd clnvqg -$ ls -dir bchstbpm -dir bgbdbr -dir clnvqg -25956 clnvqg.rbr -60939 gzzpwvzn.zzr -212583 jjfrh.ttr -dir jlsvjcdm -dir mzmqr -dir rtmg -dir tqnmwdl -$ cd bchstbpm -$ ls -dir sgbwd -dir ttntt -$ cd sgbwd -$ ls -267083 clnvqg -$ cd .. -$ cd ttntt -$ ls -243283 rwcmtrr.nvf -$ cd .. -$ cd .. -$ cd bgbdbr -$ ls -dir jshpz -$ cd jshpz -$ ls -dir dpnqrg -dir gsvwsc -173172 jjfrh.ttr -203836 jzm.fcn -83990 pdbtbmf -276348 pqcmhzhv.ltv -dir ttntt -dir wshwhzw -$ cd dpnqrg -$ ls -140379 dvmnw.gmd -$ cd .. -$ cd gsvwsc -$ ls -84951 pdbtbmf -$ cd .. -$ cd ttntt -$ ls -149785 brhvclj -dir rfcssr -$ cd rfcssr -$ ls -13174 lgwztd.fcm -$ cd .. -$ cd .. -$ cd wshwhzw -$ ls -55302 clnvqg.nqz -dir cpbh -dir mrv -139006 wshwhzw.chb -dir zgtnfm -$ cd cpbh -$ ls -13930 wvnzlj -$ cd .. -$ cd mrv -$ ls -207468 cqhpvpzf.zjn -dir drgcn -211947 pdbtbmf -dir svc -$ cd drgcn -$ ls -dir brhvclj -247117 gnrdmjls.tps -$ cd brhvclj -$ ls -162309 hpdm.ctv -231880 jjfrh.ttr -$ cd .. -$ cd .. -$ cd svc -$ ls -270511 cjsh -dir ttntt -$ cd ttntt -$ ls -43248 ssrrt.dqr -$ cd .. -$ cd .. -$ cd .. -$ cd zgtnfm -$ ls -dir vhjtgv -$ cd vhjtgv -$ ls -98550 svc -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd clnvqg -$ ls -dir gcnc -141966 nrlptqrq.jtv -$ cd gcnc -$ ls -268141 bqzr -dir brhvclj -dir cjcpzv -262869 npp.vjv -$ cd brhvclj -$ ls -dir qqr -dir qwwl -265677 rcnn -$ cd qqr -$ ls -143274 stpjr -$ cd .. -$ cd qwwl -$ ls -dir clnvqg -213885 mfctzj -27640 tvp.fqv -$ cd clnvqg -$ ls -dir brhvclj -dir zzhwq -$ cd brhvclj -$ ls -67021 ttntt.fjp -$ cd .. -$ cd zzhwq -$ ls -dir gsplfsvm -$ cd gsplfsvm -$ ls -103196 qgjmbn -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd cjcpzv -$ ls -173344 bjpb.tln -$ cd .. -$ cd .. -$ cd .. -$ cd jlsvjcdm -$ ls -dir bmgbjnbr -dir brhvclj -106074 brhvclj.cwn -96364 gwgzvwf -199266 hpdm.ctv -dir svc -168747 tsb.grv -170407 ttntt -$ cd bmgbjnbr -$ ls -dir bddbffsf -dir brhvclj -143376 clnvqg -dir ddbcvhqr -199097 flq.rls -156627 hbjcftfb.vvj -41970 jjfrh.ttr -dir rlj -dir svc -dir wshwhzw -dir zhczqq -$ cd bddbffsf -$ ls -181609 svc.vdv -$ cd .. -$ cd brhvclj -$ ls -dir brhvclj -64387 cdfj -168933 fhq.lzh -193119 njrrzm -129346 svc.tqs -$ cd brhvclj -$ ls -dir bpgmc -dir brhvclj -dir nrrpsn -dir ttntt -$ cd bpgmc -$ ls -42515 npp.vjv -dir wshwhzw -$ cd wshwhzw -$ ls -80221 pdbtbmf -$ cd .. -$ cd .. -$ cd brhvclj -$ ls -74083 qfwj -$ cd .. -$ cd nrrpsn -$ ls -58623 cdfj -$ cd .. -$ cd ttntt -$ ls -117488 ddd.sbj -69152 npp.vjv -$ cd .. -$ cd .. -$ cd .. -$ cd ddbcvhqr -$ ls -3037 brhvclj.ngg -dir flz -85361 hhjw.czf -193196 npp.vjv -dir svc -173507 tmfc -274216 ttntt.ddw -$ cd flz -$ ls -249582 pdbtbmf -$ cd .. -$ cd svc -$ ls -dir ddrthl -dir dptjfd -dir hqncdcdh -$ cd ddrthl -$ ls -148058 clnvqg -185720 svc.wch -$ cd .. -$ cd dptjfd -$ ls -101663 cdfj -80244 clnvqg.qzn -98435 jrsmdsjv.dft -dir nhjthr -$ cd nhjthr -$ ls -105069 fnvztg.pwp -dir pmgzdp -dir qgvzbclg -$ cd pmgzdp -$ ls -94671 pdbtbmf -$ cd .. -$ cd qgvzbclg -$ ls -183904 pdbtbmf -$ cd .. -$ cd .. -$ cd .. -$ cd hqncdcdh -$ ls -105956 cwdsppc.hnn -91439 pdbtbmf -21314 wshwhzw.dcn -$ cd .. -$ cd .. -$ cd .. -$ cd rlj -$ ls -173111 clnvqg -dir gsfzgvpz -dir ljwrdb -102231 pdbtbmf -$ cd gsfzgvpz -$ ls -266749 bcdrtwzd.nrz -$ cd .. -$ cd ljwrdb -$ ls -dir dlmhm -dir mpmtj -$ cd dlmhm -$ ls -50087 ttntt.rdv -$ cd .. -$ cd mpmtj -$ ls -254330 czh -$ cd .. -$ cd .. -$ cd .. -$ cd svc -$ ls -131211 pdbtbmf -214730 tgpprcnb.dfv -$ cd .. -$ cd wshwhzw -$ ls -225058 cppwqrg -dir hrzsfhct -228371 tzvn.hhj -dir vjjgrt -$ cd hrzsfhct -$ ls -dir pqvlqpdt -139531 pvlhtz.grj -$ cd pqvlqpdt -$ ls -211827 hwnlsv.hhq -$ cd .. -$ cd .. -$ cd vjjgrt -$ ls -dir hdlcnfm -266998 npp.vjv -259189 qndrvvqv -$ cd hdlcnfm -$ ls -dir snhftjr -$ cd snhftjr -$ ls -198904 svc.wwb -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd zhczqq -$ ls -dir brhvclj -$ cd brhvclj -$ ls -123699 ttntt.cds -$ cd .. -$ cd .. -$ cd .. -$ cd brhvclj -$ ls -dir dvqszvl -dir ttr -$ cd dvqszvl -$ ls -172068 jjfrh.ttr -$ cd .. -$ cd ttr -$ ls -dir rzsqqhn -$ cd rzsqqhn -$ ls -129077 cbpg -dir clnvqg -12120 jjfrh.ttr -211464 npp.vjv -12541 qgl.tvn -136465 snbrwg.cpg -$ cd clnvqg -$ ls -263592 cdfj -249813 pdbtbmf -190382 vpzfll.wqw -dir wshwhzw -$ cd wshwhzw -$ ls -57060 cdfj -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd svc -$ ls -dir clnqz -dir ggrwpjjg -dir mjvm -217220 ngntgnrw.brd -dir svc -146817 wshwhzw -dir zmchn -$ cd clnqz -$ ls -108229 clnvqg -195990 svc -29403 swf -$ cd .. -$ cd ggrwpjjg -$ ls -dir gdftglf -142336 hpdm.ctv -190941 npp.vjv -$ cd gdftglf -$ ls -209357 csfsthp.cnc -30622 rjs -dir ttntt -15836 wvqc.zsz -$ cd ttntt -$ ls -224617 rvsvs.dfh -$ cd .. -$ cd .. -$ cd .. -$ cd mjvm -$ ls -dir ctlddnj -dir ddwg -207564 ncls.nwh -139671 npp.vjv -212692 wbqnvn.qhq -$ cd ctlddnj -$ ls -254493 dzr.dfv -123026 fmbzjww -79075 svc -43782 svc.vnw -dir vgqf -258169 vtljbndt.tvc -$ cd vgqf -$ ls -277076 dhqhfb -dir ffqg -dir svc -$ cd ffqg -$ ls -dir nrd -$ cd nrd -$ ls -205734 vrwph.bgp -$ cd .. -$ cd .. -$ cd svc -$ ls -dir brhvclj -111819 hpdm.ctv -68407 nglt -168768 ttntt -$ cd brhvclj -$ ls -75177 hvppncbd.sgs -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd ddwg -$ ls -21210 phwqwshr -207062 rftdb.mcq -dir tthrf -$ cd tthrf -$ ls -dir czjnvnn -236764 dhhw.mbs -25583 ljdwgwhm.fbm -dir lrgtg -113563 srsh.fpb -dir vzhpqb -110004 zgcvsc.pmm -$ cd czjnvnn -$ ls -143802 cbqmvtw.zjv -37329 svc.rwf -$ cd .. -$ cd lrgtg -$ ls -dir gpwpc -$ cd gpwpc -$ ls -257389 jjfrh.ttr -$ cd .. -$ cd .. -$ cd vzhpqb -$ ls -95696 clnvqg -218063 clnvqg.qtd -dir hnqqrdf -dir ttntt -$ cd hnqqrdf -$ ls -dir brhvclj -$ cd brhvclj -$ ls -dir ttntt -$ cd ttntt -$ ls -40453 npp.vjv -$ cd .. -$ cd .. -$ cd .. -$ cd ttntt -$ ls -30351 clnvqg.fwm -60519 pdbtbmf -dir pfhrgj -247371 qcvs.rbj -155276 qdjqgqqw -$ cd pfhrgj -$ ls -41975 svc.fwm -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd svc -$ ls -110021 jftcvbl.lhh -$ cd .. -$ cd zmchn -$ ls -188817 brhvclj.zcq -dir ddzjr -dir fnmhc -dir tbhwr -dir vbtmfp -dir zrzrjm -$ cd ddzjr -$ ls -217591 clnvqg.css -dir ttntt -dir wshwhzw -$ cd ttntt -$ ls -dir bscqn -132748 svc.pbh -$ cd bscqn -$ ls -25049 tlcwbbng.spf -$ cd .. -$ cd .. -$ cd wshwhzw -$ ls -164106 brhvclj -193910 chnrbb -dir njsnwmrc -dir nnhcsb -195858 qrrt.pmp -43854 ttntt -90698 vdvfdgcl.mpr -$ cd njsnwmrc -$ ls -273188 hpdm.ctv -261368 wzpzjgw -$ cd .. -$ cd nnhcsb -$ ls -dir dmnmcgr -67701 pdbtbmf -145277 ptlqcl.sgt -dir pwrjt -13031 svc.jbb -263232 svc.mvh -91724 vggpwj -$ cd dmnmcgr -$ ls -43175 szbcvp -109544 vjqjzp -$ cd .. -$ cd pwrjt -$ ls -dir ffqfqvjv -dir svc -$ cd ffqfqvjv -$ ls -102537 bgmgwt.gmg -$ cd .. -$ cd svc -$ ls -177913 jswrfjvp.vgc -145714 npp.vjv -272487 zzsl -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd fnmhc -$ ls -dir dhhwdbb -dir ttntt -dir wshwhzw -$ cd dhhwdbb -$ ls -201253 zpvv -$ cd .. -$ cd ttntt -$ ls -dir brhvclj -40561 chb.fbh -159663 gzwrtwtd -119970 wwz.rft -$ cd brhvclj -$ ls -19488 gwtvbzph -98427 hpdm.ctv -8547 swncltj.sbn -54698 wshwhzw.fmj -dir ztlvdwq -$ cd ztlvdwq -$ ls -259702 cdfj -230030 mbz.ttq -$ cd .. -$ cd .. -$ cd .. -$ cd wshwhzw -$ ls -dir clnvqg -dir gwcsprqv -259902 hmrb.njt -125791 pdbtbmf -dir spffhcnz -268942 srwjphc.lbp -dir wshwhzw -$ cd clnvqg -$ ls -208408 hdwf.ppm -163498 npp.vjv -$ cd .. -$ cd gwcsprqv -$ ls -135381 hpdm.ctv -150197 jjfrh.ttr -61236 lwjhqc -150026 tgwjwdwj -dir wshwhzw -$ cd wshwhzw -$ ls -51089 wshwhzw.qtb -$ cd .. -$ cd .. -$ cd spffhcnz -$ ls -79855 bmrcdm -dir clnvqg -180748 jjfrh.ttr -122314 pdbtbmf -85765 tbpsjv.tfw -$ cd clnvqg -$ ls -dir nvjj -dir tqr -$ cd nvjj -$ ls -dir gqhqmlhm -dir mbfftpbj -$ cd gqhqmlhm -$ ls -211887 brhvclj -$ cd .. -$ cd mbfftpbj -$ ls -60539 clnvqg.gqw -$ cd .. -$ cd .. -$ cd tqr -$ ls -dir fvdch -$ cd fvdch -$ ls -124864 svc -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd wshwhzw -$ ls -dir jrzmrg -103956 npp.vjv -126932 zvwpmnqh.zmh -$ cd jrzmrg -$ ls -dir svc -$ cd svc -$ ls -143992 jhcvmjp.flt -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd tbhwr -$ ls -42758 jjfrh.ttr -$ cd .. -$ cd vbtmfp -$ ls -171021 npp.vjv -$ cd .. -$ cd zrzrjm -$ ls -dir brhvclj -201331 cgtqdtqq.gsc -206771 clnvqg.zpr -55754 jgprc -dir jrww -dir sqtzndzg -$ cd brhvclj -$ ls -190144 brhvclj -198432 rvbqglv.gzg -$ cd .. -$ cd jrww -$ ls -110574 clnvqg -$ cd .. -$ cd sqtzndzg -$ ls -189854 clnvqg.qbc -260937 ldm -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd mzmqr -$ ls -117135 dfws -98546 jjfrh.ttr -dir jptq -dir sctfsvs -dir svc -dir swsjjr -dir tstct -86793 vhfcwbv.wfq -$ cd jptq -$ ls -dir brhvclj -52040 cnmb -dir fvqh -240539 rrdsr -dir tczvhsgn -dir zbbq -$ cd brhvclj -$ ls -254250 vtgsqs -$ cd .. -$ cd fvqh -$ ls -18471 hpdm.ctv -$ cd .. -$ cd tczvhsgn -$ ls -241619 wshwhzw.cmh -$ cd .. -$ cd zbbq -$ ls -82844 vtjbg.svl -$ cd .. -$ cd .. -$ cd sctfsvs -$ ls -dir nbjljt -dir rszwnh -56137 stcmw.wwr -$ cd nbjljt -$ ls -214471 fst.pwm -$ cd .. -$ cd rszwnh -$ ls -dir brhvclj -dir ldrsbj -280840 pzs -274286 vpsnwfvc.bqg -$ cd brhvclj -$ ls -60019 fwbgt.rmb -$ cd .. -$ cd ldrsbj -$ ls -23175 jjfrh.ttr -120171 lpb -$ cd .. -$ cd .. -$ cd .. -$ cd svc -$ ls -dir rpgm -$ cd rpgm -$ ls -205836 ttntt -$ cd .. -$ cd .. -$ cd swsjjr -$ ls -100874 cdfj -229131 dcdm.jcz -18144 mspnwqmw.bpc -$ cd .. -$ cd tstct -$ ls -94293 clnvqg -110519 hpdm.ctv -$ cd .. -$ cd .. -$ cd rtmg -$ ls -dir clnvqg -260745 gvmlqpbs.mqm -dir ldcwjlm -192472 ttntt.gnf -$ cd clnvqg -$ ls -121970 zsmwvt.sbw -$ cd .. -$ cd ldcwjlm -$ ls -254060 hpdm.ctv -225558 svc.cmz -229614 wshwhzw.dzn -$ cd .. -$ cd .. -$ cd tqnmwdl -$ ls -50489 cdfj -dir gltsgnf -265020 hqnjnt.gtc -dir psltbtl -$ cd gltsgnf -$ ls -dir ttntt -dir wgwvd -$ cd ttntt -$ ls -120262 zvjh.mzl -$ cd .. -$ cd wgwvd -$ ls -172875 flt.jbn -173182 pdbtbmf -$ cd .. -$ cd .. -$ cd psltbtl -$ ls -dir sgqvlr -88647 svc.jnw -208354 svc.jzb -98962 zsld.hjs -$ cd sgqvlr -$ ls -151451 brhvclj.thj -213287 pdbtbmf -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd dtqtvvrn -$ ls -253546 ttntt.dtl -257990 wshwhzw.rqp -$ cd .. -$ cd lcz -$ ls -dir csqfmjz -dir nfgnnt -dir rwzmjgqz -dir wshwhzw -dir wtvtszw -$ cd csqfmjz -$ ls -124616 wwbvnjg -$ cd .. -$ cd nfgnnt -$ ls -dir dvslq -dir fbzss -dir ttntt -$ cd dvslq -$ ls -132520 cdfj -dir nsq -1447 svc.spv -$ cd nsq -$ ls -265807 hpdm.ctv -95487 wpqhvf.dqg -$ cd .. -$ cd .. -$ cd fbzss -$ ls -153744 rccwtz.tfs -$ cd .. -$ cd ttntt -$ ls -109641 wshwhzw -$ cd .. -$ cd .. -$ cd rwzmjgqz -$ ls -12039 tpggbsd -$ cd .. -$ cd wshwhzw -$ ls -57458 qqnznsvj -$ cd .. -$ cd wtvtszw -$ ls -dir dlr -151194 dzwmwjz -dir nzq -$ cd dlr -$ ls -142748 nchwzm -$ cd .. -$ cd nzq -$ ls -242998 wqzpw.hvh -$ cd .. -$ cd .. -$ cd .. -$ cd pcqjncwl -$ ls -10646 wpst.sds -$ cd .. -$ cd qwvfpgl -$ ls -65156 bfmt.zcb -157745 hpdm.ctv -104612 rtbbgjr.wpv -$ cd .. -$ cd rtmj -$ ls -79449 wngz -$ cd .. -$ cd shg -$ ls -27187 srtj.qwz -$ cd .. -$ cd tcdmgwp -$ ls -277338 wshwhzw diff --git a/input/day_8.txt b/input/day_8.txt deleted file mode 100644 index 8f78128..0000000 --- a/input/day_8.txt +++ /dev/null @@ -1,99 +0,0 @@ -202002313322443443333413205214140320025450316364504141264123114304203303114001123204003420102030300 -212313000221124342025540453251212255520310035503014622512241404324240404402541331004400300331322110 -332010030224230340301531501004040246520352260460326354116252046344244524210334140401240030314221201 -221301221024131121450340303252214260131364111213343344405130626304123155314054543541311324344211033 -001134433000214135052445324455546624654355260523323125133253553045204251430400315121003433044422220 -110024340203302220432202030041005313231555605566115533505425534600532263042244310025013301002122432 -202142343241025110345415445624446445344113355202423663433331226040240361512310234150014422014312341 -120231221014040554044220640131325544631255541041127752253252103362402320335611055442052140412241043 -304101021100233012133444436554401661205535772414667667451754115102616366431662351045410402233002402 -230331042045503255333014364102251313262666434422256626256566764614412322001313140132320342244311432 -301141102400324512330561535320415044526674414642717654456164545365745044506116261040015244323140033 -231132220241110100324130130545143322166173563556616563372125554727356021654340613261035251251413332 -203320424451202552446214505356253135265527113533231423523554524551155161163143626222334550222001114 -024231523321503230631342521245372255435215736461556537371121121751317427505314306502002123010412034 -040145510232550020202124627124455516526155425234552673277347264467144563753114463520045522011145324 -240244304425550155132364624615433274255211852862645772235364532654142113137206602450504451232422342 -424334205511552415565560671715111772112734875278832283468554433426522451521742450535105641322532120 -133100401525326032650034477716317357844566548887884636586578835685745454237757622666646610535221104 -242223305304135213415343353725345243424627362843632335577356738268866222511635745254444064454403022 -331241503204144326221625132445526654437248248754447372872277553375762277344562444520505011503314140 -222451434543300006524657732724686755826462744865327773328272774372386881361277646413144100602223020 -414454544234262543464462244368365765473624458443347748378276353357284728521731472310150061145432122 -431102216135016433434413645583863866258756823459689676856722332224673767726144732654216036601312045 -110042056021302336337562427723268467778543586356696798849484555383634828423561624661541545036033040 -233130533366340424442262664763637476353997734438457636478474458384564333326465264262124602145421015 -241204063143034137555565335625773883567883575869635693564466395342787853372316311463254316554250312 -204021106434203474532574577732644238364483977987654549695578595965788345665673122334133343010255050 -545511454122526751271377583327826879494576898565775448864596738363442346635565474635455064243232543 -124015635625434375317238826384863483959359789986783666664869677434837343823842652356111546364644132 -354241210264473276647664584326653653647946783946785857466783387358894383428654661215717710324561130 -244056226450134737153283634386947648667343795757554497954898635566776763644735545173126352624425020 -501324141203722175363238762648494967439479987887696675878464444733446494872553246567237465053516212 -124454612231317724443537666649848658354577798467554676466685998895664436347585644634216747461605663 -444220351051321723632583255595773459868897594678655845666879757469695495456426765727653232001214613 -543415566433561456232786335548987337775874478855474645667479645683933635533375645234665367636633651 -530466162316434373545644848445489775499587455748589658584498988576664989538548655685716224502165333 -235553430155252418662326494855584476654765446847698998974986756847936484493638765583146163725434525 -310360654533722362728523488436493558969996756767575985755767774769466767793646674763166562576015621 -325614303744164255433237739477846644568969987655575799855985845775957857639672455744841244170500440 -503515002355336284762634697976487678966879556557679889675955589869487648536567234728851425445561434 -543324643653742448624433599753598966565767666598867958799856754678485656376459464724213745353256500 -424103217216134323283434554946357547857767597585675689859575974787896473853787835228441512611606640 -250304641276277558773624439786746445898556998895887655878685889784588785835399278825226257656316456 -345463264572334567387256787858445544645556959975787756996857575877564946576444487536853156173434515 -161602652143411253367838475869799955968676977879766978885597865889664759447954958773226534633601264 -425255315411463546634735936474878586798978997677669676798889865697568457553348834768551317414265641 -234033463437423662763283959368645469455555866987776986698877578774866488666969955245374145544441623 -263636217315313825577865757479668665967695777867766779768668996864488656989883458726646674514525511 -414022642352612738772698548548946555775959857777688888669975865965945954569559444566834371561235240 -626645264156227353287767567366856886676578966679977979667696756679988685477675656584254614315521534 -141252624567664677828886434838768857955979876666969698786698969754567989787396562527238135476552660 -561116074375644526333736555595544896786968966976977997766676677666986777499545768822354754143466332 -640134335336664367747687845787987597685679698978788978879896585767488999869854847362476731511356241 -122566575557672854685858389735665896958579588778989888987596889896554676975794558735663243216725024 -622222555471614528744598736564486874589976996698777696679756695597854959586596528866486767125750425 -420556462341434263425678855644549848459689687977998667968775668946499845947638767286571573445302316 -153401561272311464882769939493697496869895765798867978898769959646765788757935955564662266664350020 -013313231114626266432864594633565767798995787676787879588887569996649773766959635454884663212340545 -532215627116623645744769753668949665878576988558956966987866657689789897574757843566561641651164202 -450601415622125355356368488837847498867787786799888699666587767988546989739799625367647376766514525 -132355556713615268557775868585955849749679856695885666656767667454658976438866274426545173713503424 -140363023176115776535475859453935445956676569686687689879769756896678849374653357232443563250603624 -555455453332353643328265463674488487677659785966787969895954479496764396934557558828651662273322156 -126055665555676465455653358794473489784867699566988677887774657674865436594725534325162527364425454 -424236562661632716477544757996995899646765977676757796446899758789936969594733554244341314246106356 -135664342046737243753657865736877354784767579696499494585854598586968344888482585764775221150460432 -344344143357321137635487849484434336494875487675577984647444795955996398565666287683142755200412361 -414412353051761177373387236955658343565579456876599987585868476443368777592334237632432165500034134 -344222350343246157155255424535673748655865864986555696699778567479637584386522672344234517610314264 -303525035340142365235266633256899897484946659875878967575986439538577438532348255423232624315603544 -510360601501172132135462465243343789945984697644794559468647896656775633328382288156772775241356112 -244355065300035434315633638622366843368655487769664895769979663363655675357453742377443633663346142 -543050131342642155264665386866379467794949993697734675839557966585757563732683714633526145166334412 -251422612632162765477554485862386899688967865977755368655846774644737246723864225342434523316423234 -535030453166161574317736827787562575357946899856345696768476976499427585553774225613174414155545203 -451512340514125213652261633852837673947556656599369877579547445535876827567436531662350302444041243 -033335530105503441451253564883648443326876639459998839433543553388842558572361376415226141134602541 -304432111501100651754116177585225473385738444645866989935538477775342885231334255374502153460230350 -532031530144611101611317655656232366528772853465566773976378637453482452343331275146210626455403524 -012504432204304640225665641317778444385425328864724366378324622327743456125442217372022160305110234 -423330153504112303542265616531228643228676746426328835672356636538675673621573612560004436420330151 -323321500212164213037737677445413688473546378425227262668778538578545546734311666243650663254002451 -040305323234252401530453457637172235782628463783548274258737388837337454577642612225610462012021013 -014421203421445064446506474465661471783776826638336854777768476773252621522666325565433244545553213 -203353533234533642651045661415434436734475362377466258588352323543664136375224260403562354030401203 -430143224545323216313162327161435122244647775242765557228261267335671742531564542126211410421135434 -311115413443044633036265137463752661235223746112744444721551372635624713663424662444323552052513344 -134313534132001040304122015236726566356671331522244364434524166341154325353311501362040351444450020 -411143423205141252652033316260315365572263763132742674322315253667543711643300545065310242032324020 -144341145402305205020640440563232327377646232274132447222637451213446334050331022204312235341032244 -100112332452301131334340450350201034154563646746333747731225537677742552525011500010314510431132014 -221320130310004120220446050664152326055763773453162437516516576134605322403126405442152350241130304 -241101113220305530315466104556331100306117166126725673116524503062565103142063320533420154322010431 -300413413431025050053455545511501350201353245414366717162612025321566536123553051412314441133131101 -330231204004004415320523326541625211601352531640552445135123515524650251203003153345052023224223041 -323031413443333543540440514335332454342430446605433036305445612534333404345522552510512242414121433 -201012341123333315224534110123345050436205551211152343641503546320233130510552230421204123134014033 -030231013300430225134314421310156226302452500603162133325435662050366331135501505435404110101401101 -301302243133113000115553304435551505352615146115031661551161050412521420141400134222424010304012133 diff --git a/src/day_1.rs b/src/day_1.rs deleted file mode 100644 index 8fcc6ce..0000000 --- a/src/day_1.rs +++ /dev/null @@ -1,36 +0,0 @@ -use anyhow::{Context, Result}; - -use crate::{Problem, Solution}; - -pub struct Day1; - -impl Problem for Day1 { - const DAY: u8 = 1; - - const INPUT: &'static str = include_str!("../input/day_1.txt"); -} - -impl Solution for Day1 { - type Answer1 = usize; - - type Answer2 = usize; - - fn part_1(input: &str) -> Result { - input - .split("\n\n") - .map(|e| e.split('\n').flat_map(|l| l.parse::()).sum()) - .max() - .context("Failed to find max") - } - - fn part_2(input: &str) -> Result { - let mut vec = input - .split("\n\n") - .map(|e| e.split('\n').flat_map(|l| l.parse::()).sum()) - .collect::>(); - - vec.sort_unstable(); - - Ok(vec.iter().rev().take(3).sum()) - } -} diff --git a/src/day_2.rs b/src/day_2.rs deleted file mode 100644 index f9e207b..0000000 --- a/src/day_2.rs +++ /dev/null @@ -1,170 +0,0 @@ -use std::str::FromStr; - -use anyhow::{anyhow, Result}; - -use crate::{Problem, Solution}; - -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -struct Game { - shapes: (Shape, Shape), - outcome: Outcome, - score: usize, -} - -impl Game { - fn new(a: Shape, b: Shape, outcome: Outcome) -> Self { - Self { - shapes: (a, b), - outcome, - score: b as usize + outcome as usize, - } - } -} - -impl From<(Shape, Shape)> for Game { - fn from((a, b): (Shape, Shape)) -> Self { - Self::new(a, b, (a, b).into()) - } -} - -impl From<(Shape, Outcome)> for Game { - fn from((a, outcome): (Shape, Outcome)) -> Self { - Self::new(a, (a, outcome).into(), outcome) - } -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -#[repr(u8)] -enum Outcome { - Loss = 0, - Draw = 3, - Win = 6, -} - -impl From<(Shape, Shape)> for Outcome { - fn from((a, b): (Shape, Shape)) -> Self { - match (a, b) { - (Shape::Rock, Shape::Rock) => Outcome::Draw, - (Shape::Rock, Shape::Paper) => Outcome::Win, - (Shape::Rock, Shape::Scissors) => Outcome::Loss, - (Shape::Paper, Shape::Rock) => Outcome::Loss, - (Shape::Paper, Shape::Paper) => Outcome::Draw, - (Shape::Paper, Shape::Scissors) => Outcome::Win, - (Shape::Scissors, Shape::Rock) => Outcome::Win, - (Shape::Scissors, Shape::Paper) => Outcome::Loss, - (Shape::Scissors, Shape::Scissors) => Outcome::Draw, - } - } -} - -impl FromStr for Outcome { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - match s { - "X" => Ok(Outcome::Loss), - "Y" => Ok(Outcome::Draw), - "Z" => Ok(Outcome::Win), - s => Err(anyhow!("Unknown symbol: {}", s)), - } - } -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -enum Shape { - Rock = 1, - Paper = 2, - Scissors = 3, -} - -impl From<(Shape, Outcome)> for Shape { - fn from((shape, outcome): (Shape, Outcome)) -> Self { - match (shape, outcome) { - (Shape::Rock, Outcome::Draw) => Shape::Rock, - (Shape::Rock, Outcome::Win) => Shape::Paper, - (Shape::Rock, Outcome::Loss) => Shape::Scissors, - (Shape::Paper, Outcome::Loss) => Shape::Rock, - (Shape::Paper, Outcome::Draw) => Shape::Paper, - (Shape::Paper, Outcome::Win) => Shape::Scissors, - (Shape::Scissors, Outcome::Win) => Shape::Rock, - (Shape::Scissors, Outcome::Loss) => Shape::Paper, - (Shape::Scissors, Outcome::Draw) => Shape::Scissors, - } - } -} - -impl FromStr for Shape { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - match s { - "A" | "X" => Ok(Shape::Rock), - "B" | "Y" => Ok(Shape::Paper), - "C" | "Z" => Ok(Shape::Scissors), - s => Err(anyhow!("Unknown symbol: {}", s)), - } - } -} - -pub struct Day2; - -impl Problem for Day2 { - const DAY: u8 = 3; - - const INPUT: &'static str = include_str!("../input/day_2.txt"); -} - -impl Solution for Day2 { - type Answer1 = usize; - - type Answer2 = usize; - - fn part_1(input: &str) -> Result { - input.lines().try_fold(0, |acc, l| { - let (a, b) = l - .split_once(' ') - .ok_or_else(|| anyhow!("Missing deliminator"))?; - - let a: Shape = a.parse()?; - let b: Shape = b.parse()?; - let game: Game = (a, b).into(); - - Ok(acc + game.score) - }) - } - - fn part_2(input: &str) -> Result { - input.lines().try_fold(0, |acc, l| { - let (a, outcome) = l - .split_once(' ') - .ok_or_else(|| anyhow!("Missing deliminator"))?; - - let a: Shape = a.parse()?; - let outcome: Outcome = outcome.parse()?; - let game: Game = (a, outcome).into(); - - Ok(acc + game.score) - }) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - const INPUT: &str = indoc::indoc! {" - A Y - B X - C Z - "}; - - #[test] - fn test_part_1_example() -> Result<()> { - Ok(assert_eq!(15, Day2::part_1(INPUT)?)) - } - - #[test] - fn test_part_2_example() -> Result<()> { - Ok(assert_eq!(12, Day2::part_2(INPUT)?)) - } -} diff --git a/src/day_3.rs b/src/day_3.rs deleted file mode 100644 index a549e52..0000000 --- a/src/day_3.rs +++ /dev/null @@ -1,122 +0,0 @@ -use std::{ops::Deref, str::FromStr}; - -use anyhow::{anyhow, Context, Result}; - -use crate::{Problem, Solution}; - -trait Priority { - fn priority(self) -> Result; -} - -impl Priority for char { - fn priority(self) -> Result { - match self as u8 { - c @ 65..=90 => Ok(c - 65 + 27), - c @ 97..=122 => Ok(c - 97 + 1), - c => Err(anyhow!("failed to get priority of {}", c as char)), - } - } -} - -#[derive(Debug, Clone)] -struct Backpack(Vec); - -impl Backpack { - fn get_local_union(self) -> Result { - let (left, right) = self.split_at(self.len() / 2); - left.iter() - .cloned() - .find(|&item| right.contains(&item)) - .context(format!("Failed to find union in {:?}", &self)) - } - - fn get_group_union(group: &mut Vec) -> Result { - group - .split_first_mut() - .and_then(|(first, others)| { - first - .iter() - .cloned() - .find(|item| others.iter_mut().all(|b| b.contains(item))) - }) - .context(format!("Failed to find union in {:?}", group)) - } -} -impl Deref for Backpack { - type Target = Vec; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl std::str::FromStr for Backpack { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - Ok(Backpack(s.as_bytes().iter().map(|c| *c as char).collect())) - } -} - -pub struct Day3; - -impl Problem for Day3 { - const DAY: u8 = 3; - - const INPUT: &'static str = include_str!("../input/day_3.txt"); -} - -impl Solution for Day3 { - type Answer1 = usize; - - type Answer2 = usize; - - fn part_1(input: &str) -> Result { - input - .lines() - .map(Backpack::from_str) - .try_collect::>()? - .into_iter() - .map(|b| b.get_local_union()) - .try_collect::>()? - .into_iter() - .try_fold(0, |sum, c| c.priority().map(|p| sum + p as usize)) - } - - fn part_2(input: &str) -> Result { - let lines: Vec<&str> = input.lines().collect(); - lines.as_slice().chunks(3).try_fold(0, |acc, g| { - let mut group = g - .iter() - .cloned() - .map(Backpack::from_str) - .try_collect::>()?; - - Ok(Backpack::get_group_union(&mut group)?.priority()? as usize + acc) - }) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - const INPUT: &str = indoc::indoc! {r#" - vJrwpWtwJgWrhcsFMMfFFhFp - jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL - PmmdzqPrVvPwwTWBwg - wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn - ttgJtRGJQctTZtZT - CrZsJsPPZsGzwwsLwLmpwMDw - "#}; - - #[test] - fn test_part_1_example() -> Result<()> { - Ok(assert_eq!(157, Day3::part_1(INPUT)?)) - } - - #[test] - fn test_part_2_example() -> Result<()> { - Ok(assert_eq!(70, Day3::part_2(INPUT)?)) - } -} diff --git a/src/day_4.rs b/src/day_4.rs deleted file mode 100644 index 690ccd1..0000000 --- a/src/day_4.rs +++ /dev/null @@ -1,74 +0,0 @@ -use std::ops::Range; - -use anyhow::Result; - -use crate::{Problem, Solution}; - -pub fn parse_range(section: &str) -> Result> { - let (start, end) = section.split_once('-').unwrap(); - let start = start.parse::()?; - let end = end.parse::()?; - Ok(Range { start, end }) -} - -fn parse_pair(input: &str) -> Result<(Range, Range)> { - let (section_a, section_b) = input.split_once(',').unwrap(); - - Ok((parse_range(section_a)?, parse_range(section_b)?)) -} - -fn range_is_subset((a, b): &(Range, Range)) -> bool { - (a.start <= b.start && a.end >= b.end) || (b.start <= a.start && b.end >= a.end) -} - -fn range_is_union((a, b): &(Range, Range)) -> bool { - (a.start <= b.start && a.end >= b.start) || (b.start <= a.start && b.end >= a.start) -} - -pub struct Day4; - -impl Problem for Day4 { - const DAY: u8 = 4; - - const INPUT: &'static str = include_str!("../input/day_4.txt"); -} - -impl Solution for Day4 { - type Answer1 = usize; - - type Answer2 = usize; - - fn part_1(input: &str) -> Result { - let ranges: Vec<_> = input.lines().map(parse_pair).collect::>()?; - Ok(ranges.into_iter().filter(range_is_subset).count()) - } - - fn part_2(input: &str) -> Result { - let ranges: Vec<_> = input.lines().map(parse_pair).collect::>()?; - Ok(ranges.into_iter().filter(range_is_union).count()) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - const TEST_INPUT: &str = r#"2-4,6-8 -2-3,4-5 -5-7,7-9 -2-8,3-7 -6-6,4-6 -2-6,4-8"#; - - #[test] - fn test_part_1_example() -> Result<()> { - assert_eq!(2, Day4::part_1(TEST_INPUT)?); - Ok(()) - } - - #[test] - fn test_part_2_example() -> Result<()> { - assert_eq!(4, Day4::part_2(TEST_INPUT)?); - Ok(()) - } -} diff --git a/src/day_5.rs b/src/day_5.rs deleted file mode 100644 index 006a59a..0000000 --- a/src/day_5.rs +++ /dev/null @@ -1,212 +0,0 @@ -use std::{ - fmt::Display, - ops::{Deref, DerefMut}, - str::FromStr, -}; - -use anyhow::{Context, Result}; - -use crate::{Problem, Solution}; - -#[derive(Debug)] -struct Procedure(Vec); - -impl Procedure { - fn run(self, mut stacks: Stacks, in_order: bool) -> Result { - for step in self.0 { - let mut move_stack = Vec::new(); - for _ in 0..step.count { - let cargo = stacks[step.from - 1] - .pop() - .ok_or_else(|| anyhow::anyhow!("ran out of cargo"))?; - move_stack.push(cargo) - } - - if in_order { - move_stack.reverse() - } - - stacks[step.to - 1].append(&mut move_stack); - } - Ok(stacks) - } -} - -impl FromStr for Procedure { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - let mut procedure = Procedure(Vec::new()); - for (linenr, step) in s.lines().enumerate() { - procedure.push( - step.parse() - .context(format!("Error in procedure step {}: '{}'", linenr, step))?, - ) - } - Ok(procedure) - } -} - -impl Deref for Procedure { - type Target = Vec; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for Procedure { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - -#[derive(Debug)] -struct Step { - count: usize, - from: usize, - to: usize, -} - -impl FromStr for Step { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - let mut items = s.split_whitespace(); - Ok(Self { - count: items.next_chunk::<2>().unwrap().last().unwrap().parse()?, - from: items.next_chunk::<2>().unwrap().last().unwrap().parse()?, - to: items.next_chunk::<2>().unwrap().last().unwrap().parse()?, - }) - } -} - -#[derive(Debug)] -struct Stacks(Vec>); - -impl Stacks { - fn top(mut self) -> String { - self.iter_mut().fold( - "".to_owned(), - |mut acc: String, s: &mut std::vec::Vec| { - if let Some(c) = s.pop() { - acc.push(c) - } - acc - }, - ) - } -} - -impl Deref for Stacks { - type Target = Vec>; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for Stacks { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - -impl FromStr for Stacks { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - let mut stacks = Self(Vec::new()); - for line in s.lines().rev().skip(1) { - let mut chars = line.chars().skip(1).enumerate(); - loop { - let (stack, cargo) = match chars.next() { - Some((_, '[' | ']' | ' ')) => continue, - Some((index, c)) => (index / 4, c), - None => break, - }; - if stacks.len() < stack + 1 { - stacks.push(Vec::new()) - } - stacks[stack].push(cargo) - } - } - Ok(stacks) - } -} - -impl Display for Stacks { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let Some(max_len) = self.0.iter().map(|v| v.len()).max() else { - return Ok(()) - }; - - for i in (0..max_len).rev() { - let mut cargos = Vec::new(); - for stack in &self.0 { - let cargo = match stack.get(i) { - Some(c) => format!("[{}]", c), - None => " ".to_owned(), - }; - cargos.push(cargo); - } - writeln!(f, "{}", cargos.join(" "))? - } - Ok(()) - } -} - -pub struct Day5; - -impl Problem for Day5 { - const DAY: u8 = 5; - - const INPUT: &'static str = include_str!("../input/day_5.txt"); -} - -impl Solution for Day5 { - type Answer1 = String; - - type Answer2 = String; - - fn part_1(input: &str) -> Result { - let (stacks, procedure) = input.split_once("\n\n").unwrap(); - let stacks = Stacks::from_str(stacks)?; - let procedure = Procedure::from_str(procedure)?; - Ok(procedure.run(stacks, false)?.top()) - } - - fn part_2(input: &str) -> Result { - let (stacks, procedure) = input.split_once("\n\n").unwrap(); - let stacks = Stacks::from_str(stacks)?; - let procedure = Procedure::from_str(procedure)?; - Ok(procedure.run(stacks, true)?.top()) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - const TEST_INPUT: &str = indoc::indoc! {r#" - [D] - [N] [C] - [Z] [M] [P] - 1 2 3 - - move 1 from 2 to 1 - move 3 from 1 to 3 - move 2 from 2 to 1 - move 1 from 1 to 2 - "#}; - - #[test] - fn test_part_1_example() -> Result<()> { - Ok(assert_eq!("CMZ", Day5::part_1(TEST_INPUT)?)) - } - - #[test] - fn test_part_2_example() -> Result<()> { - Ok(assert_eq!("MCD", Day5::part_2(TEST_INPUT)?)) - } -} diff --git a/src/day_6.rs b/src/day_6.rs deleted file mode 100644 index 5983400..0000000 --- a/src/day_6.rs +++ /dev/null @@ -1,80 +0,0 @@ -use std::collections::HashSet; - -use anyhow::Result; - -use crate::{Problem, Solution}; - -fn get_window_pos(input: &str, win_size: usize) -> Option { - input - .as_bytes() - .windows(win_size) - .position(|set| { - let mut h = HashSet::new(); - for &c in set { - if !h.insert(c) { - return false; - } - } - true - }) - .map(|i| i + win_size) -} - -pub struct Day6; - -impl Problem for Day6 { - const DAY: u8 = 6; - - const INPUT: &'static str = include_str!("../input/day_6.txt"); -} - -impl Solution for Day6 { - type Answer1 = usize; - - type Answer2 = usize; - - fn part_1(input: &str) -> Result { - get_window_pos(input, 4).ok_or_else(|| anyhow::anyhow!("Failed to find item")) - } - - fn part_2(input: &str) -> Result { - get_window_pos(input, 14).ok_or_else(|| anyhow::anyhow!("Failed to find item")) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_part_1_example() -> Result<()> { - let tests = vec![ - ("mjqjpqmgbljsphdztnvjfqwrcgsmlb", 7), - ("bvwbjplbgvbhsrlpgdmjqwftvncz", 5), - ("nppdvjthqldpwncqszvftbrmjlhg", 6), - ("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg", 10), - ("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw", 11), - ]; - for test in tests { - assert_eq!(test.1, Day6::part_1(test.0)?); - } - - Ok(()) - } - - #[test] - fn test_part_2_example() -> Result<()> { - let tests = vec![ - ("mjqjpqmgbljsphdztnvjfqwrcgsmlb", 19), - ("bvwbjplbgvbhsrlpgdmjqwftvncz", 23), - ("nppdvjthqldpwncqszvftbrmjlhg", 23), - ("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg", 29), - ("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw", 26), - ]; - for test in tests { - assert_eq!(test.1, Day6::part_2(test.0)?); - } - - Ok(()) - } -} diff --git a/src/day_7.rs b/src/day_7.rs deleted file mode 100644 index 70e5448..0000000 --- a/src/day_7.rs +++ /dev/null @@ -1,217 +0,0 @@ -use std::{collections::HashMap, fmt::Display, ops::Deref, str::FromStr}; - -use anyhow::{anyhow, Context, Result}; - -use crate::{Problem, Solution}; - -enum Cmd { - Root, - Parent, - Child(String), - LS(Vec), -} - -impl FromStr for Cmd { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - let (cmd, arg) = s.trim().split_at(2); - let cmd_arg = (cmd.trim(), arg.trim()); - match cmd_arg { - ("cd", "/") => Ok(Self::Root), - ("cd", "..") => Ok(Self::Parent), - ("cd", child) => Ok(Self::Child(child.to_owned())), - ("ls", arg) => { - let entries = arg - .trim() - .lines() - .map(Entry::from_str) - .collect::>>()?; - Ok(Cmd::LS(entries)) - } - _ => Err(anyhow!("Failed to parse Command from str: {}", s)), - } - } -} - -enum Entry { - Dir(String), - File((String, usize)), -} - -impl FromStr for Entry { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - let (entry_type, name) = s - .split_once(' ') - .context(format!("Failed to parse Command from str: {}", s))?; - match entry_type { - "dir" => Ok(Self::Dir(name.to_owned())), - t => Ok(Self::File((name.to_owned(), t.parse()?))), - } - } -} - -#[derive(Default, Debug)] -struct FileSystem { - entries: HashMap, usize>, - cwd: Vec, -} - -impl FileSystem { - fn add(&mut self, size: usize) { - self.entries - .entry(self.cwd.to_owned()) - .and_modify(|n| *n += size) - .or_insert(size); - } - - fn pop_and_add(&mut self) -> Option { - let size = *self.entries.get(&self.cwd).unwrap_or(&0); - let value = self.cwd.pop(); - self.add(size); - value - } - - fn exec_cmd(&mut self, cmd: Cmd) { - match cmd { - Cmd::Root => self.cwd = vec![], - Cmd::Parent => { - self.pop_and_add(); - } - Cmd::Child(d) => self.cwd.push(d), - Cmd::LS(entries) => { - for entry in entries.into_iter() { - match entry { - Entry::File((_, size)) => self.add(size), - Entry::Dir(_) => {} - } - } - } - } - } -} - -impl Deref for FileSystem { - type Target = HashMap, usize>; - - fn deref(&self) -> &Self::Target { - &self.entries - } -} - -impl FromStr for FileSystem { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - s.split('$') - .filter_map(|l| match l.trim() { - _ if l.is_empty() => None, - l => Some(l), - }) - .flat_map(Cmd::from_str) - .collect::>() - .try_into() - } -} - -impl TryFrom> for FileSystem { - type Error = anyhow::Error; - - fn try_from(value: Vec) -> Result { - let mut fs = Self::default(); - for cmd in value { - fs.exec_cmd(cmd) - } - - while !fs.cwd.is_empty() { - fs.exec_cmd(Cmd::Parent) - } - - Ok(fs) - } -} - -impl Display for FileSystem { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - writeln!(f, "path\tsize")?; - for (path, size) in &self.entries { - writeln!(f, "/{}\t{}", path.join("/"), size)?; - } - Ok(()) - } -} - -pub struct Day7; - -impl Problem for Day7 { - const DAY: u8 = 7; - - const INPUT: &'static str = include_str!("../input/day_7.txt"); -} - -impl Solution for Day7 { - type Answer1 = usize; - - type Answer2 = usize; - - fn part_1(input: &str) -> Result { - let fs: FileSystem = input.parse()?; - Ok(fs.values().filter(|&s| *s < 100_000).sum()) - } - - fn part_2(input: &str) -> Result { - let fs: FileSystem = input.parse()?; - let used = *fs.get(&Vec::new()).context("Failed to get root size")?; - - fs.values() - .filter_map(|&dir_size| match dir_size { - k if used - k < 40_000_000 => Some(k), - _ => None, - }) - .min() - .context("No directory found") - } -} - -#[cfg(test)] -mod tests { - use super::*; - - const TEST_INPUT: &str = indoc::indoc! {r#" - $ cd / - $ ls - dir a - 14848514 b.txt - 8504156 c.dat - dir d - $ cd a - $ ls - dir e - 29116 f - 2557 g - 62596 h.lst - $ cd e - $ ls - 584 i - $ cd .. - $ cd .. - $ cd d - $ ls - 4060174 j - 8033020 d.log - 5626152 d.ext - 7214296 k - "#}; - - #[test] - fn test_part_1_example() -> Result<()> { - Ok(assert_eq!(95437, Day7::part_1(TEST_INPUT)?)) - } - - #[test] - fn test_part_2_example() -> Result<()> { - Ok(assert_eq!(24933642, Day7::part_2(TEST_INPUT)?)) - } -} diff --git a/src/day_8.rs b/src/day_8.rs deleted file mode 100644 index 145bc22..0000000 --- a/src/day_8.rs +++ /dev/null @@ -1,326 +0,0 @@ -use std::{collections::HashSet, fmt::Display}; - -use anyhow::Result; - -use crate::{Problem, Solution}; - -type TreeHeight = i8; - -struct Visibility { - capacity_x: usize, - capacity_y: usize, - trees_seen: HashSet<(usize, usize)>, - max_north: Vec, - max_east: Vec, - max_south: Vec, - max_west: Vec, -} - -impl Visibility { - fn with_capacity(capacity_x: usize, capacity_y: usize) -> Self { - Self { - capacity_x, - capacity_y, - trees_seen: HashSet::new(), - max_north: vec![-1; capacity_x], - max_east: vec![-1; capacity_y], - max_south: vec![-1; capacity_x], - max_west: vec![-1; capacity_y], - } - } - - fn check_trees(&mut self, tree_grid: Vec>) { - self.check_trees_nw(&tree_grid); - self.check_trees_se(&tree_grid); - } - - fn check_trees_nw(&mut self, tree_grid: &[Vec]) { - for (y, trees) in tree_grid.iter().enumerate() { - for (x, tree) in trees.iter().enumerate() { - self.check_tree_nw(x, y, *tree) - } - } - } - - fn check_trees_se(&mut self, tree_grid: &[Vec]) { - for (y, trees) in tree_grid.iter().enumerate().rev() { - for (x, tree) in trees.iter().enumerate().rev() { - self.check_tree_se(x, y, *tree) - } - } - } - - fn check_tree_nw(&mut self, x: usize, y: usize, tree: TreeHeight) { - if tree > self.max_north[x] { - self.trees_seen.insert((x, y)); - self.max_north[x] = tree; - } - - if tree > self.max_west[y] { - self.trees_seen.insert((x, y)); - self.max_west[y] = tree; - } - } - - fn check_tree_se(&mut self, x: usize, y: usize, tree: TreeHeight) { - if tree > self.max_south[x] { - self.trees_seen.insert((x, y)); - self.max_south[x] = tree; - } - - if tree > self.max_east[y] { - self.trees_seen.insert((x, y)); - self.max_east[y] = tree; - } - } -} - -impl Display for Visibility { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - for y in 0..self.capacity_y { - let mut l = String::new(); - for x in 0..self.capacity_x { - l.push(if self.trees_seen.contains(&(x, y)) { - 'X' - } else { - ' ' - }) - } - writeln!(f, "{}", l)?; - } - Ok(()) - } -} - -#[derive(Debug, Default)] -struct ScenicScore { - tree: Tree, - north: Vec, - east: Vec, - south: Vec, - west: Vec, -} - -impl ScenicScore { - fn new( - tree: Tree, - north: Vec, - east: Vec, - south: Vec, - west: Vec, - ) -> Self { - Self { - tree, - north, - east, - south, - west, - } - } - fn score(&self) -> usize { - self.north.len() * self.east.len() * self.south.len() * self.west.len() - } -} - -impl Display for ScenicScore { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - for t in &self.north { - for _ in 0..self.tree.x { - write!(f, "x")?; - } - write!(f, "{t:>width$}", width = self.tree.x)?; - for _ in self.tree.x..self.east.len() { - write!(f, "x")?; - } - writeln!(f)?; - } - - let line = self - .west - .iter() - .chain([&self.tree]) - .chain(self.east.iter()) - .map(|t| t.to_string()) - .collect::>() - .join(""); - - let offset = self.tree.x - self.west.len(); - writeln!(f, "{:offset$}", line)?; - - for t in &self.south { - for _ in 0..self.tree.x { - write!(f, "x")?; - } - writeln!(f, "{t:>width$}", width = self.tree.x)?; - for _ in self.tree.x..self.east.len() { - write!(f, "x")?; - } - } - - Ok(()) - } -} - -impl PartialEq for ScenicScore { - fn eq(&self, other: &Self) -> bool { - self.score() == other.score() - } -} - -impl Eq for ScenicScore {} - -impl PartialOrd for ScenicScore { - fn partial_cmp(&self, other: &Self) -> Option { - self.score().partial_cmp(&other.score()) - } -} - -impl Ord for ScenicScore { - fn cmp(&self, other: &Self) -> std::cmp::Ordering { - self.score().cmp(&other.score()) - } -} - -#[derive(Debug, Default, Clone, Copy)] -struct Tree { - x: usize, - y: usize, - height: TreeHeight, -} - -impl Tree { - fn new(x: usize, y: usize, height: TreeHeight) -> Self { - Self { x, y, height } - } - - fn scenic_score(&self, tree_grid: &[Vec]) -> ScenicScore { - let mut north: Vec = Vec::new(); - for t in tree_grid.iter().map(|v| v[self.x]).take(self.y).rev() { - north.push(t); - if t >= *self { - break; - } - } - north.reverse(); - - let mut east: Vec = Vec::new(); - for t in tree_grid[self.y].iter().skip(self.x + 1) { - east.push(*t); - if t >= self { - break; - } - } - - let mut south: Vec = Vec::new(); - for t in tree_grid.iter().map(|v| v[self.x]).skip(self.y + 1) { - south.push(t); - if t >= *self { - break; - } - } - - let mut west: Vec = Vec::new(); - for t in tree_grid[self.y].iter().take(self.x).rev() { - west.push(*t); - if t >= self { - break; - } - } - west.reverse(); - - ScenicScore::new(*self, north, east, south, west) - } -} - -impl PartialEq for Tree { - fn eq(&self, other: &Self) -> bool { - self.height == other.height - } -} - -impl PartialOrd for Tree { - fn partial_cmp(&self, other: &Self) -> Option { - self.height.partial_cmp(&other.height) - } -} - -impl Display for Tree { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.height) - } -} - -pub struct Day8; - -impl Problem for Day8 { - const DAY: u8 = 8; - - const INPUT: &'static str = include_str!("../input/day_8.txt"); -} - -impl Solution for Day8 { - type Answer1 = usize; - - type Answer2 = usize; - - fn part_1(input: &str) -> Result { - let tree_grid: Vec> = input - .lines() - .map(|l| { - l.chars() - .filter_map(|c| c.to_digit(10).map(|d| d as TreeHeight)) - .collect() - }) - .collect(); - - let mut visibility = Visibility::with_capacity(tree_grid[0].len(), tree_grid.len()); - visibility.check_trees(tree_grid); - Ok(visibility.trees_seen.len()) - } - - fn part_2(input: &str) -> Result { - let tree_grid: Vec> = input - .lines() - .enumerate() - .map(|(y, l)| { - l.chars() - .enumerate() - .filter_map(|(x, c)| c.to_digit(10).map(|d| Tree::new(x, y, d as TreeHeight))) - .collect() - }) - .collect(); - - let trees = tree_grid.iter().flatten(); - - let max_score = trees - .map(|t| t.scenic_score(&tree_grid)) - .max() - .ok_or_else(|| anyhow::anyhow!("Failed to find max"))?; - - Ok(max_score.score()) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - const TEST_INPUT: &str = indoc::indoc! {r#" - 30373 - 25512 - 65332 - 33549 - 35390 - "#}; - - #[test] - fn test_part_1_example() -> Result<()> { - Ok(assert_eq!(21, Day8::part_1(TEST_INPUT)?)) - } - - #[test] - fn test_part_2_example() -> Result<()> { - println!("{TEST_INPUT}"); - Ok(assert_eq!(8, Day8::part_2(TEST_INPUT)?)) - } -} diff --git a/src/lib.rs b/src/lib.rs index 4abd632..2f64577 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,3 @@ -#![feature(iterator_try_collect)] -#![feature(iter_next_chunk)] #![feature(associated_type_defaults)] pub trait Solution: Problem { @@ -25,12 +23,3 @@ pub trait Problem { const INPUT: &'static str; } - -pub mod day_1; -pub mod day_2; -pub mod day_3; -pub mod day_4; -pub mod day_5; -pub mod day_6; -pub mod day_7; -pub mod day_8; diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 352aca6..0000000 --- a/src/main.rs +++ /dev/null @@ -1,18 +0,0 @@ -use advent_of_code_2022::{ - day_1::Day1, day_2::Day2, day_3::Day3, day_4::Day4, day_5::Day5, day_6::Day6, day_7::Day7, - day_8::Day8, Solution, -}; -use anyhow::Result; - -fn main() -> Result<()> { - Day1::solve()?; - Day2::solve()?; - Day3::solve()?; - Day4::solve()?; - Day5::solve()?; - Day6::solve()?; - Day7::solve()?; - Day8::solve()?; - - Ok(()) -} -- cgit v1.2.3-70-g09d2