diff options
author | Matias Linares <matias@deprecated.org> | 2023-12-03 15:11:37 -0300 |
---|---|---|
committer | Matias Linares <matias@deprecated.org> | 2023-12-03 15:11:37 -0300 |
commit | d073dcaa66567e58d6f9a36b15c9e54b91ed8c54 (patch) | |
tree | b26480988df75847eba75892bdf33089ec08bcd7 /2022 | |
parent | 129ac460f73972097700ad2def6b4c36d6ebe6e1 (diff) | |
download | advent-of-code-d073dcaa66567e58d6f9a36b15c9e54b91ed8c54.tar.gz |
Add 2022 and 2023
Diffstat (limited to '2022')
-rw-r--r-- | 2022/day1.rb | 48 | ||||
-rw-r--r-- | 2022/day1.txt | 2244 | ||||
-rw-r--r-- | 2022/day2-test.txt | 3 | ||||
-rw-r--r-- | 2022/day2.rb | 116 | ||||
-rw-r--r-- | 2022/day2.txt | 2500 | ||||
-rw-r--r-- | 2022/day3.rb | 63 | ||||
-rw-r--r-- | 2022/day3.txt | 300 | ||||
-rw-r--r-- | 2022/day4-test.txt | 6 | ||||
-rw-r--r-- | 2022/day4.rb | 36 | ||||
-rw-r--r-- | 2022/day4.txt | 1000 | ||||
-rw-r--r-- | 2022/day5.rb | 43 | ||||
-rw-r--r-- | 2022/utils.rb | 10 |
12 files changed, 6369 insertions, 0 deletions
diff --git a/2022/day1.rb b/2022/day1.rb new file mode 100644 index 0000000..f7a7c24 --- /dev/null +++ b/2022/day1.rb @@ -0,0 +1,48 @@ + + +TEST_S = <<-TEST +1000 +2000 +3000 + +4000 + +5000 +6000 + +7000 +8000 +9000 + +10000 +TEST + +def elves_food(input_str) + return input_str.split(/^$/).map do + |elf_rations| + elf_rations.strip.split("\n").map(&:to_i) + end +end + +def calories_by_elf(input_str) + elves_food(input_str).map(&:sum) +end + +def max_calories(input_str) + calories_by_elf(input_str).max +end + +def top_3_calories(input_str) + calories_by_elf(input_str).sort.reverse.take(3).sum +end + +def day1 + File.open('day1.txt') do |f| + input_str = f.read + puts "part1: #{max_calories(input_str)}" + puts "part2: #{top_3_calories(input_str)}" + end +end + +day1() +#puts elves_food(TEST_S) diff --git a/2022/day1.txt b/2022/day1.txt new file mode 100644 index 0000000..29d80bf --- /dev/null +++ b/2022/day1.txt @@ -0,0 +1,2244 @@ +5474 +4920 +5381 +8650 +11617 +7193 +8161 + +10747 +5855 +13827 +6294 +13437 +8125 + +6913 +6443 +3431 +5357 +1579 +3590 +4471 +4971 +4055 +4937 +2514 +1679 +2917 + +4203 +4433 +8798 +5838 +2031 +8765 +5107 +6055 +2482 +6266 + +4646 +4705 +5183 +1707 +3676 +2042 +4140 +3321 +1899 +3055 +3327 +3944 +3879 +2981 + +59238 + +11748 +22005 + +6389 +4630 +1443 +14530 +9588 + +10578 +8843 +10344 +6289 +10444 +7615 +9510 + +9351 +3942 +5896 +4692 +10110 +4125 +1161 +8261 + +22239 + +5485 +1528 +1288 +4749 +3742 +5861 +2418 +5901 +5201 +1695 +4640 +4609 +3717 +5597 +4183 + +6675 +4543 +3795 +2873 +6364 +2320 +4087 +5536 +7235 +2206 +6179 +4316 + +2755 +6991 +3129 +7988 +3124 +4657 +6947 +4511 +3345 +4043 +6322 + +8053 +5068 +3647 +8695 +6724 +8679 +6974 +4379 +6785 + +7345 +3825 +3850 +4237 +2168 +5866 +2329 +3006 +2966 +3778 +1635 +4083 + +8997 +7386 +3721 +6526 +9222 +2248 +1079 +4470 +2870 + +3780 +4795 +6084 +3682 +4147 +4840 +1603 +3949 +7023 +3175 + +3438 +2545 +2816 +6367 +6068 +1782 +2026 +5115 +5648 +5239 +3530 +5553 +3809 +1891 + +6970 +4195 +3109 +3953 +9504 +5121 +6159 +3932 + +5045 +22725 + +2633 +6392 +4433 +4789 +4593 +3043 +2935 +6540 +7966 +6176 +7759 + +6551 +7220 +2325 +6230 +2058 +6931 +7107 +3393 +4448 +2157 +7172 +2699 + +43804 + +9649 + +4126 +3911 +4619 +13049 + +4094 +5564 +6038 +1736 +2035 +7064 +5449 +3542 +6245 +5280 +4870 +3181 + +5699 +4317 +2871 +3784 +6855 +5389 +3538 +1374 +7930 +6761 +6756 + +8427 +4122 +1938 +8024 +1572 +4399 +1371 +1945 +1475 +5936 + +4158 +8074 +3978 +12335 +4192 +1983 + +7331 +3052 +5007 +7331 +6303 +3832 +4584 +6628 +4574 +3994 +6504 +7166 + +5045 +1220 +6070 +1942 +2263 +3916 +1936 +1557 +4652 +3224 +2866 +1448 +1261 +5803 + +8695 +10505 +8608 +11934 +9221 +3064 +9944 + +3497 +6215 +4573 +6966 +3312 +7874 +5739 +2775 +7394 +1896 + +8484 +6106 +7125 +10399 +4310 +3978 +8000 +3698 + +2462 +4167 +5607 +2518 +2013 +5458 +5439 +4152 +4061 +2246 +1349 +5429 +4122 +3370 +1401 + +6994 +5598 +4181 +11620 +7973 +2680 + +16039 +23774 + +3915 +1933 +2725 +5159 +5433 +5165 +5447 +1291 +1851 +5476 +3464 +3070 + +3511 +10497 +2941 +9581 +10220 +9369 +3517 +8319 + +11067 +4795 +9788 +6321 +9229 +5678 +3344 + +7639 +7865 +2566 +9034 +1333 +4160 +9017 +5958 + +7565 +5227 +7692 +6780 +2290 +10189 +3257 +6345 + +3910 +8187 +7800 +4521 +1055 +6494 +6879 +6508 +3778 +2576 + +1160 +7168 +7118 +7138 +5054 +2319 +1581 +5235 +6430 +2877 +2511 +2595 + +5449 +1604 +8598 +8992 +5251 +7608 +2606 +2404 + +4494 +1614 +12591 + +4105 +6805 +2299 +1368 +6970 +2029 +2567 +2055 +4073 +3090 +5666 +3796 + +11914 +10997 +7550 +5656 + +18298 +5479 + +4700 +1779 +6303 +4671 +2275 +3101 +1835 +3928 +2480 +3402 +4974 +5518 +1507 +5891 + +17354 +19903 +19827 + +6309 +4879 +4247 +4723 +1826 +3124 +6153 +4359 +5103 +5449 +3834 +4751 +5939 +3534 + +8210 +14642 +3626 +8654 +7933 + +12463 +2202 +9518 +5869 +5003 + +21437 + +1303 +5025 +7398 +2518 +6070 +7001 +8240 +4130 +4486 +2590 + +2211 +4296 +6216 +5870 +6871 +3508 +2504 +2898 +3048 +3381 +3879 +6604 +3057 + +2476 +4145 +8294 +5106 +9531 +5254 +1495 +1765 + +4592 +1366 +5153 +5189 +5896 +5331 +5104 +2438 +1725 +4846 +1744 +2251 +2769 +4181 +1189 + +8345 +13849 +7806 +11279 + +2950 +4805 +1549 +4468 +5550 +5136 +1311 +3073 +3482 +1175 +5151 +2011 +4116 +4405 +3581 + +2616 +6472 +4229 +2306 +1079 +1132 +5062 +6279 +2972 +1437 +5100 +2270 +3377 +1256 + +7703 +4334 +3700 +3586 +2980 +8040 +5481 +6456 +2284 +2481 +7518 + +7767 +3145 +1131 +6374 +2591 +1952 +2915 +6288 + +17556 +1308 +2244 +11329 + +5138 +18453 +24805 + +4253 +2926 +5747 +2324 +5486 +4747 +6081 +3244 +1015 +3443 +2086 +2016 +1409 +5915 +1805 + +5662 +3866 +4336 +3394 +2257 +4012 +2404 +4649 +4156 +3460 +4337 +5928 +2710 + +1811 +4065 +4708 +1579 +1360 +7071 +3771 +4071 +3152 +1427 +4361 +5013 + +52242 + +6035 +2981 +1824 +4305 +1253 +3804 +3713 +5411 +4316 +5945 +1503 +4619 +3873 +1063 + +8966 +2393 +5007 +2992 +8306 +2947 +10127 +6760 + +5101 +6156 +6344 +1093 +6575 +6010 +1179 +2699 +8234 +8433 + +25118 +27329 + +9532 +10745 +11456 +5346 +3371 +8674 +6338 + +11164 +6281 +6275 +3805 +3989 +3109 +10478 + +15795 +14646 + +9248 +4268 +13365 +6711 +5210 +3359 + +4367 +5811 +1444 +2920 +5074 +4213 +5135 +1109 +4701 +2615 +3108 +3748 +4670 +3620 +5180 + +1743 +2512 +4737 +6125 +6136 +2268 +2643 +1225 +6937 +3774 +2550 +1160 + +4159 +10506 +17904 + +1183 +3045 +2677 +3989 +5062 +1507 +5918 +5291 +3473 +3949 +4145 +4949 +4775 +3148 + +6473 +6375 +1013 +6653 +6193 +4437 +2192 +2663 + +3145 +9517 +5339 +7768 +10803 +5365 + +1120 +3384 +5420 +6699 +7252 +1922 +6063 +6993 +7110 +1062 +5206 +3326 + +3235 +3681 +3647 +2771 +1608 +1299 +1037 +2665 +2285 +6054 +3787 +6019 +1867 +2501 + +2116 +2641 +6185 +2165 +5765 +1674 +4516 +3426 +4773 +6586 +1914 +6492 +6193 + +2417 +5222 +2764 +3045 +1511 +3873 +5328 +4941 +4189 +5083 +2969 +2534 +1666 +1733 +5940 + +7351 +4465 +13541 +2200 +12798 +11321 + +32442 + +17392 +2823 +10314 +3495 + +4737 +4570 +3856 +2588 +3135 +3661 +3884 +5635 +5842 +1983 +2290 +5140 +2252 +4826 +5424 + +1666 +8670 +6408 +8258 +2038 +11212 + +7026 +7262 +5520 +7613 +10233 +4683 +9874 +5205 + +6451 +1335 +16980 +1986 + +7472 +10701 +3953 +3512 +9189 +5675 +5285 +1085 + +6673 +4260 +7698 +1171 +5686 +4966 +4824 +2941 +3847 +3968 + +2927 +6876 +6839 +1336 +6843 +5907 +1013 +6284 +2354 +2037 +4355 +4735 +2470 + +11642 +3298 +7526 +8973 +1752 +9609 +9415 + +7862 +24260 + +13115 +12552 +9965 +9011 +4189 +10063 + +4678 +5279 +1173 +4347 +1102 +1067 +7067 +7598 +5114 +3247 + +11741 +9531 +5821 +3624 +1064 +6312 +3099 + +17369 + +2453 +6099 +2945 +5136 +3273 +2295 +4925 +5956 +1280 + +1443 +1787 +2042 +8898 +3387 +2391 +6857 +5622 + +6594 +3937 +1178 +4172 +7356 +7296 +7497 +2169 +1673 +3993 +5546 + +25269 +15637 +21519 + +10437 +4102 +6545 + +2996 +4277 +2063 +2577 +3304 +3240 +5948 +3754 +3940 +4706 +4258 +5636 +2857 +4082 +4082 + +18222 +19780 +10272 + +5915 + +5612 +2789 +2367 +5086 +5148 +5115 +7196 +2378 +1394 +2072 +3440 +4135 + +35104 + +3238 +1135 +1210 +2747 +5793 +7097 +3327 +3438 +6990 +3218 +6635 +2945 + +2247 +5037 +2112 +3768 +1817 +4538 +3236 +1070 +2146 +1813 +1567 +6025 +2533 +1134 +1320 + +2305 +4606 +4812 +3568 +4712 +4459 +4131 +4079 +4008 +3131 +1264 +1684 +5296 +2945 + +1255 +1633 +4774 +5707 +1349 +1660 +1549 +3965 +3511 +1791 +3535 +2568 +6598 + +4756 +7488 +2222 +2964 +4150 +5175 +4198 +8641 +5103 + +2689 +16286 +12088 +10520 + +4714 +21793 +17571 + +4388 +2535 +3284 +3574 +1322 +3532 +3505 +3713 +6261 +6430 +4673 +1695 +1169 + +59355 + +20855 +1036 +20325 + +3231 +2285 +7377 +4182 +9866 +1502 +7341 + +3151 +3745 +15911 +4525 +6796 + +10285 +3489 +6159 +1484 +1735 +5194 +6943 +3763 + +2654 +4389 +3639 +5386 +2078 +3240 +3504 +8137 +2330 +8406 + +13627 +7144 +6062 +11288 + +21671 +15167 +8981 + +1199 +8578 +5102 +4529 +8070 +7573 +6499 +5155 +5134 +3510 + +3364 +6004 +3899 +6417 +3007 +5581 +4427 +5193 +1580 +6498 +4366 +3702 +6294 +3007 + +1086 +8177 +10586 +7787 +6042 + +4367 +1320 +9290 +7230 +9666 +4239 +8803 +6955 + +2626 +1542 +1131 +6190 +6719 +2764 +5729 +3631 +3914 +1309 +6531 +5590 +1387 + +1214 +3796 +4620 +1037 +6851 +2733 +6705 +5377 +5788 +4926 +3923 +1757 +3696 + +5645 +4859 +1827 +6117 +7432 +2787 +7137 +7504 +4120 +1430 +1522 + +3825 +6622 +8375 +8555 +1702 +2360 +4444 +1853 + +20697 +6984 + +5947 +4046 +6449 +1564 +3754 +5339 +4165 +5954 +4398 +3271 +2567 +1454 +6060 +1108 + +17518 +10791 +7556 +1902 + +6547 +1011 +11291 +3886 + +1673 +5267 +6948 +6577 +7606 +8357 +6414 +9057 +5283 + +36117 + +2334 +4192 +2967 +1160 +3335 +5893 +6342 +5954 +2462 +4028 +4035 +3816 +5167 +6094 + +4025 +5106 +3876 +1689 +2168 +3504 +2819 +6809 +5580 +1549 +4401 +5305 +2889 + +4919 +4789 +4604 +1647 +2305 +1223 +1621 +5273 +4101 +1318 +1514 +5766 +5749 +3943 + +18068 +9720 +11242 + +3190 +1497 +3700 +5345 +5117 +4089 +2584 +3740 +2397 +3541 +4534 +4403 +6257 + +4822 +7295 +1000 +4766 +9612 +9061 +3549 +8036 +5254 + +4816 +2187 +7269 +3500 +7150 +2797 +6007 +5651 +4702 +1385 +6393 +5128 + +2347 +3149 +2773 +3877 +5619 +1646 +3363 +1888 +5203 +5155 +5974 +2030 +2149 +3530 +2745 + +4694 +12004 +11089 +13235 + +11269 + +4700 +2437 +6297 +4951 +3798 +6109 +4249 +5262 +3972 +1493 + +3293 +3333 +2306 +1234 +6389 +1929 +1012 +1477 +3691 +1235 +3846 +5286 +1164 +5630 + +17541 +12819 +7368 +11983 + +14008 +7610 +2321 +4581 + +5345 +5511 +2483 +6155 +3052 +5151 +4224 +3992 +5566 +5275 +4539 +4762 +4804 +3673 + +64454 + +22960 +19989 +1512 + +6252 +1835 +9984 +5671 +6357 +8737 +7341 + +5374 +3434 +2008 +4744 +5277 +1394 +4515 +6327 +5656 +2721 +3005 +1197 +5579 +3661 + +5886 +4591 +5003 +2309 +2703 +5984 +2750 +2332 +1005 +2374 +2945 +2250 +3844 +5665 +5016 + +3269 +4501 +7712 +12368 +2929 + +8015 +7817 +9884 +10257 +7097 +1024 +6910 + +5184 +7911 +3112 +4284 +2879 +6177 +3740 +2243 +7722 + +4643 +6279 +5081 +3030 +3991 +2642 +7422 +6341 +3712 +6022 +2953 + +8182 +9540 +18188 + +9292 +10077 +8619 +2367 +9770 +3540 +10220 +2537 + +3230 +5748 +3491 +2382 +4803 +4477 +4706 +5688 +3872 +4854 +6934 +7327 + +16115 +16116 +15926 +6134 +7828 + +7192 +1734 +4498 +4311 +2682 +6019 +5482 +7073 +1602 +6751 +1106 +2314 + +6320 +7703 +9059 +12137 +10057 +4961 + +4306 +2143 +6775 +2805 +3338 +7133 +4619 +1323 +2753 +4504 +4366 +5334 + +11176 +13348 +13834 +10124 +8084 +6286 + +10338 +13150 +2090 +2260 +16428 + +3667 +4251 +5278 +1111 +3667 +6833 +6846 +4346 +2118 +5830 +6642 +3730 +1700 + +1037 +14507 +24258 + +22776 +16783 +22796 + +10555 +1425 +5032 +12069 +1108 +8152 +6623 + +11535 +11922 +4903 +5397 +13421 + +9869 +8664 +15110 +12589 +2301 + +1319 +11885 +12142 +3267 +6484 +1285 +2595 + +5648 +4703 +4074 +8048 +4128 +2197 +2947 +1737 +4032 +6999 +4374 + +6043 +2635 +3457 +6893 +1769 +2808 +4858 +5987 +1193 +6061 +1197 +4169 +4939 + +4043 +5938 +3483 +5056 +5921 +3376 +3972 +1843 +5401 +5469 +2972 +3421 +5129 +2949 + +12561 +1792 +13583 +12678 +11790 +4781 + +1868 +3636 +1727 +3229 +4396 +3926 +1960 +4131 +1766 +3644 +6156 +1321 +4685 +2702 + +6193 +5733 +4709 +2502 +3684 +3363 +5916 +6806 +5483 +3767 +2544 +3000 +5196 + +4345 +1107 +1363 +5707 +4533 +5183 +3248 +6589 +3008 +4193 +6416 +4727 +1464 + +16694 +7689 + +2805 +3717 +5326 +5676 +1663 +1680 +1151 +4131 +1223 +1542 +4191 +2587 +5529 +4681 +3736 + +10132 +10116 +6576 +4908 +16381 + +2310 +7296 + +11429 +16310 + +3801 +6942 +3366 +3915 +3903 +4342 +2289 +5429 +1211 +4237 +5688 +5023 +3319 + +1234 +4811 +2311 +2590 +2857 +5111 +5063 +6350 +1887 +1814 +6092 +3694 +2758 +3712 + +1830 +8120 +18551 +14964 + +7427 +1702 +4265 +3065 +3409 +3845 +9418 +10394 + +5947 +6853 +7006 +5538 +6218 +6167 +4825 +2838 +2073 +8061 +7418 + +3077 +1132 +1171 +3570 +4467 +5666 +3306 +5859 +2191 +2986 +4212 +5046 +3082 +3918 +3539 + +12352 +4933 + +11214 +21828 +18790 + +8150 +8051 +6399 +13321 + +1077 +7138 +9996 +2474 +7483 +5220 +9358 + +2352 +7906 +8887 +6549 +9471 +6563 + +2408 +11061 +2717 +9936 +7232 + +1143 +26201 + +8453 +18884 +14705 + +1102 +4208 +3159 +2913 +2163 +2493 +2202 +4092 +4944 +3844 +4740 +5584 +3073 +2325 +3359 + +5448 +5487 +5685 +2776 +5432 +2527 +3483 +4295 +7162 +7033 +5512 +4802 + +8890 +9904 +6114 +1416 +5791 +10383 +2333 + +5420 +6696 +5120 +3503 +1975 +6025 +1966 +3962 +7988 +3808 +4725 + +3407 +3897 +6234 +2085 +5141 +6526 +1296 +2371 +4846 +3129 +4258 +4951 +2549 + +3491 +1833 +7754 +8425 +5132 +1799 +4950 +1499 +1791 +7778 + +3416 +9251 +6111 +2067 +15697 + +1560 +4056 +4203 +5915 +1118 +3442 +7843 +1986 +2318 +7247 + +3266 +6672 +2491 +6089 +2403 +2038 +1581 +5163 +3657 +6090 +2392 +6109 +2091 + +8674 +5107 +10708 +6044 +5193 +2111 +1706 +5666 + +5933 +3537 +5456 +6595 +9018 +2113 +3778 +3638 + +3741 +1940 +1603 +4061 +3986 +3414 +2327 +2173 +5594 +5598 +3974 +5162 + +4947 +2765 +3017 +2598 +3841 +3663 +4664 +2519 +3969 +3721 +4100 +2463 +4616 +4553 +4986 + +2809 +6051 +1262 +1163 +6129 +1501 +4798 +7401 +3929 +1077 +6108 +3232 + +10252 +3877 +5596 +7696 +2683 +3182 +5335 +10338 + +4390 +7767 +7735 +6771 +2291 +2887 +2884 +6444 +4270 +1721 + +2939 +5140 +4955 +6308 +2891 +5405 +1775 +2275 +3153 +5569 +3769 +1229 +4394 + +1677 +2258 +5447 +4017 +1478 +1334 +2354 +5847 +4433 +2973 +3691 +4900 +5785 +3571 + +3573 +3512 +4014 +5627 +4750 +4273 +1428 +5189 +4971 +6104 +3301 +2558 +4522 +2924 +4828 + +62151 + +9293 +11550 +20431 + +24683 +10913 + +1939 +1487 +8441 +7821 +12802 + +19163 +2462 +17788 + +1390 +8446 +9351 +8697 +2520 +6065 +4574 +9621 + +3357 +3779 +1786 +7387 +4334 +5856 +1186 +2309 +7374 +3244 +6129 + +3096 +3130 +3634 +4227 +4453 +7400 +3889 +2310 +5974 +6357 +6352 +4975 + +4281 +15698 +6045 +16109 + +7835 +10597 +6334 +10543 +10680 +3210 +2302 + +2740 +2418 +3629 +1099 +8802 +6407 +4369 +3978 +8454 +3646 + +2051 +1323 +5425 +1715 +6173 +7524 +5259 +1006 +8445 diff --git a/2022/day2-test.txt b/2022/day2-test.txt new file mode 100644 index 0000000..db60e36 --- /dev/null +++ b/2022/day2-test.txt @@ -0,0 +1,3 @@ +A Y +B X +C Z diff --git a/2022/day2.rb b/2022/day2.rb new file mode 100644 index 0000000..bc4ade5 --- /dev/null +++ b/2022/day2.rb @@ -0,0 +1,116 @@ +TEST_S = <<-EOF +A Y +B X +C Z +EOF + +def score(picked_item, outcome) + fail "Wrong picked item '#{picked_item}'" unless picked_item + outcome_score = case outcome + when :win + 6 + when :draw + 3 + when :lose + 0 + end + picked_score = case picked_item + when /A|X/ + 1 + when /B|Y/ + 2 + when /C|Z/ + 3 + end + #puts "#{outcome_score} + #{picked_score}" + return outcome_score + picked_score +end + +def guessed_strategy(line) + outcome_map = { + 'A X' => :draw, + 'A Y' => :win, + 'A Z' => :lose, + 'B X' => :lose, + 'B Y' => :draw, + 'B Z' => :win, + 'C X' => :win, + 'C Y' => :lose, + 'C Z' => :draw + } + return outcome_map[line] +end + +def correct_strategy(item1, item2) + return :win if item2 == 'Z' + return :draw if item2 == 'Y' + return :lose if item2 == 'X' +end + +def what_to_choose(oponent_shape, outcome) + case outcome + when :draw + return oponent_shape + when :win + case oponent_shape + when 'A' + return 'B' + when 'B' + return 'C' + when 'C' + return 'A' + else + fail "Don't know this shape '#{oponent_shape}'" + end + when :lose + case oponent_shape + when 'A' + return 'C' + when 'B' + return 'A' + when 'C' + return 'B' + else + fail "Don't know this shape '#{oponent_shape}'" + end + else + fail "Don't know this outcome '#{outcome}'" + end +end + +def part1(filename) + score = 0 + File.open(filename) do |f| + scores = f.readlines.map do |line| + item1, item2 = line.chomp.split() + outcome = guessed_strategy(line.chomp) + score(item2, outcome) + end + + score = scores.sum + end + score +end + +def part2(filename) + score = 0 + File.open(filename) do |f| + scores = f.readlines.map do |line| + item1, item2 = line.chomp.split() + outcome = correct_strategy(item1, item2) + shape = what_to_choose(item1, outcome) + score(shape, outcome) + end + + score = scores.sum + end + score +end + +#puts part1('./day2-test.txt') +#puts part1('./day2.txt') + + +puts 'Part2' +puts part2('./day2-test.txt') +puts part2('./day2.txt') diff --git a/2022/day2.txt b/2022/day2.txt new file mode 100644 index 0000000..3914035 --- /dev/null +++ b/2022/day2.txt @@ -0,0 +1,2500 @@ +A Z +A Y +B X +B X +C X +B X +A X +A X +C X +A X +A X +A Y +B X +A Y +C X +C X +A X +A Y +C X +B X +A X +B X +A X +A X +B Y +B Y +A X +A X +A X +A X +A X +A Y +A X +B X +B Y +A Y +C Z +C X +A X +A Y +A X +A X +A Y +A X +A Y +A X +B X +C X +A X +B X +A X +C X +A Y +B X +B X +A X +A X +C Y +B X +A X +C X +B X +B X +A X +A X +B X +A Y +C X +A Y +A X +A X +A Y +B X +A X +A X +A X +B Y +A X +A X +A Y +A X +A X +B Y +B Y +B X +C X +B Y +A X +C X +C X +A Y +A X +A Z +B X +C X +A Y +B X +A X +A X +A X +A Y +C X +A X +A Z +A X +A Y +B Y +A X +C X +B X +A Y +B Z +B X +C Y +B X +B Z +A Y +B X +C X +C Y +A X +A Y +A X +B X +A Y +B Y +A X +C Y +A Y +B Y +A X +B Y +B X +B Y +A X +B Y +A X +C Z +A X +C X +A Y +A X +C X +A X +A X +A X +C X +B Z +A X +B Y +B X +A Y +A X +A X +B Y +B Y +A Y +B X +A X +C Y +A X +C X +A X +A X +A X +A X +A X +C Z +C X +A Z +C Z +A X +A Y +B X +C X +B X +B Y +C X +B X +A X +A X +A X +A Y +B X +B Y +A X +C X +A X +A X +A X +A X +C Y +A Z +C X +A X +A Y +B X +A Y +A X +A Y +A X +A X +A X +A X +A Y +A X +B X +A X +A X +C Y +C Y +A X +C X +A X +A X +C X +C X +B Z +B X +B X +A X +A Y +B Y +A X +A X +C X +C X +C X +B X +C X +B Y +A X +B Y +B X +B X +A X +B Y +A Y +C X +B X +C X +A Y +B X +C X +A X +C X +A X +B Y +A X +A X +B Z +C X +B X +C X +B X +A X +A X +A X +A X +A X +C X +C X +A X +A Z +A Y +A X +A X +A X +A X +C Y +C Y +B Z +A X +A X +B X +B X +A Y +A X +B Y +A X +B Y +A X +C Y +C X +A Y +B Y +C X +A X +A X +A X +A Y +A X +A X +A X +B Y +B X +C X +C Y +A Y +A Z +B X +C X +B X +C X +A X +B Z +B Y +A X +C X +A Y +B X +B X +A Y +A X +A X +A Y +A X +B X +A X +A X +C Y +C Y +A Y +A Y +B Y +B Y +B Y +B X +A X +A Y +B Y +B X +A Y +A X +A Y +C X +C X +B Y +A Y +B Y +A Y +A X +B Y +B X +C X +A X +A X +A X +B Y +B X +A X +B Y +A Y +A X +C X +A X +B Y +A X +A X +B Y +A Y +A X +C Y +B Z +A Y +C X +A Y +A X +B Y +A X +B Y +B Y +B X +B X +A X +A X +C X +B Y +B X +C X +B Y +A X +A X +A X +A X +B Y +C X +B X +A X +A X +A Y +C Y +A Y +B X +A X +B X +A X +A Y +B Y +A X +C X +C X +A Y +B X +C Y +A Y +B X +A X +A Y +C X +A X +A X +B Y +A Y +B X +B Y +B Y +A X +A X +A X +B Y +A Y +A X +B X +A Y +A Y +B X +C Y +A X +A Y +A X +B X +A X +B X +C Z +A X +A X +B Y +A X +A X +A X +C Z +C X +A Z +C Y +B X +A Y +B X +A X +A Y +A X +C X +A X +A X +C Y +A Z +C Y +B Y +B X +B X +A Y +C X +B X +A Z +A X +A Z +C X +A X +C Z +C X +B Z +C Y +B Y +A X +B Y +A X +A X +C X +B X +A X +C Z +B Y +B Y +A Y +B Y +A X +A X +B Y +A X +A X +C Y +C X +A X +C Y +C X +B X +B X +A X +B Y +A Y +A X +B Y +B Y +B X +B X +A X +B X +B X +B Y +B Y +C X +B X +B X +A X +A X +A X +A X +A Y +C Y +A X +A Y +C Z +A Y +C X +A X +C Y +A X +A X +A Y +A Z +A Y +A Y +A X +A Y +A Z +C X +C Z +B X +A X +A X +B X +A X +A X +A X +C X +A X +A Y +A X +A X +A Y +C Z +C X +A X +A X +A Z +A X +C X +A Y +C X +A Y +C X +C X +A X +A X +A Y +B Y +C X +C X +B X +B Z +B X +B X +A X +C X +A Y +C X +A Z +B X +B Y +A Y +A Y +A X +A Y +A X +A X +A Y +A X +A X +B Z +A X +A X +A X +B Y +B Y +C Z +A Y +A Y +B Y +A X +B X +C X +C Y +C X +B X +C X +A Y +A X +A X +B X +C X +B X +A Y +B X +B Z +A Y +A X +A Y +B X +B Z +A X +A X +C X +A X +A Y +A X +B X +A X +A X +A Z +B X +B Y +C Y +C X +A Y +A X +B Y +C X +A X +C Y +A X +A Y +A Y +A X +A X +C X +C X +A Y +A Y +C X +A X +B X +C X +B Y +C Y +C X +B X +B Y +C X +B X +B Y +A X +A X +B X +A Y +A X +B X +A X +C Y +A X +B X +A Y +C Y +A X +A Y +A Z +C Z +A X +A X +C X +A X +B X +A X +C X +C X +A Y +A X +C Y +A Y +A X +B Y +A X +A Y +A X +C Z +C Z +C X +A X +A X +A X +A X +C X +A X +C X +B X +B X +A X +A Y +B Y +B X +B X +A Y +A Y +A X +A X +B Y +B X +A X +C X +B X +C X +B Y +B Z +B Y +A X +A X +A X +A X +A X +B Y +A X +C X +B Z +A X +C Y +A X +B X +C Y +A X +A Y +B X +A X +B Y +B X +A Y +C Y +C X +A Y +A X +A X +A X +C X +B X +C X +A Y +A X +A Y +C Z +C X +A X +A Y +B X +B X +B X +B X +A X +B X +A Z +B Y +A X +A X +A X +C Z +A Y +A Y +C X +C X +C Y +B Y +A Y +A X +A X +C Y +A X +C X +A X +A X +C Y +A Y +A X +C X +A X +A Y +C X +A Y +A X +A X +A X +B X +B X +A X +B Y +C Y +C X +A Y +B X +B X +B Z +C X +B Y +A Y +C Z +B X +C X +A X +A Y +B Y +B X +C Z +B X +A X +C X +C X +A X +A X +A Y +B Y +B X +A Y +C Y +B Y +B Y +A X +A Y +A X +B X +A Y +A X +A Y +A X +B Z +B X +A X +A Y +A X +B Y +A Y +A X +A X +C X +A X +A X +A X +A X +B Y +B X +A X +A X +C Y +C X +A Y +A X +B X +A X +B X +B X +B Y +A X +B X +B Y +A X +B X +C X +A X +A X +C Z +A X +B X +A X +B X +B X +B Y +A X +B Y +C Y +A X +C X +A X +B X +B Y +A X +C X +B X +A X +C Y +C X +B X +A X +B X +A Z +C Y +A X +A X +B X +A Y +B X +A X +A Y +B X +A X +C Y +A X +C X +B X +A X +C Y +C X +A X +B Y +B X +A Y +B X +A X +B X +A Y +B X +A X +A X +C X +A X +A X +A X +A X +C X +C X +B X +B Y +B X +B Z +A X +B X +B Y +B X +B X +A X +A Z +A Z +A X +B Y +A X +B X +B Y +A X +B Y +B X +A X +C X +C Y +A X +A X +B X +B X +B Y +A X +C X +B Y +A X +A Z +A X +C Y +A Y +B X +C X +C X +A X +B X +C X +A Z +A X +A X +B Y +C X +A X +A Y +C Z +B X +A Y +A X +A Z +C Y +A X +C X +A X +C Y +B X +A X +A X +B Y +A X +B X +B X +B X +C X +C X +A X +C Z +A X +C Y +A X +C Y +A Y +B Y +B X +B Y +B X +C Y +B Y +B Y +B X +B Y +A Y +A Y +C Z +A X +A X +A X +A Z +B X +B Y +B X +B Y +A X +C X +B X +A X +C Y +B X +C X +C Y +B Y +A X +B Y +B X +C X +B X +C X +B X +A X +C X +B Z +B Z +C X +A Y +B X +A Y +A X +B X +C Y +C X +A Y +C Y +B Z +B Y +B Y +B Y +B Z +B Y +A X +A X +A Y +B Y +B Y +A X +A Z +C X +A X +A Y +C X +A Y +A X +B X +A X +A X +C X +A X +A X +C Y +B Y +A Y +A X +A X +B Y +A X +B X +A X +A X +B X +B X +A X +B Y +A X +A Y +B Y +A Y +A X +C X +A Y +A X +C X +A X +A X +B X +C Y +C Y +B X +B Z +A X +A Y +A X +A X +C Z +A X +B X +A Z +A X +A X +A X +A X +A X +A X +C X +B X +B X +C X +A X +A X +A X +A X +A X +A X +B X +A X +C X +A Y +A X +A X +A X +A X +B X +B Y +A Y +A X +A X +C X +C X +A X +A X +C X +A X +A X +A X +A X +A X +A X +C X +A X +A X +A X +A X +B X +A X +A X +B Y +C Y +A X +A Y +C Y +A X +B X +B X +A X +A X +A X +B X +A X +A X +A X +A Y +A X +B Y +A Y +A X +A Y +A X +C X +A X +C Y +B X +B X +A X +A X +A X +A X +A X +C Y +A Z +A X +B X +B X +A X +A X +C Z +A X +B Z +B Y +C Y +A X +A X +C X +B X +B X +B X +C X +A X +A Y +B Y +C X +A X +B Y +A X +C Z +B X +A Y +A X +A X +C Y +A X +A X +C X +A X +B X +B Y +B Y +B X +A X +A Y +C X +A X +A X +A X +B X +C X +B Y +A X +A X +A Y +A X +A X +B X +C X +C X +A Y +B X +A X +A X +A X +B Y +A X +B X +A X +A X +A X +A Y +A X +A Z +C X +B Y +B X +A X +B X +C X +A X +A X +B X +A X +A X +A X +A X +B X +A X +C X +A Y +B X +C X +A X +B X +A X +B Y +A X +C Y +A X +C Y +C X +B Y +A Y +A X +A X +B X +A X +C X +A X +A Z +B X +A X +A X +A Y +A X +A X +C X +B Y +C Z +A X +A Y +B X +B X +A X +B Y +C X +A X +B X +A Y +B X +A X +A Y +A X +A X +C Y +B X +A Y +C X +C X +A Y +A Y +A X +B Z +A Y +C X +C X +C Y +A Y +B X +B Z +A X +B Y +A X +A X +B X +A Y +C X +C Y +A X +B Y +A Y +A X +B Z +B Y +A X +B X +A X +A X +B Y +A Y +A X +A X +A X +A Y +A X +A X +C X +A X +A X +C X +A X +A X +C Z +B X +A Y +A X +B Y +B X +A X +A X +A X +C Y +C Y +B Y +A X +C X +C X +B X +A X +A X +A X +A Y +A X +A X +B Z +C X +A X +A X +A X +B Y +B X +C X +B X +A X +B X +A X +C X +A X +C X +A X +C X +B Y +B X +A X +A X +B Y +B X +B X +A X +B X +C Y +A X +A Y +A Y +A Y +A Z +B Y +A X +A X +A X +A X +A Z +A X +A X +A X +B Z +B Y +C Y +A X +A X +B X +C X +A Y +A X +B X +A X +A X +B X +B Y +A X +B X +C X +B X +A X +A X +A X +A X +B X +B X +C Y +B X +B X +A X +B X +A X +B Y +B X +A X +A X +A Y +B X +A X +B Y +A Y +B Y +B X +A Z +A X +B Y +A X +B X +A X +A X +A X +B Y +B X +A X +C Z +A Y +A Y +C X +B Z +B X +C Z +B X +B X +A X +A X +B Y +C X +A X +A Z +B X +A X +A X +B Y +A X +A X +A X +B Y +A X +C Y +A X +C Y +A X +C Y +B X +A Y +A X +B X +A X +B Y +A X +B X +B X +A Z +A X +C Y +B Y +A X +A X +C X +B Y +C Y +C X +A Y +B Y +A Y +A Y +B X +A X +A X +A X +A X +A Y +A X +A X +A X +B Y +A X +A Y +C X +A X +B X +A X +A X +A X +C Z +A X +A Y +A X +C Z +B Y +B X +A X +A Z +A X +A X +A Y +A X +A X +A X +B Y +A X +B X +A X +A X +A X +A X +B X +B Z +C X +C X +C X +B Y +A X +B Y +B X +A Y +B X +B X +A X +C Y +B X +A X +A X +A X +A X +A X +A X +B Y +C Y +B X +C Y +B Y +C X +A Y +C X +B X +C X +B X +A X +A X +B Y +A X +C X +A Y +C X +C X +B Y +A X +C X +C X +B Z +A X +C X +A Y +B Y +A X +A Y +A X +B X +A X +A X +B Y +A Z +A X +B Y +B X +A X +A Y +B X +B X +A X +A X +A Y +A X +C X +A X +B X +C X +C X +C Y +A X +B X +B Y +A X +C X +A X +B Y +A X +B X +B Z +A X +A X +A X +B X +C X +C X +B X +A Y +A X +A Y +A X +A X +A X +A X +C Y +B X +A X +A X +A X +B Y +A X +B X +B Y +A Z +A Y +A X +A Y +A X +A Y +B Z +A X +B Y +B Z +B X +A X +C X +C Y +A X +A X +A X +B X +A Y +C X +A X +B Y +A Y +B X +B X +A X +A Y +B X +A Y +C X +A X +C X +A X +C X +A X +A X +C X +A X +A X +A Y +B X +C X +B Y +A Y +A X +A X +A X +A Z +B Y +A X +A X +B Y +A Y +B Y +A X +B Y +B X +A X +A X +A X +B X +B Y +A X +C Z +B Z +A X +A X +A X +B X +B Y +A X +B Z +A X +A Y +A Y +A Y +C X +B Y +A X +A X +C Y +B X +A Y +A X +A X +B Y +C X +C X +C X +A X +A X +A X +B Z +A X +C X +A X +A X +B X +B X +A X +C Y +A X +B X +C X +B Y +A X +B Y +C X +A X +C X +B Y +A X +A Y +C X +C Z +A X +C X +A X +A X +C X +A Y +C X +B Y +A X +C Z +A X +B X +B Y +A Y +A X +A X +A X +A X +A Y +A Y +B X +C X +A Y +A X +C X +B X +B Y +C X +B X +A X +B X +A X +C Y +A X +A X +A X +A X +C X +A X +B X +A X +B X +A X +A Y +C X +C Y +C X +A Z +B X +A Z +A X +B Y +A Y +B X +A X +B Y +A Y +A X +B Y +A X +B X +A X +A X +A X +A X +B Y +A Y +A X +A X +B X +B Z +A Y +A Y +C Y +C Y +A X +C X +A X +B Y +B X +B Y +B X +C X +B X +C X +A X +B Y +A X +B X +A X +B X +C Y +B X +A X +A Y +A X +B Y +C X +C X +A X +B Z +A X +A X +B Y +A X +A X +B X +A Y +C X +A X +C Y +A Y +C X +A Y +A X +A X +A X +A Y +B X +B X +A Y +C X +B Y +A Y +B X +B X +B X +B X +A X +B X +B X +A X +C X +A X +C X +C X +A X +C X +B X +A Y +A Z +A X +A X +A X +A Y +A X +A X +C Z +A X +B X +C X +A X +B X +C X +C X +A X +B Y +A X +A X +A X +A Y +B Y +B Y +A X +B X +A X +C X +A X +B Y +C Y +C X +C X +B X +B X +C X +A Y +B X +A X +A X +A X +A X +A Y +B X +B X +C Y +C Y +B Y +B X +A X +C Y +A X +C Z +C X +A X +B Z +A X +A Z +C X +B Y +A X +A Y +A X +B X +A Y +C X +C Y +B X +B X +B Y +B Y +C X +B Y +B Y +B X +C X +C X +A X +A X +A Y +A X +A Y +B X +A X +B Y +B X +A X +A X +A Y +B X +B X +A X +B X +C Y +A Y +B Y +C Y +B Y +A X +B Y +B X +B Z +A Y +A Y +C Y +B X +A X +A X +B Y +A X +A X +B X +A X +A X +A X +B X +B X +B Y +A X +C X +A X +B X +A X +A X +A Y +B X +B X +B X +C X +B Y +C Z +A X +C X +A X +B X +A X +A Y +B Y +A Z +A X +C X +A Y +A X +A X +A X +A X +A Y +A X +C X +A X +C Y +B X +A X +A X +A X +A X +A X +C X +A X +B X +B Y +B Y +B X +C Z +C X +B X +C Y +A X +A X +A X +A X +A X +C X +A X +B X +C X +C X +A X +A X +B X +A X +A X +A X +B X +A X +C X +A X +A Y +A X +B Y +A X +B X +A Y +C X +B X +C Y +C Y +B X +A X +B X +C X +A X +C X +A X +C X +B X +B X +C X +C X +B X +B X +C Y +B X +A X +B X +B X +B Y +A Y +B X +A X +C Y +A Y +C Y +A X +B Y +A X +A X +A X +B Y +B X +A Y +A X +A X +A Y +B X +B Y +A Y +B X +C X +C Z +B X +A Y +A X +C X +A X +C X +B Z +C X +A Y +A X +C X +B Y +A Z +B Y +A X +A X +A Y +C X +A Z +A X +B Y +A X +B X +A Y +A Y +A X +A X +A X +C Y +B X +A X +B X +B Y +B Y +A X +A X +A Y +A X +C X +B X +C X +B X +B X +C Y +A Y +B X +A X +A X +A X +C X +C X +A X +B X +A X +A X +A Z +A X +C X +B X +A X +C Y +A Y +C Y +B Y +B Y +B Z +A X +C X +A X +B Y +B Y +A X +B Y +A X +B Y +B X +B X +C X +B Y +B X +A X +A Y +B X +A X +B Z +A Y +B X +B X +A Y +C Y +B X +B Y +A X +B X +A Y +A Y +B X +B Y +B X +A X +C X +A X +A X +A X +B Y +A Y +B X +C X +C Z +A X +B Y +A Y +A X +B X +A X +A Y +A X +A Y +A X +A X +A X +C X +A Y +C Y +A X +A X +C Z +B X +A Y +B X +B X +B X +B X +B X +A X +A X +B X +B Y +A X +C Y +C X +A X +A X +A X +A X +A X +A X +A X +A Y +B Y +A X +A X +A Z +C Y +C Y +B X +C Z +A X +A X +A X +B Z +B Y +A X +A X +A X +B X +A X +C X +C X +C X +B X +A X +A X +C Z +B Z +C Y +A X +A X +A X +C Z +A X +A X +C X +C X +A X +C Y +A X +A Y +A X +A X +A Z +C X +C X +A Y +B X +B X +A Y +A X +B X +C Y +A X +A Y +B Z +A X +C Y +A X +B Y +A X +A Y +A X +C Z +A X +B X +A X +B Y +A X +A X +A X +A X +A X +B Y +C X +A X +B X +A X +A Y +A Z +A X +A X +B Y +B X +C X +A X +A X +B X +B Y +B Y +A Y +B Z +B Y +A X +A X +A X +A X +B X +C Y +A X +A X +A X +A X +A X +A X +A X +A X +B Y +A X +B X +C X +C X +C X +C X +A X +B Y +A X +B X +B X +A X +A X +C Z +A X +B X +B X +C X +A X +B X +B X +B X +B X +B Y +A X +B X +A Y +A X +A Y +B Y +A X +C Y +B X +A X +A X +A X +A Z +A Y +A X +C X +C X +B X +A X +A X +B X +A X +A Y +C Z +A Y +B X +B Y +A X +C Y +B Z diff --git a/2022/day3.rb b/2022/day3.rb new file mode 100644 index 0000000..5b6b0f7 --- /dev/null +++ b/2022/day3.rb @@ -0,0 +1,63 @@ +require 'set' + +def split_in_half(s) + pivot = s.length/2 + return [s[0, pivot], s[pivot, s.length]] +end + +def shared_item(s) + rucksack1, rucksack2 = split_in_half(s) + tmp = (rucksack1.chars.to_set & rucksack2.chars.to_set) + puts tmp + return tmp.first +end + +def scores_hash + a = ('a'..'z').zip((1..26)) + ('A'..'Z').zip((27..52)) + a.to_h +end + +TEST_S = <<-EOC +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw +EOC + +def test_1(s) + s.lines.map do |line| + item = shared_item(line) + scores_hash[item] + end.sum +end + +def day1 + + puts test_1(TEST_S) + + File.open('./day3.txt') do |f| + retval = f.readlines.map do |line| + item = shared_item(line) + scores_hash[item] + end + puts retval.sum + end +end + +require './utils' + +def day2 + badges = [] + File.open('./day3.txt') do |f| + + f.readlines.each_n(3) do |a,b,c| + badge = a.chars.to_set & b.chars.to_set & c.chars.to_set + badges << scores_hash[badge.first] + end + end + puts badges.sum +end + +day2() diff --git a/2022/day3.txt b/2022/day3.txt new file mode 100644 index 0000000..fec6c82 --- /dev/null +++ b/2022/day3.txt @@ -0,0 +1,300 @@ +DsPhSBQQQhqmBDhPDsFwjwsLjlRjlttvjvvtRb +rNJMNNbrHrtjHLHjvwtg +fNbNzZdrZnMnMPnQShFPDmnqFm +QWVCFfQffgQCVZzVVpHsHJBqtpspJFRHqq +mwDbmnnGNlNcwNDDNRbnNDlJTpBJBtJGtPTLsBGqTqqsqp +MlSdnScRnnmmDjSdNSdCzvggWzrgzjvfvrgVzW +gsMljbrjlZlWcWMJrWwTwbmwQbmmLDQQLhwL +CdgpzdgpgnfThHfFRwhfRf +SptgpSpnCNpVSGNPvPGSddcMWjMrjqBsJcWqMcBWcVlZ +JcJLQQFWhQJPJpWcwjHvMQvnnlMvzBHd +tCtGZrmVRmVGTVTtCfRTCHHNNvdNzmdMvMlNzvwdvw +CTGGRftfSGtGTGDLbFchSgSWWWcM +QcMFQrvrQbvtczbVbjbMzZzRpqmDDmqqnNzCDCDC +SHHfPJssGLPSdHThLhHdRmqNmNssnNmNCNnpjmsn +LhLJfTdLJwfgPTdfGccrtjcMrccwvcrrFr +jFLLLqDGjbtqLCChpMMhMBvpwMTmffpZ +ZnJHRncHHgnrsrZffTdMdMBfmMvfvR +NWWPnZrVHrZPCDDQtzDCPLCq +jpFjvBZhDFHZdwcmslcslBLLNl +dVtTVVCzzfrrMPNLLcnVcPLRns +CrzWzTqdWtGCzJtbJCrMjjDFHZQjZSpvFGFgHhHp +JjJqMctnhtDZDQtf +TrFFlrrCCHPwHwlPHFPzDhsffQQDsVfWwVJQJB +HHHGdFlHldTpCCFFlLHdCRJccMnqvqMgnNjjMjjvLMLcSv +cMfFcMFcrqgJLFZdrTDdthPGsGmtGs +WwjNwnjjBQzVVQHwRDnmtPGhPPsPnnTGld +bWHBjWVzpbRzbmScqgZMFcqf +RJjPTBJhTNNjfPhRBdqtlgdbGldwtCPgdb +ZmrHHmzpvSvvpzvmvDVCGlWVwCWtGtWCddggqf +QQpzFrHHQnzHvfTcNshcLRNFJhcR +QrPQDrppBQmCmFQm +TzqzsLfmsfSTfqzVLftNdJJNJGCwwGdgCwSGNC +TVHTfzWsfftsZstnbvrbWbrbppPbrmmP +BQrfqrLtJnttqqtQBJDDtBnDzRgldhVVpJlgzpzhpzsgslhV +TTNcPZCvZjmPFZjvPHLlWdNLghVhzzlllpVd +jcFPbTcZTFcmcjMjjFjbLwbnDBtfqbtBwfwSBnrbGw +SZJNJtrNzjjNCzlBBmqmQDBBmDBBjB +PGPbGwhLsnvwnVbGPVMZsDsTBBgcZgBBDBfDBf +pnnhhvphGVpvRPnJlSFRNNJHZHSdSR +hbmDDmwnnVGbhmjNrrWwLNLsWBrw +dMrgvcQqdjlBLlfW +HzzPSrcHqFHQgzpPcMpQqrtmbbbRhHHVGnZDnVHhVbVZ +RwtvdPRvSlTQmHHBQBRL +FjVSjrsFVnFQnTHmnT +VCVVMrWWjVGgbcNVGCCVdlvfdqfvwbSzwqfwZzwv +fmPDwJPDFRmRgPdwwwDNwgwPzhSQzVSzVTQdzHZzHhzQMQzQ +sWtGCWtpcqqpNnQjjzhVTTVQczhj +tWBGntsCNlqrWswDRfFrbFrPDbPf +dmzmjcbQjjQztFNqsqBcMJqNPF +nlTWnClWwQDTVnTrsMsCRBPZRJRJqRJq +wTrhwpVVvgvlDpTvVWVDdLfzgbLtbzSQLSzzjzLz +RWZdHvRdBRGbbvCjJnbn +pqqpSwzpSSbCwPwjlwjl +gDzzqSVzqrThpDBtRtCZdQRQLrQQ +GRqTGqtmTVdGHHVVNNlhPlMqbNqNDbqW +LzQSdFnfznfwBcLcnFppBBDDMPMPhDbhlwbWPlbWMjrD +QznFnLZFvVvHRgsddG +BBHBfBHFdSltmWJvqtNtHq +TQDrrVMzVDnWnNZDJc +gWzprTCrCMQzGGjjhwFwdffjfl +LLLSSSzBBlBLsszncCBZSPSMMMpdWTdrmmnfVGVmMfmrmm +DghttvwhHRvjJthNJwhVtDHGpddMWdMmrMmfGdppjWTfpq +gbJRthQDDRvwtDhQhDFPcVcbPczLzPBScBBF +sZsZpTtLCsbspZtTwrCwrwtDmNNdJmmqSJfqmfNGNmHqGdqb +nQvjTcjQglFVlllMFMVFqWfNqnNHHHdfSfHqfSJq +hFvvgFcFVzphpTrrwZDp +qJqfhsBpfSpchpqcrqwCDvvCDQndmpwDtnRQ +jWHPZWWjZsCmCWRDmQ +PPzMGHlzMNsPLPlZsllgsNrhNVBqhFVBbBSqFFBFrV +RnRsFFdSzmgwvQsqwc +lbgHGMBHlWWWlfWGGBtGwqDpDwmcpMrrqrQDZrMZ +GGJLBVJbVGjGtHVfJtWGHBLLPdzdCghnRnRnSShgNnhnddhj +VgzLFjjwhhSwFhVZgRhRgHHCCvdZdrqqCTvBCrqvvr +ncnNbGMcPpvHFrssdBHM +cnctcNNbQGWFJctftgVmzShzzwwVwgmwfR +pFWmSSFGQlvTbwWTwH +jdBgNhRgMftNBhPbhHnZHlTTZcwZ +lfBNRjCtCfMjsBfCjgfNBRMppGpJqsJQGrrmmJDpGmDDFG +GznngnhzccVdgjbbVjVjVbVLwwQJmQMrLTZhJmZLQTJWmm +pDBSslPCFPCpvCqvpPBQTlQLrdlJWrLJLmrlrr +psSsBptpCBdjtcjNVcGG +sssppsmchwspFLtvHhQJMtFb +rRLDqRVLNSMvFSSV +WDrLnzrDqzRqRzzfLgRnzrnsssZZZsZBgCwwmBppwBspZc +MtPbwvzzVtzfsqGGVpdSjsLd +DnNRCDJBnHJDHDnrDTRcnNZpZSsSLqjpdqqqSMqdddTj +CFRFRFHgDRnRgMtfFvvwzwvwvzWv +PNpFPncvvchPpNjpFhvPhPLmBwMgDRRwRgMDhBmLzBDD +trHSrdTtslWrSWmfzgmMnfBzmn +JsrQsJHHlsVqTjjpbbNnQNNpGG +sVQCdsmGlnlCmnGmQQhGCJJNvNjpgqhqhvPgpgPqjpcpcW +DMSfSbHLHbSDBBzLNvccWRcddvPjNj +FSwHfTFdFsmJlnTTmV +FctwtTTCScvShFqtwScrcTSCJQGNndGHWJNQHWHZdgJrJgGN +jspLlfPlpfsDjBspfllWgdWHQggZHngHNGdsWJ +lRMpBlPmSFRTcvZv +TVZpRRVvFRVpTZRfFhFvvzGVwrwwwdDBMwQrgcDtMtDDwZrL +jsNsWqWjNQCNWbjPMcBLPgBtrdMwdrdL +SJSsmqlSNljbmlNjsbQVffzGRvzmmVhQpVGz +BFFMvcwMwwpFFfpbDMqPVgLVgmLDPR +JtSsSzJssQJJWjRZzgLnDgqLPZgzbg +dsdtWQWdRGjTRNQNQvGfHCCFpvfGwlCfCp +zzWGqWnqnwWCvCrHffHRpBpBBRSJzRFFDhSQFR +VPVsZMNTLsMvPsmBJhllFpFBTJFQpl +sZtsNsZtdZgjbwggjnbvqr +QpTvrphmDvvddfcJJHTTncMlMG +bRZZPRwjgzzlSSjGlnlSJS +BZzBzssWgwzzwNBsgsPBgszmQptqrrGdvdWmqdhhFQDpQF +FfMtzSqlDlzfMhPFhPtffNRsCgSgCCGspRpRGSsgsg +WTcWLTTVnWmrVdLrcHmNGNCZwCCggpgDRwpCnR +JcdWJHTJWdJdjJccrLvlFltFQQvPFDMjqqlP +NfjFNNZPDQVJVWpCbQpJ +lcmdzlmzBtRSTlTTcncsVSbhpLWpWgsWghgsVS +mBTRRmGccRtBwDbrGPbrMMrF +VVQqlsGrVsMWBNFNMQHF +TfzZfDgjgnLGjjztTncCFwwNmdvNcwwNBvHNFwvd +jzjDgZzjntGJZzCnhrrSlPVsJslpslPq +dVhpjGPdjHhqHgtHJJ +sFzrzllQswDwFbcmBlgvZTCgvqTCfgHQJtqT +nDbBsFzzrrtFrlwzPdSVMWMVVMSnGNLd +wqJCjqChmwMLmMmprNgG +DNTtdsdWcHdNspGQggnrgLnQpc +SZvFftdddDsDTtttTDJNCCwJJZzbbCjwwVPj +VstwZCwslBZQDBjfDDBDfS +rvHnmMRrTzmMrmhRppbhDfpjfbjbctjD +rPFLRLmFvvLvHvTCtqsVVwldGZGPGV +SNZDJGfvwgMgfgmLmLcmBqgWgQWr +hPnPTnVGsPRqLWpTmQqQ +tsbnFhhjhSdGJNCjSf +QSbGgBjfTCMWFNPFFtDghPrP +JqHqJVzZzwJJHLlqQptDhPrctpPDtnLF +zZmwJwdwdvHddVJvZqdzHlfGBbsCmMTsWCBCjsGGBbMQ +gVmLtpWrFTFBLtpcFNbvhNNnTnvnQRlQQv +GHjjqsMqwZZJdqGfZjfZGjQDDhvQNzznzRzRwDNbvgzv +sZGPgssMqHZpPptmCcpCrP +CZCNNLmwzwCGMZQMQsFNWplvpsJBWpFHBp +SPbSbDRRbnDqggnbVbVrbRWHJFTlBBcTvWvsPvFpHTcl +tVgSvqVbnqDdgQzMQMGMmzthCw +mpbPQlblbwSlfSPGBpBGPpBFgMMtLFSHMLVVDVdtHLNctF +WnhZsrJhTnWrgZdZgHNLcLtt +hjCsCWRhjzhTjnWnQBbmPQQPLBGfqjwQ +BFrzdtmRmpFtFwwmjjzNQllPshqHvjNh +fWCLLCMJnCDbgfMJhPsPHvqvqVsssQ +WbLnCZnvprpmZrGd +gjMzTGBjWFBCCSSrBC +bddJJndbdJfwPPthrrSSSsFSSg +NJHbZbbvvWGgjWgT +dpfphMggHdQcwftMMgdtzWGfGWnDBnmvnVJVvfmn +CqPFTZPSNCTsZZZRLzGmcGVzDLGvLWBWJm +TCrTNSScPlplpHrQrQ +lqrCvhWFvMGWgfHPgLfjfdgG +zjmbjSnzRzVVRmzBRtwjVQnNLfdPgfLdfTtNLPHTNNpppf +mbSZRzQRBnnzbQJbmjmSbmVhlslZMrclWFrrqWCWsFhchF +mpfNshshflNthWfJCBBdmnQbQBZQdn +VFVRccgGTqTrHTbWBFjJBCFFJCCQ +PvTDHqHqPPGVqqhwfNlWlDhMltlh +HmLLgWVjJwhwWLgjjhmVHLLLlSzBlBlSvBvBFGvtdStJSSvq +TRRrPMsfQTbRRCZRnTMRZZTCcvSccqBqBBlzdFvBqFsGBcts +bRNPbRCZMCrQNfPLdhVpLDVgDhNHWV +sPJFDsSsVLgHjLHPbj +vCnRQhhRQdVQZlZdbHNMlqNNjgjbpbBL +ChhCCCWTWnnmvmGtztStzScwrcVcFW +NRBTNDBglSSgDwCClQQSFFHdLLsFbPFFLt +McpmWccMWHZPcLstbt +MWnWphVMvvzJzpWJWmVphjrDDBBTRwRDDDRRCnPDnqgg +hsnnhhLljLPTmZwvdZdZjmmz +RQNNDpNMSZwvsmqstN +QFMFRDVDsHSpRpHSMRHfGGGTLhCChBGhBhBFBJ +TTbltCvClzvzCZtwtwLTtQQQgjNgmjgQRRRQSjQLjR +HPpnZHcJsdnnfsdVHHSSqghhmqBSSqSmBfNj +VMJJdnMPrMGVrzvCZwZWCzCt +CcQnBBCfBvRzDlsS +PdbPPCbhGGpDSDlDDhvDJl +HmHWPWdbHnCwCHCr +JHlmJcMWHQcPmlmJMmMZPfwTTRDfgdDBfRtgQgdfBw +zVvFrqGjzWGVrqvjvNFpspvVBgNNddtTgghhRTwgdDwwwBfT +bVFrrvsvjWGVsCsqpSHZmMPJlJnCcLcPZZ +QrrQZFZnRtnFRTrnlFTtRZwpGGwzGszhjzbsGzzhmjjhhmhf +SgvpDSJSgPBSDPDNgpggmsMhMmffsMmzfJmzHHMj +WNVcCPgSSDCddSdWCpNBclCQQFRQQlnTLFLRZQnLtt +tgvqWqzvntdlzNzzHrbPrMhHMhhrVrjPmC +FGTGGRGTffcJRpQcJJwmjhPLhjnCQPrLPVQrMr +SppRSDRwFnJJwwswTDdtzBzqWWzZDldNgtvl +sjzPjLphMSrlppSp +fbGqgwTqgVTFFcgGTTGcQvfHQZRlSrSlSmMNMBRNNNrZmm +MVcFGTFtqjsJLjjtCd +jVJqTRHjjtDjZnVJVVjnNdwfCFPZmPgCCgCZGCFFrrFg +LSLBMBWsbBBCgfdrFd +ShbbzdzQRNNNVhDN +JwbSRqmSwRwcpmbSSVfhNBTVGGRnNNzRNh +ZPfQPjZZrffQZszhzTnVGBvntsNz +rLjggjQgQgFdPQjLFQZgwLMbWccLSwWHqHfSqpwc +cBhzNpztzHNrpHSHQrhZjZqdJRRgPqjhjqqP +bQwsMTswwVjdZMVRJM +vGWCTDCTQvvtlvQQ +mHVmTTsmzRmRHffmmfMGBzSPMhSWWdDWDSGB +VNcnNbtqqJbcbvgvWhShDBDPhjgPhSjB +FrrbCnqJcbCJcFFbnqJlppCTfQmfmZQTLVswRLZp +rWWppSStfRBLfHPdHHDzlldZ +QrTnQmmVCqvrvJvzJZPHvzHsDs +qgMMmrTTCcnQQmCNQNQmgTpwRWRtwtpcBWwjSRSSpttW +SzWQwwqVbQzwGSfVwffVwbqhFGFFMgGLGMlNMcnNgcvlMg +ddZHHsrCdBssDsHmChFLNNnMvmNnnnFncL +rpJJdHZJdZHQSRJbSfVhww +jLtFhNwNNvHnjFVvQLQLHhfbGDMPfffpllpttZMPPZZb +VmrqszVmgCWWggbPGclPlZbcZCbf +JdrTmVTVsqsRJHvQnnhwhBLH +vpdBvsvdVvSPhvQFCgrRmhjqqRgWcWWgmf +tJDGbZHbjRHNrrBj +DnMnzGJJwtzVSzzBzTBSTF +hZMDbQhMhlMDJrDrPMJRRqGJSvFvSwFSVdvGvwSFqq +HjjzcRTnpGVSGGFWHH +pssmjctLzpsRRnhlQbPfPrgDbZls +FJMhPhnTMGmBFdnmlrfqfCcwlwCwCv +pjHLsLbjjRHsHsjDjVsgDRjzCnfCfzqrqvwgflcvcvvgqz +njtpHZnLLQGhTtTWSSSh +NMddMTDrrjNnrnMWMrlnPwNwftBtGvptGjBHgBgpfCCSfgvf +mqRqLFZRVFbtgBSCbGWWHp +LZZRmQhVLLFzZdTQPndPNTTnQW +CprQrcpqhHhpppchpphdcdpLMRMGsVGGsMsLbZbtbfMRmtbG +DzlgTjwPTlSSSCDSlggNmMRtbsstsMfbwtVssMmt +TNCNSBNJJTNPJjCTBDzjlJrvvcQrrhphWBqHhHdqrnrr +ScbcbglMPRSmvclTlzMTdhVHhhjfdsdhrVDzfjrD +LJGtpQwpQBBCttJLGqtqGHhPfDdHwjjhrVrhdrdshr +WCpZQCGqtqQWtQWplZPcvMmgmvPccbvT +tGWqthqGVdzBWwdd +BZvZHFFHZrHZvZNRRHHZNHrMMTzRMTdTzbgDVMVssTDTwg +JnNmrHHNrCGBPPnGGc +wvFvZBmppBdSLcvshcLrgl +bTQqJJHJzJjDQjQtzRVJztDHslgNNVLcgSrsSsWrSslWgrgL +TqHHjQnbHTbbmZBBcFMpmBwn +ZFCqSlCPdCRTLWWTQQLLQS +GjggHcvsggHVTVBLnlcpBQ +hvGhlrtjmjrHHhjsMPFNPdtqMPqqRfCf +cgRwVfVzrgqqwZctTztFMFMTCdPmmF +bWJsSJHpTDRDTWMC +sHHNbshnlJhJjBsjsbnBHbZcqrZZQwqvvZcrwwvRcZnr +ttgVBtMbttngmHJVpzlzZlppzw +cPcsRPmPPQfGcccRQSSZzzvzlflzZHvJppzJzT +sQPSCPPWccWWWqsQqRCQFNRMmnbnjjNbgDdBjhBrdbdDbd +gSsZDSgdQZgWSgddwLDLLfCDBqvlhBlClqtqjhvBhB +RMcsVMcsbVsrPrmJcPHHVvfjjCnvvfCqhlqvqqqq +NFMRRpHPgzszGppG +WmmZZNJCgCBZCzPvmBCmjWjjqFtFqjFjbVwqwjtt +ppDMpdMfSfSSNtlwqbqwwq +dTGDhdnfLMLhfDDpQvZNZgmrmrQJgrLQ +jrqRqfNNhrVvcTVdpTscpd +tGWBlLggWGddTspZZd +JJzWtQgQsDbBgDWsgbFrPrRJNMJMPqMNfHjH +GdvVbbWsWdvWGDvWZcbFBTBZCzCjwzrhPBJjzF +nQPfSHnglfpnMSngnMgJTprJCCwwrwCwpTpCFj +SQQHSttRqggmlVsNcvWdRvbWPN +WLNLCWLsSJgHFrSHrM +gDbzRTcmbzPPgPPdtBctfHfrMMQfGFJrhQnMfGJR +dmmzzqZdDqqTLLwjgZgNljws +TCqsDHssmDsDGVGlVcMccGDV +FLntWWnnFzFgzzbtbznLBtlfjGZmcfFGVNFGlVZcMNlN +PpbLLmpgbRzqpCHwChQqwh +lVBPVgflgBVVrVTTwgwBPmgflDQjnnGvqjGDDFjGlGnvqHHJ +ScCLzdCZdbLSbFdFqvDDdGMQGQ +bchNCLRWSbzCbNRzbWRmsrhQwVVwBhmQpPwpgV +GmfHCCPqWqHLWLCfRJpbrrbQphwZbZ +STVDQzNnzMzNdstMDzzNtZwFhrlwVJJrJlFFJRFwFR +DzSvzstnszMnjQcqggjPqQBcqq +BzNwLTqwTjrBrljWpBlrQpBpsCGGCtpssCMttDtHsttMDCHp +mnrJVmRhhvJVcHtsGHMCnZCPZM +bvSmVbRhbgmmSJflzNLrzqzfWfqBWr +qsZLqqFNhfrGnJFv +DVjVmWlcjVjdDTDlbbTDTzmrCnMmJGnHnmCHfJGfvnfM +lVRdDglTlTgVlVjbWWVzVjvNZqSBsLZNtqRsLBqLqQtL +ffRRfLVHZHfJHVJcMrMZZwwTzGBBzBTBjGTwrwdSCj +qmWbWQbqnbvWhbQPGnGNnpvwSzltpBldtSdzllptCSjTTt +vWsbnbWnNvQQQQvsRRLfJRRVGfDcfV +PpqrvswPvvvPsNqmDLDttCCcHHZVrCtW +hgSddBhghQMdbhbwhgSdQgCCctZcDtLntLttCVLtSLCc +dGzdQMFzQMdgGGlGJMzBgBwRqNNfmmTsvfRfJTpwjmpP +pcphpdrWDmTgHWMtRWqHRVVH +SbGcGGQnvNQGvsjBtVHBLjvqVPVB +lzbQCzbZllSzQslpCJpJJDggcggfDT +ffrTlhrVrfCsDVTsWzGBBZcBRBqRBWtGtZcq +QNFmFHrHNSSmSLJdJrNGZLbGjbcBjBGjqcbgjc +ddQvPnHddnQJHSHSFPdnFfDDTfDMMCrwMlPTwDCsrC +NBnrNHQHBscvhfBM +bbGtgWWWqZFmnZGZbmVCdMzvvShfzfGcdcfMSS +WqbjnmbnjWgmFFgtWVbWZwNTNLjNprNwQLDwrTrHQr +lwwlcjlzQRBcBccbdLCVnNVWJJzfLndd +pZDMtZpSDMZpMZMsPtHVNJVfRCRddVndnJLSJd +mDTZvTqtDDHttRPcqhQlwgGlghbqBh +DTspTqssqTbdmCMwVmnmlfCD +PLPWjjrSjvPzqZvjvRqjLtPwnnHCmWVcncMnnwmncHcHll +RFztFjjqjQFQTbdTbQ +hTFSVSdhMMVMFjjgbthcbzczcg +DvwCJVJWWJDRnfmbDmccfmmgfb +QrJvPGWWnpVMqdZsZpqM +gRLcHbgnfpgpJjlqqp +SFwrTHFBqlZtBPZq +HTzDwmSvCvCmsmmvTSwvFwcfRRNRLcQRWNssNNbRWLWL +PpMgDMDnsWSnjBQnrjbn +LFcVVGChCFdhdVFZVpVCdVbvQbRrbvBBbBjQSJZrrJrR +FNwGNCCFHcVTHcFdHHHTDzMzfsgzwpPWMmPflmtt diff --git a/2022/day4-test.txt b/2022/day4-test.txt new file mode 100644 index 0000000..9f9e9cf --- /dev/null +++ b/2022/day4-test.txt @@ -0,0 +1,6 @@ +2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8 diff --git a/2022/day4.rb b/2022/day4.rb new file mode 100644 index 0000000..a700986 --- /dev/null +++ b/2022/day4.rb @@ -0,0 +1,36 @@ +def range(s) + n1, n2 = s.split('-') + return n1.to_i .. n2.to_i +end + +def read_pairs(filename) + retval = [] + File.open(filename) do |file| + file.readlines.each do |line| + elf1, elf2 = line.split(',') + retval << [range(elf1), range(elf2)] + end + end + return retval +end + +def range_included(r1, r2) + return (r2.include?(r1.first) && r2.include?(r1.last)) || (r1.include?(r2.first) && r1.include?(r2.last)) +end + +def range_overlaps(r1, r2) + return (r2.include?(r1.first) || r2.include?(r1.last)) || (r1.include?(r2.first) || r1.include?(r2.last)) +end + +def part1(filename) + read_pairs(filename).map { |pairs| + range_included(pairs[0], pairs[1]) + }.select { |x| x }.count +end + +def part2(filename) + read_pairs(filename).map { |pairs| + range_overlaps(pairs[0], pairs[1]) + }.select { |x| x }.count + +end diff --git a/2022/day4.txt b/2022/day4.txt new file mode 100644 index 0000000..94b2176 --- /dev/null +++ b/2022/day4.txt @@ -0,0 +1,1000 @@ +34-82,33-81 +59-59,69-73 +6-96,98-99 +1-94,3-96 +13-92,20-64 +37-75,76-93 +5-98,6-6 +40-65,40-64 +13-63,84-91 +31-75,31-35 +83-96,86-96 +65-85,64-85 +85-85,36-86 +71-73,72-81 +3-91,91-92 +45-72,45-73 +42-70,42-58 +45-45,16-45 +2-59,49-58 +46-59,60-60 +21-21,21-77 +65-72,69-72 +3-77,3-76 +2-91,23-89 +86-92,7-86 +25-86,24-86 +11-62,1-62 +23-30,23-23 +31-94,27-29 +58-90,59-89 +45-70,19-46 +56-56,57-97 +65-84,67-83 +47-77,44-48 +1-68,29-69 +18-18,19-68 +99-99,72-93 +3-60,1-60 +31-31,32-74 +2-2,7-62 +25-83,10-24 +7-96,16-47 +12-71,13-70 +56-57,20-56 +18-24,25-25 +58-89,58-90 +63-68,18-63 +26-70,69-71 +95-98,8-96 +21-94,22-94 +22-91,21-91 +16-22,20-23 +94-95,3-94 +2-20,19-80 +26-94,6-17 +30-82,29-82 +22-73,22-71 +51-62,50-62 +10-65,9-64 +35-36,1-35 +28-90,39-90 +21-22,20-21 +2-35,3-34 +10-79,79-79 +37-80,80-81 +7-93,99-99 +4-7,32-61 +2-37,1-38 +4-91,3-87 +32-92,31-91 +64-64,64-83 +7-87,3-8 +60-91,55-59 +35-41,35-46 +46-87,70-87 +3-14,4-88 +44-60,19-93 +10-31,10-74 +25-87,24-26 +80-97,90-91 +3-15,6-23 +18-83,49-77 +7-45,46-90 +73-91,11-79 +2-4,3-99 +66-98,7-96 +62-63,61-62 +30-97,97-98 +3-79,78-80 +15-32,30-72 +66-85,84-85 +35-76,45-76 +14-65,14-65 +81-82,42-81 +3-90,4-90 +3-4,5-99 +63-99,1-99 +65-66,9-65 +60-84,85-85 +17-17,6-18 +73-75,7-74 +57-98,56-99 +59-59,10-58 +10-18,20-52 +36-78,35-78 +1-99,99-99 +21-88,51-55 +42-97,42-96 +7-79,8-78 +32-71,72-96 +19-35,43-73 +2-12,4-11 +91-91,39-90 +49-86,50-89 +13-19,21-84 +60-81,67-81 +17-26,26-75 +59-95,60-95 +30-70,21-70 +7-60,8-61 +10-95,95-97 +20-22,21-84 +11-98,6-9 +2-24,3-26 +41-50,62-99 +13-25,26-99 +35-43,27-36 +99-99,42-81 +86-86,8-85 +13-46,13-84 +76-88,77-87 +19-77,4-77 +20-54,21-44 +19-91,90-91 +8-67,7-67 +8-74,29-73 +14-16,15-25 +64-70,70-71 +16-99,16-16 +6-94,5-95 +87-98,71-98 +1-60,7-60 +1-76,1-96 +31-92,24-30 +12-81,9-11 +4-85,2-78 +11-84,8-9 +4-4,8-90 +6-11,12-82 +2-96,2-70 +12-91,12-97 +79-89,2-89 +75-75,67-74 +5-81,5-5 +68-74,74-84 +81-82,82-95 +5-78,6-78 +53-87,38-88 +83-94,75-88 +53-79,31-48 +55-57,56-88 +3-69,69-70 +5-54,2-4 +48-85,28-47 +23-78,22-63 +13-20,29-96 +24-45,86-88 +43-64,44-71 +7-84,49-84 +16-89,15-88 +6-73,13-73 +71-71,53-70 +4-12,11-41 +36-53,37-52 +46-91,45-91 +5-58,4-6 +94-94,95-97 +9-55,55-94 +6-49,5-7 +4-99,3-5 +92-93,91-93 +61-83,62-84 +22-82,23-81 +8-94,7-94 +7-9,12-63 +1-51,73-73 +7-66,2-6 +44-45,7-44 +8-94,8-99 +90-97,96-97 +6-72,72-91 +55-60,59-62 +2-40,1-3 +51-75,36-75 +6-8,7-86 +1-1,2-97 +25-88,89-89 +19-94,18-20 +3-3,4-98 +32-68,52-67 +10-54,7-54 +17-69,18-70 +17-75,8-54 +53-65,16-52 +50-88,49-49 +8-63,3-7 +35-38,36-84 +50-54,14-54 +17-17,18-62 +20-26,27-83 +3-3,4-84 +9-25,41-56 +16-72,17-71 +22-89,5-89 +12-30,12-30 +78-94,55-78 +40-83,85-88 +49-84,48-50 +96-98,1-96 +78-78,76-77 +81-82,22-34 +93-94,5-92 +39-70,38-40 +80-84,85-85 +3-73,4-91 +13-49,13-89 +2-94,2-25 +18-72,71-75 +27-69,25-94 +20-78,16-79 +25-29,25-50 +75-95,93-95 +35-65,34-65 +58-91,57-90 +95-95,7-95 +31-31,31-81 +8-88,8-89 +90-90,4-90 +13-66,37-66 +17-17,18-19 +74-74,39-73 +28-30,29-31 +22-95,21-94 +12-16,11-15 +76-89,74-74 +28-91,29-92 +23-23,23-96 +2-99,98-99 +84-90,7-83 +17-19,20-20 +14-99,13-93 +39-81,40-81 +6-55,5-7 +63-63,11-62 +93-93,3-92 +69-79,4-69 +6-99,4-7 +65-87,60-88 +14-98,13-99 +10-58,11-64 +37-95,37-91 +24-95,99-99 +51-94,8-94 +3-61,1-1 +2-94,23-88 +18-86,17-86 +47-96,29-48 +11-79,24-79 +26-87,25-25 +10-70,9-70 +21-72,71-85 +29-69,69-90 +17-64,17-63 +34-83,8-33 +4-52,53-75 +89-99,2-90 +2-89,2-88 +11-34,9-87 +19-95,20-95 +32-67,32-67 +40-99,96-99 +29-87,87-95 +11-61,5-60 +3-96,1-80 +12-87,57-88 +34-93,93-98 +36-76,35-37 +2-70,2-71 +1-5,8-58 +27-91,27-27 +1-60,1-61 +26-80,27-81 +5-91,92-94 +82-82,63-81 +35-99,36-99 +8-8,8-52 +93-96,5-94 +11-18,17-94 +17-81,17-85 +42-66,43-66 +23-83,22-24 +47-60,46-48 +81-82,5-81 +58-89,58-90 +10-48,11-83 +12-93,11-93 +98-99,27-94 +21-61,18-19 +95-95,52-95 +18-99,17-95 +19-75,15-75 +43-44,6-44 +63-86,62-64 +85-90,30-62 +2-78,77-78 +13-72,87-96 +62-86,49-61 +5-33,15-34 +26-71,59-83 +2-85,76-87 +8-14,15-72 +19-77,17-76 +4-68,2-2 +23-92,22-91 +15-72,4-72 +8-70,8-46 +8-74,8-83 +9-75,29-58 +14-97,13-96 +9-61,9-61 +9-10,13-44 +16-48,40-49 +73-78,79-79 +32-54,54-54 +13-99,13-98 +9-91,8-91 +8-42,12-42 +10-87,9-86 +5-5,6-93 +8-75,9-76 +20-94,17-99 +16-17,17-58 +70-88,89-89 +68-68,64-71 +23-94,74-94 +14-58,14-57 +69-70,3-70 +24-82,22-82 +19-97,12-18 +4-5,7-72 +23-79,79-80 +61-83,61-88 +37-49,34-36 +86-98,86-99 +43-84,44-85 +96-96,2-89 +85-86,4-85 +41-43,24-43 +18-72,18-65 +7-7,6-93 +20-94,93-99 +24-92,23-93 +58-82,83-83 +65-71,69-71 +63-95,96-96 +42-51,42-52 +22-81,80-90 +2-96,1-96 +43-65,44-66 +77-77,50-76 +16-91,15-92 +41-83,82-95 +37-94,21-34 +37-98,97-98 +1-1,1-74 +17-22,18-23 +24-56,57-57 +7-15,1-6 +42-57,37-57 +8-96,8-96 +33-97,63-88 +6-7,5-84 +36-97,83-96 +35-37,36-79 +4-98,4-99 +77-77,34-76 +30-54,31-62 +43-64,34-64 +51-90,53-97 +58-80,38-64 +71-86,72-86 +18-88,28-87 +3-80,2-79 +23-66,32-66 +64-81,62-64 +3-89,2-4 +94-96,11-81 +15-91,15-92 +15-78,16-77 +1-99,2-98 +4-98,1-5 +31-59,11-30 +21-59,20-58 +32-71,84-88 +96-96,7-83 +6-66,67-67 +20-43,21-43 +16-95,17-96 +34-41,35-41 +25-84,84-95 +29-31,30-91 +96-97,14-96 +82-86,55-83 +55-55,29-54 +34-90,13-35 +58-81,57-81 +38-90,19-38 +26-67,67-99 +26-86,25-31 +16-99,10-15 +2-47,1-46 +6-74,73-81 +26-93,3-93 +20-44,21-45 +2-69,2-70 +5-95,5-95 +75-86,11-74 +33-83,84-84 +62-69,63-70 +41-57,58-58 +9-14,10-14 +77-77,1-77 +46-65,66-89 +69-75,69-69 +49-92,49-98 +27-50,22-22 +15-78,16-95 +12-83,12-92 +4-38,2-38 +26-87,25-86 +86-86,20-86 +97-98,3-97 +16-16,16-84 +14-21,28-79 +57-92,91-92 +3-5,4-79 +80-84,42-94 +45-96,95-96 +28-28,28-80 +58-76,74-84 +29-69,69-70 +1-67,66-67 +34-66,34-67 +99-99,3-86 +50-79,26-49 +92-97,91-91 +74-75,61-74 +2-50,1-76 +55-80,43-53 +8-89,1-1 +18-57,40-57 +72-94,93-97 +21-56,22-81 +22-24,32-83 +6-77,7-76 +6-60,7-60 +94-95,37-94 +11-90,6-90 +5-81,5-80 +1-4,5-78 +2-51,52-52 +13-96,13-96 +9-26,28-91 +2-90,63-89 +71-97,6-96 +50-87,51-88 +82-93,82-92 +11-22,2-32 +36-88,99-99 +25-99,1-94 +8-98,99-99 +11-42,10-12 +19-90,91-91 +51-63,52-85 +80-90,89-90 +30-55,31-55 +14-85,15-85 +31-92,30-30 +2-96,1-97 +71-85,27-55 +65-67,66-67 +32-96,31-95 +24-24,25-88 +7-84,6-6 +56-74,55-57 +76-80,74-75 +17-17,17-92 +36-46,45-47 +60-60,2-59 +17-53,53-87 +30-96,30-92 +10-46,5-7 +5-99,2-3 +1-49,1-48 +85-88,10-88 +33-94,94-97 +94-95,94-95 +19-52,36-51 +41-96,40-97 +2-78,77-78 +80-80,21-80 +7-17,17-17 +4-47,30-47 +16-16,8-15 +33-95,33-94 +39-89,90-96 +61-83,30-83 +25-76,68-75 +8-50,8-50 +17-86,12-18 +9-48,48-56 +28-99,28-99 +44-96,97-97 +4-74,4-73 +48-90,47-89 +35-46,36-47 +8-57,9-57 +45-70,98-99 +58-66,42-57 +8-18,3-3 +10-97,9-98 +3-93,2-89 +14-19,21-90 +85-85,27-86 +27-96,7-26 +53-53,54-96 +30-91,29-92 +91-91,98-98 +96-96,29-95 +3-82,1-2 +31-32,1-32 +74-95,24-95 +9-10,9-71 +21-23,22-99 +98-99,1-99 +50-92,39-50 +19-89,19-90 +84-88,26-88 +83-84,5-84 +13-30,30-31 +60-75,61-77 +23-60,61-93 +12-85,4-7 +9-95,10-95 +39-71,39-71 +29-55,28-54 +3-92,88-92 +17-80,10-73 +2-60,3-61 +39-88,78-88 +1-39,6-44 +5-26,6-25 +88-96,8-96 +1-96,1-1 +14-60,60-61 +7-76,2-5 +44-94,44-94 +75-75,75-96 +5-67,67-68 +19-35,6-34 +3-95,3-3 +27-62,27-62 +34-99,3-99 +46-89,47-88 +46-71,28-36 +15-56,14-96 +4-92,3-5 +67-68,25-68 +6-86,3-4 +17-81,18-85 +6-6,6-53 +2-2,1-89 +51-52,44-51 +59-59,28-58 +41-53,52-81 +27-91,27-27 +70-78,71-78 +16-94,17-23 +6-51,5-51 +55-68,55-69 +97-99,7-94 +5-90,89-90 +16-46,15-46 +12-99,9-98 +17-94,11-67 +3-98,99-99 +80-88,36-80 +9-87,8-86 +51-62,50-63 +82-82,82-84 +4-97,96-96 +46-94,99-99 +51-68,51-67 +59-80,53-80 +40-57,39-56 +22-84,27-85 +84-84,27-85 +46-62,45-61 +16-58,16-58 +54-61,47-98 +61-65,63-63 +26-38,27-39 +8-85,9-86 +3-91,2-91 +8-70,8-8 +73-85,86-86 +15-47,14-46 +1-89,67-92 +8-78,53-79 +15-87,15-86 +60-70,71-99 +66-71,20-75 +6-93,5-74 +26-81,26-82 +27-64,27-63 +9-42,10-25 +11-91,91-91 +39-78,38-78 +25-95,24-96 +4-56,8-56 +41-47,41-66 +79-81,25-79 +5-64,30-34 +20-98,24-66 +36-67,66-94 +31-40,11-95 +22-88,88-89 +2-78,79-79 +77-78,45-78 +5-81,5-80 +7-72,8-71 +41-41,41-53 +14-40,15-40 +4-61,6-61 +25-51,24-50 +10-87,11-92 +63-63,63-64 +19-21,12-22 +28-96,95-99 +91-92,10-92 +4-70,3-40 +60-82,59-81 +18-35,18-36 +41-76,77-77 +52-95,51-95 +34-44,30-44 +73-82,80-82 +25-81,3-26 +61-68,62-68 +50-98,49-98 +12-47,25-98 +29-53,29-88 +32-43,44-68 +10-90,9-90 +58-78,59-78 +17-19,18-62 +59-89,66-90 +94-95,23-94 +94-94,31-93 +7-89,7-76 +62-74,43-75 +16-95,18-89 +43-71,32-37 +31-57,19-57 +12-25,21-33 +71-72,72-94 +67-67,22-66 +16-86,21-86 +13-69,13-69 +4-96,97-97 +84-84,60-84 +18-93,17-94 +5-46,5-45 +51-65,52-64 +11-89,12-88 +3-23,1-23 +36-88,35-88 +13-36,37-83 +15-16,15-39 +8-86,7-79 +24-99,38-99 +46-51,47-72 +23-40,40-43 +86-86,45-85 +21-60,16-60 +4-55,3-5 +79-96,68-96 +2-3,5-95 +17-77,17-78 +36-88,36-88 +43-88,40-54 +74-90,73-89 +6-96,6-95 +3-19,64-70 +17-72,2-6 +43-82,30-83 +23-72,22-72 +25-91,26-90 +13-95,55-95 +20-58,22-58 +21-57,47-71 +25-86,24-87 +8-99,9-99 +2-3,3-96 +48-48,22-48 +5-83,1-4 +27-61,84-91 +3-70,52-90 +37-82,37-85 +24-54,55-65 +81-82,3-82 +17-80,79-93 +59-59,60-95 +30-31,32-32 +10-99,5-9 +23-53,24-53 +13-85,1-12 +10-99,2-2 +49-78,78-87 +97-98,5-97 +45-74,46-74 +16-92,16-82 +13-86,13-51 +27-29,28-36 +28-90,28-89 +2-99,1-1 +15-73,14-73 +56-96,20-55 +12-84,85-85 +85-86,27-85 +10-92,11-77 +19-33,34-98 +15-26,6-14 +8-78,5-85 +6-95,7-59 +1-3,2-65 +82-99,33-82 +48-77,21-27 +8-57,15-27 +1-97,2-99 +12-63,1-90 +25-75,58-75 +92-98,24-43 +8-10,9-98 +13-25,44-87 +18-58,18-78 +11-13,12-61 +39-55,11-56 +70-94,31-70 +6-20,7-19 +9-63,63-66 +1-5,13-90 +40-70,40-71 +31-75,54-94 +5-95,5-94 +17-37,18-21 +3-57,29-57 +99-99,81-97 +11-92,11-91 +29-79,49-78 +44-85,43-84 +98-98,63-98 +19-82,13-18 +23-93,23-93 +5-90,4-6 +5-96,5-97 +16-21,15-15 +16-69,19-24 +23-59,60-80 +35-77,77-88 +72-95,6-73 +7-88,7-88 +15-87,14-87 +4-54,4-44 +67-73,34-44 +55-55,55-77 +16-82,81-82 +34-93,7-33 +20-82,21-81 +60-73,73-74 +37-63,66-96 +24-26,25-51 +42-43,42-84 +45-52,57-93 +4-96,25-97 +34-74,33-74 +6-37,5-5 +9-63,8-10 +31-85,11-16 +79-81,67-80 +23-23,25-83 +2-32,5-96 +84-85,38-84 +46-47,9-46 +87-88,23-87 +78-84,7-92 +36-39,34-39 +31-64,31-65 +39-76,25-62 +23-99,20-22 +99-99,38-86 +35-78,34-78 +30-95,30-94 +3-69,1-70 +27-82,26-52 +7-57,8-56 +78-83,60-69 +18-66,17-67 +1-94,3-94 +8-16,15-16 +29-30,13-29 +30-83,17-98 +28-87,27-87 +77-82,10-81 +30-76,2-29 +4-4,5-73 +62-66,62-67 +1-81,44-72 +16-44,43-44 +98-99,3-99 +98-99,9-78 +29-70,30-62 +79-93,80-94 +84-95,84-95 +27-36,26-88 +3-89,3-88 +16-44,15-45 +21-65,18-53 +8-63,7-7 +19-76,18-74 +35-44,19-39 +16-48,3-15 +7-7,7-33 +96-97,78-97 +20-83,16-83 +55-85,28-52 +18-82,18-81 +4-10,9-92 +32-66,7-66 +49-79,18-49 +53-93,52-93 +53-97,85-99 +24-98,24-24 +28-97,27-27 +27-92,76-92 +8-9,16-20 +54-54,54-87 +7-89,89-98 +57-76,56-77 +9-87,8-87 +48-81,48-82 +3-33,3-48 +8-8,9-76 +24-79,10-25 +37-96,37-97 +72-77,74-77 +39-69,40-70 +33-97,4-60 +53-57,57-58 +91-91,49-90 +1-1,1-95 +1-91,92-92 +48-90,89-90 +86-98,87-96 +67-81,68-80 +66-66,66-87 +94-95,19-95 +1-6,7-14 +28-30,28-29 +6-60,30-84 +25-46,6-8 +8-69,8-68 +7-94,6-94 +9-80,10-81 +89-98,56-88 +61-91,62-92 +39-87,40-91 +29-57,18-57 +89-90,58-89 +95-96,72-95 +42-59,31-47 +70-80,39-86 +24-35,1-36 +25-39,25-39 +1-1,1-96 +44-81,45-90 +30-88,89-89 +69-77,46-72 +31-72,32-72 +60-61,59-61 +17-26,1-16 +10-91,91-92 +81-95,34-95 +80-81,18-73 +13-58,13-57 +7-57,6-56 +53-68,66-85 +64-93,57-63 +77-78,11-77 +19-23,24-88 +30-58,31-58 +16-27,15-28 +12-94,12-93 +4-29,27-29 +57-60,56-68 +15-96,15-97 +5-51,9-94 +25-61,24-61 +40-86,41-86 +4-84,5-84 +6-98,5-97 +53-53,15-53 +51-63,51-62 +30-38,38-44 +58-83,5-74 +13-94,12-92 +19-20,20-99 +35-46,36-45 +4-98,1-3 +66-68,67-94 +4-80,9-99 +81-99,3-98 +9-80,9-65 +10-60,11-59 +1-22,22-22 +2-90,89-90 +45-83,45-84 +30-59,22-22 +97-97,2-96 +20-99,1-99 +10-15,16-79 +12-85,85-85 +13-50,3-12 +8-95,96-96 +73-73,1-72 +4-62,5-48 +27-47,27-48 +11-81,11-93 +65-83,59-72 +27-67,35-67 +44-96,16-44 +95-98,44-81 +32-96,96-97 +73-74,4-73 +43-56,33-34 +19-96,95-98 +32-96,33-95 +28-95,95-96 +61-81,8-61 +97-97,1-97 +37-83,36-38 +25-80,2-80 +58-67,57-67 +43-94,75-92 +32-42,41-98 +19-94,19-19 +15-84,15-99 +41-48,49-49 +15-96,15-15 +82-87,32-83 +3-35,2-4 +33-59,34-58 +19-99,5-7 +80-98,17-96 +4-75,74-75 +2-96,3-97 +24-24,24-76 +24-96,4-97 +45-84,46-84 +62-90,63-91 +39-89,38-90 +32-33,9-33 +4-23,47-90 +73-74,55-73 +54-99,29-54 +16-66,15-66 +61-91,77-91 +29-88,28-89 +45-77,44-78 +13-76,52-75 +33-92,32-58 +38-85,37-81 +54-92,38-93 +10-91,21-94 +3-98,14-98 +7-58,6-58 +23-25,24-83 +19-86,13-18 +61-63,62-96 +24-63,57-80 diff --git a/2022/day5.rb b/2022/day5.rb new file mode 100644 index 0000000..6d6f849 --- /dev/null +++ b/2022/day5.rb @@ -0,0 +1,43 @@ +TEST_S = <<EOF + [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 +EOF + +class Stacks + +end + +class Instructions + attr_reader :indexes + + def initialize(header) + indexes = {} + indexes.default = [] + header.readlines do |line| + line.scan(/\w/).each do |c| + indexes[line.index(c)] << c + end + end + + self.indexes = {} + + indexes.each_key.each_with_index do |i, index| + self.indexes[i] = indexes[index] + end + end +end + +def parse_input(filename) + File.open(filename) do |file| + contents = file.read + header, body = contents.split(/^$/) + end + +end diff --git a/2022/utils.rb b/2022/utils.rb new file mode 100644 index 0000000..ef1185e --- /dev/null +++ b/2022/utils.rb @@ -0,0 +1,10 @@ +require 'pry' + +class Array + def each_n(n) + while not self.empty? + a, b, c = self.shift(n) + yield [a, b, c] + end + end +end |