diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9bea433 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..0d97209 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# Advent of Code + +Hi all! + +My AdventOfCode is `node.js` based. + +To run any day, type `node index.js ` and it will execute the day you inputted. Make sure you fill the relevant `input.txt` file with the input for that day if you want to see your own code. + +The current main branch is 2022, but my code from last years is also available in branch 2020, though both years are limited in number of days. + +For 2020: Step into each day folder and run `node program.js` to run it. + +In any solution you can replace my input.txt with your content and see if it works for yours as well. + +I am always curious to better solutions, so feel free to PR on an existing day any improvements to the code. As long as they're actually improvements, not just for the sake of shorter. My code should be production-deployable (in my mind) so they should be easily readable. + +For this purpose, also read [my article about 1-liners](https://javascript.plainenglish.io/we-need-to-talk-about-the-one-liners-58f460c05fc5?source=friends_link&sk=102a7a363db7988174bfb87666f63ecb). I would say I prefer longer code as long as it is readable. If something can be faster, then of course it should be. diff --git a/day1.js b/day1.js deleted file mode 100644 index c874e4f..0000000 --- a/day1.js +++ /dev/null @@ -1,37 +0,0 @@ -const fs = require('fs'); - -function findSumPart2(nums) { - nums.forEach(num => { - nums.forEach(num2 => { - nums.forEach(num3 => { - if (num + num2 + num3 === 2020) { - console.log('2: found match', num, num2, num3, num*num2*num3); - } - }); - }); - - }); -} - -function findSumPart1(nums) { - nums.forEach(num => { - nums.forEach(num2 => { - if (num + num2 === 2020) { - console.log('1: found match', num, num2, num*num2); - } - }); - - }); -} - -fs.readFile('./day1input.txt', 'utf-8', (e, data) =>{ - const items = data.split("\n"); - items.forEach((num, i) => { - items[i] = parseInt(num); - }) - findSumPart1(items); - findSumPart2(items); -}) - - - diff --git a/day1/input.txt b/day1/input.txt new file mode 100644 index 0000000..9708c17 --- /dev/null +++ b/day1/input.txt @@ -0,0 +1,2250 @@ +7914 +5032 +11424 +2567 +4123 +3567 +7346 + +1334 +2173 +5437 +1104 +1872 +1148 +6547 +3149 +5923 +5705 +4036 +5348 +1100 + +4108 +14444 +25596 + +7237 +4252 +1020 +8333 +3538 +5089 +6328 +4581 +6503 +8741 + +5799 +1585 +1137 +1985 +6489 +5309 +6249 +4594 +1885 +6100 +4233 +1517 +6346 + +13392 + +5705 +2914 +1636 +2126 +1200 +2458 +3862 +5696 +6269 +6624 +4015 +6878 + +7503 +4528 +1771 +4976 +2360 +4953 +8402 +5437 +1521 +3369 + +19947 +3465 + +2635 +3520 +5764 +1201 +2231 +5663 +1872 +1834 +5889 +3104 +6043 +5672 +1897 +4429 +3242 + +1568 +7727 +7363 +1762 +6400 +5605 + +4660 +11308 +4380 +2582 +1001 +11714 + +5134 +2300 +4757 +4613 +2991 +6561 +5951 +4936 +4592 +2099 +4117 +6658 +6387 + +24950 +7865 +7757 + +2251 +6418 +1692 +5020 +5913 +1070 +3996 +6016 +2406 +6237 +4374 +1631 +6892 + +1679 +4298 +3371 +3474 +4722 +4311 +1610 +3863 +6770 +4010 +5611 +2097 + +6922 +5309 +7222 +5672 +6050 +1269 +4328 +3736 +4861 +3956 +3206 +1832 + +1880 +3478 +7714 +7708 +6067 +6378 +3506 +7447 +5526 +6263 +6018 + +6731 +5938 +6918 +1352 +1828 +5339 +4113 +5783 +2637 +3584 +1874 +2647 + +2781 +6009 +6301 +6635 +4924 +4150 +2216 +6989 +3632 +5509 +4650 + +20208 + +1060 +9513 +1929 +6742 +8104 +7913 +5924 +4176 +3578 + +5296 +9369 +2530 +7070 +8392 +9054 +3721 +4291 +9210 + +3334 +2939 +3462 +1612 +3295 +1080 +1286 +4522 +1815 +2245 +4000 +5780 +5722 +4194 +4371 + +3400 +4587 +1020 +8609 +7675 +1272 + +1716 +6587 +4563 +3922 +3788 +6667 +3734 +6692 +1783 +3153 +4195 + +2572 +6830 +3179 +1029 +2269 +11843 +9941 + +6543 +6760 +15219 +11241 +10592 + +6608 +1237 +3951 +3068 +3073 +3796 +3603 +3223 +3937 +5450 +5436 +3069 +1061 + +9396 +11859 +1902 +6598 + +3137 +1487 +2503 +1312 +3008 +1914 +4730 +6104 +2293 +2913 +2729 +3629 +5186 +3876 +3404 + +9051 +6493 + +8009 +5306 +4188 +6706 +7077 +2134 +7837 +2885 +6423 +6267 +1222 + +4293 +4554 +5378 +6061 +3238 +3792 +2238 +5014 +3508 +2296 +5479 +5254 +1030 +1644 + +15277 +4285 +10110 +7055 + +4761 +4290 +1238 +1174 +2299 +1306 +2659 +4854 +5089 +4261 +3890 +1556 +5211 +4021 +3356 + +10403 +21723 + +5893 +4236 +5927 +2052 +3192 +1468 +4598 +3233 +2168 +3106 +4510 +1847 +5083 +2421 + +16205 +15366 +21046 + +6114 +12370 +10780 +9663 +9061 + +4516 +2854 +1460 +2143 +6609 +2365 +2778 +2683 +2583 +6467 +4319 +4315 + +3799 +6044 +2288 +6494 +3439 +7232 +3414 +1388 +3966 +2398 + +4225 +4485 +3923 +4014 +1199 +1468 +2776 +2777 +2377 +1434 +4292 +1456 +3289 +5520 +4329 + +4510 +3831 +3755 +3459 +3391 +2348 +6074 +3206 +3029 +2843 +3713 + +5998 +3721 +3166 +4632 +5031 +2793 +1167 +4946 +1248 +5716 +5348 +1525 +3757 +4700 +3372 + +3952 +7922 +3443 +4604 +6810 +2816 +6138 +2392 +1241 +4236 +3619 + +34427 + +17838 +30517 + +4112 +10150 +8347 +2082 +12014 +7078 +11182 + +5433 +7853 +1534 +11283 +5337 + +6007 +4147 +2008 +4531 +5174 +5625 +5105 +1196 +1521 +2353 +6811 +1187 +2310 + +1886 +2979 +6398 +6356 +7702 +8755 +11455 + +5357 +1608 +5575 +6241 +4128 +3130 +6163 +3212 +4485 +5898 +4910 +3788 + +7801 +7457 +7253 +8529 +9551 +5943 +1356 +6505 + +4727 +8200 +6628 +6451 +1375 +1678 +5936 +5324 +6427 +2029 + +36582 + +7271 +35840 + +21992 +22165 + +6453 +19268 +3430 +10457 + +4029 +4655 +1781 +7635 +5762 +2584 +3564 +2071 +3439 +3691 +3094 + +9444 +13140 +13396 +4076 +10162 +5268 + +2126 +4467 +9082 +8317 +6550 + +5451 +6635 +6791 +5015 +8407 +4356 +2602 +3230 +4665 + +2747 +7765 +6817 +4816 +3437 +7966 +5722 +2444 +3083 +1361 + +12228 +6182 +7426 +12898 +4182 +6266 + +6539 +6363 +4724 +5591 +4163 +2589 +1828 +1351 +6077 +1146 +3987 +6487 +6049 + +6827 +2987 +3205 +4405 +1129 +6673 +4913 +2839 +2060 +2537 +2022 +1432 + +3777 +3777 +4089 +3379 +2110 +2320 +1109 +3404 +6876 +2791 +4787 +5419 + +12034 +17906 +5562 +5606 + +14336 +4651 +2209 +11190 +6228 + +4697 +4733 +1356 +2000 +5179 +2664 +2768 +5424 +2590 +1267 +3390 +2164 +4090 +3494 +5899 + +2192 +13670 +13944 +4531 +3025 +11249 + +5830 +14261 + +19801 +4961 +12629 +9004 + +7113 +7210 +3654 +6763 +7717 +4323 +5696 +5946 +2384 +7844 +1486 + +7010 +5874 +1878 +6510 +1164 +6037 +5962 +1137 +2150 +2233 + +14434 +4226 + +3411 +13559 +4848 +4821 + +15749 +2913 + +54246 + +11361 +2720 +3767 +5540 +3472 +4367 +6511 + +6896 +4369 +2970 +2445 +2070 +2562 +5328 +3920 +5450 +2897 + +14667 +15686 +1271 +18275 + +6705 +2670 +11190 +13652 +9738 + +4020 +4975 +7099 +4654 +8754 +5562 +7225 +3903 +4546 +4525 + +4197 +14210 +7595 +10871 +7217 + +4815 +5253 +7706 +2919 +4097 +2700 +2721 +3093 +5273 +1696 +5776 + +2771 +4272 +3324 +3439 +6376 +5354 +5007 +6146 +4939 +1351 +6437 +5618 +4283 + +8893 +5075 +4562 +9003 +8963 +7147 +2381 + +2911 +11753 +12512 +3446 +6006 +11130 + +2478 +1060 +6245 +1266 +5077 +2586 + +4400 +5838 +6425 +2635 +3060 +1709 +6254 +2813 +2120 +1735 +4942 +5332 +3626 + +5600 +3354 +4776 +2979 +2700 +4637 +1717 +2134 +1782 +3492 +3611 +4941 +4899 +1213 + +8679 +4661 +10003 +13830 +5247 +2139 + +20373 +3325 + +5379 +7303 +7830 +5504 +2696 +5622 +7935 +3297 + +4228 +2408 +5941 +5082 +6872 +5948 +6254 +3644 +3301 +5938 + +5258 +23981 +12886 + +28519 +27915 + +35254 +2202 + +7052 +2168 +4389 +4046 +2056 +6167 +3384 +6470 +7987 +3383 + +5268 +7903 +13452 +14317 + +6366 +1526 +9104 +2599 +1202 +11086 +5433 + +11479 +8039 +10152 +14580 + +5515 +1916 +1289 +1388 +1553 +5740 +3839 +1753 +5634 +6645 +1506 +4538 +4656 + +4786 +4267 +4796 +2879 +3770 +5652 +3160 +5825 +2297 +1351 +3115 +5746 +4752 +4713 +5409 + +5911 +6004 +4125 +3494 +7580 +7176 +8214 +6670 + +2668 +7245 +3101 +4052 +1527 +6544 +3423 +5764 +2754 +1405 +3936 + +5601 +3717 +1629 +5576 +5579 +1855 +4257 +5682 +2532 +2718 +1497 +3427 +5794 + +5247 +11031 +4614 +9068 +9698 +2157 +5376 + +9323 +2194 +1541 +5612 +1785 +1866 +8066 +4904 + +36692 +27998 + +4516 +3456 +3620 +10427 +7221 +9173 +5353 +9376 + +6685 +3452 +9421 +7877 +7669 +3237 +9391 +5727 + +20001 + +10724 +15712 +15690 +16206 +1635 + +26550 +19421 + +12539 +8286 +13842 +2148 +4421 + +10165 +10293 +5777 +8034 +8797 +3886 + +5877 +3703 +1191 +5264 +1433 +4417 +2501 +6113 +1390 +1953 +1989 +4148 +4308 + +5421 +2719 +2110 +2329 +2480 +5456 +2894 +1536 +3655 +2022 +4919 +2287 +1146 +3599 +2766 + +23545 +23885 + +3539 +18515 + +31310 + +3802 +13051 +2107 +11803 +11383 +10824 + +7070 +3331 +1545 +1227 +3701 +4290 +2178 +4043 +4159 +4978 + +1596 +5306 +5192 +7398 +7306 +7457 +2157 +4592 +7133 +5658 +6134 +5000 + +11745 +7176 +6232 +13572 +3855 + +6991 +1973 +6491 +6894 +6839 +3710 +6206 +3259 +7334 +3714 +4320 +4423 + +1602 +18051 +13165 +19153 + +1414 +13321 +3488 +6907 +1765 +11847 + +6007 +13509 +10855 +2103 +11112 +1317 + +9168 +10364 +8969 +7162 +1829 +1114 +1280 +8882 + +8113 +3195 +8998 +1596 +3238 +5872 +8194 +1753 + +5109 +2221 +3304 +5088 +3968 +5134 +1064 +5486 +5735 +3521 +4646 +5617 +2802 +5293 + +5915 +6651 +6734 +6670 +1891 +6987 +3404 +1946 +9510 + +11531 +3497 +11740 +11651 +1885 +7156 +9233 + +6541 +7739 +1454 +6086 +2743 +6713 +5321 +6442 +6950 +3678 +3234 + +6800 +5686 +8043 +9452 + +19119 +19636 +2349 +2244 + +5008 +7002 +5330 +3546 +13001 +13785 + +4985 +7177 +5629 +4174 +6747 +5113 +3916 + +6496 +5247 +6753 +6704 +9306 +5765 +4150 +6939 +5457 + +3887 +6986 +1560 +8183 +4405 +3810 +5728 +10507 + +11447 +25816 + +4597 +5623 +4127 +5048 +8158 +2593 +2250 +5352 +1893 +6507 + +33979 + +6089 +5585 +2486 +5620 +1347 +5829 +4476 +5265 +2216 +4211 +1707 +2443 +2362 +2362 +1282 + +5883 +2431 +5837 +2697 +6104 +5978 +5515 +5215 +5534 +2081 +1031 +2757 +1034 +5281 +5333 + +3373 +1608 +3753 +1177 +3197 +1753 +2510 +5515 +5455 +4239 +6135 +5620 +5610 +2864 + +3836 +6195 +5633 +2714 +1886 +6240 +1274 +1432 +1305 +2310 +3446 +6485 + +8674 +19094 +22441 + +6453 +2960 +1048 +1714 +6828 +6116 +4645 +3327 +4146 +2561 +2149 +2429 +1382 + +27003 +2645 + +3984 + +4217 +2174 +6227 +6827 +2477 +2789 +3961 +3937 +4771 +3640 +1870 +5929 +1949 + +5251 +4132 +2290 +5517 +5219 +3745 +3219 +4119 +3056 +1951 +6167 +5802 +5301 +6245 + +6430 +5525 +6656 +5755 +9884 +6570 +1134 + +7728 +4025 +7558 +4767 +1345 +2164 +1137 +1174 +1130 +5195 +6515 + +4223 +3412 +9634 +5355 +5395 +5975 +2627 + +6170 + +10254 +7145 +6816 +9867 +2471 +1584 +8533 + +3486 +9633 +10625 +6684 +3246 +9866 +10563 +1430 + +5318 +3542 +4517 +3296 +3776 +4122 +4940 +2768 +4821 +3779 +1616 +5543 +3953 + +14860 +10176 +13551 +6410 +6235 + +5075 +2852 +3919 +3024 +5265 +2946 +4377 +5901 +5427 +5960 +2953 +5508 +6309 +2532 + +4346 +1003 +2014 +1816 +7083 +7229 +6297 +6349 +3860 +1911 +4553 + +10672 +2514 +4572 +6904 +4101 +7105 +3486 +5939 + +4903 +2768 +6198 +3331 +5677 +4852 +1123 +1105 +5599 +7130 +6093 + +36680 + +2386 +4584 +1424 +4818 +2181 +1275 +1203 +6859 +1722 +3839 +1602 +7022 + +7947 +11689 +6053 +2557 +11191 +1006 +10549 + +6392 +23290 +3800 + +1555 +4968 +2802 +6188 +2972 +5342 +4944 +3089 +1489 +5851 +3724 +4105 +1646 + +1056 +5939 +2669 +6416 +1825 +5364 +3055 +3718 +4637 +2092 +2427 +4896 +2074 + +1146 +2745 +5553 +12023 +11630 +2821 + +6444 +9693 +5025 +6574 +4847 +5858 +9920 +10756 + +32182 +22267 + +55301 + +6186 +1515 +9204 +5359 +2695 +2760 +4021 +8269 +3633 + +1682 +3758 +7745 +8645 +5672 +4336 +7765 +7497 + +1099 +1107 +2501 +3511 +5559 +3384 +5934 +5439 +4723 +3229 +5376 +5032 +1133 +1239 +5806 + +15356 +9800 +3837 +10024 +13159 + +11534 +6116 +4343 +8949 +8628 +3215 + +2118 +4216 +5874 +7366 +4894 +3959 +3906 +4397 +1945 +4080 +2564 +2609 + +1559 +1514 +2947 +6754 +6285 +6265 +2403 +5718 +5167 +2172 +4605 +5420 +1806 + +1880 +1014 +4994 +6146 +4752 +3350 +3872 +6534 +6554 +4005 +3413 +2201 +6360 + +10572 + +5543 +2387 +2323 +5565 +4920 +1185 +3712 +2674 +5513 +3267 +2714 +2453 +5923 +2020 +3843 + +5594 +7165 +3281 +2559 +4424 +3250 +6706 +3870 +2600 +3620 +6853 +6549 + +12197 +8838 +8398 +7951 +5818 + +6279 + +16622 +3657 +9950 +18164 + +4487 +1146 +1953 +5985 +2255 +7752 +5966 +6953 +3238 + +8433 +4943 +3379 +10418 +8317 +2119 +2264 +9044 + +25424 +15342 + +4620 +4435 +1247 +5616 +4740 +7872 +6710 +6494 +6666 +7926 + +2587 +4186 +4175 +6572 +4189 +6265 +3357 +6427 +1014 +1909 +1065 +2211 + +2894 +5557 +3884 +4400 +6992 +1825 +4375 +5124 +1442 +2902 +1538 +1557 + +6294 +5991 +8711 +6323 +3985 +6012 +8327 +1353 +5585 +1514 + +3054 +1488 +1453 +4860 +5875 +3625 +7313 +3609 +2707 +3936 +4253 + +7605 +10203 +1976 + +64078 + +12356 +7090 +2556 + +1467 +7531 +5418 +2366 +1855 +8463 +6436 +5521 +2152 +4088 + +9810 +15885 +8104 +12905 + +7369 +5389 +3464 +7901 +7781 +2875 +7377 +1927 +3870 +6763 + +3990 +6074 +3698 +8562 +2305 +1623 +8346 +8680 +7690 + +8271 +7058 +8607 +9116 +4157 +7026 +7873 + +16451 +4437 +19220 +3783 + +23509 + +15774 +19061 +19118 + +8042 +5973 +7798 +2217 +4093 +3706 +1467 +3921 +5878 +2791 + +9142 +19544 +16563 +5584 + +6394 +5320 +3521 +3956 +1751 +5318 +5031 +2838 +3506 +3504 +2551 +1141 +4733 +3035 + +15753 +2123 +14170 +18870 + +5179 +6821 +6559 +4032 +1024 +8634 +2377 +1570 +4358 + +1640 +8885 +6912 +3939 +10328 +10308 +3548 + +5391 +1362 +1541 +1614 +3236 +1704 +4088 +5284 +2395 +6504 +2050 +5511 +6782 + +7842 +1185 +7244 +9998 +3575 +5292 +6126 +3264 + +4962 +1758 +3553 +3450 +5493 +5000 +1515 +1174 +6031 +1007 +5762 +5033 +1080 +2817 +2795 + +5822 +3591 +5416 +5487 +2110 +5372 +6614 +5136 +6450 +5250 +4411 +1851 +6421 + +42358 + +8051 +10473 +11286 +19931 + +9617 +4786 +2155 +3527 +7553 +3911 +9670 +7243 +7662 + +23109 +25276 +6310 + +4840 +6771 +7719 +4482 +6687 +6191 +6796 +4313 +7656 +2828 +1535 + +2050 +2929 +1517 +6796 +1070 +6924 +4229 +6813 +9252 + +2515 +32597 + +4389 +7467 +11143 +8271 +3081 +2180 +9659 + +5420 +2126 +5522 +5579 +6024 +3291 +2180 +5429 +3860 +3589 +2089 +1362 +5777 +4103 +3124 + +7858 +4413 +7488 +7306 +7816 +9150 +8791 +4526 +3311 + +4226 +1438 +4937 +2222 +4612 +4677 +2675 +7870 +7259 +5322 +3063 + +5953 +2931 +1763 +5986 +4926 +4405 +1628 +4778 +5978 +1446 +1388 +4629 +5080 +1781 +5090 + +25276 +8575 + +7338 +5122 +2243 +3416 +7198 +4917 +2338 +6466 +7689 +2006 + +6879 +4534 +1218 +10503 +3970 +4274 +1144 +4666 + +5315 +4696 +5183 +7596 +4734 +3643 +2167 +5441 +7878 +3347 +4204 + +2522 +2992 +4658 +7624 +4018 +3053 +1575 +4305 +2551 +3848 +5441 + +29831 + +5920 +5770 +1031 +2102 +5043 +3067 +5257 +3209 +3909 +1806 +2172 +2880 +3007 +1567 +4663 + +5017 +4609 +8767 +9643 +4702 +8519 +7904 +4716 +3679 + +1068 +6794 +7802 +2099 +7998 +3563 +6051 +6596 +7987 +3732 +7337 + +2241 +13670 +13185 +6208 +12631 + +29307 +3839 + +11354 +6015 +2257 +7358 +7688 +5290 +3929 + +12228 + +3334 +8211 +5328 +4224 +5626 +7635 +7615 +9511 + +8075 +5712 +7226 +5213 +7236 +7907 +1417 +6890 +2571 +1881 +6929 + +1189 +2124 +5640 +4677 +1487 +3608 +2828 +2911 +2102 +2169 +6087 +4343 +5689 +5315 +1946 + +7302 +1351 +1299 +3498 +2752 +2502 +7397 +7139 +1571 +1882 +4967 +7024 + +2453 +2774 +12613 +15345 +3686 + +6213 +6151 +2743 +3336 +7888 +7792 +2768 +4780 +1782 +4613 +1344 \ No newline at end of file diff --git a/day1/program.js b/day1/program.js new file mode 100644 index 0000000..6401947 --- /dev/null +++ b/day1/program.js @@ -0,0 +1,42 @@ +export default function Day(data) { + const elfs = []; + let elf = getBasicElfStats(); + data.forEach(c => { + const calories = parseInt(c); + + if (isNaN(calories)) { + elfs.push(elf); + elf = getBasicElfStats(); + return; + } + + elf.foodItems.push(calories); + elf.calories += calories; + }); + + elfs.push(elf); + + const sortedElf = sortElfsByCalories(elfs); + // part 1 + console.log('PART 1'); + console.log(`${sortedElf[0].foodItems.length} snacks containing ${sortedElf[0].calories} calories`); + + // part 2 + console.log('PART 2'); + const top3Elf = sortedElf.slice(0, 3); + const totalCalories = top3Elf.reduce((acc, elf) => acc + elf.calories, 0); + const totalFoodItems = top3Elf.reduce((acc, elf) => acc + elf.foodItems.length, 0); + + console.log(`${totalFoodItems} snacks containing ${totalCalories} calories`); +} + +function sortElfsByCalories(elfs){ + return elfs.sort((a, b) => b.calories - a.calories); +} + +function getBasicElfStats() { + return { + calories: 0, + foodItems: [], + } +} \ No newline at end of file diff --git a/day1/sample.txt b/day1/sample.txt new file mode 100644 index 0000000..444e241 --- /dev/null +++ b/day1/sample.txt @@ -0,0 +1,14 @@ +1000 +2000 +3000 + +4000 + +5000 +6000 + +7000 +8000 +9000 + +10000 \ No newline at end of file diff --git a/day1input.txt b/day1input.txt deleted file mode 100644 index ea74611..0000000 --- a/day1input.txt +++ /dev/null @@ -1,200 +0,0 @@ -1918 -1869 -1821 -1852 -1981 -1987 -1989 -1597 -1634 -1537 -1991 -1603 -1543 -1949 -1879 -1800 -1761 -2010 -1810 -1458 -1755 -1938 -1500 -2005 -818 -1493 -1618 -1923 -1283 -1952 -1373 -1605 -1230 -1321 -1873 -1853 -1886 -1372 -1913 -1871 -159 -733 -1400 -1880 -1462 -2007 -1801 -1982 -1728 -1640 -1442 -1525 -1953 -1791 -1906 -1946 -1641 -2009 -1627 -1935 -1936 -1908 -1826 -1291 -1978 -1884 -1799 -1464 -1538 -1365 -1678 -1872 -1964 -1863 -1388 -1912 -1928 -1471 -1632 -1336 -1396 -1948 -1974 -1331 -1290 -1992 -1096 -1889 -1874 -1341 -757 -1351 -1876 -1674 -2002 -1504 -1865 -1469 -1792 -1920 -1925 -1898 -1899 -1435 -405 -1488 -1319 -1322 -1749 -1867 -1957 -1944 -1727 -1293 -1739 -1285 -1917 -1897 -1844 -1966 -1921 -1905 -1830 -1484 -1364 -1782 -1415 -1412 -1413 -833 -1857 -1370 -1890 -1393 -1262 -1311 -2008 -1545 -1896 -1362 -1862 -1617 -1864 -608 -1868 -1689 -1784 -1806 -1976 -1870 -1973 -1993 -1986 -1998 -1414 -1858 -1990 -1841 -1895 -1779 -1850 -2001 -1590 -1902 -1487 -943 -1808 -782 -1546 -2004 -1656 -154 -1661 -1688 -1731 -1466 -1927 -1438 -1387 -1576 -1793 -1797 -1979 -1903 -1638 -1940 -1911 -1301 -1669 -1409 -1578 -1887 -1860 -1619 -1939 -1625 -1941 -1374 -1766 -1407 \ No newline at end of file diff --git a/day2.js b/day2.js deleted file mode 100644 index e135497..0000000 --- a/day2.js +++ /dev/null @@ -1,68 +0,0 @@ -const fs = require('fs'); - -function split(item) { - let parts = item.split(" "); - if (parts.length < 2) return false; - parts[0] = parts[0].split('-'); - - parts[0][0] = parseInt(parts[0][0]); - parts[0][1] = parseInt(parts[0][1]); - return parts; -} - -function isValidPart1(item) { - const parts = split(item); - if (!parts) return; - - const char = parts[1].substr(0,1); - const regex = new RegExp(char, 'g'); - const matches = parts[2].match(regex); - - if (matches && matches.length >= parts[0][0] && matches.length <= parts[0][1]) { - return true; - } - return false; - -} - - -function isValidPart2(item) { - const parts = split(item); - if (!parts) return; - - const char = parts[1].substr(0,1); - const pw = parts[2]; - - const char1 = pw.substr(parts[0][0] - 1, 1); - const char2 = pw.substr(parts[0][1] - 1, 1); - - if (char1 === char2) return false; - if (char1 === char || char2 === char) return true; - - return false; - -} - -function parseItems(input) { - let validItems1 = 0; - let validItems2 = 0; - - input.forEach(item => { - if (isValidPart1(item)) { - validItems1++; - } - if (isValidPart2(item)){ - validItems2++; - } - }); - - console.log('part 1: found valid items: ', validItems1); - console.log('part 2: found valid items: ', validItems2); -} - - -fs.readFile('./day2input.txt', 'utf-8', (e, data) =>{ - const items = data.split("\n"); - - const pws = parseItems(items); -}) \ No newline at end of file diff --git a/day2/input.txt b/day2/input.txt new file mode 100644 index 0000000..0897034 --- /dev/null +++ b/day2/input.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 \ No newline at end of file diff --git a/day2/program.js b/day2/program.js new file mode 100644 index 0000000..0abdc6b --- /dev/null +++ b/day2/program.js @@ -0,0 +1,36 @@ +const points = { + X: 1, + Y: 2, + Z: 3, +}; + +export default function Day(data) { + const games = data.map((d) => d.split(" ")); + + const part1 = games.reduce((acc, game) => acc + scoreGame(game[0], game[1]), 0); + const part2 = games.reduce((acc, game) => acc + scoreGamePart2(game[0], game[1]), 0); + console.log(`Part 1: ${part1}`); + console.log(`Part 2: ${part2}`); +} + +function scoreGame(oppenentMove, counterMove) { + const move = oppenentMove + counterMove; + + if (move === "AX" || move === "BY" || move === "CZ") { + return 3 + points[counterMove]; + } + + if (move === "AY" || move === "BZ" || move === "CX") { + return 6 + points[counterMove]; + } + + return 0 + points[counterMove]; +} + +function scoreGamePart2(oppenentMove, outcome) { + const oppmoves = ['A', 'B', 'C']; + const mymoves = ['X', 'Y', 'Z']; + const modulator = outcome === 'X' ? -1 : outcome === 'Y' ? 0 : 1; + const counterMove = mymoves[(oppmoves.indexOf(oppenentMove) + modulator + 3) % 3]; + return scoreGame(oppenentMove, counterMove); +} diff --git a/day2/sample.txt b/day2/sample.txt new file mode 100644 index 0000000..25097e8 --- /dev/null +++ b/day2/sample.txt @@ -0,0 +1,3 @@ +A Y +B X +C Z \ No newline at end of file diff --git a/day2input.txt b/day2input.txt deleted file mode 100644 index f7a1314..0000000 --- a/day2input.txt +++ /dev/null @@ -1,1000 +0,0 @@ -2-4 r: prrmspx -5-6 p: hpzplphxb -5-8 t: ttttbtttttc -1-6 k: kkkkkk -1-3 q: qqqq -4-8 t: pctpfqtrtttmvptvfmws -3-5 z: zznzslv -12-14 h: hhhhhhhhhhhhhhhh -14-15 v: vvvvvvvvhvvvvdmvv -8-17 x: xxxxxxdxxxxxxxckxx -11-12 f: gkfjnffjfcmfwk -10-12 s: xsgsssshbmsbnss -6-15 s: sssssnsssssssss -2-8 d: qnqtrqdrnvq -5-7 k: lhxkkkk -4-5 k: xkkkk -10-16 v: vvvvvvvvvcvvvvvpvv -1-6 f: ffffflfffffff -4-5 x: fxdnq -10-12 p: mkspmhlldqjh -10-12 r: rcvzzcbdgrcr -4-7 r: rxbkrrrzrrrtrrr -18-19 k: kkkkkkkkkkkkkkkkkkk -1-2 f: sfffffffffffffffff -1-5 z: mhkzwdxklf -2-3 r: qzbgrghkmlpxdvd -2-3 q: mqqpcxbqdf -7-8 r: rrrrfrrj -1-9 x: vmxsmwhnxccf -9-10 t: ttttttttppt -2-4 x: rxxqxx -16-17 k: jkfmnwkkztnxvlkkw -3-4 c: ccbpccccczpcccc -5-8 g: ggggjggg -1-3 z: szzzzz -8-9 l: xnllznclz -4-10 m: pkmmptjvgsnwmxm -1-2 r: mbrrtkrjdr -1-3 c: ccqscsxcnctwlvm -4-6 p: ppppppppp -3-5 d: wdddxvmnbdhvzdgqbdm -5-7 n: nnwbsnqnnvn -2-11 j: sgbxjvqnbmq -5-13 q: qqqkpqqqsqqqxqqqq -2-12 m: kvwlwmmvhbpgmnzfddms -2-4 j: kjgcpgxgcphkqjjmbwd -3-6 v: tdvlvv -10-20 n: tnmhnlznnpnmnfnngnnn -4-7 h: hhhhhhhh -9-11 m: mmmmmmmmrmm -7-9 b: mbnbbbbqk -9-10 z: fqzzzmzzzzj -3-15 s: chdpzcpgsgrkhss -3-4 k: kklz -1-5 q: ltqqqxcndqrq -9-17 m: mmmmmmmmqdlmmxbmtmmm -14-16 k: kkkkkkmkkkkkjtkkk -8-9 k: kkkkkqkkxlk -2-6 n: kbhhjhdmgtn -3-8 w: rcwwwkqwbwkwmdqtwmw -10-11 x: snkbxmwqwxp -2-5 m: pmhmp -6-7 b: bbbbbbq -3-7 l: cfqmljq -9-13 q: qzqqqqqqqlqdt -2-10 w: kmwqwtwkssd -4-13 t: ttblttttttttftt -14-17 l: llllllwllllllwllclll -3-4 p: xzps -10-14 b: bjbbbbbpbdbbbb -5-7 v: jlvhjtvx -6-9 r: bscrrrrcrphffdw -5-7 r: brrvjrxfrljwxp -15-16 b: bbbbbbbbbbbbbbbb -7-8 h: bchfxxshh -2-13 z: zzqzzzzzzzzzzzz -1-5 b: bbbbrbbhbbbbbcb -2-3 k: zkkzjld -4-6 f: fnffffff -8-11 d: qdvdddddndphdndmgdkp -17-18 q: qqqkqqqqqqcqqqqtqq -11-16 m: mmmwmwxvmmmmmmmmmmm -12-13 v: vvvvfxvgblvvk -4-6 v: vsvvvvv -2-4 p: rqgm -7-8 r: rrrrrfrf -2-4 j: xpjjl -7-8 b: wdpbvwbb -15-16 k: fkkkskkkmkkkkkkk -10-14 s: shkscsqjszstssv -3-4 l: lllw -2-4 n: gjbnlsxvqmvxgcwntvvs -6-12 l: lclllgllllllll -16-17 b: bbbbbbbbbbbbbbbbbbb -7-8 q: pqqqqqwq -1-2 r: rrzsr -1-3 r: rrfr -16-17 f: fffcfffffjfmrzqffnr -15-17 h: bhzhhfndwgdhlhhhjh -7-11 t: vtwnrwzczmtwn -3-6 v: vvvvvmvvvvvv -4-5 s: ssptsss -1-3 t: ttntq -5-9 g: ggggtgggcg -7-8 h: hcjdkphhb -15-17 j: jjjjjmjjjjtjgvnxk -3-4 q: qqqq -5-7 g: lggsjqlg -11-18 m: mmmmmmmmmmqmmmmmmf -1-14 x: xxxxcxxxxxxxxxxxxx -7-8 f: ffffffbffff -3-4 t: xmct -3-4 x: xxtcd -1-11 x: xcnxxxxvxlxkmcrxn -8-11 h: hgnhkhhshhnhhzdhllw -8-10 z: zdzzzzzrpvvzzqz -6-7 r: lrbrrprrxr -6-10 n: fnnwnpnnjnhmnntqn -10-15 b: bbbbbbbbbwbbbbbbbbbb -13-16 z: zzzzzzzwzzzzvvzkztjz -5-6 t: xntkwthxbdtlmxtpzz -5-13 r: njrlghrrxfrfv -11-14 s: vssnzksspscrss -7-10 c: gtrkbcxccccccchch -6-11 v: vvsvvvvvvvvvvvvv -17-18 b: bbbbbbbqbbbsbbbbsnbb -13-15 x: smxxxjxmmkxxxmxx -10-11 h: hpqqwkxnfhd -15-16 j: jjjjjjjjjjjjzgjjwjjj -3-5 f: cjcff -3-4 z: hnfzzzmq -11-14 c: cccccccccczcckc -2-7 t: tstmdtk -2-3 f: wffkfm -7-16 w: tvgdzjjqlwzknwvwgzh -1-2 d: dzdqpn -8-14 j: jjzqjxjjsjrngzfj -6-9 h: xknzmlzpbpzcth -2-5 j: njmnj -10-15 z: kfqlljdfzzczzmp -7-12 g: gcqwnmgjhcrjnzwcmw -3-4 h: hhjhh -5-16 d: ddddddvddddddddddd -1-2 p: fwwtpllzbmjbwcnkbh -10-18 p: vhpwpppxfppppvppdh -2-6 x: rqgqgx -11-12 m: mhpmmmmmmmmmmm -3-4 z: lzzf -5-8 w: vfwwmlwfvwwwwlh -3-10 t: ltgtztzlct -7-8 k: kkkkkkmk -10-13 b: ndflbblbchkbq -18-19 z: zzzzzzzzzzzzszzzzzzz -2-5 n: nlzrmkhz -14-15 v: vwvvvvvvvvvjvmcvvv -13-15 p: ppppppppwpppxph -6-9 k: jvhxzwkkwkzv -9-11 s: snspssslkss -13-18 j: jgjrjjjjjqjjjhjtjj -5-7 v: vgvrhzvvv -1-7 t: ttttttttttttt -8-9 n: nnnnfnnnj -2-5 x: dxcrxhstqwldt -6-12 s: dkshssdsltspgcb -2-7 k: kkkkkkkk -7-13 d: vbjsdddfstdhtdxl -12-17 r: nrrgrrsrrrrkrrrdt -3-5 w: wwwjw -5-8 l: mlfldllll -4-5 m: mmmqm -9-10 j: sjtmlxjrzl -2-14 h: hhhhhhhhhhhhrnhhwh -3-4 b: bbbw -12-13 g: gggggggggggzg -13-14 t: tttgtttrztstltlhb -14-17 s: fhdxfshbglsvjsgbs -9-13 x: xxxxlxxtxxxxxxx -2-3 j: jjtn -12-13 n: nnnnnsnwnnvmq -3-6 z: gzzzbzmzzzmz -3-4 d: ddnt -2-7 s: pswmrnsrgb -8-9 q: qqqqqqqdv -5-6 s: sdlcqs -6-10 f: jffwjfhfff -4-5 p: pmpppps -9-14 p: pppppppppppvpppppppc -3-9 n: nsnpnmmnnwtnvb -3-4 b: bhzh -7-9 g: ggggggggng -10-11 x: xwxxxkxxxjxqxxxbbxx -17-18 k: kkkkkkkkkkkckkkkkk -3-4 v: vvrv -12-14 s: vdsrgdsghxcblflbwj -8-13 h: gxzhhbkdgfdglfqqcls -4-6 m: mmmvmfmmmmm -2-13 b: lbtzwffqfrfhbwb -1-3 r: lrcr -3-6 j: cjtcjj -5-8 z: zzztzmzz -4-12 t: wttrttvtgttztttdttst -6-7 n: zbfvmngknrzfzqpwhtx -12-14 g: gggggggggggggbgg -6-10 k: jkkkkkrkmbkdh -14-19 m: mmmmmmmmmmmmmmmmmmfm -2-4 d: sdft -4-10 g: bgtgsbjcqgt -2-4 t: trtqt -7-11 b: wjbbsqsvpkpb -12-14 z: zcfqlkxghjjpjzsc -3-4 g: ggjt -5-7 r: zdrrqrrrrrr -15-16 p: brpvpplmhvnbxppc -15-16 b: bbxbbbbbbbbbbbbb -8-11 c: hscggrpcpbxrxwgsv -10-15 j: jjjjjjjjjnjjjjmjjjj -4-6 g: bgkghgc -9-15 c: ccjcccsbcccspxc -2-3 v: fjzb -2-3 h: hhhxlchhwmjjzj -4-11 x: xxxxlxxxxcxxxxk -6-11 d: dvpdmdddzch -5-6 j: jjjjjjdjwj -6-12 p: pppppxpppppbppp -1-7 q: xqqqqqqqqqqqqq -5-6 w: xwwrtwjpwgsw -11-13 k: kkkkkkkkkkckfkkk -2-3 m: qbmnxlwmldmmc -2-3 w: jqlwws -6-8 k: kkkjbkmz -10-12 m: mmmmmmmmmvbm -6-13 n: hqnkdmwnxnwndnxgl -1-5 j: jjjjb -16-17 x: gxxxxxsxxbxxxxxmp -3-10 s: ssrsssssss -3-4 s: rslpsx -1-10 g: qgggjgwqzggvzflmj -8-9 g: gggbngqghg -1-3 q: qqqfj -3-5 m: mmmmzmmmmm -7-8 q: qqqxqqgqq -1-2 j: rpdjrrt -7-10 v: mdzpkvvdpv -12-14 m: xzmmjmhmmmmktmtmmmm -6-9 m: mmvbmvmzm -7-9 c: gcccqmlhc -6-8 z: zzzzzznrz -4-7 w: wwwmwwww -1-4 h: vhhhhh -13-14 z: xzzzjzzzzzzfzz -1-3 l: jlqml -10-12 f: wdbfzsbwffgf -4-8 p: vjpppfppxppjmctw -18-19 x: zkxbllxbtbzggncfxxx -5-6 x: xxxxhxxx -2-6 v: tvdprvvrvv -5-14 k: jkdhkhdhjgmtkk -1-2 k: sskk -5-12 w: mvqtkwwmcwwlkw -2-6 v: gvmlvv -12-13 p: ppppppppppppbp -3-4 r: frrrr -13-15 r: qrrrrrrrrbrrrrr -5-10 b: bxkbrbkdtwwrbkskjpc -4-5 x: bxrcx -12-15 f: ffffftjfffffffzfff -6-7 g: ggggggzgvxggg -10-11 w: kgwhvwwwwtcwp -9-10 j: jjjjjjjjpjj -5-12 t: pnbsttwccrtvttm -2-8 c: wcccccxfccnkvrllg -2-9 j: frddhfbkkj -9-11 m: mmmmmmmmtmmm -9-10 m: mmhmmmmmtm -2-4 r: crtr -14-15 v: vvvvvvvvvvvvvlrv -5-6 c: wccwctch -1-13 c: lcccccccccccfccc -12-15 x: zppxdwxtplfvzfxlwl -4-18 c: cccccccccccccccccc -2-3 c: xcccc -1-7 q: qvfbcfqx -6-9 k: lkbkhkkmsjlk -7-15 w: wwwwwwwwwwwwrwwwwwww -2-5 s: lscsssqsn -16-17 n: nnnnnnnnnnnnnnnnznnn -4-5 g: ggggggg -2-3 w: mfdw -4-5 r: rfrqh -3-7 f: vfpfbzf -8-9 j: jjjjjjjcbj -10-13 p: pppppzpppppppp -8-10 t: tntbgchftpttttttfttt -4-7 r: rlrbsmhnrqrbxrnlrm -13-17 m: vkmmmdhfkmtmgmxhk -9-11 t: ttttttttttt -16-17 g: gggggmgggfgggggsggvg -5-7 w: wpffgdw -3-7 r: rrzklzbmrrr -2-3 l: tllcqnlwfvlfmcgssg -3-4 q: qqqp -3-7 x: xnxxxzcxrqwx -7-18 s: shssssfwssssssksmss -1-4 r: rrrrmbc -2-6 t: tttdmsmtg -3-5 h: tmhbh -4-15 c: ccccccccccccccccr -8-10 v: vvvkvvvhvk -3-6 r: rsmzcrhqnxljrnnd -2-3 s: msss -10-18 w: wwwwwwwwwwwwwwwwwnw -11-13 j: hmwdjqjhjbfdrhj -5-17 x: hxpnccxhwlsxxdmxxd -4-5 t: ttznj -6-7 l: llllllqll -1-3 q: qsqnhqm -4-6 t: tdtttthc -16-17 x: xxxxkxxxxxlmxxvxfx -7-11 r: prtrxrprrrrr -5-7 j: mjjqjjg -3-8 l: rnllnklplllllllll -10-15 p: pppppppppdppppp -2-6 g: grgggx -3-4 s: ssqss -1-4 t: tttq -6-9 w: fxvvndkmwlskw -11-12 c: cccccccccccp -4-9 b: bbblbbbbbbbbbb -2-3 g: hggnbw -17-20 x: xxxpxxxxxxhxxxxxfxxx -1-2 f: bpvf -3-5 j: wjbfjw -13-19 m: srmmmmmmmmfhmgmmmqs -10-16 c: cccgcczcccccccbcfcct -11-15 b: bzpqpffbfqslknb -2-5 t: stnztmvjg -3-9 h: hqxhxxhhwh -2-4 r: rvrz -2-3 p: pppk -7-8 s: sskssjdss -5-9 x: xzvjjkmqzthpht -12-13 p: pstcvcjlnwsqphwnsr -3-15 p: lnfhbvnpmfztbqppcf -14-18 l: lllljllllllllllgld -4-5 g: gctggxhgpxkx -7-8 q: qqqqqqrdq -10-13 c: ccccccccccccc -4-9 s: sssnssskwsbfssssss -10-12 g: zgpgghbggjqgggkggjg -3-18 m: mmmmmmmmmmmmmmmmmkmm -1-3 z: jzzzz -1-4 k: fqqwmd -4-8 r: wzbrhxrw -2-13 x: fzvhrqwcrjjzxprnxlk -9-10 q: qqjqqqhqqr -4-10 g: mnlggbkdhrgtndk -4-19 w: wksmppsqrpppfkdzlrg -6-7 k: kkkkkxwkk -15-18 t: tttttttttttttthtttt -8-13 k: kkkkzkkvkkkktkkk -1-5 j: jjlqrwsjzkjbl -6-9 m: gmmmdmmmbmmdxmg -4-5 r: gdbfmxnrmc -3-4 h: rhhhh -2-8 n: nnnnnnnln -4-9 x: fxgwflwxblgnwxv -3-6 x: xmkxxvxxs -1-15 g: jgggggpgggggggpg -2-7 n: nwnnnnnn -2-4 r: hrwcr -5-8 x: tbbtxltxdsftztx -3-11 r: rzrwrdbqkhrbldrgph -2-10 j: jljxrjjxjv -17-18 b: bbbbbbwbbbbbbcbbtb -10-11 w: wwwjwwwwwrw -1-2 h: qbhh -2-3 r: rvjr -10-13 b: bfbbbjxbbjbbwblc -2-4 j: qjdt -4-5 j: jjjjjjbfjj -11-14 d: pssdgpplqjdzxr -4-8 x: zxgxfxjhjxgv -6-7 g: gdnhggz -3-14 f: fbfffsjffffffgfffff -2-7 f: qtxmpvfscrbgxfq -6-8 w: wwwwwlqwwswww -2-9 g: gbnwwncws -1-4 t: ttbctt -3-4 g: gggbl -5-8 h: hhhhhhhhh -9-16 n: nnnnnnnnnnnnnnnnn -3-4 x: xxxxxx -3-4 l: psgl -4-7 p: pppntst -4-13 m: mvdmnfnnpxjtmgnwgc -9-15 p: pprtppppwnphlhf -7-10 v: vlvvbvqtvp -11-15 k: jmckdsmvzptdslkkjqf -2-3 p: cwkf -8-9 r: rrrrmrrhhrr -7-8 h: vhhhhhhjh -4-5 z: zzhznzk -10-13 n: qnnnksnsnvnnnnt -1-4 m: jmmmmm -5-8 w: jpcmlxtwzvhww -10-12 k: kkkkkkkkkkkkk -11-14 g: ggggggrgmgggnhgggg -1-5 z: zzzwz -2-4 x: xxxxxxx -6-14 c: cccccvccccccckc -11-12 z: zzzkzzbzzcvz -13-18 p: pppppppppppppppppxpp -9-14 c: tcnphlfkczmcpc -7-8 n: wnzmjcnn -7-11 p: ppspppmdppp -2-6 w: wdwwwww -2-4 w: qzvw -8-9 j: njbvchssj -2-7 b: fnbbbnp -3-4 c: ccqv -1-5 x: xxqxdxx -3-9 w: wzwptwtwwwswbqmk -17-18 x: xxhplchxxxxxxxxxgm -4-5 g: fsggvmg -1-12 w: lwwwwwwwwwwwwwww -3-4 b: kbnvg -2-7 t: ztttmfftttrtttt -2-3 n: wqvnsn -1-6 z: qfddndzzg -15-17 z: nfzxdmgdvjzzpqdjt -1-5 g: mggglgggg -5-13 x: xxxxgxxxxxxxrxxb -12-13 x: xxxxxxxxxxxcx -5-6 r: prrvrrrrh -13-14 h: hhhhhhhlhhhhmz -8-10 j: jjjjjjnlbjhjzjljj -1-7 w: wwwwvwkwwb -4-5 h: hpshh -2-12 f: vhptghgvhqsf -16-17 w: wwwwwwwwwwwwwswzww -16-19 x: jltfxxfgkkxnnxjkrxz -3-13 s: ssfpvsssshssrxss -4-9 q: qsqqrqqqqjkqqkqv -9-11 h: djhvttnrjzh -2-3 j: jjjz -3-7 j: jtjqgmj -4-8 p: ppnpcpppspgpc -9-13 s: sssskslspdsnss -6-10 m: mxzlmmmpvgm -10-11 c: cccccccccwnc -6-8 f: klkqkthgzfbb -7-9 t: tttttttmx -2-13 r: nrlmjrhxwnjsrwfx -12-13 x: xthxxwpxsdxmj -3-11 r: nqgznrmqhcm -3-4 c: rqcxmgc -12-14 f: ffffffffrdfjffff -14-15 d: vdddxdddddddddddd -4-8 m: mmmcmkmmmmmkh -3-4 g: ggcggsm -7-10 p: pppppphppw -11-17 f: fffftfxbffffffffrff -1-18 f: ffffffffffffffffffff -4-6 x: mxnxkx -3-7 g: ggrlrmhggl -1-2 b: pbblqxtlztwcbt -4-5 c: ccccz -1-4 k: kqkhkkkk -9-12 v: vtvvgvvxvvvvv -3-4 g: ncgbnrvdbrm -9-12 t: tttttttttttttttt -14-17 c: crncccqdsjcclcxcmdw -8-10 h: hvhpghvhnfhhh -4-12 p: ppplpppppplnpppp -4-5 l: lrlllllnlllq -3-14 p: ppnppppppppppcpppppp -2-5 v: vmvvbv -6-7 v: vcvvvqvvvvvjvv -4-5 l: llllhl -5-12 h: hjhphkxhkcqh -6-7 f: fbskrlff -4-5 k: rkfnrk -1-4 q: tqqkqkqqcxq -6-7 p: pppppxp -1-2 f: fnfffffffffw -5-18 p: ppfpppppppppppppppp -1-5 d: dwndd -8-9 h: hhhhhhhhh -3-6 l: llllllllll -9-10 r: gvhwsfbckr -7-16 h: hhhhhhhhhhhhhhhhh -1-2 j: tjjlj -5-9 b: tsvwbmbvbk -1-8 r: vrrkbsrrrrkrrcrr -1-5 b: hbbbbbs -7-8 j: zgjwjcmnjjjljnvjjgj -11-15 z: zqzzzxvzzdmzzzzz -2-13 q: tqqnzjjxvcsvqksl -6-10 f: fqqczfhfmf -2-14 v: vcvvvvvvvvvvvvvv -1-5 c: kgcdcckbc -3-5 r: rrdrr -15-16 f: ffffffffffffffmbf -10-11 s: ssssssssssssxssnss -9-10 j: jjwjjjjjtkj -4-5 v: vfdvv -2-13 z: znkpztzzzzzzznlwzz -3-4 r: lrrm -15-16 n: nnnnnnnnnnnnnnsnn -6-12 n: nxnnxnnnpnnnnvn -4-8 q: lqsqdcqq -15-16 x: xxxxxxxxxmxxxxxtxrx -6-17 h: hhhhhhhhhhhhpjhhh -11-15 c: cccccjccccpcccc -11-12 r: rrmrhvzgrtrd -3-7 b: bwmbbblb -8-13 v: zlvhjhjhtwtkbxqqw -6-9 p: pppppfpppppk -2-5 r: rcrrjr -14-19 f: gfbrfsffprfffhrffzm -3-6 r: rrsrrtr -4-6 j: jjzjbz -1-4 l: jllnl -6-7 z: zzzzzppzzzzzz -17-18 h: xjvnmlhhnlxltrdltgr -2-14 z: xhtwcgngdxlzhnv -3-5 v: xvvrvvv -11-14 v: dnhpmxjvmwrknvvpr -8-17 w: vnwpmbbpmcwwgpwlwh -4-5 f: fffjl -13-16 v: vzvgvvvwvvvvvvvjvvgk -8-9 n: nnnnnknnn -18-19 g: gjgggkggggkxgpgdglh -2-4 t: ptkzwltkr -17-18 q: qbmbqqlqqjqqhtqfqq -3-6 r: rfkmhfd -4-7 h: fghxhhhh -4-5 s: spsxv -3-5 k: dkpkzkl -7-10 n: nzpnnnlnnsnnn -3-4 h: hhnh -19-20 r: rsrkmcrhkqfrfdqmlvxq -9-10 m: mmhmwmwmmvm -3-9 j: jdjjjjbjwjjjjjjjjjj -1-2 s: mpsscts -3-4 g: nghj -6-10 x: xxxxxnxxxhxx -10-13 t: tttttttttqttvtttt -12-13 s: nssssssnsjrss -7-9 z: hjkzxlzrczhhmm -16-17 s: sssssssssssssssfpsss -4-5 x: xxxxx -2-4 c: bppcccfwqs -4-11 w: wwwwwwwwwwwkw -6-8 m: hdxjhkpjdjmrql -2-19 k: zkhcfxztkgltmqbdqxj -1-3 n: gnqnnnnnrnnn -11-13 f: ffffffffgfmfkf -1-5 z: lwzkxzjzv -11-12 m: mhlxvjmrcffn -2-7 z: cqhbjlbzh -3-18 k: kdkkkfbkgwkdknkkkzjk -9-10 b: bbrbbbkcbbbbbzll -5-6 l: llplkl -9-15 c: vcgcngchvkvjsgcf -3-6 q: qqqqqwq -9-11 k: kxkjrpkkckkkkkskk -9-18 k: hbkrrwvctstksttkwrvf -2-3 j: jtjj -1-5 n: nnnnln -1-6 b: jpmbbbbqkd -5-7 w: wwkwwws -3-10 m: pxpwzblsvrlsxjpvpslt -11-12 j: ljjjjkjjjcmc -10-11 q: qqqqqqqqqqq -2-7 h: hqqhkbh -7-9 l: lllclmfslldrlsl -8-9 h: jhtvlvrhhhkhh -3-6 k: kkjkkkk -1-5 l: vllllc -1-2 q: vqqq -5-6 q: mkqhjp -7-14 l: lllllllrdlmlckll -3-4 k: kxkkrjk -6-8 l: pslrqlbl -1-8 t: gtzthtct -5-7 d: lhxkdrddf -2-3 h: hmhh -7-9 p: ppppvppppvwp -9-11 q: jhzvqqbqfnql -9-14 r: rrrrrrrrtrrrglrrz -11-12 s: shsssssssssbs -1-7 t: qtttttt -11-16 s: spgsmwbrshhldcsvvx -5-6 l: lkmlll -2-9 h: vdchgpmlhvxzjcp -4-7 k: xfkkkkkckmkk -1-3 w: wwww -13-14 c: cccccccgcwcccxdc -12-15 w: wrlwwxwwwlwwwfwcw -5-13 m: jmtjqmvkmpxdmt -7-11 m: nxnkxfgzcpfm -8-10 m: mmmmbhmmmk -11-13 z: khcksspxzwmznpl -6-7 x: xkxxcxj -8-11 s: sssrssssssss -6-12 h: wkzcnspbtjwchv -8-9 b: bbbbbbbkb -7-8 d: hxsjqfddxdb -15-16 g: gggggwgggggggggg -8-10 q: gqqzqmltqqlkqwtzgfn -11-16 j: kjsjjjjjjjckjjjj -2-4 s: vbfqcmgssqb -16-17 r: rrrrrrrrrrrrrrrrr -7-11 d: ddhdddrddtdd -2-3 x: gvpcx -4-10 t: mbftjndbttv -13-14 j: zjjfmsgqtgwdhd -6-11 s: qlqhssgsbvnsts -9-15 t: ttdttttvttttqttvs -3-6 l: lcvlll -3-5 x: mpdsxrhqlbcdx -1-4 q: kjqz -2-3 p: pncmptpppgp -2-6 l: tlbvnpllvxlgxhn -14-17 q: lgdsvqxwmhdwzhjsq -13-19 m: mmmmzmmsmmmmmmmmmmc -4-5 x: xxxxzl -2-4 n: nnrn -8-9 n: nnnnnnnns -11-14 l: bpmrcbhslcmxxv -7-12 p: ppmpvpppppkpfpp -4-10 k: kkkqkkkkkfkkkkk -8-11 s: sssfssssnssssss -8-16 l: xklrjlllrqlxhrkl -2-12 r: rrcrqrprhcrrrvrph -14-15 h: jrhhjhhhhhhzhmp -8-12 m: mmmmmcmmvwmmx -2-9 f: ffdffffmfqpffffffff -8-12 x: xxxxxxxgxxxr -5-6 z: zzzzzxz -14-17 j: jjjjjjjjjjjjjzjjs -1-3 f: qfjmrf -6-7 t: ttbttdq -8-9 x: xfxxxxxxxxbxxxq -4-6 q: qqpgwqbr -5-12 l: lqzqrtgjmzml -5-7 w: wwwnwjwwfw -5-6 x: znxdtx -4-5 x: qqxhvmxxxxz -1-5 n: nnnnnn -2-5 s: gxsnj -5-7 s: gssjssszst -9-14 h: zjhrdpjwhkppdf -2-8 t: ftgttpcttxtvnttntjs -1-4 t: lttl -8-10 f: fffffffffrf -3-6 q: qvqxrhd -9-10 j: zrfxvmhgzcnkthzs -5-7 q: rqtqxqq -2-4 j: jxnj -7-8 c: fccccczkc -1-2 x: xktx -5-6 t: tttqkt -3-4 m: crbhwmq -5-7 d: ddddhdcd -3-4 w: wwcn -2-7 d: dmdddcd -6-7 l: llzllfg -5-8 l: llxllllllf -3-4 s: lspsb -1-6 k: kkkkkdk -6-12 x: ztxxmxxqxrxxxcxx -5-12 p: fpngpxprbqhprvj -1-11 k: kvkkkkkkkkkkkkkkk -2-11 x: qxxnxxxxxxxmxfxjsg -12-14 r: wzrrfztrbrrrztgrgrm -1-4 r: rbrlrj -14-16 d: dddddddddddddsddd -8-15 l: lzllmllclllljlll -7-8 l: qkgqklzzllqclqlfjl -1-4 g: vggggg -12-13 c: krbpskrctrvtc -3-6 t: btttttmkt -8-12 t: tttttttttttltttt -10-16 k: kkkkkqkkkkkkkkkw -5-6 d: ddldvkd -10-14 v: vvbrvvvkbvgvvr -4-13 v: vvvcvvqcvflrph -7-17 x: qxfxxxxvzslqzzbcx -9-10 g: ggggggggvjggggggggg -3-4 p: hpppkp -1-3 s: lstcssssv -4-6 n: nnnsnmnnn -2-6 k: kkkknkvkg -1-2 c: cccccc -8-13 h: hhhhhhhhhzhhv -10-13 h: hwvhhhhjhhthhhhlxh -15-18 p: pzpgpppppgpxpppbppnp -10-11 n: nffrjnmbnxj -5-9 l: lllldrllbzljsw -4-8 j: jjmjjjrjsjjjjj -2-9 v: vtzlvvdjv -2-3 g: ggcf -9-15 b: psxgbbcjbbhbntb -15-16 q: qqqqqqqqqqqqqqqz -11-12 c: dvgckwdtcccc -5-11 s: nskssssssfwb -2-7 p: pdfdnpqppzpp -3-7 d: dcdwnmdgnstt -13-14 w: hwdsrqmdmxhlkm -5-7 l: lzzdzlvrtgzllcn -5-6 t: bttttvt -6-8 c: crcczxckcc -5-7 g: gmvgggg -7-9 g: gggggglgqgg -5-6 t: ttttrt -2-3 g: sntggpm -4-6 m: flmmsm -9-12 w: wwwwwwwwwwjw -6-13 x: cfxrwlljbnzlb -13-16 v: wvfcgrgfvggjcbqv -7-8 n: sdnrsnhn -1-3 q: qqqrqmjfq -4-6 s: bzdsslss -1-5 f: rfffcf -4-5 s: sssss -4-5 h: xhkhhh -10-11 g: ggjdgpvggggx -9-10 v: vvvvvvvvjvvvjvwvv -3-7 b: fbbmzbblqzvfgpnrl -6-11 h: hhhhhlhhhhchhhhh -3-4 l: llllstmhwlchzd -3-7 t: xthsjgtcblcszn -2-17 f: kfjwdtmhzjzlvhpjf -2-5 b: rbtbg -9-15 z: mzzzcfzzzwvtzqgbzjzm -6-12 f: qgtzmktjffmfn -11-17 f: flcffsqwlfjvbcffb -5-6 r: gsdrrr -13-14 b: bbbbbbnbbbnbbbbbsb -2-9 b: bcbrvbvbbbzb -3-5 t: tkttft -6-7 v: vcvlqvdcvdh -7-13 w: wwwxwwwwhwwwlqwh -5-6 z: zkhpzzjtnkjzf -7-9 p: pppppppppppkppppp -4-7 p: spppfjmc -8-9 k: sxnkplwfz -4-5 r: clpgrr -7-8 m: mmmntmmmpmmmmrmpk -4-5 j: jxbjnxj -3-10 b: jwbclnqzdbnb -5-6 r: rxbxlnsmrrfr -3-4 f: fvfsbq -2-4 x: sxxxd -7-8 p: qpppppprpp -3-4 q: qqqq -6-8 n: njwgnqntnnn -6-10 z: zdzzgzzzzj -6-9 d: rwdlfdrtd -5-6 l: skllpxslll -5-7 d: dwdznhddttljdnvkdws -1-3 d: dhdc -1-11 s: sqgzsrrvgms -8-14 w: wvvwrwwlwwmwwwn -11-12 t: ttbttttttttttttt -17-18 f: lfffffmfffffffffkff -17-19 k: kkkmzkkkrkfspllkckb -4-7 f: fxfjtdfcxff -4-10 h: hhhrhhhhhhhhhh -6-7 p: ppkpppppp -5-10 c: hccpcgbkbctctp -5-11 l: llllvljllltlllplll -5-6 c: kcntkj -16-18 m: mmxmmmmmmmlmmmmwmmm -4-7 b: bbvbbrbb -6-7 n: dbrqnnn -3-4 h: hhhht -11-13 s: sssssssssvlwxsfj -3-9 g: zrsdrgrzgghxj -14-15 f: ffzgnqfrclzgxfffff -7-8 c: cccccccbc -5-8 s: ssssssssss -8-15 k: klkkkppksvdrknd -4-6 h: hfhhjljh -8-15 c: cxljcccvhpklxcr -3-7 h: kpnttrczt -14-16 p: tqxpdpddrwfxgjvc -12-15 j: cjjjmwjdbtpwjmjcg -11-17 n: nnnnnnnnnnnnnnnnln -1-8 s: sssswsms -9-10 w: wwwwwwwwww -6-16 v: gvfjvvvvvqlsbrvvd -3-8 q: rvfnrfvsmjk -4-6 w: wvpwtww -7-10 c: xcctfssplcdqrpqs -4-10 j: mjcjjwvjwjm -7-11 w: qmwjfrjpjkqww -6-18 r: qvvthtbxlkrnvqzvlf -10-12 f: ffglffjffffctfffff -6-7 x: xxhxtfpqxxx -9-10 t: tttttttxtt -3-10 j: cpqxwljhgjldfns -15-16 q: mqqnqfqjfqqqzqqt -4-12 f: fffffffffffvf -4-10 s: ssssssszst -1-6 x: xgxxxxxxkx -2-4 z: zzzb -11-13 j: jjjjjjjjjjjjv -1-2 j: hjjd -4-12 h: hhljhhxhxnhr -6-10 b: bbbbbkbbbv -7-8 m: mmmmmmgvmm -9-15 h: hhhhhhhhwhhhwhhh -1-2 g: gvglg -4-10 v: gkbvgntvrvv -9-10 p: mjpppbppnpjv -1-3 w: wwwtww -1-7 v: vmvsgjdfdpwtvqqfsh -10-12 c: ccccccccclmcccjc -13-14 g: gggggglgrggqzgggvbgg -1-6 p: mhptnp -10-11 n: nnnnnnjnnpxxn -2-5 l: tllcc -13-14 j: zbvlwljjgljwjj -10-11 p: ppppppvpppjppvp -12-18 c: cccccccccctdccccch -15-16 j: jjjjjjjjjjjjrjjj -5-8 t: gjkttztjt -5-9 k: kjkhwdvkk -5-7 p: pjvpppp -2-4 w: wwwhwlwwm -4-5 m: mmljm -6-15 b: rbbncbrvmdvbbqb -13-15 n: nnnrnnpdfnnqnnncnfnn -2-11 r: srfhtxczprbx -3-6 n: nnnnnh -15-16 v: vvvvvrvvvvvvvvvvr -7-8 m: jphmmmmft -4-6 p: pppjpvp -1-4 g: dggkgg -1-2 p: zppsp -6-7 b: bbbbbbbbbbb -3-4 x: vxsv -9-13 t: pqtqttttkxtghv -10-19 v: vvvvvvvvvvvvvvvvvvxv -6-13 z: wnmzkzzqftzmc -6-13 l: vklgsrjrkjpzlqll -3-6 h: mwhllh -1-8 l: blllllltl -3-9 v: glxlzpffvgvmb -2-5 s: sssstss -3-9 t: tfptcrhtlzqxcv -9-10 t: ttttttttttjttt -9-14 h: ktwphtsnkmlzwd -3-5 z: zzznz -2-3 t: twtt -3-5 f: ffffsf -17-18 w: wwhwwwwwvwwwwwwwnsw -3-13 w: wwwwwwwvhwwwwpwww -7-8 n: pjnxnnnntpwnbsjnnz -2-4 v: vvvjhvv -2-9 d: dmddwcpnqdddszpb -3-4 q: qqrqqh -1-2 d: czdd -1-4 d: xsdzrms -1-3 n: znxnnn -5-7 r: rrrrnrzrr -2-5 c: ccccxcc -6-7 c: nccccdc -1-4 s: bslsrvgjdfsgf -10-11 j: jcjnjjpjlhh -8-12 k: lzrvvhtkkpbkfwjzcmz -10-13 b: bbbbbbbrsnbbmb -2-9 s: hswtzhlss -6-7 j: cpnjjjf -11-15 p: pgppqsfjcpbnmqp -4-6 k: kkkfwq -10-11 c: rccccccccccccc -5-14 d: bmfppdgvccmbdqpx -7-8 v: vqnvvqvvvvjvv -7-16 f: ffffffkfffffffffff -14-15 r: nbdlfkrbcrxbcts -13-14 v: vvfvvvvvzgvvvvmvv -1-12 l: glwdllllpllltll -3-9 x: mnxpljmxnm -4-5 h: rjqhbxnvkc -13-14 z: zzjzkzzlcbzpjzzz -2-6 p: tnpppp -8-12 n: kpjfjwpnwlzqhwbz -2-15 q: jqkjkbzcwvvqbxq -2-3 l: llllll -15-19 l: llllllllllfllllllll -1-3 p: pkzkpsvdptz -1-8 f: fffffffvfrf -1-11 j: prdqjlhjdvljjvjmhnm -10-16 v: stshngzvzvvvnffv -10-11 m: nmmtmqmmmmb -4-9 t: nzttkfcvrnd -18-20 t: bbttltktrgtntgtzhtct -4-6 p: pppglp -7-13 g: vgrccggpbvxgl -5-7 l: lqllvld -7-10 w: wswwwwqrww -7-8 c: cncczcmlcmcx -1-9 d: ggjtdddcqcmpd -4-7 q: vdkqwnqkbsdqxwwth -5-6 s: ptjwxsz -7-14 v: vvgbvtvvxvzvwvvc -4-8 h: tmjhhrndwlh -6-7 w: wwjvswf -2-9 v: vvvvvvvmv -2-4 c: hcgc -2-3 x: xxxx -6-15 h: vnbhwhhwtzztrlh -13-16 k: kkknkkkkkkkkkkkrkk -2-7 b: nbfxslbqblbbbbbbl -9-11 k: kkrqkzkkkvkshqkbkkhk -9-13 j: qjjjjjjvmrjjjjjjjj -7-15 h: zhqhhhjbhdhhmhfn -3-5 t: vtvstkkttftttt -7-8 h: hdhhhqhhnnfqwhzhdlsx -16-19 k: kkkkkkkkkkkkkkkfkkd -3-4 f: qfjsxfnsfq -13-14 t: ttjftttcttttptttt -8-9 f: gjmfffgrq -9-10 m: mmpmmljmmmmmm -9-10 k: skttkrjkkb -3-4 k: kkgk -1-6 h: vhhhhvhh -11-19 z: zzhzzzzzzzzvznzzzzgz -9-11 z: mzzzzzzlzzbz -7-16 c: tpcwtwcbljrnztwrsdd -13-15 b: hnrbfgqwqwqhpnc -2-4 g: fgsdg -2-3 k: kklkkqkhklkkqb -8-9 g: tgrfdbvgfzqvsf -3-12 j: jmjvwqrpsjvc -4-10 v: zvhjvtpjgvvd -5-6 p: fgplzd -9-13 r: csngrmrxrqvhdwfkvns -7-13 q: qqqqqqqqqqqqqqqqq -11-16 l: cvlxgkdmltldzsplzz -8-11 z: znmhzzcpbzz -13-14 x: xxxxxxxxxxxxxhxx -11-20 c: qmhcvthqctdtscfcjcck -14-15 l: lnllllslwjlllll -5-7 p: qppptqm -1-7 f: chffvqfrdffbcmqf -8-14 h: hhhbhhrshhphhl -16-19 j: tgsjqjwjjjbcjtjjjjj -3-4 p: jzppdrzpkgcxdljgm -5-6 z: zzzzgzzz -3-8 t: nvzdttst -4-6 x: qfkznxh -9-18 d: ddddddddzddddddddl -11-17 x: xcxrxxxxxqzrxxxxxxx -3-4 l: lmll -10-13 f: fffffffffffffff -7-9 v: mccgvfvlh -9-10 m: ddmlmtmgmmgmprmbmpqm -5-10 v: vvvvjvvvvvvvvvx -3-10 v: dwxdfjhxgsznhzqsqnd -1-3 k: xkrkkkkkkmp -2-5 c: dcrscf -1-10 p: ppwpwppppppljtppr -3-7 r: rrrrrrbrdr -5-9 t: ttttjtttttttttt -4-5 w: wwwxr -6-11 f: rtwzsffhxplnwrzpwwj -3-9 c: klcdzfchcnxcccnccpc -3-4 g: mgnlg -1-5 f: kffgpffft -3-4 l: qlsvllnl -2-5 w: vwwwwwwrf -11-12 n: qcgnnznfnmnt -6-13 d: rbbzghqwwmrdkssgn -1-3 x: hdxnqxtphtmk -10-13 w: xwwwxwcwrfcwm -9-10 p: tpppfxvbppppgpnvfzcv -8-13 h: nhqhqhthmpmnhlch -11-13 z: hjkftzgzlfhjjh -9-10 t: tttthttpzt -2-8 g: vghggdbfggrfggrgggrt -11-16 g: gjzgfnggggsgggzh -6-10 r: srmjvrrrlrrrhrl -2-11 d: ddddddddbddddd -5-6 j: jjfjjjj -8-11 s: ssssssssssqssmssss -4-5 v: vvvhp -5-7 c: ccqxvklbc -8-9 q: qnqfgqvqqqdwzqmcq -3-5 q: zbqqq -6-9 g: kkgzgwpvgt -1-14 h: hhhhhhhhhhhhhhh -9-10 w: swwwwwwwjq -1-13 j: xjwjjljjjjdjjjjmjj -11-13 m: smmhmmcmmmkmdmmmmm -15-17 p: ppppppppppppppsps diff --git a/day3/input.txt b/day3/input.txt new file mode 100644 index 0000000..0c81dde --- /dev/null +++ b/day3/input.txt @@ -0,0 +1,300 @@ +tdltdtmhlRNCBcwmHr +WDzDPnvvGnsWLWpGJJHRzCCRZNBRrRwMNwHH +DsDsQnJDnWsJnJvrQDPJddgShFQhjljqhggbdbbt +LqvbLLTdvlfdqTLtbvDSRHPhHmRSnndHnHRM +jswsGgzwsNgNWNwGJzVrgSHnhHHDmShmmGShnMDPRn +JMNWzVwMpjpLpTfTLLTf +HnQBjMjPQmRMmJCmBPGSFTSVWcNNGQQGGGTV +dgstqdtsbwrzddvrvdwqzhrWSFllDSWGDWFGDNsDDWSTHT +gpqZwwzHZhwzMJBmfZnnJLCL +PJHbTPCmLdTtLtRtBvzBrWffft +hnpTqhMncpFDppDqqNVFVvWzvNWNvfBfzs +GwZccTpgnDSDDZQdCZbbClbCmm +bnZnRZZZRlpGBbfRJjBbMfhCHwfsHShschMsHCww +LqVtqVmtLQvVqqLTFFvLDMhDMpMhwMSLDhsDCH +mFQWtNggVQQgmdgpJGpnnZJjbWGBRZ +GsdGrGqvLZqWvWWdrPLdfvsvSJDDcQQhcTbFbTcCJLSJShcJ +wmBlnjwjgHSSDQjfDDfF +wggpmwmwNnMlHRpttRHmlPfWzdGvvvzrZWVvMrPvvZ +jvlvTvTvTvcqTdZrdnGlVfNgspslpfGGnM +BWQhQzQwmhwWHbWCSRMRgjpjVDDRgDgVffgV +zLHQSBWmLcjdPjLLLZ +BjjLnRzBnRmTSTBhpBmCjnLqNPGGVNZgNgLGddZVNVdf +wDDJJQJlJtHrlwFFPNGGfZbbbglgfPSf +tFQssvcDJtJcFcvwHtBmnSCvRmzzhpSCWvmC +GvPVvVHPgzPMcFvDHssdpCpsnpHnsj +gmhmSRZBJTTTmSBZhhrqSBLRCnsBjjnbjBdbdbbdnbjwwBsj +WlrgrRgJSgZSJJJTZRtvVzvGtfzcVFcMzlGM +QSZwwsBZZwjsndFsMPHLzTLLLz +tpJfgHghmvqpNWrrTMrMMRzPrMPJ +ghgghmlvmgNWgmWwBQcbGGSclGHjjb +lhlnWGGFWZhDfgFfWDfrhgrRwcccqcZQBQMwcqJMTMRMqJ +jVdpSLPVSjtNdjdPtptzLNPPzcBzwCQrCcTBTRqwwqMCJTcC +PNHdpPLHtHtjdLghnHWvrvnFlFnf +qttvqPdCtLrqRgfpgpMgSfSWvM +TJccnTDjjDlDhSpfHdhpTpZf +wldwmJdwmsstCsLzBsBCGP +ddpCGpGpnndnpWqdVVpDGfDGFzSsFSZzBJShJsVtTstssrsr +jbvPLwFjztJBtvJz +wjggcgPFLlLwPFNwHmNPQqDRQfCRGCGqnpcRqQnn +PmmGhLLcgZbPQnqH +DlVsvvrvvvrsDJLRDvvCHbpBqpnbQnggbWZbggVW +vJRTSSRJClCCDwTJRfSfCsGzMLmGmzmjGcfmdFNNNtfh +vcmmMvfctfjLjvvRbLdHSnQSgQFnghSgQQSSjT +WzVbszVNHnTsQFgZ +pVlGlzrbDNrDrPpJNNJpVdBDvLdqvvvqqdBqcfvLdq +gfzgzPDVZQDDSqBdtFfdFdvqBB +MrwmTcJJsMwNmJdvFqdFGGtvvsGt +HMmTTwcJqcrTHrjjczhZQgzghgQHhnhhHh +BffBVgjPwPPPJwBBVJfDDsgrdZdcZqlcSnSncRNzHzZljNqq +CmWFbCmFvMtLLQCTbbbLtRqdSZHcdnqqNqNTRlnqNH +MpthtSMvFbvWPVDrsDgpPggD +VVRntNwmlvhGccPNfS +QZcgZppdrZQTzrBgCbrbdQrBvjLssPjSssMsfSLhTPPGvLTP +ZZcpJZHpgCgpppdrJRtVJFqVFVDRWJmtVq +dpdhtpjHtnpFRHdjRnwspMQmqpqqmVqmTVJQMmff +gSCcBCBCcgwDBLSvcLQQVTMmfmMJDqfTrrVV +gSwPzLBbNCbFnHHjhthh +dLNrRmqLqRgCNNrCJrSqqSQgjDWnGpGjDjspnlslGHnnjsQj +vVTzZFVttVBMFbFfffVVmVtHWpDspjHWWWbGjjjDsjWllW +hwFFwztTzvZmBzVfqhSSNPRPPCRPRJCr +BjfcmzCCTtNBNjcTDWwzPzDMMQPDPMws +lGpJFHnlSlnZbGnQQSBLwSPPLMsDQh +JFHHpbnZbGbZgvTmqfNgqCcvjB +ShhpqjhhVZmHhSJSSnLzdNRNTjLwNTNTzv +QffRWRrMGwLfgNcNgc +GQrQDPRBlGlsGrWtrtPDPbWpqhZqSqJJpHZSVhVhhmmBZF +ZlVVDTtTrzFDrFfB +NNGbJNNNNmpWBNbNWmjMfdjmFfPdqFMrMj +NQvRNvSRHSQBgRGQJJQQHTtcVLlVcTwVTllnRsttZs +fjsDhJsVDcVJVljFDqLqFlnnCFbzbCCCZCzCtCZrnCCM +HwQNrHWNPGPHMZCvMCbzzvHZ +dBWwWPPGrGwBlcjDlcjcjldL +NCLMHJZqCHHHMFlNBZtTZRvtStZdcRbc +wDrnpbswVgsrsWmGpDpfpBQtRSTmdvBjTjtBScctRm +gwzgbGDgpgFJMzlzPJCC +SpnfPVqFnGfPGggqfGbjZZrtWrlRlbHpZjRZ +mmJmdJBsBJsDwhJBQhTZtzdRltrrRlrtHjjl +NBscQhmsmmQLLwLmhhwmcSSGfnfSFCSMCPfHCMqG +hvVnPwZwVzQrhrVhPPPrpQVDBgMMlSTLZsgdDTSTdsssLd +RvFCqCGfbFCRbRmSBMMsLBgdFDSgdL +cRGjRWbWjvtPvrQcnr +LzLNzhpcRRcTmNDzRhTPDjMvMnVlMgjngSMrMzrQQr +tfbWfWcWddFcGFwfswFFFCrjjvlVbrQjSglSQMjgvlgl +FHWGCHCCGcwfswqHdHqwwmPqRJDpZZNRJPRPPTTJNR +gLHLLhTjZVMwMRSZZS +GdqdtlPvnQPPnsRw +tNNGvdtbdmJmHRTRJrFr +QjjdjGDvdjwpZsssvsPZFZll +mTWWMWzbPHmZwHHw +JwTbtBztMVLDSpjVtc +SZSBWtBSwnTDFSDD +CsrJWmmPrPQmpzsPmssssvnTFhvTnPhnFDFfDFnwqF +CCCCzprgrJJCgmVcpJmWLQZddHlGbMbdZMbtZNNcHHBt +fgqqrZLqZqFzFFWzZzgPPbnMNNNvQnpQnQbNbpcHNP +SdwdmwCClCCwldhRSmsvpbncjQbNNQMtjQnMvS +mDlwhMRlCwDCTVwVJRdGgfzLLzzGzGFWqGqfGD +CnVvCqvnRqHVqnWcMFnLmLnMMm +ZrdzbzbrdwtQdSfdcmmFMBWFNFWLwNNp +QFrQtJDdSZdDVHlVCPssJRll +qMpGGmVNHMGVjRJJGfRgQtjQ +flsTZCwDwWcZZPCrPZZWgLLjdJJQSJTQFSgQJJRt +ZcChshwZCDvlCZCsPHMHzqNzBmMfmBBMfh +wCtZtzCnPldZSdZp +VMspbMHspbshbPBLFsdcsLBdLs +pRrQHpNbQbrqRqJfnwfwzR +DPPcDlPwNdNRJsccpgvwBBvqGGQtqrCjwr +fMSVrMWmLZqHQgLggCHH +mZZWVTbTWWfnMWrbmznfZfsPNcdsdpRcNJplbJNcNRNl +ztlNSLhplhBHwwBBMBtv +DnVVfcGbVnGRZGgvPMpHBpCmJMDP +GnZdZZnbdpVcQjQQFjjqrlNWlrsNrFNLLsWqSF +bJQgDRfjDbJbRMTgSSPzPHCNhzQHHszz +wmnwFmDcwFGvpvwGnSWPNPWzPHhhcWSCNz +GpDtmvrdGvvBmZrLTjZRTqTjblbMfL +gBhZmtHhhhwTJqwDFqGGqPWqDb +rRLRVTrjCrCVdFjMbvGPPGDPvW +LSsVdrRNRCCffCSllQNBTNgNlmhHBJ +lCzCCDMDlzzlZtttWDnDCZPbVGLhSmSLGbSgGPgVZm +sBcNsqTQwRQRrBgbgSbPTLVSnLmV +wcqrjQsBBjdCzjdnCv +ZgHVtMQVVgvQjjtzdzfdFHppfmzwpz +CsBrBLLJSrsRCvnGvfRdvF +DbBJTJDLrJDqqqrrhJsJqVWthWlZZlZjMPZltvtMjZ +bsHlrwlnwwQJsqmJnqsPSLzTLpPGPSgPPPWmLT +fdvBtpMDfpCCfBcCcCBtDfFSgTMTGSTRPLgPWGzGgVgLVz +NDcjcDZjBCdvvjdvhlbJnprjnnbhwrqn +zRpLMMqjgMggqLDqDRVGNGdhGtvGGnvGnrznGB +VScbcZPJZWZlZbbHSJQJGtrGvtmdBBGmdGBrdn +cbPsZcPCcWfCZPcPQslljpDqwfqVgRLMTRjwVqLM +QtRWhjtsbttQtnbbQvsrRBfDNdMGBLZLVVNVGNLGWd +JwllwllJmCwzPFSJzwwTBZLDLdBBBPLZZBVTTL +ZwFSSmpwzScFSmggHQjbQvjvscQbrtnjbs +WMLWnSHSMnHjPVMVMVVJGM +zQzRcmttdftrtrdZZRzDtPZppphsVbjGbQbJTTsCbsjppG +dmrDtqfzrmZtqDvdfmZmtdqzLNlgnwgWLNvwFWgWWPNFSFNN +hvSrMwqljjBHvqhHsHshqnrZcCCpfCZZCCZZCcCfCZ +QDVTRFWlmDnpLnnPTPCZ +DVQVtmQRWRRGFVRWVvlwdShBvvSqvtjMdd +pnMQbbnDQMNMDQsnTplNTDvqPGHZGcvqmCqvmqZqmlqP +dwJdBBwdJJwLJBLSRJczWmHPzqWzzHGmvPRHGG +LrdFgSSLBsDMFFcbQb +NSnwvSPPVNnPTLVpRvVvRnqhhQQzHhLbzlqcqHzmHHqh +DFMMfBffgZJtFsJgwdDHGHHzzmqhhHQzDQGhcH +dMrZMMgFfFtZJZfBWMfVPNwPpNwPVSNVjjVWpN +dNlLSvLSdNlhphlhlWfVFFbZHqjjHHvqFZQHCQ +BcrTcJfRMRmrcbqcQgcHVCVF +fBzTJJRmfPPmnppdNwhllwlz +GqfSSmPSFwSCmFBwfQfQBfGnggLrhTrJBDDnrddsJDdLTL +cHHvVtptbzbrTQJTggnTQv +QRVbbQWbpZbVQVGfRmwfFwmjflPP +zzBQJmzQPPlddpJWlzzfdpfjvLvgmvFggMFGDVvLGHVFvvtM +CCSTrCncrhcCcwhRnCqCttFDvMFvtWtVHvFhvLVv +wCTNCSRnbnpWzlBpJspN +PTzTPlrrfrbzmftTTrrjPMsNNFZQgQHVgMtNVFMgFF +DpGBcpvdZhccdGJhqDBphZhdVRQVQQVsqFwMRwFgFNHMHwQQ +SGcLGpdGnBhDJppSDZlPTTmLrmbTLTmrZL +PzmhTqSzdDGcDhzdJDPBmJnrdVppNVVtgttMVrNnMMnV +blbQbWLvlWffCjlGCWwsnLpnpMggnpspnsrg +fQRbCZRfFZvZRQHRvHjmGmTFPcBmDhBGTzmGqS +JJVJfgJfVDdfDDcpTBgdwQMQZQRZQZwmlmWwQGcm +ttzzjjzSqPzqtqzFrPvzwNwMlMRNnnwnllSmmmQG +FCvvChhsRVhhJBdB +rbQZdRzBFTBzZZcclntHnlfJlrNgngfS +PPqGjpPGqpmDmDwqPDVnlNpnJfnnnglJCHlNfC +MMhhjMwwPvZNZTvLTZdL +ZZGgVgwfQNVNLfZsPqRsVTDspTpsqs +jdjdSbmMdMBSvMgBcWpsRpTWDHWTvRPs +httmBMhbBBjCdzShfGzJlnQLlgGGZwww +gLSLMCbVSGRPdTwtjtVfdt +TpzJpFFqmzpscslBtddjlwjjDhhldhvP +WpsTmJpHssqnHMGLnGSgbH +RRBCpJJplCchWJJHCHCvjdpMzFzrNvVgFrrMzz +btLLPGSQctnZnPwwSjgZjjjNNrvMvVrrjV +tmLPGmnbnsLLwqQPSwqGbwDfHlHWBWlCsffshDCBfWcJ +GhDFZFGZzzbCdZbZVlfv +bPNWSbSJSWSJPBBLLqClCltlwlNmllwvCQfC +PgPLqgqpWcWJJcnqJccccGrjbHhDRGMDGTDbpRhbFF +VJRffrVJvDzcRcFFbpSlQLHlvtlstbbt +NmNqPhPqPZhsQLQwSRpH +dWRnRdBmMBWgjCgVGjFcCDzf +nhhQFDmVmDGhmFpgCgBpcpHqncCt +fLLZbljhjjscCggBCLCL +PhMRhNWddWNjfRdPRfWNfVmvQFVQzVMJJDJGrmQGrQ +PNQtsHvZtsQgQLPsPtHZbfzRffRzMMqRqpzbfqng +jDwCmhrDlhBhBldrzJMmfFFbSfFnqpFb +jdljDrDrTBBnGVNcGcQLQLQPQL +MjzrjZvWQRHtjQdS +JFJlDJbcbvtRQmQbQQdf +JqNDBVNpqCBqDBCBVDcNVBqNMWgGZTPZgCrPzzvghPwrwZgG +gzggttLNDFztFCNWzrLttmFddSjsdJsgZVSsJjwjgbgZVG +pPPcqpnqHMpcRbhhMMpThvnwZSjZvdwZvwdZSBvGZSGVZZ +ThcPlHbbPHRnlRTHnMhpfltrNLWzCWWCztzffQLLDmDN +SlNJRpCGTmdFFDcbqJZFFJ +wwnWPHgsLPlVVfssLcZcjjzrDqcFzcgchZ +WVvQHQPfLwSGSvCRlNSd +wWnWcpWDcwHcRdJQTdmNsT +hprqBSvZNjFdFjsq +fSfpvhLBfltMCLzWzC +fdPfPwPmdmLZfNWjWszQNjjN +MBRSBBRBChMRQWhlmVWNsmzm +FvRcSrcRrtvrRrvrrrmcwGwLnTHHqGtwZwHdGPHP +tFPlJcDJdvLZvFlcvlHtQRthbgQjrhsgQgNr +qCnpGMnTTVwCCMnqwWfpChQHRbrgQjsQmmfrrHgHrH +GMnTSBnVTnBGbLlDDvFBLDbF +rJhPGdLSWnnrdqLhPPWGjcZZffjcgNdgNgRcNfwf +mHsDTQlsQBvWspTHzpmCTpcZgwZjZfZNRFwRjRRNMHjZ +vCzDDQsDDvbllWTllCDCCTSLbqSPVqSnJLGSqrPLtVnP +sSRdHHHSRhjShVHWVFJdQPNFpGCrQCCfflqlPvfN +gLztmctMwnBtTzMppBCCrGfQlQQqBN +bbbncfzLmmmnnZLgHZWjhsjVJjHRVSdR +bRgwCHfgfCCttRbdRLHzzGDnDnLBhmBGzvmFZD +rssprQlqlTQGNPcJGVsTBDmWzBnPnhWBvZZDBvDm +MQQTJTNGNcqrNwMwwHRdRbdgbj +sBnnsDLDBCsLTngnZLcdmppCdmpRJwJJQdMRMP +NlrTblbNNbwRPpjjbPdJ +GlztrhvfGqltqzWrcZgFZVSWWSTSncnL +FLJqLFRjzFqzJddlLfNNCjPrGSHCPHNVNVSH +TWTpngssgcPgNGPc +pGMDZpnZBMDsTTTnTsQWWZTRlbvdfZlLflZzJfdqvdRbqf +ClsJpCgsppMbFFFbHp +PvQRPqQPvRdwLNZLZqqwGPPPNTbjMcFcfHjHcMNfBNHrcDDM +GLRnzqzdRqwdZnLLPqqZdQGsVtsnlWCVVWsgtWSSVVhFWt +LNLSJjQDLlzRGwTTzQfT +WbZqchqMZqZWbmdZbhTrvPmGvwfHRHGTHRwH +dcfChsWWZgbfWdhCbgDNFBBDjFNBjjVNpD +HjCLsHJHCjnNVHdCnHtJdtQQgQDhFGFDLcwFDBFMMDBT +vWrSWSbSrRqmzlWlQgRQQTcRMgMTMFwT +bzrpWWzbqrpnZsJwZVpC +FhlfrNdTrtFdtrrrfcZBMdpZcHHHZMcccv +PmbjVDjwQbbjjVpDDvpzBZSSMsvG +jmbVjPVWqVmgJgjmmPPQjmqlCMlftnftnNlTTLLfNfrJtN +PwMWzqwWbFwznqNQQhffQjJfnhfJ +mmdpgmttDrpgpdmZdHmgNsQVZvJNMQvVJffsZVQf +pdcBrMgDgcgrrHPcFSFzzqzFFbPS +QRJJtSfJtQtjQRnSnNssTNdgsgdwddRWcm +qHMDhPBqbqZVzbddTcVwSmNWNVcc +BFCZbqPbHBPMhCljvQSvGCCpnj +HSzHNHlNHmBSHSBFrFFgBHVVqbQLTTcLtqDsDTBTDcDp +CWQZGCWfMZGqbTbtpLsbWp +GwjhPCRZPQPPCPwmzSNzzzmwzlzSgH +GgTvJbpJGvPVHZZZLW +cwWdnwmWnfwZDBHHNzZBVf +nhjjmshdwmSjsnmwrrQrtbtbgTTgrWth +lFBTtcnlcFlppVpttcFZVhTTDDLCHDSDCjDCMSLZDWdDDSjD +mrfsgMfRRwwPffJfbdDdgWGLGLSDjSSWdC +MmfNPwPzMzlhlFlplV +pRVgVsRzdDVJJJRttZTnnLrGsrGssG +BjMvMBWmjWNWSWrLGZPTHLSLTrZr +LLMWQjfvmljLBRVJfbChfVgJRz +RPDsdnVrVnVzScStjpFSjV +BTLBhMMBpSMsMjZz +hwbBgTsbBbGrGHvGrvDnPH +nzwgtSFRqhDphDwB +CmWCrrmrVPGCDTbpvvvhsZDG +VdNrlWHpmQzSMgJFdRFz +jrhZtczchvvFCTmCDlDMrMDT +bHbLnbbwLnWQpLQgQVpQCTDqdmwqmDqCdDCSlmdd +sgVgglblptsfFthtvR +LctzWvrzTWsvWBfvBzdJQSdQhQQfpDJJmmDD +lMRwjlwlLnZwLHLggQDRGphdFDJQdSdJJQ +CjPZCVCjgPwgWqWLqzzcWsVq +JNWHsPNsJNHBnfnnqfqswcctDTmPCRmmTRtgCdmD +rjGrLrbhGRZVGQhphbbmDgDZMDMwdwDcCMgcDM +zvbLvVpFvjzVhbQjGjHlnflJFlWRqBWWBJBS +NfCMfGNdGqVDhWBvncLllhBgcmgL +bJbRbHHtRtJtZTpSRtsLDLzvcvBmgnnnJlsm +SbbbTRpbQHSbbwHZZTHqfCNMfqFWGNGVQMFGDC +MdzwdMpVwVNMHQMJNcHM +mDtcPDqWnDqgnGJvLHTJHJ +mmjhhRBRBcdZrcdRCz +lvldsNpNGCGgCvCGggDLMbMmrdwnjjZdLLwrjM +HWHtPHSHPBnrmZjBbwwC +tHqWRtfttNlDClvNqs +BTRNQTQTTBFRTglDwzztDgCwLF +jZsMjqgdrrzzSbsDSwsw +jWZrMgMjGdvrWWvrWMfMfZTBHTHQBHBQNpQRfRHNpnRT +GRgFCPhnBBhPwZPnwdbWMJMlcJTLLlTlRT +VQsvVvvVNzqsscTVSLbWTStTJW +spfDNpvsnPCfhBbh +GhWSgWphprhQqqndQd +MvZRjjLcCzwcLnHfdTdgfFHQ +wCczcCgRMwRRNCtjMCtCvlBmVDGslmPpmWWNVGSpWV +PZqgTbTZvFgZbZnFvPlBsVqsGBlGVzGsqVls +MMhSmHHfrfrSrjMNfcjrSRBlBVzGVpVGgGVCGslGNd +rMhQQmDSQMjMtZvPTTnJvtQg +TNGWlqVpmPssnNssWLtRfCLbjCCwPgLjfg +ZSHvHczFBBcHhJHFvhHcSFgrCgLbfgfbwrLTtbjwLwJr +BMzSQzcQznlNQTQsnl +FVWDZDZHpDdtZlqZqZqljfNmsNFPjbbPbPRbFFjm +MJSGMghngrccvSrSzMrsQbbRmjmQmjtNtbfB +CMnvczGChCCwcgtpDDlLLLwVHdlHTZ +fTTzbQzhDwwbCnZnpbgnHncM +mGtBRBFmsRpVGMzpnnGL +lFNqtdsssrRFBltSFRFlSrvfDSWWvwfhhPJPjWfQzPvf +GWWWQlpSZzrQnjQdRHVjdjTRvddddB +ztthMtCmffcChJhChfCJdLddLBBgvqdvBBVBcgdq +smbsmbmChCJmJffPmhNthDtZwnFQZQGpSrGWGQGZpQZzWP +ZDzsjjFLFqsQzFsZqDzBHGtBHpmgdNGmGBtLBG +hbbMMTcWhbwnJPlwWrnPbbVGVNndgpVVHmdNHVBmmmtf +bCTPTclcgRZQZCgs \ No newline at end of file diff --git a/day3/program.js b/day3/program.js new file mode 100644 index 0000000..48d2251 --- /dev/null +++ b/day3/program.js @@ -0,0 +1,47 @@ +const allChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + +export default function Day(data) { + + // part 1 + let score = 0; + data.forEach((d) => { + const first = d.substr(0, d.length / 2); + const second = d.substr(d.length / 2); + score += matchingChar(first, second); + }); + + console.log(`Part 1: ${score}`); + + // part 2 + let scorePart2 = 0; + for (let i = 0; i < data.length; i += 3) { + const backpackA = data[i]; + const backpackB = data[i + 1]; + const backpackC = data[i + 2]; + scorePart2 += compareBackpacks(backpackA, backpackB, backpackC); + } + + console.log(`Part 2: ${scorePart2}`); +} + +// part 1 +function matchingChar(stringA, stringB) { + const chars = stringA.split(''); + let match = ''; + + chars.forEach((char) => { + if (stringB.indexOf(char) !== -1) match = char; + }); + + return allChars.indexOf(match) + 1; +} + +// part 2 +function compareBackpacks(backpackA, backpackB, backpackC) { + const chars = backpackA.split(''); + let match = ''; + chars.forEach((char) => { + if (backpackB.indexOf(char) !== -1 && backpackC.indexOf(char) !== -1) match = char; + }); + return allChars.indexOf(match) + 1; +} \ No newline at end of file diff --git a/day3/sample.txt b/day3/sample.txt new file mode 100644 index 0000000..9919ffa --- /dev/null +++ b/day3/sample.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw \ No newline at end of file diff --git a/day4/input.txt b/day4/input.txt new file mode 100644 index 0000000..fe99544 --- /dev/null +++ b/day4/input.txt @@ -0,0 +1,1000 @@ +22-77,14-96 +7-99,65-98 +22-36,37-62 +25-94,24-67 +6-91,1-6 +88-88,2-88 +27-89,58-96 +21-82,9-94 +38-79,27-80 +4-90,30-55 +84-97,52-93 +12-59,11-12 +4-14,5-12 +50-84,49-89 +3-98,1-3 +91-95,8-22 +15-66,17-67 +27-27,27-90 +36-37,37-96 +31-32,32-80 +1-79,2-78 +36-85,20-36 +2-2,2-98 +33-81,80-99 +4-73,45-72 +3-89,1-4 +6-92,21-91 +7-93,2-92 +47-89,47-50 +64-84,63-65 +22-85,21-91 +16-31,11-14 +4-93,3-93 +15-61,61-62 +21-23,22-88 +59-59,11-58 +23-23,22-89 +19-87,78-86 +13-82,19-83 +22-88,76-92 +46-47,46-46 +30-31,13-31 +6-93,3-98 +54-54,13-53 +51-77,51-77 +84-84,38-84 +84-98,95-98 +34-41,29-64 +50-95,49-94 +24-88,12-22 +40-41,27-41 +28-28,28-92 +65-66,66-73 +6-99,4-7 +15-38,14-39 +16-81,15-82 +14-98,7-14 +89-89,55-89 +82-86,26-82 +9-88,10-83 +5-54,6-74 +81-95,14-96 +20-81,87-87 +8-73,48-73 +44-52,53-57 +95-95,27-96 +30-94,29-95 +22-93,23-94 +18-93,7-18 +12-88,89-90 +72-78,34-78 +53-93,54-86 +12-87,70-87 +9-84,70-83 +16-89,50-90 +35-67,36-66 +46-56,45-57 +96-99,26-90 +34-90,35-75 +20-77,21-77 +33-56,2-83 +20-75,19-73 +43-52,18-43 +15-54,21-54 +14-63,23-38 +22-48,21-48 +8-20,6-7 +64-72,6-86 +29-92,6-91 +50-88,87-88 +5-72,6-6 +81-81,31-81 +46-52,46-97 +11-36,12-35 +8-80,79-97 +13-94,94-94 +3-98,43-68 +29-61,32-62 +8-60,14-61 +21-93,11-23 +77-77,36-77 +87-98,80-87 +89-92,8-95 +20-70,21-48 +8-90,13-89 +73-82,82-82 +2-3,2-79 +56-93,55-92 +49-84,50-50 +16-69,13-14 +10-68,7-9 +14-97,23-26 +35-76,80-86 +35-86,85-99 +89-89,26-90 +31-94,32-32 +15-57,14-58 +16-30,17-49 +4-68,5-99 +5-98,6-95 +45-64,1-63 +51-75,52-74 +27-58,26-57 +7-87,4-86 +44-51,44-52 +2-2,7-82 +11-80,10-12 +10-22,29-73 +1-41,10-84 +13-42,12-59 +57-57,55-56 +96-99,42-97 +6-95,4-29 +11-91,9-10 +41-44,38-45 +17-98,17-97 +23-55,22-54 +18-84,85-92 +11-83,11-84 +19-61,18-31 +44-54,43-54 +52-87,87-96 +40-98,40-97 +1-79,2-79 +11-33,12-34 +16-79,18-80 +47-50,48-49 +10-90,89-91 +16-98,12-17 +1-19,4-18 +4-72,19-72 +2-69,4-27 +7-9,8-94 +13-77,14-76 +19-89,88-89 +85-92,84-92 +92-93,38-91 +7-65,8-64 +27-71,38-73 +36-92,43-65 +2-5,5-87 +43-95,71-79 +5-61,5-61 +8-78,9-99 +34-34,34-94 +3-60,61-61 +98-98,15-89 +2-56,52-56 +33-90,65-89 +7-72,22-55 +41-70,70-70 +15-73,14-72 +76-76,75-91 +3-82,52-83 +12-51,5-84 +94-96,19-61 +60-62,10-61 +19-95,94-95 +24-57,8-25 +1-3,3-97 +29-46,2-46 +3-73,2-72 +11-79,10-11 +12-35,11-13 +35-59,16-59 +27-88,26-27 +91-91,90-91 +30-48,30-57 +24-34,23-40 +59-98,1-99 +37-42,34-42 +17-99,16-18 +2-36,25-35 +36-36,36-65 +22-77,21-77 +35-45,35-45 +32-99,31-32 +40-54,13-40 +44-44,27-44 +41-93,41-42 +14-44,15-45 +7-63,8-64 +10-10,10-63 +23-92,24-24 +6-95,1-94 +22-23,22-92 +18-31,17-48 +45-58,45-45 +15-86,1-15 +8-71,9-70 +18-68,17-67 +1-85,49-84 +19-47,29-48 +1-74,3-75 +90-92,26-91 +95-99,26-94 +22-95,24-47 +6-79,6-6 +24-97,24-97 +12-15,16-37 +58-78,46-78 +24-43,17-43 +37-67,36-68 +2-97,1-3 +28-29,29-41 +8-9,9-36 +22-62,21-96 +9-24,10-34 +2-2,5-88 +7-16,2-9 +56-95,56-97 +54-79,78-79 +25-48,31-47 +36-82,82-83 +29-77,26-28 +81-81,1-82 +80-89,62-79 +5-98,11-97 +60-80,61-70 +43-52,43-52 +1-96,2-95 +64-91,34-92 +5-85,6-84 +97-98,56-96 +14-93,14-96 +47-86,46-85 +49-49,48-66 +5-96,7-95 +78-79,5-79 +27-54,26-27 +15-15,15-97 +77-92,76-98 +22-39,21-22 +5-31,3-31 +18-98,6-18 +3-4,4-94 +3-95,2-96 +11-56,5-10 +20-82,19-81 +33-51,52-79 +8-53,8-53 +4-82,4-4 +2-97,2-97 +21-29,32-53 +83-98,78-97 +10-88,88-97 +40-50,37-51 +4-4,4-51 +89-90,39-90 +12-12,12-81 +24-55,25-25 +74-74,68-75 +5-89,5-93 +44-86,43-45 +37-47,37-47 +22-99,23-99 +37-59,40-58 +35-99,35-99 +4-85,5-91 +14-87,36-97 +5-64,4-6 +6-94,93-94 +17-83,18-82 +29-99,28-30 +11-99,62-98 +12-64,13-84 +12-97,12-99 +22-42,22-41 +13-91,10-96 +21-49,4-21 +99-99,23-91 +5-42,43-43 +80-82,18-80 +48-97,48-99 +19-49,4-18 +82-99,6-83 +4-96,2-99 +34-40,34-40 +33-51,32-52 +22-62,23-81 +8-70,8-62 +88-97,9-89 +2-4,3-99 +63-95,20-64 +5-96,1-4 +39-79,39-56 +75-88,71-79 +5-96,5-98 +38-39,45-84 +17-96,18-26 +6-7,5-7 +5-39,5-92 +8-26,12-25 +45-51,35-52 +25-75,25-26 +10-98,2-9 +10-64,9-10 +84-86,33-83 +6-50,49-51 +17-72,16-17 +40-61,39-66 +45-50,44-50 +31-41,31-41 +69-83,70-70 +11-86,12-85 +89-92,54-67 +51-79,52-72 +5-10,3-11 +76-76,41-77 +13-53,13-88 +81-91,81-91 +9-68,3-67 +48-59,15-63 +37-97,96-96 +1-78,3-78 +12-43,26-56 +2-67,21-66 +47-58,47-89 +7-69,7-69 +66-93,67-67 +18-41,19-85 +1-50,50-50 +7-18,17-99 +61-92,61-92 +21-40,38-38 +26-99,27-98 +14-94,11-13 +16-18,17-31 +20-32,84-94 +10-97,10-99 +2-89,1-88 +27-94,28-86 +59-96,14-87 +17-91,12-49 +30-86,29-85 +76-77,1-76 +10-94,9-9 +15-37,29-38 +42-63,9-36 +35-52,36-36 +31-32,32-62 +5-11,11-23 +3-8,9-40 +8-99,9-88 +28-60,22-61 +3-42,3-42 +1-5,4-56 +45-90,11-95 +52-52,51-94 +45-51,24-50 +63-92,62-92 +78-94,3-30 +50-51,52-63 +54-58,57-59 +77-77,65-77 +4-90,3-91 +11-48,10-47 +73-90,75-90 +50-58,18-62 +7-98,8-97 +9-76,9-9 +7-47,4-48 +4-95,94-94 +23-58,24-57 +11-18,18-45 +78-99,38-62 +29-70,17-50 +8-80,39-81 +2-99,1-99 +52-67,52-53 +60-94,47-61 +99-99,39-97 +32-92,20-32 +48-81,80-91 +44-51,18-37 +4-57,3-57 +2-84,2-84 +19-20,19-19 +7-80,7-80 +38-38,35-37 +15-99,10-31 +21-55,20-73 +5-6,6-84 +48-79,10-80 +67-96,1-68 +56-95,56-84 +40-96,80-92 +3-3,7-99 +19-85,18-20 +4-8,9-80 +7-53,36-53 +20-30,2-31 +4-72,1-86 +38-85,37-84 +65-69,66-69 +3-6,1-10 +11-35,24-44 +5-70,4-4 +51-79,42-47 +30-31,30-68 +22-97,67-95 +23-45,22-54 +30-76,30-76 +7-94,95-95 +14-66,66-66 +65-76,64-65 +67-89,24-90 +6-57,38-56 +6-71,36-70 +7-73,7-76 +1-2,2-2 +98-98,44-96 +35-35,34-37 +4-99,1-3 +4-17,16-56 +17-74,16-75 +7-97,77-98 +80-94,15-80 +11-62,9-12 +59-71,28-71 +23-95,23-95 +3-70,70-91 +31-97,96-99 +33-79,34-79 +4-19,5-5 +27-63,26-63 +5-25,25-95 +44-74,33-43 +27-43,3-27 +2-96,92-95 +2-89,2-99 +16-16,16-88 +2-95,1-94 +79-82,78-83 +30-96,95-95 +14-88,14-89 +5-16,6-6 +35-72,32-36 +22-99,21-23 +7-93,8-94 +19-98,20-99 +29-30,11-31 +1-99,2-78 +76-86,32-75 +9-95,8-96 +15-40,32-33 +27-76,26-76 +21-79,17-19 +40-64,6-95 +55-91,55-90 +4-77,5-25 +13-92,12-91 +67-72,64-90 +2-64,9-65 +20-70,44-71 +8-72,8-71 +89-96,35-99 +36-36,36-83 +1-39,40-75 +38-56,10-38 +65-80,87-93 +67-69,66-70 +54-85,6-84 +27-89,93-93 +1-99,3-98 +11-87,11-95 +27-88,47-87 +13-80,12-71 +2-79,80-99 +7-74,8-73 +19-19,18-94 +33-91,92-93 +72-81,41-73 +4-66,11-98 +7-88,8-67 +54-73,60-95 +21-63,48-62 +46-97,97-99 +22-28,21-23 +57-58,9-58 +12-97,11-96 +3-98,5-80 +7-21,7-95 +28-51,27-50 +55-99,98-99 +26-48,27-48 +74-97,11-90 +8-92,14-92 +12-52,53-98 +2-96,3-97 +39-39,38-87 +34-35,35-45 +14-84,83-84 +7-93,7-93 +51-56,41-55 +16-54,4-17 +91-95,28-90 +29-93,28-96 +83-83,1-83 +7-97,6-98 +63-70,66-70 +4-21,4-21 +2-7,9-95 +28-97,28-98 +2-72,3-3 +42-42,43-53 +30-81,26-30 +46-52,50-52 +16-27,37-67 +2-92,4-89 +41-85,42-84 +1-93,40-94 +40-97,39-40 +35-69,34-36 +13-95,96-96 +15-94,16-16 +6-11,10-11 +96-96,1-97 +33-98,16-99 +26-79,27-77 +18-67,18-68 +6-86,1-93 +5-92,6-80 +6-93,94-94 +8-73,7-9 +29-43,64-70 +2-98,2-98 +47-50,74-79 +44-44,28-44 +7-19,19-60 +14-98,13-66 +26-77,27-71 +18-70,20-70 +13-99,84-84 +20-86,39-82 +11-25,10-26 +28-28,29-45 +9-9,8-55 +17-94,18-18 +38-71,90-93 +2-50,4-78 +25-43,44-93 +1-17,17-97 +17-64,18-63 +9-89,13-90 +83-97,37-99 +4-4,3-91 +47-69,70-89 +76-96,81-97 +12-13,13-99 +11-85,12-84 +22-95,22-79 +34-96,35-95 +4-17,2-4 +18-74,18-19 +4-87,3-91 +5-79,6-85 +26-99,27-99 +32-50,30-51 +40-70,41-67 +9-78,9-78 +4-98,2-2 +1-3,2-98 +50-50,1-50 +2-75,3-74 +47-71,44-46 +54-82,54-82 +49-93,50-85 +20-86,95-99 +38-86,38-86 +44-59,45-57 +6-6,5-97 +18-97,17-99 +9-31,4-6 +10-90,11-81 +15-16,16-95 +46-97,47-84 +35-47,34-95 +75-94,95-98 +55-90,90-94 +60-90,82-89 +13-51,6-12 +37-87,36-37 +35-89,35-36 +36-69,4-68 +19-24,1-25 +2-96,3-49 +24-88,23-25 +16-39,40-64 +40-68,16-40 +13-91,8-40 +70-91,69-91 +52-86,37-84 +91-99,48-68 +24-35,34-64 +54-73,34-53 +11-76,10-77 +16-90,91-98 +17-18,17-79 +54-66,37-55 +52-77,16-78 +84-97,82-84 +32-48,33-49 +37-58,58-84 +31-63,18-31 +55-67,28-67 +5-99,5-6 +5-48,6-49 +71-93,15-70 +39-75,68-74 +7-8,8-35 +59-59,39-59 +3-13,14-95 +59-66,59-59 +99-99,48-65 +3-95,1-2 +58-88,12-57 +12-12,13-96 +55-68,57-67 +28-37,37-72 +11-94,12-92 +12-91,26-82 +17-65,65-65 +37-91,90-97 +2-43,3-78 +2-14,15-55 +38-40,45-85 +15-76,68-76 +20-23,2-24 +3-97,98-99 +72-72,62-72 +27-51,13-26 +5-53,7-54 +86-86,6-87 +13-67,12-94 +1-87,2-2 +27-66,26-27 +3-86,81-87 +18-99,42-91 +16-84,82-85 +55-95,85-95 +4-96,4-98 +62-89,59-76 +6-78,7-7 +53-53,53-90 +44-72,72-88 +26-98,98-99 +58-60,59-87 +36-53,53-83 +49-74,49-74 +84-85,71-83 +1-98,13-95 +27-70,26-76 +14-83,14-83 +43-65,64-65 +14-78,7-78 +93-93,43-63 +11-40,10-41 +31-96,31-31 +2-63,64-77 +33-33,32-51 +3-17,4-72 +95-95,95-97 +15-98,15-88 +47-84,46-48 +5-5,4-87 +1-77,40-78 +2-86,37-85 +18-90,17-90 +16-95,15-17 +47-95,46-94 +20-40,15-39 +56-90,55-90 +41-90,41-90 +14-39,13-46 +98-99,61-99 +29-31,30-86 +22-33,28-34 +10-98,2-10 +6-18,14-19 +97-97,97-97 +14-62,7-50 +12-21,15-17 +73-73,74-90 +6-13,5-14 +79-86,79-87 +2-87,3-87 +51-86,51-85 +35-94,11-93 +43-78,78-78 +76-97,31-76 +12-54,13-13 +8-95,48-96 +74-85,85-95 +11-13,21-40 +9-82,2-94 +40-48,39-95 +5-16,12-29 +7-22,21-42 +10-22,21-99 +59-73,44-74 +38-60,39-59 +16-92,29-93 +38-48,4-39 +8-59,7-59 +2-97,4-96 +77-92,77-91 +39-53,40-69 +3-92,5-92 +97-99,61-97 +19-46,45-59 +16-58,14-16 +14-15,13-17 +14-92,15-15 +13-42,12-42 +70-93,71-93 +6-53,3-7 +10-11,10-11 +10-99,22-99 +7-23,15-86 +11-95,94-97 +21-45,44-45 +19-21,22-30 +8-91,9-83 +7-91,9-47 +2-93,3-94 +48-61,46-79 +8-25,26-93 +88-92,11-89 +2-30,3-29 +30-30,29-90 +50-66,25-67 +37-47,37-48 +26-34,14-17 +17-49,16-72 +35-57,3-35 +10-10,9-27 +21-22,21-99 +58-89,48-57 +34-38,35-39 +86-89,52-97 +51-69,34-50 +21-59,3-96 +19-88,88-88 +16-96,16-66 +18-49,11-17 +1-1,3-70 +8-39,39-75 +45-46,45-98 +39-91,67-91 +2-2,1-85 +14-68,43-69 +37-79,46-80 +29-43,40-40 +3-4,40-65 +14-89,15-89 +27-79,17-26 +1-2,1-98 +54-92,91-93 +22-53,54-84 +55-95,94-97 +9-36,8-35 +3-37,3-37 +49-76,49-65 +10-95,95-95 +8-98,37-99 +2-83,1-3 +38-91,39-92 +9-95,8-94 +2-43,2-43 +15-89,77-90 +41-47,37-46 +9-94,1-10 +5-99,65-98 +42-83,42-42 +54-73,38-98 +57-57,56-76 +14-44,45-73 +26-27,27-72 +20-85,19-23 +5-99,6-98 +9-60,7-8 +99-99,27-99 +3-3,25-55 +62-64,16-65 +84-84,41-84 +23-78,4-93 +35-99,34-35 +44-46,45-90 +89-89,5-88 +63-85,64-84 +66-76,45-68 +60-90,61-89 +94-94,94-95 +87-94,80-86 +23-70,71-90 +93-93,5-93 +33-80,34-79 +15-60,16-16 +57-97,53-57 +67-84,83-93 +9-90,18-59 +28-82,21-81 +32-64,31-64 +59-81,18-59 +23-85,7-84 +50-68,12-68 +75-80,76-79 +64-92,64-66 +61-71,62-70 +29-96,20-31 +57-75,71-75 +48-50,49-78 +12-82,76-82 +2-35,4-35 +18-60,13-60 +52-81,20-27 +13-19,13-20 +33-61,48-61 +65-89,24-88 +32-46,32-69 +12-12,2-11 +18-97,16-18 +11-11,10-89 +3-72,3-3 +24-92,23-23 +13-15,16-51 +37-69,24-70 +3-99,10-99 +3-73,1-3 +8-30,3-29 +28-81,28-81 +90-94,1-90 +1-14,1-1 +2-98,1-99 +62-88,55-63 +19-33,34-34 +15-94,14-97 +22-34,15-34 +41-59,42-60 +4-89,18-90 +32-84,84-84 +32-95,31-72 +7-88,8-56 +20-21,20-96 +31-80,31-81 +6-61,30-43 +6-71,72-86 +20-71,28-96 +8-72,57-86 +1-3,3-19 +38-39,39-90 +58-58,58-90 +55-55,14-55 +96-96,3-89 +9-83,8-93 +3-85,3-84 +4-4,3-81 +66-82,81-82 +11-11,12-87 +2-3,7-94 +5-76,2-96 +13-82,46-81 +7-51,4-50 +18-73,73-73 +14-88,14-88 +50-83,50-94 +21-58,59-95 +47-99,48-93 +11-53,1-9 +6-75,3-75 +2-4,3-66 +2-55,1-3 +48-58,44-58 +78-78,77-78 +31-42,39-43 +43-60,44-60 +1-92,93-96 +43-44,44-64 +3-77,3-3 +9-98,10-99 +15-16,15-56 +5-24,11-25 +58-92,99-99 +10-10,11-86 +7-54,6-53 +56-74,17-55 +57-87,48-89 +33-64,2-89 +45-70,14-71 +24-69,23-70 +62-93,15-90 +69-83,70-83 +8-15,12-14 +34-63,62-93 +3-6,7-81 +75-92,75-92 +24-28,13-31 +16-54,31-50 +53-54,53-91 +34-99,35-97 +7-64,2-7 +11-67,67-89 +70-72,71-79 +57-88,88-89 +59-60,59-88 +5-90,99-99 +4-67,38-41 +8-83,14-82 +20-22,21-45 +1-66,16-67 +59-70,34-60 +3-85,14-84 +49-93,48-94 +97-97,2-96 +38-71,37-72 +4-90,3-91 +6-90,7-99 +57-97,57-87 +37-75,38-81 +13-86,12-13 +60-76,61-84 +6-89,7-98 +6-99,5-96 +4-75,75-99 +3-91,22-62 +11-71,28-37 +26-35,13-26 +12-25,24-24 +16-35,36-47 +16-39,40-77 +1-65,58-63 +37-89,43-88 +74-74,74-84 +80-86,40-80 +4-28,25-94 +35-93,35-81 +6-97,2-99 +10-68,11-33 +4-76,34-78 +18-84,21-46 +79-82,82-82 +1-3,4-97 +7-98,8-97 +36-97,35-35 +24-61,23-24 +3-93,8-92 +67-67,65-66 +30-77,1-65 +39-64,3-63 +18-52,13-52 +24-70,69-76 +1-56,14-45 +3-60,4-4 +1-8,1-9 +14-20,19-79 +34-82,35-83 +67-88,41-89 +8-29,56-84 +32-40,33-40 +4-93,3-93 +5-5,4-78 +58-79,16-59 +24-31,15-61 +49-50,40-50 +46-46,47-95 +34-34,35-95 +19-21,18-20 +4-8,7-98 +9-10,9-97 +14-83,5-14 +20-21,20-55 +14-97,13-31 +25-39,24-89 +17-73,14-74 +14-36,13-36 +58-64,59-65 +20-92,21-55 +20-85,19-20 +19-47,18-99 \ No newline at end of file diff --git a/day4/program.js b/day4/program.js new file mode 100644 index 0000000..919bfb5 --- /dev/null +++ b/day4/program.js @@ -0,0 +1,54 @@ +export default function Day(data) { + const pairs = data.map((d) => d.split(",")); + let containedPairs = 0; + pairs.forEach((pair) => { + if (containsPair(pair[0], pair[1])){ + containedPairs++; + } + }); + + console.log(`Part 1: ${containedPairs}`); + + let overlappers = 0; + pairs.forEach((pair) => { + if (checkIfOverlap(convertRangeToString(pair[0]), convertRangeToNumbers(pair[1]))) { + overlappers++; + } + }); + console.log(`Part 2: ${overlappers}`); +} + +function checkIfOverlap(stringA, rangeB) { + let hasMatch = false; + // breakable loop + for (let i = 0; i < rangeB.length; i++) { + if (stringA.indexOf(`.${rangeB[i]}.`) > -1) { + return true; + } + } + return false; +} + +function containsPair(first, second) { + const stringA = convertRangeToString(first); + const stringB = convertRangeToString(second); + if (stringA.indexOf(stringB) !== -1 || stringB.indexOf(stringA) !== -1) { + return true; + } + return false; +} + +function convertRangeToNumbers(range) { + const [min, max] = range.split("-"); + const numbers = []; + for (let i = parseInt(min); i <= parseInt(max); i++) { + numbers.push(i); + } + return numbers; +} + +function convertRangeToString(range){ + const numbers = convertRangeToNumbers(range); + return `.${numbers.join('.')}.`; + +} diff --git a/day4/sample.txt b/day4/sample.txt new file mode 100644 index 0000000..99a66c5 --- /dev/null +++ b/day4/sample.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 \ No newline at end of file diff --git a/day5/input.txt b/day5/input.txt new file mode 100644 index 0000000..77689d0 --- /dev/null +++ b/day5/input.txt @@ -0,0 +1,511 @@ + [P] [Q] [T] +[F] [N] [P] [L] [M] +[H] [T] [H] [M] [H] [Z] +[M] [C] [P] [Q] [R] [C] [J] +[T] [J] [M] [F] [L] [G] [R] [Q] +[V] [G] [D] [V] [G] [D] [N] [W] [L] +[L] [Q] [S] [B] [H] [B] [M] [L] [D] +[D] [H] [R] [L] [N] [W] [G] [C] [R] + 1 2 3 4 5 6 7 8 9 + +move 1 from 7 to 6 +move 1 from 8 to 5 +move 3 from 7 to 4 +move 5 from 9 to 6 +move 3 from 7 to 9 +move 2 from 5 to 7 +move 10 from 6 to 8 +move 2 from 2 to 3 +move 2 from 9 to 1 +move 6 from 8 to 2 +move 5 from 3 to 8 +move 4 from 5 to 9 +move 3 from 4 to 5 +move 2 from 1 to 8 +move 3 from 1 to 7 +move 1 from 7 to 1 +move 4 from 7 to 8 +move 1 from 5 to 6 +move 1 from 9 to 3 +move 8 from 2 to 4 +move 1 from 5 to 8 +move 1 from 5 to 3 +move 2 from 1 to 8 +move 4 from 3 to 4 +move 1 from 3 to 4 +move 1 from 1 to 7 +move 1 from 7 to 8 +move 1 from 7 to 4 +move 5 from 9 to 1 +move 2 from 6 to 7 +move 3 from 2 to 1 +move 12 from 8 to 7 +move 8 from 7 to 3 +move 1 from 2 to 8 +move 6 from 7 to 1 +move 1 from 6 to 3 +move 8 from 4 to 3 +move 5 from 3 to 6 +move 6 from 1 to 8 +move 2 from 1 to 2 +move 2 from 3 to 1 +move 4 from 4 to 5 +move 1 from 5 to 7 +move 1 from 6 to 9 +move 1 from 4 to 9 +move 8 from 1 to 4 +move 10 from 3 to 5 +move 2 from 4 to 5 +move 2 from 2 to 6 +move 2 from 1 to 6 +move 11 from 4 to 7 +move 9 from 6 to 5 +move 16 from 8 to 3 +move 15 from 5 to 6 +move 10 from 3 to 6 +move 24 from 6 to 5 +move 5 from 7 to 5 +move 1 from 6 to 3 +move 1 from 7 to 2 +move 2 from 7 to 6 +move 3 from 3 to 6 +move 8 from 5 to 1 +move 3 from 9 to 8 +move 3 from 8 to 4 +move 1 from 7 to 1 +move 1 from 2 to 9 +move 1 from 9 to 2 +move 2 from 3 to 1 +move 2 from 4 to 2 +move 5 from 6 to 8 +move 3 from 7 to 1 +move 1 from 4 to 2 +move 26 from 5 to 9 +move 1 from 3 to 6 +move 7 from 1 to 9 +move 1 from 3 to 5 +move 1 from 6 to 5 +move 1 from 5 to 4 +move 5 from 5 to 6 +move 1 from 4 to 9 +move 3 from 9 to 3 +move 4 from 8 to 5 +move 2 from 5 to 2 +move 1 from 1 to 6 +move 1 from 8 to 9 +move 2 from 2 to 4 +move 2 from 3 to 7 +move 1 from 7 to 6 +move 7 from 6 to 7 +move 1 from 4 to 3 +move 2 from 2 to 4 +move 28 from 9 to 3 +move 26 from 3 to 7 +move 2 from 4 to 3 +move 2 from 9 to 1 +move 4 from 3 to 6 +move 1 from 4 to 5 +move 1 from 3 to 4 +move 3 from 1 to 9 +move 1 from 4 to 7 +move 1 from 5 to 7 +move 1 from 6 to 9 +move 23 from 7 to 1 +move 4 from 9 to 5 +move 3 from 9 to 4 +move 2 from 6 to 3 +move 1 from 6 to 7 +move 3 from 3 to 9 +move 11 from 7 to 2 +move 4 from 2 to 3 +move 23 from 1 to 2 +move 15 from 2 to 4 +move 2 from 7 to 9 +move 13 from 2 to 8 +move 1 from 7 to 5 +move 1 from 2 to 8 +move 7 from 4 to 8 +move 6 from 4 to 3 +move 1 from 2 to 4 +move 1 from 2 to 9 +move 20 from 8 to 5 +move 1 from 8 to 4 +move 3 from 4 to 7 +move 3 from 3 to 9 +move 1 from 2 to 8 +move 20 from 5 to 3 +move 6 from 5 to 3 +move 26 from 3 to 9 +move 2 from 7 to 5 +move 1 from 5 to 4 +move 1 from 7 to 8 +move 2 from 8 to 5 +move 12 from 9 to 4 +move 2 from 3 to 2 +move 4 from 1 to 9 +move 2 from 3 to 1 +move 4 from 5 to 6 +move 5 from 9 to 4 +move 2 from 6 to 3 +move 2 from 6 to 8 +move 2 from 8 to 3 +move 1 from 2 to 7 +move 21 from 4 to 2 +move 1 from 4 to 5 +move 13 from 2 to 4 +move 4 from 3 to 9 +move 25 from 9 to 7 +move 7 from 2 to 4 +move 18 from 7 to 8 +move 2 from 1 to 5 +move 1 from 3 to 9 +move 2 from 9 to 3 +move 1 from 1 to 6 +move 8 from 7 to 6 +move 4 from 3 to 2 +move 1 from 4 to 7 +move 6 from 2 to 5 +move 1 from 7 to 3 +move 5 from 6 to 8 +move 4 from 4 to 1 +move 9 from 5 to 1 +move 12 from 4 to 3 +move 1 from 6 to 5 +move 1 from 5 to 2 +move 13 from 3 to 8 +move 14 from 8 to 6 +move 2 from 1 to 6 +move 1 from 2 to 5 +move 11 from 1 to 3 +move 1 from 5 to 3 +move 6 from 6 to 8 +move 23 from 8 to 5 +move 1 from 8 to 1 +move 18 from 5 to 8 +move 5 from 6 to 8 +move 10 from 3 to 8 +move 1 from 1 to 5 +move 2 from 4 to 8 +move 1 from 4 to 7 +move 5 from 5 to 3 +move 1 from 6 to 1 +move 6 from 3 to 9 +move 35 from 8 to 4 +move 1 from 7 to 6 +move 2 from 9 to 8 +move 1 from 1 to 6 +move 17 from 4 to 7 +move 1 from 5 to 1 +move 4 from 9 to 6 +move 12 from 6 to 4 +move 29 from 4 to 2 +move 17 from 7 to 8 +move 27 from 2 to 7 +move 2 from 2 to 1 +move 1 from 3 to 1 +move 25 from 7 to 4 +move 25 from 4 to 6 +move 1 from 4 to 2 +move 4 from 1 to 6 +move 1 from 2 to 6 +move 25 from 6 to 1 +move 5 from 6 to 8 +move 15 from 1 to 6 +move 2 from 7 to 8 +move 15 from 6 to 2 +move 14 from 2 to 8 +move 1 from 2 to 3 +move 4 from 1 to 4 +move 4 from 4 to 2 +move 6 from 1 to 8 +move 3 from 2 to 5 +move 3 from 5 to 7 +move 1 from 2 to 3 +move 1 from 6 to 8 +move 8 from 8 to 5 +move 2 from 7 to 4 +move 1 from 7 to 9 +move 3 from 5 to 8 +move 2 from 4 to 6 +move 3 from 5 to 8 +move 2 from 3 to 4 +move 2 from 6 to 5 +move 1 from 9 to 8 +move 48 from 8 to 5 +move 1 from 8 to 9 +move 41 from 5 to 4 +move 4 from 5 to 2 +move 3 from 2 to 7 +move 1 from 2 to 7 +move 1 from 8 to 1 +move 1 from 9 to 4 +move 1 from 1 to 3 +move 7 from 4 to 7 +move 11 from 7 to 4 +move 4 from 4 to 1 +move 37 from 4 to 9 +move 4 from 4 to 3 +move 32 from 9 to 3 +move 5 from 9 to 1 +move 12 from 3 to 2 +move 3 from 4 to 1 +move 3 from 1 to 6 +move 3 from 1 to 6 +move 2 from 1 to 5 +move 9 from 2 to 7 +move 3 from 7 to 3 +move 6 from 6 to 5 +move 4 from 3 to 6 +move 3 from 6 to 9 +move 13 from 3 to 8 +move 3 from 1 to 9 +move 2 from 3 to 2 +move 2 from 7 to 8 +move 1 from 6 to 8 +move 4 from 2 to 8 +move 2 from 8 to 3 +move 1 from 2 to 1 +move 4 from 7 to 3 +move 6 from 3 to 5 +move 3 from 9 to 8 +move 13 from 8 to 6 +move 1 from 9 to 2 +move 2 from 3 to 8 +move 1 from 1 to 9 +move 1 from 1 to 3 +move 10 from 6 to 3 +move 1 from 2 to 5 +move 22 from 5 to 7 +move 1 from 9 to 3 +move 1 from 8 to 7 +move 2 from 7 to 8 +move 6 from 8 to 4 +move 2 from 9 to 2 +move 21 from 7 to 6 +move 4 from 8 to 5 +move 1 from 8 to 4 +move 1 from 5 to 7 +move 12 from 3 to 6 +move 1 from 2 to 6 +move 1 from 7 to 9 +move 1 from 2 to 6 +move 6 from 3 to 5 +move 6 from 4 to 2 +move 1 from 3 to 6 +move 1 from 9 to 7 +move 6 from 2 to 7 +move 22 from 6 to 4 +move 3 from 6 to 5 +move 7 from 5 to 7 +move 3 from 7 to 8 +move 2 from 5 to 3 +move 2 from 3 to 7 +move 13 from 6 to 8 +move 3 from 7 to 1 +move 3 from 5 to 9 +move 16 from 4 to 5 +move 1 from 5 to 8 +move 2 from 1 to 6 +move 1 from 1 to 7 +move 6 from 4 to 2 +move 4 from 8 to 7 +move 13 from 5 to 7 +move 1 from 6 to 3 +move 2 from 5 to 6 +move 10 from 7 to 6 +move 1 from 3 to 9 +move 1 from 4 to 3 +move 1 from 3 to 5 +move 12 from 7 to 3 +move 2 from 2 to 1 +move 1 from 5 to 9 +move 2 from 9 to 6 +move 4 from 2 to 7 +move 7 from 7 to 9 +move 1 from 7 to 8 +move 1 from 1 to 9 +move 11 from 9 to 7 +move 4 from 8 to 3 +move 5 from 3 to 5 +move 2 from 8 to 4 +move 3 from 5 to 2 +move 2 from 2 to 8 +move 1 from 5 to 2 +move 5 from 8 to 2 +move 7 from 7 to 2 +move 4 from 8 to 9 +move 2 from 7 to 6 +move 4 from 9 to 7 +move 6 from 2 to 4 +move 1 from 5 to 6 +move 5 from 3 to 5 +move 1 from 8 to 1 +move 10 from 6 to 3 +move 8 from 2 to 8 +move 1 from 8 to 1 +move 5 from 3 to 2 +move 2 from 8 to 7 +move 6 from 7 to 4 +move 12 from 4 to 1 +move 4 from 1 to 2 +move 1 from 2 to 1 +move 8 from 2 to 9 +move 2 from 4 to 8 +move 5 from 9 to 7 +move 8 from 3 to 8 +move 2 from 3 to 1 +move 6 from 8 to 2 +move 7 from 7 to 2 +move 1 from 3 to 5 +move 2 from 7 to 2 +move 1 from 9 to 1 +move 1 from 9 to 7 +move 1 from 9 to 4 +move 1 from 6 to 7 +move 1 from 2 to 3 +move 1 from 3 to 8 +move 1 from 4 to 9 +move 5 from 6 to 1 +move 7 from 8 to 2 +move 1 from 7 to 4 +move 9 from 2 to 8 +move 7 from 2 to 7 +move 1 from 4 to 2 +move 8 from 7 to 5 +move 4 from 8 to 7 +move 8 from 8 to 6 +move 9 from 1 to 4 +move 1 from 9 to 1 +move 4 from 7 to 6 +move 7 from 1 to 7 +move 6 from 7 to 3 +move 4 from 1 to 8 +move 13 from 6 to 3 +move 6 from 2 to 3 +move 1 from 3 to 4 +move 2 from 3 to 7 +move 1 from 6 to 9 +move 11 from 5 to 1 +move 1 from 6 to 3 +move 8 from 4 to 1 +move 2 from 5 to 2 +move 1 from 9 to 5 +move 2 from 8 to 7 +move 7 from 1 to 5 +move 2 from 7 to 3 +move 8 from 5 to 4 +move 1 from 8 to 2 +move 1 from 5 to 7 +move 3 from 7 to 2 +move 4 from 4 to 7 +move 4 from 3 to 4 +move 20 from 3 to 2 +move 1 from 8 to 3 +move 1 from 3 to 8 +move 4 from 7 to 2 +move 1 from 8 to 6 +move 1 from 7 to 5 +move 1 from 3 to 1 +move 1 from 4 to 2 +move 5 from 1 to 4 +move 14 from 4 to 1 +move 1 from 6 to 5 +move 1 from 2 to 3 +move 1 from 5 to 1 +move 11 from 2 to 9 +move 18 from 1 to 2 +move 4 from 1 to 3 +move 12 from 2 to 5 +move 5 from 2 to 4 +move 7 from 5 to 1 +move 1 from 2 to 9 +move 9 from 1 to 9 +move 1 from 3 to 6 +move 2 from 3 to 9 +move 1 from 6 to 1 +move 1 from 4 to 8 +move 1 from 3 to 4 +move 1 from 3 to 8 +move 16 from 9 to 5 +move 2 from 2 to 7 +move 14 from 5 to 8 +move 16 from 8 to 5 +move 1 from 7 to 9 +move 1 from 7 to 6 +move 4 from 9 to 5 +move 11 from 5 to 6 +move 12 from 2 to 4 +move 16 from 5 to 7 +move 4 from 7 to 2 +move 1 from 5 to 6 +move 3 from 9 to 1 +move 4 from 7 to 9 +move 3 from 6 to 4 +move 9 from 2 to 9 +move 3 from 1 to 8 +move 2 from 8 to 1 +move 1 from 8 to 2 +move 5 from 6 to 1 +move 7 from 7 to 1 +move 1 from 7 to 6 +move 8 from 4 to 5 +move 1 from 2 to 6 +move 12 from 9 to 2 +move 3 from 2 to 9 +move 8 from 5 to 8 +move 12 from 4 to 5 +move 1 from 2 to 9 +move 1 from 5 to 6 +move 2 from 1 to 7 +move 4 from 5 to 2 +move 6 from 5 to 1 +move 2 from 7 to 6 +move 1 from 5 to 1 +move 1 from 8 to 5 +move 7 from 6 to 9 +move 2 from 9 to 4 +move 16 from 1 to 8 +move 1 from 5 to 8 +move 7 from 2 to 8 +move 3 from 6 to 2 +move 1 from 4 to 8 +move 28 from 8 to 3 +move 1 from 4 to 2 +move 4 from 1 to 2 +move 11 from 2 to 7 +move 9 from 7 to 8 +move 7 from 9 to 5 +move 4 from 8 to 1 +move 2 from 9 to 1 +move 2 from 1 to 5 +move 1 from 7 to 9 +move 1 from 1 to 9 +move 6 from 5 to 3 +move 3 from 5 to 1 +move 2 from 2 to 8 +move 7 from 8 to 3 +move 7 from 3 to 7 +move 4 from 1 to 9 +move 1 from 8 to 9 +move 2 from 8 to 1 +move 1 from 8 to 1 +move 6 from 7 to 6 +move 6 from 6 to 5 +move 17 from 3 to 6 +move 2 from 9 to 2 +move 2 from 1 to 4 +move 12 from 3 to 8 +move 6 from 6 to 5 +move 2 from 2 to 1 +move 4 from 9 to 7 +move 2 from 7 to 3 +move 1 from 1 to 5 +move 10 from 8 to 6 +move 2 from 3 to 9 +move 9 from 5 to 2 +move 7 from 2 to 8 +move 1 from 4 to 8 +move 1 from 4 to 6 +move 7 from 8 to 7 +move 3 from 9 to 7 +move 4 from 3 to 4 \ No newline at end of file diff --git a/day5/program.js b/day5/program.js new file mode 100644 index 0000000..f559b22 --- /dev/null +++ b/day5/program.js @@ -0,0 +1,90 @@ +export default function Day(data) { + runPart1(data); + runPart2(data); +} + +function runPart1(data) { + const { stacks, instructions } = extractStacks(data); + executeInstructions(stacks, instructions); + console.log(`part 1: ${topOfStacks(stacks)}`); +} + +function runPart2(data) { + // part 2 + const { stacks, instructions } = extractStacks(data); + executeTrueInstructions(stacks, instructions); + console.log(`part 2: ${topOfStacks(stacks)}`); +} + +function topOfStacks(stacks) { + let solutionString = ""; + stacks.forEach((stack) => { + solutionString += stack[stack.length - 1].substr(1, 1); + }); + + return solutionString; +} + +function extractInstruction(row) { + const instruction = row.split(" "); + const amount = parseInt(instruction[1]); + const fromStack = parseInt(instruction[3]) - 1; + const toStack = parseInt(instruction[5]) - 1; + + return { amount, fromStack, toStack }; +} + +function executeInstructions(stacks, instructions) { + instructions.forEach((row) => { + const { amount, fromStack, toStack } = extractInstruction(row); + for (let i = 0; i < amount; i++) { + stacks[toStack].push(stacks[fromStack].pop()); + } + }); +} + +function executeTrueInstructions(stacks, instructions) { + instructions.forEach((row) => { + const { amount, fromStack, toStack } = extractInstruction(row); + const remove = stacks[fromStack].splice(stacks[fromStack].length - amount, amount); + stacks[toStack] = stacks[toStack].concat(remove); + }); +} + +function extractStacks(data) { + let stacks = []; + const numStacks = Math.ceil(data[0].length / 4); + + for (let i = 0; i < numStacks; i++) { + stacks.push([]); + } + + const containerRows = []; + const instructions = []; + let status = "containers"; + for (let i = 0; i < data.length; i++) { + if (data[i][1] === "1") { + status = "split"; + } + if (data[i][0] === "m") { + status = "instructions"; + } + if (status === "containers") { + containerRows.push(data[i]); + } else if (status === "instructions") { + instructions.push(data[i]); + } + } + + containerRows.forEach((row) => { + const parts = row.split(" "); + let pos = 0; + parts.forEach((part, i) => { + if (part === "") return pos++; + if (part.substr(0, 1) === "[") pos += 4; + const stackNum = pos / 4 - 1; + stacks[stackNum].unshift(part); + }); + }); + return { stacks, instructions }; +} diff --git a/day5/sample.txt b/day5/sample.txt new file mode 100644 index 0000000..43277fb --- /dev/null +++ b/day5/sample.txt @@ -0,0 +1,9 @@ + [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 \ No newline at end of file diff --git a/day6/input.txt b/day6/input.txt new file mode 100644 index 0000000..8a9b7aa --- /dev/null +++ b/day6/input.txt @@ -0,0 +1 @@ +zdnnfgfsgffgllwrwprwrgwwpssznzrnznllstszsttpdptdpdmdsdzsdscsmcmttdllbsbwwtwnwswcchshlhjhfhwfftcchnnfwwbqwqwrqqgmgzmmwzwfzwfzzzsmzzrczcmmhphzhbbbgdbgddmggwwbbttvmtvttfsfttjlttdfdsdqqczqzffbrfbbfbrrmdrrlslshllwzwrzrzzlqldqdjdjwjvjzjrjjcsszjjqfqnfqqsrqrccbhhwphwhbwwlzwwjwfjwfwzfwzffssvjsjddcsdslslrsrfsrffsggdffrcrcdcpprrzbrzbbtstvvqttbqqgfgsggtvtrvtvbbrqrsqrsqsvsbbzmbmgmvgmmrqrzzbbnjjlwjjfssdrdbrbffwrrrjjgcgtgvvjbjjjsqjsqqncntnndcdrcrhhsgstslldwdbwdbdtbdbggpnndhdvhhvrrlzzfjjffzszvvzgzhhqzqttdhdrrwdwzdwdbwwfsfwsfwfqqzwzbzmzwmmvgggvssvwswfwswhwzzqtqrtthhbbjggjppnpfnfmnnghgrhhtvtqtsttbpprzzwqqfhqfflttzffrprwpwspplzpztptgtltjlttwwsrsrprwrsswnwttcscqsqlsqqhshbhlblnnpznnzlnndrnrcncvcqcjqqvhvppjzjddzbzsztzqqlmlnlnblnlwnllswszwzrzddqhdqhqffhfhjjpbbhvbvmmfhmhcccjlclhcllbrlblddnpplggcmmvddmmqzzmqmppnjpjjjzllqjqccrwwhzhnnlmlhhbbtztvtltvtnvtvltlrtrllbttbzzfwfrrjzjbbmgghjhqhlljnjhhhjzjcjvcvwwzczwcwgcclflnnsvvcncbncnqqpjqjnjwjrrgqrrmqmfmmmjgjfgjfftggqdgqddgcdcdwdrdsswqqphpjhhdjjwswfwfnfqnqccvhvzvmzvzzplzljzjpzzhmzmqzqjjprpvrrhqqnbngnnpvpfvpvqvwwrhhdndqdppmcppzddbzzjcjdjfjnfnngqnnchcqqpllpwppgllcblcblbddzhhqsqbssjqqgmgbgzzvhvnhvnhvvpmpvvlddgppzrprmpmbpbjpbpfptpspddcgddqhdhhthrhjrhrvrlrffvbfbvfvbblssftfnfwwrwnnzdznnbwnbwnwlwttszzmmlzlhhpjhhjvvlvwwdnddzwdwgdgdssflfvfzvznzbzrbzzdssphhgttllcjcvcjjdrdqdhdnndlndldcllcnllslvlnvllmglgnnplpmpzzjwjtwtnntrtjtvjtjffhcfclltppftfwwprrwsrwwzdwzdztzccbmccfcfzczbcbsbqsstjtrrpnnfqqfmmchmmwmrwrwzwztzddgzdgzzfwzzrppcscrrgvgvgvtgtsslrsrvsrrdcdscscwcwqqsccwjcjgjvgvpvnvhhchrrgprpvrvsvsttgghdghhmphmmbvbcbsccdbcbnccbnnsjnjhnnzbnnpjbwdpczcvgjpgwfqrmnvwncflvnttwhfgmfqvngpdhbhvlglfhtdqmqtqcgjcqghzvbdghdgvjcsjrlpqvgcdnbpqrcrcvqqdlcpscqbfpsnhzcdbbcssslrjlzsqpprsbmtqhzblvwbswprhztmpcgfqfsgshchrhjmwwhpzsjzrmrvgdgwjrlwpgqhbzrmnmnnsnvzsrlhthgvlpljsjrpbhbzctdqgvdjcmrgtvqjqbcwsprnfmntzpbjcdtlchhjgwpmldmsstbtztfdbgbstgnlwbzrrzmvbrhnrlcwfgwwbfnntbjspqwngbjrvhdcnblqssgjlbcwbbgphhnmfcmdhqdhsnmvdjnwwwjlffswhsmwqrsprftjwtbtcvmpctgvfqvvcjpnwzqldglfbwfzpnqmdlrdpjmjptvwsctlmhmzzgvplglfgsvrfbqbmrhplczbvqpdjjhhvfqswhzhqfgzstwwpbtbsnnlgpshwqgppzbpsfpfvcntbbbzwdnfcgcwzbqwmhjrhpdfvpbzpmfnmllrcqlqhcbzfltzcgccwwqmtsmwchhvbqtdrnsbrchqqcmtfqpddcjplbvdhhtndrrmfdtmbpdvwthvgdccnrcqmpznlvzqzfjqmpvgjtfbtfjnrmlzhwhljrrqnbqzpfhcvncblfggrtbdfjqnlgpbrzmwcvrvjtjscfmcnfjgqzqsphldvhdbpvmghrvsdmvpmvvdmdhwdghtjltmlcmfhvrsvcvpblwhhfcfdqnrsjbcldgbwhtnjntmgvprhbjrcvsmhgtfphcwncpjtngqhvwrmgprstbtdstmttpzcntmzvncwslqlldpnjbtpmsfnwbpwpnlfgdvcqplvlqqjvfftnnvpcmwjrvwqhlrshftrbhcwnczzsnvtnjnrbzzgzfsqhnfwlcgzvvhqcgvqtmcpnhlvdlmwgsvtwbqgrdsrrddszvscbgtlpwpzjrbvwhjnrpprhtzmthbpfzvplzwfdtnwqwtctgjslmcczjvwplsqwgfnfbgdjbsdpwbgflttvvqlhzgmmpjsnwbqqtcdszfqbhgnmbbmrbrgnrzdmzwnjjzjqcwqcqfchjrzlspgbrchcbgwbhvggsqbvdpzbpnwdtqvcjwcwnbjdhsdfmbtwfbfhzwwtnqzhmtvtbfwrsqjzgssvlwszvlmvbslpncnhmsdhcqqfpftztpzbbhsgbnscddbjlgwgjjndgwbrhwmsfdmmsnlwgwdsdltwjfvwnczjrbgcvsfczppltdptlgcdfzgmqpjngstldqgmwhdmfrwwfqwdgswvfdrtsgtvttpcbnhzbscnchpvfjvbcszbwchnbmfrvsswslbzlhgwlvfchdbfthbpdbwwqtmlgwjqtjhzrjzzmrpdwnvfgrnqdcqmwtttmwjvgcmjsddvtlswldzhtppwvhmlghwlgblfttctnglwhtfvqgjmdjcnflsrjvpjwcjfftbdmmcbqvfwnnnzsltllncbstgnhtmpsltgztqzjbbrtqpcvdlnhpnhvmmztpfpplbqjlpqvfsdvhwvstdmqbtnpzrcbdhvdtghqwcppcfzjfjsfwvqrtfgcdzwgzjvrqqsjtnhlbjcmtjcnmtpffwcwhqqphwjsrhpqvnnhhrcnvztfdjzbjggwlgjprbpssgnmtcrvprwbsrfvvphrsgzgbrfnpgtqbbprhfphqntsglrmhzfnwqptlslnhtrhfprjpdcglcffsblnjwczmgwhmmtgsgwljmqlvdglqmzwmtqcvgcrmqjldlsnbssdvrrtltngvrsqbctqlsngqvcphjvhmwsssgwmvgzdctjcmjtpcjhvfcrfhbffdqfjjvpqwgvnlzhgfnfmlrrfvjrdvhzdcvdvmpncvtjbbnczpzmglfqnpbsrsjwgvszsnqvrnvlhmqjjnmsfngbdlpwbqllcptjtlbhrfdvhlrpdlznpvndjzjdtjflqqjdgjjpmnpmjgcglllgcqbfpvdtpbjdnvrclmnlfdrpbmwzgvdhgbzvbhwqfslhshbfcbwrnsjndgjgccllfbzgmcjqcmdnfftnccphqtwmgqgfqlvlwsrprctchqrscwvgpdrwgcfgzjwmzmmsmwzgtzsjtqfggcczcmghlqgnqqjvsrsfrrmwmnrnhbsszmwsqlrggsbdwzzfnhwcggjszfrlffplvcblvphqmzjnzwzdshhdprfrdbcrmbtztcfvgpzpmmgflswphvnvtwhbbhjwffsvqfjlfvzqmhmsmddwdwsqfnnplbqnptbvgjqgmflsbfdtpvdgbfnqmcqznhpqbpwtbfpqllvqwvcftdjjtlsvzbssbtcdzqqqvzlqhfpdthscqmvhpndmnztthvvzccqswswspnqcbncvszrgjshjhdsclrjdnjdczqmcjldbspclgrmwqdvcvpcsvjggfdqlrwlnzptfvcwjsgblpjzgcrrmjqptvdnwr \ No newline at end of file diff --git a/day6/program.js b/day6/program.js new file mode 100644 index 0000000..c6f6d2f --- /dev/null +++ b/day6/program.js @@ -0,0 +1,23 @@ +// Today's input is only 1 line, but my program still accepts multi-line +// as that is what the runner does. This means the sample input is actually bigger, line-wise +// than the actual input. This means I'm writing the code to handle sample input, thus making +// the code more complex than it needs to be, though only by a loop +export default function Day(data) { + data.forEach(line => parseLine({line: line, part: 1, amountOfChars: 4})); + data.forEach(line => parseLine({line: line, part: 2, amountOfChars: 14})); +} + +function parseLine({line, part, amountOfChars}) { + let chars = []; + for (let i = 0; i < line.length; i++) { + chars.push(line.charAt(i)); + if (chars.length > amountOfChars) { + chars.shift(); + } + + if (chars.length === amountOfChars && (new Set(chars)).size === chars.length) { + return console.log(`Part ${part}: Unique after ${i+1} chars`); + } + + } +} \ No newline at end of file diff --git a/day6/sample.txt b/day6/sample.txt new file mode 100644 index 0000000..698fdf2 --- /dev/null +++ b/day6/sample.txt @@ -0,0 +1,5 @@ +mjqjpqmgbljsphdztnvjfqwrcgsmlb +bvwbjplbgvbhsrlpgdmjqwftvncz +nppdvjthqldpwncqszvftbrmjlhg +nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg +zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw \ No newline at end of file diff --git a/day7/input.txt b/day7/input.txt new file mode 100644 index 0000000..3601b1e --- /dev/null +++ b/day7/input.txt @@ -0,0 +1,1105 @@ +$ cd / +$ ls +dir hdwsmn +dir lmlsvqsw +dir rlfgcqz +dir sjq +dir tpnspw +$ cd hdwsmn +$ ls +dir mrrqnc +dir qst +dir rlfgcqz +$ cd mrrqnc +$ ls +227398 rwhw +$ cd .. +$ cd qst +$ ls +152795 bblss.hnl +dir lvs +$ cd lvs +$ ls +81813 jwvtjgjb.sss +$ cd .. +$ cd .. +$ cd rlfgcqz +$ ls +dir hlltch +dir jqpnnmwc +$ cd hlltch +$ ls +219753 rtgdsbz.qlg +$ cd .. +$ cd jqpnnmwc +$ ls +164333 dmvchsd.ncw +141721 njsfs.pmd +dir rlfgcqz +$ cd rlfgcqz +$ ls +278398 vhh.jtr +dir wfnpcnr +$ cd wfnpcnr +$ ls +dir njsfs +$ cd njsfs +$ ls +46895 twfg.gzb +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd lmlsvqsw +$ ls +81577 bblss +12519 dlghs.dcz +260260 gphgq.ztw +dir mldg +6570 qgbg +61210 twfg.gzb +$ cd mldg +$ ls +152240 bgddpvj.cgb +dir rlfgcqz +$ cd rlfgcqz +$ ls +dir dbvjfgff +dir dnnd +112649 qwhmdlf +dir wcqpzpp +$ cd dbvjfgff +$ ls +dir rlfgcqz +$ cd rlfgcqz +$ ls +278899 wmclvlvq.fbf +$ cd .. +$ cd .. +$ cd dnnd +$ ls +17486 zhqjt.dwq +$ cd .. +$ cd wcqpzpp +$ ls +195207 cvqtfn +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd rlfgcqz +$ ls +63895 gbwqg +35085 lllv.jpl +155195 nhrbwg.dcf +84099 wsh.sps +$ cd .. +$ cd sjq +$ ls +48652 dmvchsd.ncw +$ cd .. +$ cd tpnspw +$ ls +81312 ftjrpmr.mfd +dir gcwq +dir lvvztw +dir msrdg +dir ncgljn +dir njsfs +dir ptncs +263168 rwglhrm +192446 twfg.gzb +$ cd gcwq +$ ls +dir bblss +dir hlmm +$ cd bblss +$ ls +120988 qgbg.tcm +326021 tbvgfdnc.cvl +$ cd .. +$ cd hlmm +$ ls +287707 dmvchsd.ncw +319996 gpvfhpnr.jjl +$ cd .. +$ cd .. +$ cd lvvztw +$ ls +dir bdsvzhbm +155345 ftjrpmr.mfd +112094 qwhmdlf +9917 vnmtgsq.gcj +$ cd bdsvzhbm +$ ls +dir jmmltt +dir zgcjl +$ cd jmmltt +$ ls +130686 zsp.dcc +$ cd .. +$ cd zgcjl +$ ls +318547 dmvchsd.ncw +$ cd .. +$ cd .. +$ cd .. +$ cd msrdg +$ ls +dir wjp +$ cd wjp +$ ls +301898 bjccpf +97684 mcnqbl.bwn +160132 qwhmdlf +315893 twfg.gzb +$ cd .. +$ cd .. +$ cd ncgljn +$ ls +dir bblss +119737 gdc.mrs +196706 ggljwvgj.blh +162440 mlgnvbhj.gbw +163186 qwqlfwfw.mfj +167447 twfg.gzb +$ cd bblss +$ ls +dir bblss +dir njsfs +137986 nlmbnm +dir qgbg +229544 zhqjt.dwq +$ cd bblss +$ ls +186733 wcqpzpp.mmr +$ cd .. +$ cd njsfs +$ ls +dir tjbrtt +$ cd tjbrtt +$ ls +284955 rlfgcqz.ltq +$ cd .. +$ cd .. +$ cd qgbg +$ ls +dir dmcmw +15196 ftjrpmr.mfd +dir gbpqj +236891 ghlm.wlm +156863 qgbg +dir wfvqv +$ cd dmcmw +$ ls +116526 dhzhmj.qpw +251858 dmvchsd.ncw +dir ffqghmp +dir njsfs +148820 njsfs.zvm +290169 twfg.gzb +186117 wcqpzpp.vsd +$ cd ffqghmp +$ ls +dir wcqpzpp +$ cd wcqpzpp +$ ls +dir rfmsdjr +$ cd rfmsdjr +$ ls +291669 psmg.ldm +$ cd .. +$ cd .. +$ cd .. +$ cd njsfs +$ ls +35762 dmvchsd.ncw +97427 njsfs +261675 twfg.gzb +15426 wcqpzpp +dir zvnjrnrw +$ cd zvnjrnrw +$ ls +18370 dmvchsd.ncw +10620 wsgd.fjt +$ cd .. +$ cd .. +$ cd .. +$ cd gbpqj +$ ls +10204 fdlpjd.tgr +117954 rlfgcqz +$ cd .. +$ cd wfvqv +$ ls +dir fsq +133485 twfg.gzb +$ cd fsq +$ ls +156862 qwhmdlf +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd njsfs +$ ls +dir bblss +dir bzlpqv +dir cvm +dir dbbngm +dir gbtmsjgl +224200 nrffnj +$ cd bblss +$ ls +dir dhmwcmf +280202 hmp +66351 ndnr.wjh +85218 qhrhjb +dir tcqnf +dir wjv +dir zwlpqrb +$ cd dhmwcmf +$ ls +dir qtdf +dir scsllc +$ cd qtdf +$ ls +dir fmbsgvr +$ cd fmbsgvr +$ ls +1641 jdtcd.qhw +109819 qwhmdlf +$ cd .. +$ cd .. +$ cd scsllc +$ ls +dir brthfcm +dir qqgh +81391 rlfgcqz.pcj +192835 rlfgcqz.rnf +$ cd brthfcm +$ ls +135591 qwhmdlf +$ cd .. +$ cd qqgh +$ ls +270614 djjq +dir njsfs +$ cd njsfs +$ ls +18629 fngbfvr +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd tcqnf +$ ls +25594 gvqjrdlr.fps +314758 rlfgcqz.ndb +269846 wcqpzpp.gvz +$ cd .. +$ cd wjv +$ ls +dir dtddhqbj +dir njsfs +dir pgfrd +95552 pjzgwggg.hpc +29427 rlfgcqz +dir shhzzrf +$ cd dtddhqbj +$ ls +dir fmzhtfd +36982 ftjrpmr.mfd +dir gqsg +dir wcqpzpp +$ cd fmzhtfd +$ ls +dir psqnghl +226561 rttdhnnm +220713 tsfcpzzv +$ cd psqnghl +$ ls +136028 qwhmdlf +280539 rlfgcqz.nzf +129468 zhqjt.dwq +dir zlb +$ cd zlb +$ ls +dir qgbg +$ cd qgbg +$ ls +188576 ftjrpmr.mfd +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd gqsg +$ ls +302134 dmvchsd.ncw +161569 drzt.pmq +$ cd .. +$ cd wcqpzpp +$ ls +254804 bblss.sqp +280941 dbvw.mdw +dir gfs +317925 njsfs.wpr +dir qgbg +$ cd gfs +$ ls +dir jrctzlg +dir lrnzq +233927 njsfs.bmd +45942 twfg.gzb +125290 vbtr.wvj +dir wcqpzpp +$ cd jrctzlg +$ ls +88635 qwhmdlf +204938 vlnwcv +$ cd .. +$ cd lrnzq +$ ls +253736 bblss.ddj +272769 vsrvgsc.cwl +$ cd .. +$ cd wcqpzpp +$ ls +301739 ftjrpmr.mfd +63733 qwhmdlf +$ cd .. +$ cd .. +$ cd qgbg +$ ls +dir cpr +196886 hgj +188348 lqvq +132024 twfg.gzb +213866 zhqjt.dwq +$ cd cpr +$ ls +dir wznlzpzj +115532 zhqjt.dwq +$ cd wznlzpzj +$ ls +dir bcwnrc +$ cd bcwnrc +$ ls +289013 dmvchsd.ncw +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd njsfs +$ ls +296178 mpprqbgc +128104 zhqjt.dwq +$ cd .. +$ cd pgfrd +$ ls +dir slgztr +$ cd slgztr +$ ls +dir htjd +dir rlfgcqz +243751 twfg.gzb +dir wcqpzpp +$ cd htjd +$ ls +216650 ftjrpmr.mfd +$ cd .. +$ cd rlfgcqz +$ ls +144834 qwchd.qtn +$ cd .. +$ cd wcqpzpp +$ ls +133476 qwhmdlf +$ cd .. +$ cd .. +$ cd .. +$ cd shhzzrf +$ ls +dir hbp +dir jqfhdn +dir qgbg +dir tftrnfpd +dir zppjlf +$ cd hbp +$ ls +158562 fbwsrbbg +297036 zph.mbd +$ cd .. +$ cd jqfhdn +$ ls +166463 bblss.sgd +125240 dmq +48389 ftjrpmr.mfd +dir njsfs +dir rlfgcqz +$ cd njsfs +$ ls +dir tbjp +307427 zhqjt.dwq +$ cd tbjp +$ ls +76200 rcfv.bgh +$ cd .. +$ cd .. +$ cd rlfgcqz +$ ls +294331 bblss.vwj +$ cd .. +$ cd .. +$ cd qgbg +$ ls +dir qnpdnjdl +dir rdmj +$ cd qnpdnjdl +$ ls +dir sblj +$ cd sblj +$ ls +39051 twfg.gzb +2405 zhqjt.dwq +$ cd .. +$ cd .. +$ cd rdmj +$ ls +213965 zhqjt.dwq +$ cd .. +$ cd .. +$ cd tftrnfpd +$ ls +294450 chbgd.vjv +318594 hvwbj +dir nznzzw +96252 twfg.gzb +dir vlfdtwj +dir vsvj +dir wvnjtmt +dir zlj +dir zwqff +$ cd nznzzw +$ ls +115971 nndbd.rhl +$ cd .. +$ cd vlfdtwj +$ ls +167648 ddvqzlh.cpw +$ cd .. +$ cd vsvj +$ ls +dir dfzcrmt +dir ffpvbczr +110196 njsfs.zsh +257204 qrgnw.mhw +dir rptmp +131871 zhqjt.dwq +$ cd dfzcrmt +$ ls +dir hqbthjc +dir hztrwjr +11874 rsd +252800 zhqjt.dwq +$ cd hqbthjc +$ ls +135533 bblss.clm +231343 rlfgcqz.zfh +176061 rrzqhdp +$ cd .. +$ cd hztrwjr +$ ls +dir zmpm +$ cd zmpm +$ ls +297930 rpb +$ cd .. +$ cd .. +$ cd .. +$ cd ffpvbczr +$ ls +dir qdvppt +dir qgbg +$ cd qdvppt +$ ls +323419 bblss.lnl +$ cd .. +$ cd qgbg +$ ls +158408 dmvchsd.ncw +$ cd .. +$ cd .. +$ cd rptmp +$ ls +280342 rqlbtpw +$ cd .. +$ cd .. +$ cd wvnjtmt +$ ls +dir bblss +249330 fgc.ftp +dir gtbbfzzn +dir wcqpzpp +$ cd bblss +$ ls +1570 zhqjt.dwq +$ cd .. +$ cd gtbbfzzn +$ ls +65850 lmbrdhc.jbz +$ cd .. +$ cd wcqpzpp +$ ls +62362 qwhmdlf +$ cd .. +$ cd .. +$ cd zlj +$ ls +103758 lrhflmsw.qhq +163919 qwhmdlf +$ cd .. +$ cd zwqff +$ ls +dir ghfc +dir njsfs +$ cd ghfc +$ ls +131979 hpcgrvms +$ cd .. +$ cd njsfs +$ ls +126387 wcqpzpp +$ cd .. +$ cd .. +$ cd .. +$ cd zppjlf +$ ls +241176 rlfgcqz.ctz +$ cd .. +$ cd .. +$ cd .. +$ cd zwlpqrb +$ ls +272627 bblss.gpv +261635 blczb.srs +dir lnhzzl +153210 njsfs +55633 twfg.gzb +$ cd lnhzzl +$ ls +dir dtwcsvzf +$ cd dtwcsvzf +$ ls +74858 dtz.rpc +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd bzlpqv +$ ls +157801 gdqhdd +318418 nmq +266938 qwhmdlf +$ cd .. +$ cd cvm +$ ls +1145 dmvchsd.ncw +233344 ftjrpmr.mfd +263393 njsfs.hvb +74436 twfg.gzb +dir wcqpzpp +96596 whq +$ cd wcqpzpp +$ ls +dir rlfgcqz +$ cd rlfgcqz +$ ls +244048 gspw +324759 qgbg.wrf +190410 qwhmdlf +$ cd .. +$ cd .. +$ cd .. +$ cd dbbngm +$ ls +dir bblss +184222 bcfzt.grj +dir rlfgcqz +41851 sshb.nzv +113784 wgjc.mrr +13594 zhqjt.dwq +$ cd bblss +$ ls +102201 qwhmdlf +$ cd .. +$ cd rlfgcqz +$ ls +91063 bblss.msn +2918 dqhbnt +74771 nbprqmbs.jwj +$ cd .. +$ cd .. +$ cd gbtmsjgl +$ ls +207664 cnfpq.wbl +$ cd .. +$ cd .. +$ cd ptncs +$ ls +dir bmpts +dir bpmf +dir brhp +dir gzjppjfr +dir jrd +321627 jss.jsh +130602 lfmrp.csp +dir prfz +dir qgbg +dir qjgchtwb +dir rvqrjms +174888 ttmwlrs.wbc +dir vwgsmc +55854 zhqjt.dwq +$ cd bmpts +$ ls +124846 dmvchsd.ncw +283278 mlcmzqdf.pfj +dir plbpr +312240 qwhmdlf +74910 rlfgcqz.jqp +dir tvrvwv +$ cd plbpr +$ ls +37432 dmvchsd.ncw +dir wcqpzpp +$ cd wcqpzpp +$ ls +18638 bsfsc.gfs +$ cd .. +$ cd .. +$ cd tvrvwv +$ ls +dir tsgp +$ cd tsgp +$ ls +141689 wcqpzpp.jdc +$ cd .. +$ cd .. +$ cd .. +$ cd bpmf +$ ls +201372 ftjrpmr.mfd +dir nhtjhsp +dir qgbg +dir sbqfdzh +dir wcqpzpp +178078 zhqjt.dwq +$ cd nhtjhsp +$ ls +225213 ftjrpmr.mfd +$ cd .. +$ cd qgbg +$ ls +214193 cwnphff +296165 ftjrpmr.mfd +260246 zhqjt.dwq +$ cd .. +$ cd sbqfdzh +$ ls +281546 njsfs.rjz +dir qgbg +246263 qqbsjtp.nbn +10231 srllsw +$ cd qgbg +$ ls +92801 dmvchsd.ncw +66784 pbz +226132 wcqpzpp.vjs +242775 wgt.bbw +$ cd .. +$ cd .. +$ cd wcqpzpp +$ ls +55886 bblss.vzh +313619 rlfgcqz +$ cd .. +$ cd .. +$ cd brhp +$ ls +321184 nnfzrm.mgz +190867 rlfgcqz.qbs +$ cd .. +$ cd gzjppjfr +$ ls +67036 ftjrpmr.mfd +$ cd .. +$ cd jrd +$ ls +293867 dmvchsd.ncw +dir drjbp +dir njsfs +10759 pcpvd.hsg +dir qfghvhsr +dir thf +268195 tmwvbl +$ cd drjbp +$ ls +dir ccdmcgvz +276381 gbhhwlv.rlt +252224 zqt.wpc +$ cd ccdmcgvz +$ ls +4082 cffmcz +31006 mws.tvb +dir njsfs +$ cd njsfs +$ ls +dir bblss +$ cd bblss +$ ls +180561 lfd +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd njsfs +$ ls +115688 qgbg +34653 qwhmdlf +$ cd .. +$ cd qfghvhsr +$ ls +3280 ssg.ctr +$ cd .. +$ cd thf +$ ls +dir bzhbrlh +dir qgbg +$ cd bzhbrlh +$ ls +148423 wjtlhwq +$ cd .. +$ cd qgbg +$ ls +dir rrtb +dir slhbmldf +$ cd rrtb +$ ls +30387 rlfgcqz +$ cd .. +$ cd slhbmldf +$ ls +dir vszhrc +$ cd vszhrc +$ ls +235629 qwhmdlf +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd prfz +$ ls +254587 bblss +dir bmfg +dir bsw +dir cfjdjcmt +321761 dmvchsd.ncw +35369 ftjrpmr.mfd +dir nqrbhdcn +237737 rlfgcqz.wsp +dir smdsrzlc +25049 tbwfsp +$ cd bmfg +$ ls +dir bblss +275693 wcqpzpp.zvw +$ cd bblss +$ ls +dir lddn +$ cd lddn +$ ls +dir mqlpwvcg +$ cd mqlpwvcg +$ ls +34635 zztv +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd bsw +$ ls +dir ljqv +dir vhpqbw +$ cd ljqv +$ ls +119525 ftjrpmr.mfd +$ cd .. +$ cd vhpqbw +$ ls +154199 twfg.gzb +$ cd .. +$ cd .. +$ cd cfjdjcmt +$ ls +22258 zhqjt.dwq +$ cd .. +$ cd nqrbhdcn +$ ls +dir bblss +84121 fbgqdsn +232625 hrjft +201822 ltfpl.lsq +194572 pgbqncwc.vqq +43024 qfgrmw +dir wcqpzpp +dir wvtnznjn +$ cd bblss +$ ls +326048 jctnwzn.zcq +$ cd .. +$ cd wcqpzpp +$ ls +265643 bzjmjng.vhr +dir lwt +dir qgbg +164876 twfg.gzb +dir vswqzjc +264349 wcqpzpp.lzp +$ cd lwt +$ ls +156024 ftjrpmr.mfd +287930 lmjwqw +dir qvr +56184 qwhmdlf +203952 twfg.gzb +95508 wcqpzpp +$ cd qvr +$ ls +dir ndqmn +$ cd ndqmn +$ ls +153880 njsfs.fvr +$ cd .. +$ cd .. +$ cd .. +$ cd qgbg +$ ls +244154 ftjrpmr.mfd +dir pztf +dir qgbg +dir rlfgcqz +dir zpvcn +$ cd pztf +$ ls +dir njsfs +dir sfrbvhp +$ cd njsfs +$ ls +268512 dmvchsd.ncw +$ cd .. +$ cd sfrbvhp +$ ls +dir wcqpzpp +$ cd wcqpzpp +$ ls +2126 dmvchsd.ncw +$ cd .. +$ cd .. +$ cd .. +$ cd qgbg +$ ls +123331 zhqjt.dwq +$ cd .. +$ cd rlfgcqz +$ ls +4261 lflphd.cfn +144504 twfg.gzb +110656 wcqpzpp.cjr +$ cd .. +$ cd zpvcn +$ ls +259119 qgbg +$ cd .. +$ cd .. +$ cd vswqzjc +$ ls +dir qgbg +dir rlfgcqz +$ cd qgbg +$ ls +76795 qwhmdlf +dir wcqpzpp +293923 zfcwvpz.vrn +$ cd wcqpzpp +$ ls +296986 qwhmdlf +$ cd .. +$ cd .. +$ cd rlfgcqz +$ ls +dir dtwv +dir rfbrzf +200095 rlqrlh +$ cd dtwv +$ ls +306977 bblss.dzm +139644 njsfs +$ cd .. +$ cd rfbrzf +$ ls +96622 cnb.wdl +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd wvtnznjn +$ ls +320558 lvtrqjnv.twq +$ cd .. +$ cd .. +$ cd smdsrzlc +$ ls +dir mbfqdbl +$ cd mbfqdbl +$ ls +dir hrhc +$ cd hrhc +$ ls +110162 hgbng +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd qgbg +$ ls +41978 mrfvnb.zbh +172912 rlfgcqz.qlf +$ cd .. +$ cd qjgchtwb +$ ls +243299 dmvchsd.ncw +91104 jbwss +207317 llqnrd.czw +145298 znzb.lsj +$ cd .. +$ cd rvqrjms +$ ls +40049 twfg.gzb +$ cd .. +$ cd vwgsmc +$ ls +dir qzl +dir rlfgcqz +dir tmpjd +dir vqt +$ cd qzl +$ ls +324024 cspbrpgv.fcc +8468 hfdwz.bjq +dir nvrpj +46755 qgbg.lhn +247926 qwhmdlf +dir thtq +17180 wcqpzpp +$ cd nvrpj +$ ls +dir vpscvbj +$ cd vpscvbj +$ ls +225620 bvrzrw +$ cd .. +$ cd .. +$ cd thtq +$ ls +dir pqqhcl +276922 qwhmdlf +59145 sshgg.bcf +dir wclbp +$ cd pqqhcl +$ ls +123067 vvhlq.bbg +$ cd .. +$ cd wclbp +$ ls +dir djbbpzjz +$ cd djbbpzjz +$ ls +5446 wtn.gnz +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd rlfgcqz +$ ls +dir njsfs +$ cd njsfs +$ ls +178834 flrr +$ cd .. +$ cd .. +$ cd tmpjd +$ ls +1973 fnlwgc.rbq +240728 njsfs.sgm +dir qgbg +51532 qgbg.vdc +330859 rdvzpf.lld +dir sjlq +259561 twfdn.vnm +dir zlbmf +$ cd qgbg +$ ls +273408 bznqvg +45710 dmvchsd.ncw +306311 jcvn.brh +269315 rlfgcqz.crg +51046 rnqb.wlt +dir wqfprrd +dir zjscb +$ cd wqfprrd +$ ls +276417 zhqjt.dwq +$ cd .. +$ cd zjscb +$ ls +276541 bblss.dhl +dir mlsdv +dir njsfs +$ cd mlsdv +$ ls +251030 qwhmdlf +$ cd .. +$ cd njsfs +$ ls +dir cfmfsbc +$ cd cfmfsbc +$ ls +234880 zhqjt.dwq +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd sjlq +$ ls +25547 nqvnpgs.zhl +$ cd .. +$ cd zlbmf +$ ls +21812 pjn.hbf +dir rcgvwrg +$ cd rcgvwrg +$ ls +19512 qwhmdlf +$ cd .. +$ cd .. +$ cd .. +$ cd vqt +$ ls +80263 njsfs.zmr \ No newline at end of file diff --git a/day7/program.js b/day7/program.js new file mode 100644 index 0000000..308d194 --- /dev/null +++ b/day7/program.js @@ -0,0 +1,58 @@ +export default function Day(data) { + const { files, dirs } = loopThroughCommands(data); + dirs.sort((a, b) => a.size - b.size); + const sum = dirs.reduce((acc, dir) => { + if (dir.size < 100000) { + return acc + dir.size; + } + return acc; + }, 0); + + console.log(`Part 1: ${sum}`); + + const totalFileSize = files.size; + + const sizeRemaining = 70000000 - totalFileSize; + const sizeRequiredForUpgrade = 30000000 - sizeRemaining; + + const smallestDir = dirs.find(dir => dir.size >= sizeRequiredForUpgrade); + console.log(`Part 2: ${smallestDir.size}`); +} + +function loopThroughCommands(commands, from = 0, name = "/") { + let dirStructure = { + size: 0, + files: [], + name: name, + }; + const directories = []; + + let i = from; + for (i; i < commands.length; i++) { + let command = commands[i].split(" "); + + if (command[0] === "$") { + if (command[1] === "cd") { + if (command[2] === "..") { + return { files: dirStructure, newI: i, dirs: directories }; + } else if (command[2] !== "/") { + let { files, newI, dirs } = loopThroughCommands(commands, i + 1, command[2]); + directories.push(files); + directories.push(...dirs); + i = newI; + if (files) { + dirStructure.files.push(files); + dirStructure.size += files.size; + } + } + } + } else if (!isNaN(command[0])) { + dirStructure.size += parseInt(command[0]); + dirStructure.files.push({ + name: command[1], + size: parseInt(command[0]), + }); + } + } + return { files: dirStructure, newI: i, dirs: directories }; +} diff --git a/day7/sample.txt b/day7/sample.txt new file mode 100644 index 0000000..bcbb513 --- /dev/null +++ b/day7/sample.txt @@ -0,0 +1,23 @@ +$ 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 \ No newline at end of file diff --git a/day8/input.txt b/day8/input.txt new file mode 100644 index 0000000..d478f8b --- /dev/null +++ b/day8/input.txt @@ -0,0 +1,99 @@ +313213123212200312011243203120214010202554420335045116203101005212525131015305511140012431022113113 +222021333112322244231542054023354511304431216312534453560105660253445311020244233130144313440030322 +200012220300132310233100025524032003355144536126232161330106115213441450552235514000243120210031130 +102111124044033113241415155401056014506203413216651520206613342353052505445000321043121021430440021 +221134021010031320101542213340113552161113350123516154134654046250223033000413443321231233142213010 +112241233114245202523201433013460320664034202602144006022621253536213222400131120345151014014131133 +132211130114141401325141212460540656525106651152012063404633651340223361443201520054113541144043031 +323140320024314005210155316202152552621415660063112177564603241212312025036551350313225504314404112 +014013242041230510442265205625331115540222744516266167254216354043533020346502032534231121044441220 +233414030101315255335126055263144512111777464611565216157441673706100506241423030403420343112342030 +133144314412553330012446404244433465434666762135116677765213463444460612511131340332552424201204120 +010320402332512110363213044530335655613562223756572424746437567672262256431540210005310544243444101 +324403411232230200215144254550257275144535323452276762234354361552536153612012260502425410505314212 +044143021304533036524115200363122146144443357746134567133417572143572217253466665420004544002052304 +031301205442313664253200353721523337451137554555385833341715227554331566151244334446363035232422032 +412021132254126340642250212415471513377143653545744364662761514364426436251422450305502445230351142 +423013525424334650512351242132544127615655738268233852527877887577454317715373566210510633013145020 +314013042244622602006117664713652263528475833433263846468763678447134716635345050225504112315124312 +210530032555051320514661111414734263472852682724485772623266565822423365264512541061226540103142223 +202523210140346233027372362557125436368725536228624865344774378537888747171665564143331101501212340 +312102150200503360534132445517484678583587678756766763747725475724228724317675166660536246102044404 +014501150514404506226424155762432386227846258625478334768375862827476433553651311460116133631440213 +145345025402132601222234271268834838244287765994936689397836424284644676342577451356463132062234232 +030520533600060465674743543832435622275594666933473957864637427284284528866426734257033413611153542 +111125222126126664625217555874224623337857863456948836785373353757744683247375632677514312554402024 +454344234313551645731724622525365832657894545768964536939387863978465673442253722125752553236132004 +141351656653224237252122854224855258938593946648537669944575478986734723225856761571634036114323202 +301354130411223555466416844555847677853855433636774857897563386873392265447728545634555234214003555 +324351500351156142554654722557458488698547355994463766454687489898485753473777574124613414652504004 +000202526603566624271288867428799685358698759656849978553895836996388433252545546266753551322305123 +142140450656776227714466585833798874975635767795445874946645465477849772464684527525213236023524220 +324262353505673315724236445748536388973668654588599896854469535494838643744387872721615221063235321 +552206463167666154577658258569744567339446596474586868848866645743399869362886626547344767533546153 +352323434663437355725427826449799477395999565764668865854945787936654594832633678767541225131001503 +440166362233562667478335763956389857755767497475848959778498799895595785387844464757513162265652640 +104122124642766642664452283555537376598457767558647554969995685645795999475473687336165523560052001 +255352243015641217534667849769975859955778464876555786747474774794864778373768452562637255330444232 +456220432747476336866782246873698697677699688678997975678548856759743777979632262638565415133210633 +354641641663166247236463863687744889449497969668886767686756898498698544578857834482516366746042103 +125201564115437683566423743488648645944969969766988857659599646944656843556585768447477145122536100 +565166453317161563746425435958546648857589858689866779576599554476785965354884443284615264253254316 +121246126671552573824643637663796768749697876859599686798755755668478994537789677336675255111501306 +360355134677155672632437676667797548778989878956585555755888869798448799556895227877387243567410342 +201045427623176635776469999883749944896899977995889968875595559556975886998744463243563112165201326 +352250115546124536536769454447786744475757988989886986985776968688899563536676844455461472345336201 +444012305276547277522595375654994558855859877987996678887769879954854599865599846623773465534004160 +003621673437674224248486547979885878957565757686996887766986595599447858644667462254244517674205046 +045265132276456334554365893935749649965989576778789869677576755756899986563778785582684657425224532 +256151375615717542563666894835779554876779596976976699887778577957456866545674477228666746346403631 +161152464371764263643334333389748956969597666797767878866755966565484647664843525828682412373755454 +502011544714165463843278447485479797867666888668797796768977767569575788836334565474627531473704246 +151460364232447443233565968759985868786557997798976867676959589967898874545836432537554441566122314 +325354014323767722264889584534897666569996596668678778968696799996649764974489874252576563221244356 +300165663442414468382638967476995984959988868887699967676597986577798947648889527728225341345144126 +523044146537227284236854867884546566896896589678689877799567996884747789569869374746443236356121631 +623520016256236672238393557665746588457977578897867867689877778857948885353767526367472655634211324 +513112323743777428355697564974758755988785986568979868979685685997847967586943842248473255451053311 +450020506764535784366644976997588757498856779786876686775868855996746554394579645638756632417635430 +333302106653766675873339799535474646879996789788987875587977755587884588498366525263657241244563411 +021603345313213632267754575346995947848565695878969885767869775868759846376874235783854235221066060 +451051105676415353834239879477689664878678578559658579558858859685656646333643282578751361221450043 +323133151167312457234657559765757999468467698869969666865897797857485499569838464565771443341433624 +351226435216677645378442636393858569688464696659679658777559879978765539986842833528347477142364355 +312522015134552576843564246393479975856585945659576986575979678487794748787843877358147735663364153 +436221405132742616333723774335457748498747869445768557777496645469557694497322763335217424704452516 +531453464276746646458848784658447874499485559877948986585644748765566863496685884585514544145343261 +124004035175455643547236885494794479865464946999998568586788689967343377758845738571672264321061003 +200155306351543777457257657968974568856495865454798449784799858884637386375422526864243565062364102 +445601414321444235648773664866559437996644487476459565964785659539635568456223755627145663416360463 +450034302502443262354377457789598776596746648495968457946465588399656898646426472411777146341644150 +023146264504256441756645634487555664987468946766784647877558359936934483654774826324735714633603030 +333342045300642417421427522458538378785933374679488696549488964673985948667688553344343522163201010 +455545402043235615564685485576228935958544883643955984493945756635487843653852747147246556553523510 +521503005555124536565566284723484688885348465998948435535997783785742684873228712152117622054235215 +312504066020457274731625463858577544637764966338466339435677364997568623562286441516367015430243140 +205031053461063473777474186844553532897797357638539497889554739476455778658267742121765420506102155 +234254241452503617412556672484735427269749864873783849964559983463526474536714377341620430652445005 +005122256601541121767617243673775345873688335643477574686454362545566824655271216641353663405312143 +433412443503526366274346321587248483458325774873734889987843368227357425636513234740304061623033442 +150425005143315445343366357776572258884478742563678357783845862235758564513525337622046146253440425 +225155323264631456635462325511885764326675428846268646575225734474437376612544667111053406332354205 +035014011000365630427277363261244836668367562448734772533252234588746775752633154601553624254020455 +012332415442566650666617225747354638747746384682743326746678826728355131225614470132623462424342514 +013524113311511615516563562155256314453777643324383464236254565752742637247411046651633511302344051 +212122212430404140032134131564756752725322885466434352224875446515552517267614410524244004301240143 +311400235445132520254065617566464245641623888587556667385287735312776421161334445544251524420400232 +440215452341344043062300567544524332733611636552822742567416277354477557756312354353622415135520342 +212430430313114143406656305336551452762327233736172563224242725162751616161102623013055041203553040 +321010353433305435042151016603142762425754273737777221111751751754217734105034366116400050235001301 +141012030043441152515110066520525231112547624256173331346341451761472053411546323404310404443302411 +133133034522454043232213312145664546126452755453724144154261454733124054403605004150535010413000334 +331412441152240551104612131344064131112564126362561532523311462604061151623121543003234021543312303 +010301442302500534021525552205536466144454523741535255444641345430402356234514221410435324321440211 +222301014410242404221240250563134040056104626021173454550103400400616550340400310015454450242211021 +233412422204111420244300456264320032401430366334634641441411125102262216452333414201235210001133200 +132244430320123233143125240232350142156620032556633233042303530460352401020133104323414224314240333 +003213243020203044035550441012322051645661162162123160565554312321050133555533333123214002014231123 +000032030402033315113220225514041611664662663525144303562161423513133325130431534323303033322212313 +101211324120322333355055001035515221630532526633042003421442155144120444232152535003241233413001002 \ No newline at end of file diff --git a/day8/program.js b/day8/program.js new file mode 100644 index 0000000..619563a --- /dev/null +++ b/day8/program.js @@ -0,0 +1,125 @@ +export default function Day(data) { + let treeMap = convertTreesToMap(data); + initiatePart1(treeMap); + + // part 2 + let scores = []; + treeMap.forEach((row, i) => { + row.forEach((tree, j) => { + scores.push(calculateViewScore(treeMap, j, i)); + }); + }); + + scores.sort((a, b) => b - a); + + console.log(`Part 2: ${scores[0]}`); +} + +function initiatePart1(treeMap) { + treeMap.forEach(row => { + traverseRow(traverseRow(row), true); + }); + + let rotatedMap = rotateMap(treeMap); + rotatedMap.forEach(row => { + traverseRow(traverseRow(row), true); + }); + + // count number of visible trees + let visibleTrees = 0; + treeMap.forEach(row => { + row.forEach(tree => { + if (tree.visible) { + visibleTrees++; + } + }); + }); + + console.log(`Part 1: ${visibleTrees}`); +} + +// function to rotate the grid of the map +function rotateMap(map) { + return map[0].map((col, i) => map.map(row => row[i])); +} + +function traverseRow(row, reverse = false) { + let from = reverse ? row.length - 1 : 0; + let to = reverse ? 0 : row.length - 1; + let step = reverse ? -1 : 1; + let tallestTree = 0; + + for (let i = from; i !== to; i += step) { + + if (row[i].height > tallestTree) { + tallestTree = row[i].height; + } + + if (row[i+step].height > tallestTree) { + row[i+step].visible = true; + } + } + + return row; +} + +function convertTreesToMap(trees) { + let rows = []; + + trees.forEach((treeRow, rowNum) => { + let row = []; + + let outsideRow = rowNum === 0 || rowNum === trees.length - 1; + let rowLength = treeRow.length; + + for (let i = 0; i < treeRow.length; i++) { + row.push({ + height: parseInt(treeRow[i]), + visible: outsideRow || i === 0 || i === rowLength - 1 ? true : false, + x: i, + y: rowNum + }); + } + rows.push(row); + }); + + return rows; +} + +function calculateViewScore(map, x, y) { + let row = map[y]; + let col = map.map(row => row[x]); + + const score = [ + calculateVisibleInRow(row, x, 'right'), + calculateVisibleInRow(row, x), + calculateVisibleInRow(col, y, 'right'), + calculateVisibleInRow(col, y) + ] + + return score[0] * score[1] * score[2] * score[3]; +} + +function calculateVisibleInRow(row, from, direction = 'left') { + let score = 0; + + if (direction === 'left') { + row = [...row].reverse(); + from = row.length - from - 1; + } + + const fromTree = row[from]; + + const testTrees = row.slice(from+1); + + let blocked = false; + testTrees.forEach(tree => { + if (blocked) return; + score ++; + if (tree.height >= fromTree.height) { + blocked = true; + } + }); + + return score; +} \ No newline at end of file diff --git a/day8/sample.txt b/day8/sample.txt new file mode 100644 index 0000000..6557024 --- /dev/null +++ b/day8/sample.txt @@ -0,0 +1,5 @@ +30373 +25512 +65332 +33549 +35390 \ No newline at end of file diff --git a/empty/input.txt b/empty/input.txt new file mode 100644 index 0000000..e69de29 diff --git a/empty/program.js b/empty/program.js new file mode 100644 index 0000000..2101edf --- /dev/null +++ b/empty/program.js @@ -0,0 +1,3 @@ +export default function Day(data) { + +} \ No newline at end of file diff --git a/empty/sample.txt b/empty/sample.txt new file mode 100644 index 0000000..e69de29 diff --git a/helper.js b/helper.js new file mode 100644 index 0000000..952d5b3 --- /dev/null +++ b/helper.js @@ -0,0 +1,16 @@ +import fs from "fs"; + +export default async function loadData(day) { + const filename = process.argv[3] ? 'sample.txt' : 'input.txt'; + const data = await fs.readFileSync(`./${day}/${filename}`, "utf-8"); + return data.split("\n"); +} + +export async function fileExists(filename) { + try { + const result = await fs.existsSync(filename); + return result; + } catch (err) { + return false; + } +} diff --git a/index.js b/index.js new file mode 100644 index 0000000..8d9011a --- /dev/null +++ b/index.js @@ -0,0 +1,30 @@ +import loadData, { fileExists } from "./helper.js"; + +if (process.argv[2]) { + try { + const dayName = `day${process.argv[2]}`; + const filename = `./${dayName}/program.js`; + + if (await fileExists(filename)) { + console.log("found", filename); + const data = await loadData(dayName); + const { default: Day } = await import(filename); + + console.time("Day Execution"); + Day(data); + console.timeEnd("Day Execution"); + } else { + console.log("The provided day does not exist or is not yet implemented"); + } + } catch (e) { + console.log(e); + error(); + } +} else { + error(); + process.exit(1); +} + +function error() { + console.log('Please specify a day as a number like "node index.js 1"'); +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3835808 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "adventofcode", + "lockfileVersion": 2, + "requires": true, + "packages": {} +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..35275ad --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "adventofcode", + "version": "1.0.0", + "description": "Hi all!", + "main": "helper.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "launch": "node index.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Topener/adventofcode.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/Topener/adventofcode/issues" + }, + "homepage": "https://github.com/Topener/adventofcode#readme", + "type": "module" +} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy