commit 2773df212ec7ffad2b8fb53f76f14ea2637ed56c Author: Andrew nuark G Date: Sun Mar 26 14:48:47 2023 +0700 Not everything done diff --git a/aoc1.ipynb b/aoc1.ipynb new file mode 100644 index 0000000..5d117ab --- /dev/null +++ b/aoc1.ipynb @@ -0,0 +1,93 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "335e32f0-2c5a-4f77-84dd-66c2266e6312", + "metadata": {}, + "source": [ + "### Part 1" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "42055a53-b495-4615-bdb4-eaddd9380e92", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "72602" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc1_input.txt\", \"r\") as f:\n", + " elves_raw = f.read().split(\"\\n\\n\")\n", + " elves = map(lambda x: sum(map(int, x.split(\"\\n\"))), elves_raw)\n", + " most_calories = max(elves)\n", + "\n", + "most_calories" + ] + }, + { + "cell_type": "markdown", + "id": "4523a59c-06bb-4214-a9ce-143885257bb4", + "metadata": {}, + "source": [ + "### Part 2" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "614216a4-bbe9-40e9-a4b1-108e85946186", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "207410" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc1_input.txt\", \"r\") as f:\n", + " elves_raw = f.read().split(\"\\n\\n\")\n", + " elves = map(lambda x: sum(map(int, x.split(\"\\n\"))), elves_raw)\n", + " top_3_calories = sum(sorted(elves)[-3:])\n", + "\n", + "top_3_calories" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/aoc1_input.txt b/aoc1_input.txt new file mode 100644 index 0000000..0882f18 --- /dev/null +++ b/aoc1_input.txt @@ -0,0 +1,2237 @@ +5118 +5554 +4186 +4729 +1242 +4360 +1427 +5312 +6012 +1017 +5581 +5203 +3811 +4945 +3960 + +3812 +7757 +4448 +2205 +15715 + +4164 +6482 +4479 +3061 +4082 +2474 +1175 +1918 +4755 + +4056 +5122 +11426 +5529 +3659 +9592 +10257 + +3435 +3106 +4933 +2695 +3107 +6567 +5579 +1463 +5734 +4547 +4532 +2152 +5132 + +6074 +11600 +4337 +3444 +7637 +6725 +1189 + +5637 +1226 +7068 +6290 +4411 +3858 +6677 +1858 +2840 +1175 +5056 +6569 + +32887 +19643 + +4951 +2276 +4300 +4473 +1895 +5251 +1770 +4623 +4602 +4925 +1769 + +68012 + +5760 +2687 +3192 +2730 +4867 +4723 +2591 +1677 +4458 +4388 +6038 +3127 +6416 +3048 + +2485 +1630 +1595 +2864 +2125 +3852 +2216 +3883 +4293 +4165 +2762 +4016 +2508 +1396 +4541 + +5918 +6874 +6644 +4024 +3229 +1318 +1851 +1566 +1035 + +7625 +1369 + +3894 +18802 +1362 +12368 + +10251 +6249 +2784 +9394 +5932 +5610 +7201 +9922 + +10994 +10092 +4121 +2966 +1178 +2235 +9379 + +2592 +1895 +1740 +4357 +5314 +1068 +2228 +3775 +3949 +7162 +3078 +1450 + +9484 +1796 +8055 +7901 +9323 +1982 +2517 +8358 +2614 + +18536 +23454 +12107 + +6703 +6966 +1086 +7022 +3487 +3871 +2568 +6441 +1216 +2105 +5100 +2945 + +3268 +4866 +3569 +4374 +3666 +2477 +3263 +1312 +5121 +6592 +5337 +1417 + +17864 +11775 +1345 +11675 + +6636 +1678 +3982 +4552 +2719 +2736 +1342 +6375 +2671 +1541 +1093 +5538 + +21177 +36871 + +4608 +5474 +5004 +3229 +2744 +1577 +2182 +4518 +4930 +1986 +5776 +5023 +2070 +5342 +1952 + +13940 +15506 +13799 + +3672 +3303 +4866 +5507 +5282 +5768 +2847 +2214 +1688 +2255 +4302 +4962 +4585 +4285 +3602 + +4766 +4358 +4532 +10741 +13311 +2271 + +3073 +5990 +8256 +3692 +4658 +4561 +6347 +3260 +6938 +8643 + +5261 +1524 +1671 +3277 +2326 +5603 +5837 +1638 +5104 +3696 +1910 +2319 +2305 +1373 +4801 + +2593 +3527 +1517 +4626 +2003 +4414 +4677 +2282 +3000 +1457 +3530 +5344 +1890 +1703 +1268 + +9002 +7173 +3848 +6891 +1741 +5303 +1670 +1342 +1865 + +10319 +10539 +2972 +4667 + +4318 +1366 +1430 +5003 +2691 +7117 +3015 +6516 +6895 +1618 +3189 +6739 + +2494 +7140 +2905 +8784 +8727 +4711 +2284 +6894 +7030 +1688 + +1853 +7351 +7815 +3222 +8276 +1461 +5028 +8048 +5534 + +12546 +6236 +20372 + +2778 +5745 +2783 +5774 +4508 +3691 +6097 +4637 +5643 +5902 +1166 +1208 +3983 +5030 + +3767 +2558 +3988 +1056 +6570 +5437 +1920 +2822 +9126 + +3173 +3242 +5762 +4311 +5206 +3892 +4978 +5065 +1319 +2577 +1347 +3232 +1915 +5986 +3536 + +2308 +2812 +1119 +3845 +4589 +4779 +1503 +3613 +1576 +3827 +1468 +1533 +5896 +4981 + +9740 +16395 +19471 +12882 + +4779 +7293 +12593 +15897 + +36970 + +2386 +1094 +2957 +4452 +4005 +2723 +1124 +3533 +2671 +1701 +2508 +3075 +4741 +1471 +3416 + +37202 + +5272 +2736 +4756 +2235 +4679 +4093 +1773 +4088 +2419 +3192 +4429 +3959 +5230 +4342 + +8514 +11430 +5023 +9565 +3726 +11026 +6334 + +6563 +2638 +12569 +3458 +5449 +1216 + +1320 +4708 +1627 +4189 +3962 +1463 +2628 +5667 +5494 +6105 +4925 +3540 +1613 +2288 + +5974 +7710 +5200 +4859 +2346 +5619 +1337 +4814 +1359 +3020 +1798 + +2744 +1957 +10669 +4877 +3507 +7657 +7748 + +1021 +4297 +1689 +6925 +16175 + +7147 +11617 +5654 +11861 +6065 +3090 +1744 + +3782 +6658 +2389 +4339 +2312 +7245 +2039 +3411 +6251 +1778 +2345 +5814 + +13113 +10123 +18700 +6991 + +16138 +11645 +18610 + +9586 +6653 +1001 +4547 +2891 +2726 +7618 +5679 +1567 + +2380 +1858 +1059 +1160 +5115 +2588 +1969 +2629 +5525 +5831 +2139 +5469 +2783 + +10606 +4518 +9057 +5905 +4187 +4693 +4396 +2191 + +4374 +4407 +1083 +7787 +7716 +7505 +10096 +10650 + +5809 +4387 +3426 +3730 +3699 +4944 +4176 +2681 +5197 +1325 +5920 +4957 +5876 +5345 + +20155 + +1243 +11423 +13133 +4539 +4880 +4276 + +1073 +1316 +1841 +5102 +1196 +4847 +1293 +2424 +2345 +2298 +4214 +4215 +5760 +5775 + +4542 +1152 +5164 +5642 +2069 +1419 +5614 +7343 +1507 + +2840 +3922 +3563 +1856 +5216 +4886 +3794 +4637 +1826 +3520 +5582 +4602 +2442 +3631 +4946 + +7956 +3248 +7897 +7846 +2054 +5576 +3753 +3378 +1899 +3490 +6142 + +9837 +10901 +15019 +1735 +5306 + +3246 +2485 +5573 + +2722 +2084 +18774 + +7940 +10855 +8498 +5547 +13550 +4239 + +1857 +7355 +4374 +6798 +2341 +13128 + +14215 +9770 +2447 +1035 + +8426 +1873 +4518 +2812 +7611 +2465 +4770 + +8166 +19955 +6472 + +10884 +11212 +1463 +2716 +1796 +12003 +1240 + +2802 +2639 +3268 +2492 +6676 +8851 +4054 +9603 +5354 + +1483 +3080 +6696 +8713 +6856 +4796 +7728 +4600 +3616 +8565 + +26580 +15329 + +6074 +15758 +5707 +13583 +2595 + +4957 +9125 +6534 +8684 +1728 +3690 +7983 +4131 +8907 + +12147 +15776 +14765 +17316 + +27492 +12173 + +5967 +1170 +7896 +7865 +7945 +2261 +2026 +1751 +3988 +3759 +5258 + +20764 + +7020 +7441 +8780 +6111 +3483 +8606 +4547 +8153 +3543 +6791 + +5397 +4408 +1572 +2315 +3376 +2021 +1140 +2876 +5045 +6034 +4404 +5705 +3814 +3981 +3814 + +6836 +3601 +7452 +8519 +2302 +2382 +8481 +1455 +7154 +6565 + +2077 +5139 +5462 +1508 +2094 +4850 +1688 +4382 +1991 +2297 +1930 +4720 +4995 +2891 +1967 + +2201 +3673 +9817 +7417 +1283 + +4988 +3052 +2258 +6022 +3678 +2938 +7073 +6437 +2402 +5973 + +2492 +4592 +1501 +4818 +3141 +3470 +2821 +4367 +4952 +2779 +2237 +4283 +5625 +2935 + +2422 +5273 +4053 +4471 +1343 +1128 +4538 +4328 +2974 +3674 +4155 +5472 +3520 +2427 +4145 + +19383 +13539 +9822 +2453 + +2244 +3506 +2573 +3837 +1725 +5081 +4668 +4438 +2414 +1446 +1862 +2453 +2049 +4867 +5438 + +16970 +5265 + +7417 +8051 +7490 +1175 +11316 +4219 + +1065 + +6974 +1232 +6746 +3660 +3883 +5403 +3793 +4956 +4253 +2237 +5815 + +6537 +4906 +11084 +7541 +10019 +5164 +11601 + +4215 +4216 +1160 +2096 +1453 +6271 +5534 +4353 +6423 +4060 +6811 +4701 +3383 + +2138 +12998 +19743 + +8678 +6328 +6426 +7184 +8008 +7896 +5365 +9506 +1955 + +1498 +19856 +7833 + +17023 +7023 +21278 + +2110 +5542 +7191 +6509 +8813 +5236 +7771 +9593 +1262 + +11625 +19032 +17458 + +5266 +4751 +7950 +2185 +7837 +5710 +2053 +7332 +7422 +6356 + +5781 +1330 +2974 +2628 +7407 +7339 +3767 +5411 +3400 + +5330 +3441 +6203 +5272 +5867 +6034 +3167 +2187 +6006 +6614 +1089 +2485 + +3792 +4129 +1207 +1121 +3599 +6143 +4394 +5550 +1488 +2675 +6064 +1527 +4429 + +1606 +1129 +5426 +5260 +3827 +5595 +2286 +1974 +7525 +1290 +4569 + +2181 +5045 +7730 +5502 +5467 +7720 +1780 +4553 +1188 +4213 + +2565 +10635 +12032 +3283 + +9902 +2896 +9653 +6296 +2656 +11583 +5835 + +4932 +4548 +3832 +2377 +3371 +2612 +1907 +3494 +4567 +3130 +3375 +2750 + +7757 +1033 +8201 +13544 +13481 + +3382 +12952 +9450 +4982 +13966 + +4691 +3678 +1026 +7359 +1885 +1245 +5281 +8602 +6744 + +13041 +9202 + +3621 +3558 +2279 +2854 +6415 +5368 + +1102 +5319 +5768 +1990 +2526 +1900 +6294 +4744 +3655 +5011 +3092 +2697 +3864 + +12013 + +27776 +14644 + +5434 +1501 +1439 +4972 +1365 +6076 +1428 +6291 +6020 +5509 +3835 +2571 +6308 +1483 + +3972 +9357 +8383 +11037 +9557 +10966 + +8344 +1761 +10183 +4200 +3936 +5778 +9722 +1298 + +3962 +2611 +7361 +1156 +2522 +2462 +4249 +5127 +1443 +5989 +2942 + +5384 +7053 +2194 +11964 +5937 +7708 + +3052 +3192 +3224 +5708 +2120 +5756 +6107 +1198 +5519 +3803 +1169 +2903 +5942 +4376 +3675 + +11517 +9051 +2084 +4508 +4197 +7219 +9902 + +4566 +5562 +4263 +1970 +1965 +1333 +1601 +2665 +3443 +5463 +4981 +3792 +2588 +3282 + +1243 +3604 +4947 +1044 +6962 +2276 +2828 +6334 +2508 + +1339 +3050 +10158 +2095 +7779 +5165 +9420 +6101 + +4512 + +3273 +2248 +2082 +12415 +13944 + +5638 +5204 +3327 +1361 +3775 +3421 +7597 +1917 +1802 +3896 +4058 + +1901 +1813 +7388 +3861 +6838 +6154 +5500 +3086 +6403 +3654 +7471 +6904 + +1932 +1303 +1930 +1720 +5505 +1595 +2260 +5629 + +38957 + +4629 +3672 +3629 +5011 +5182 +3952 +2295 +4943 +2644 +2851 +5894 +4654 +5257 +3972 + +48469 + +3481 +1398 +3837 +2611 +3330 +3229 +7619 +4106 +6816 +3486 +2763 + +6591 +2522 +6262 +5458 +3025 +2804 +6403 +1390 +2964 +3081 +3449 + +6408 +3223 +4302 +1079 +5836 +5580 +1538 +2616 +3850 +5272 +3688 +2381 +5775 +5497 + +1891 +1448 +4283 +5965 +2726 +1425 +5399 +2795 +1583 +2489 +5171 +3133 +2547 +5117 +3092 + +11463 +11581 +6972 +5410 +3675 +8578 +4283 + +1398 +1747 +1341 +5365 +5086 +2268 +4544 +5286 +5910 +1393 +4580 +4726 +1123 +3949 +1223 + +7526 +3223 +5495 +7184 +10259 +7681 +4795 + +7168 +6278 +7939 +3829 +3670 +7969 +4917 +7406 +9035 + +5687 +4872 +2967 +10772 +9196 +6207 +6244 +2801 + +3500 +1786 +1517 +1585 +4536 +2645 +5249 +4808 +5681 +4591 +5595 +2751 +3336 +1615 +2200 + +6894 +4752 +1794 +6507 +2184 +5589 +3016 +4532 +2321 +6843 +2909 +2104 +4065 + +24126 + +3293 +8274 +1297 +4841 +4653 +1817 +1972 +6169 +1001 +7070 + +6969 +5331 +4779 +5316 +5249 +3315 +4355 +3596 +3868 +5647 +1110 + +5235 +5846 +5619 +6259 +4372 +2600 +7526 +3962 +3840 + +4260 +4484 +6361 +4276 +6344 +4776 +1173 +1884 +4572 +1411 +5230 +3976 +1800 +2426 + +19185 +15235 +19905 +8664 + +3346 +7532 +8840 +2182 +10048 +4181 +5030 +8078 + +2080 +2279 +6250 +3388 +6097 +4607 +6262 +4259 +3261 +4653 +3338 +7025 + +1138 +2851 +5912 +8592 +7341 +3596 +7669 +1030 +7624 + +6551 +6753 +7807 +4296 +3515 +6873 +5010 +8497 +1742 +5767 + +8921 +7840 +9067 +3809 +4347 +2876 +3886 +9982 + +11455 +10295 +15198 + +1574 +4240 +4052 +1739 +5701 +8449 +5055 +3893 +2700 + +3864 +4306 +4190 +1165 +1708 +5705 +5654 +6753 +3840 +4139 +2121 +5735 + +1662 +3541 +2480 +6124 +3355 +5737 +5537 +6806 +7953 +1109 + +14180 +15876 +25965 + +7732 +33422 + +5918 +5146 +6768 +9366 +1687 +1440 +3115 +1065 +6514 + +2316 +4905 +2945 +5351 +6196 +6207 +5751 +3811 +4765 +1419 +5253 +1616 +2274 +6363 + +5125 +2491 +5057 +2749 +1586 +4997 +5249 +3944 +3964 +3845 +2457 +5972 +5313 +6453 + +30602 +6865 + +4413 +1651 +6256 +6524 +3466 +1160 +4599 +6477 +2681 +1855 +4785 + +6435 +5377 +6008 +1744 +5182 +4469 +3999 +2913 +3367 +3233 +2369 +1712 +5408 +4622 + +4201 +5475 +1117 +2679 +2649 +1446 +4043 +1136 +3750 +4523 +3800 +3245 +3179 +6183 + +7682 +7213 +5144 +1557 +5579 +5005 +6307 +5906 +7244 +6230 + +1205 +2764 +3576 +5212 +1723 +4138 +1801 +1772 +4809 +1429 +2010 +3093 +4435 +2268 +4904 + +4386 +6822 +1865 +3688 +6771 +5433 +1430 +4870 +6745 +5758 +4456 +6549 +6203 + +2413 +3287 +3376 +5780 +1190 +1177 +1577 +4375 +5558 +5117 +6773 +2483 +4436 + +5870 +4195 +5932 +1117 +5072 +4581 +6922 +2695 +3134 +2021 +3327 +5538 +2324 + +2609 +4270 +5809 +1096 +6794 +3530 +3222 +4881 +3806 +2887 +7158 + +2989 +5279 +6821 +2474 +3144 +8621 +3854 +5012 +1144 +1354 + +9033 +7624 +5535 +2433 +1433 +5568 +8161 + +5691 +5394 +3445 +4619 +1703 +6197 +2113 +4277 +2506 +3380 +6039 +6423 +6429 + +23751 +4571 +7508 + +9674 +3084 +3612 +3841 +3555 +8146 +6263 +7746 +3586 + +7907 +6263 +2320 +4430 +15429 + +2825 +2248 +7184 +3650 +1008 +5219 +5600 +2610 +7357 +5113 +1039 +2019 + +2167 +4159 +6290 +3757 +10133 +1345 +7250 +10590 + +6712 +5361 +3243 +6239 +1667 +2699 +5389 +1400 +1334 +2382 +1604 +3256 +2439 + +6520 +1478 +3049 +6452 +6899 +1850 +2466 +3485 +3020 +6683 +8000 + +7715 +6597 +5588 +2062 +6732 +3811 +10470 + +4793 +1206 +6481 +11715 +8827 +3174 + +3492 +1535 +2603 +5877 +4937 +6805 +1620 +9488 +1593 + +2182 +8258 +3319 +5499 +6257 +1466 +6435 +8334 +1140 +6764 + +15599 +28121 + +5804 +6653 +1670 +7337 +4711 +8303 +10073 +6327 + +2754 +2040 +2295 +8503 +2231 +11685 +6556 + +16325 +4057 +11110 + +6482 +2035 +5189 +6641 +4232 +1100 +1088 +2779 +2220 +3078 +2847 +6009 +1981 + +8655 +8687 +7225 +4133 +4449 +7193 +4009 +7455 + +2014 +2691 +1207 +1140 +6736 +4780 +2781 +2855 +5056 +3590 +2372 +6188 + +6779 +4130 +5169 +5726 +1503 +1520 +8302 +3054 +3037 +6190 + +6862 +7039 +1305 +4226 +5769 +5068 +8362 +7612 +6856 + +17695 +18988 +3757 +15137 + +5268 +3234 +2073 +1529 +1190 +5659 +7316 +3075 +4191 +6111 +2582 +7122 + +9316 +2087 +2980 +12121 +1703 +6661 +4286 + +20694 +6712 +15401 + +4342 +3838 +3208 +2372 +1410 +1648 +2342 +6113 +5573 +6091 +2624 +1749 +5643 +4258 + +2303 +2178 +3449 +3150 +3825 +3673 +1326 +6377 + +10398 +3801 +11714 +7455 +3382 +6182 + +27882 + +6667 +3268 +11915 +7045 +10478 +10538 +2287 + +5694 +5516 +6094 +4909 +5685 +4931 +5949 +6361 +6476 +6439 +1667 +5691 +3883 +3307 + +9977 +7477 +6533 +9766 +4576 +2051 +1376 + +5966 +7654 +5784 +2727 +7568 +4600 +2150 +1333 +6583 +4119 +2648 + +11274 +8674 +4155 +2163 +1897 +6579 +11099 + +2751 +4530 +5488 +1491 +2456 +2752 +1767 +6113 +7730 +7127 + +8657 +6947 +4803 +5103 +4373 +9501 +1486 +5689 + +4382 +5176 +2533 +6017 +6100 +4935 +1841 +4530 +6120 +4735 +3438 +3305 +5324 +2814 + +41401 + +20975 +30628 + +2099 +5390 +4829 +5845 +2674 +1029 +3312 +3412 +3402 +5544 +4773 +5274 +2458 +4309 +2741 + +4345 +7095 +7361 +2171 +6003 +5069 +1941 +2473 +2116 +6508 +6491 +7227 + +8137 +8052 +5372 +1086 +2369 +5763 +8937 +9055 +1208 + +4359 +3906 +5012 +2086 +4937 +4239 +3390 +3280 +4948 +3906 +6387 + +6430 +11071 +1179 +6918 +12028 +1855 + +11059 +14754 +15751 +15821 +9411 + +8722 +1104 +7422 +9229 +7919 +6200 +2274 +2980 +5686 + +3277 +4325 +9477 +9651 +4798 +8742 +4308 +6656 +6746 + +5777 +6805 +4337 +4847 +4966 +3525 +2729 +6611 +3070 +3734 +1957 +1360 +1678 \ No newline at end of file diff --git a/aoc2.ipynb b/aoc2.ipynb new file mode 100644 index 0000000..afc1551 --- /dev/null +++ b/aoc2.ipynb @@ -0,0 +1,149 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "6da7f724-829d-4ce7-ba59-42ac322d072b", + "metadata": {}, + "source": [ + "### Part 1" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "6b0efa14-33f7-48fe-bed9-1079fdaca7b5", + "metadata": {}, + "outputs": [], + "source": [ + "score_from_shape = {\n", + " \"X\": 1, # Rock\n", + " \"Y\": 2, # Paper\n", + " \"Z\": 3, # Scissors\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "b9d1cb75-2a68-4593-8967-b757dbf28ff3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "13446" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc2_input.txt\") as f:\n", + " score = 0\n", + " for game in f:\n", + " score += score_from_shape[game.split()[1]]\n", + " match game.strip():\n", + " case \"A Y\" | \"B Z\" | \"C X\":\n", + " score += 6\n", + " case \"A X\" | \"B Y\" | \"C Z\":\n", + " score += 3\n", + " case _:\n", + " score += 0\n", + " \n", + "score" + ] + }, + { + "cell_type": "markdown", + "id": "910b30ba-03e9-41cb-af02-281623ef50ce", + "metadata": {}, + "source": [ + "### Part 2" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "4893b160-0d7e-4833-b629-99f54ba07abf", + "metadata": {}, + "outputs": [], + "source": [ + "highest_loose = {\n", + " \"A\": 3, # Rock -> Scissors\n", + " \"B\": 1, # Paper -> Rock\n", + " \"C\": 2, # Scissors -> Paper\n", + "}\n", + "\n", + "opponent_matching = {\n", + " \"A\": 1, # Rock\n", + " \"B\": 2, # Paper\n", + " \"C\": 3, # Scissors\n", + "}\n", + "\n", + "highest_win = {\n", + " \"A\": 2, # Rock -> Paper\n", + " \"B\": 3, # Paper -> Scissors\n", + " \"C\": 1, # Scissors -> Rock\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "cb35d20f-987e-4d40-86bc-38e5504eb7ae", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "13509" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc2_input.txt\") as f:\n", + " score = 0\n", + " for game in f:\n", + " opponent, strategy = game.split()\n", + " match strategy:\n", + " case \"X\":\n", + " score += 0 + highest_loose[opponent]\n", + " case \"Y\":\n", + " score += 3 + opponent_matching[opponent]\n", + " case \"Z\":\n", + " score += 6 + highest_win[opponent]\n", + " case _:\n", + " score += 0\n", + " \n", + "score" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/aoc2_input.txt b/aoc2_input.txt new file mode 100644 index 0000000..a2f8250 --- /dev/null +++ b/aoc2_input.txt @@ -0,0 +1,2500 @@ +C Y +C X +A Z +B X +B Z +C X +C X +B Z +C X +B Z +C X +C X +A X +C Y +A X +C Y +B Y +C X +C Y +B Z +A X +C X +B X +B X +B Z +A Z +C Z +B Z +B Z +C X +B Z +C X +B Z +B Z +C X +C Y +B Z +C Y +A Z +B Y +C X +C Y +A Z +B Z +B Z +C X +C Y +B X +B Z +A X +B X +A X +B Z +C Y +C Y +A X +C X +C X +B X +A Z +C Y +C X +B Z +A Z +C Y +B X +C Y +B Z +C X +B X +B Z +B Z +C Z +B Y +C Y +B Y +A Z +A X +A Y +A Y +C Y +C X +C X +B Z +B X +C X +B Z +A Z +C Y +C Z +C Z +B X +B Z +C Y +A Y +A X +C X +B Z +B Y +B X +B Z +B Z +A X +C Y +C Y +C X +A X +B Z +A Z +A X +B Z +C X +C Z +C Z +C Y +C Z +B Z +C Z +C Y +B Z +A X +C Y +B X +C Y +B Z +C Y +A Z +A X +B Z +A X +A Y +B Z +C X +C Y +C Y +B Z +B Z +A Z +C X +A Z +A X +A Z +B Z +B X +A Z +B Z +B Y +C X +C Y +C X +C X +A Z +A Z +C Y +B Z +C Y +B X +C Y +C Y +B Z +C X +B Z +A Z +C Y +C Y +B Z +A X +C X +B Z +C X +B Y +A Y +C X +B X +C Y +B Z +C Z +C X +C Z +B Z +B Y +A X +A Z +B Z +A Z +C X +A X +C X +C Y +C Z +A Z +B Z +B X +B X +A Y +B Y +C Y +B Y +B Z +A X +A Y +A Z +B X +B Z +C Z +C Z +B Z +C Y +C Y +C X +C X +B Z +B Z +C Y +A Z +C X +C Y +A Y +A X +B Z +C Z +C X +C X +C X +A Z +C Y +B Z +B Z +C X +C Y +C Z +B Z +C Y +A X +A Z +A Z +C Y +A X +B Z +C Y +C X +C X +B Z +C Z +B Z +B Z +B X +A Z +C Y +C Y +C X +B Z +B Y +B Z +B Z +C Y +A X +A Y +C Y +A X +C Y +C Z +A Y +A X +B Z +A X +A X +A Y +B X +B Z +C Z +B Z +B Z +B X +B X +C X +A X +C Y +C X +C Y +A X +B Z +A X +A Y +B Z +C Y +B Z +B Z +C Y +A Y +A Z +C X +C Y +C Y +C X +C Z +C Y +B Z +C Z +B X +C Z +B Z +A Z +B X +C X +C X +B X +B Z +C X +C X +B X +A Z +A X +A Z +B Z +B Z +B Z +A X +C Y +C Y +B Z +A X +A X +B Y +C Y +B X +C X +C Y +C X +C Y +A X +B X +A Z +A Y +B Y +A Z +B X +B Z +B Z +A Y +B X +C Y +B X +B Z +B Y +A X +A Z +C X +C X +C Z +C Z +B X +C X +B X +C X +B X +B Z +B Z +B X +B Y +C Y +A Z +B Y +A Z +C Y +B Z +C Z +C Z +B Y +B X +B X +C X +A Y +A Z +B Y +A Z +A Z +A X +A Z +B Y +A X +A X +C Z +C X +C X +C X +C Z +A Z +C Z +B Y +B Z +A X +B Z +C Z +C X +C Y +C X +A Z +C Y +C Y +C Y +B X +C Y +A Y +C Y +C X +A Z +A X +B Z +C Z +C X +A X +B Y +C Y +B Z +B Z +B Z +C Z +A Z +C Y +C X +C Z +C X +B Z +B Z +A X +B Z +A Z +A Z +B X +C Y +C Y +A X +B X +B Y +A X +C Y +A Z +C Y +C Y +B X +B X +B Z +B X +A Y +C Y +C Y +C Z +B X +A Y +A X +A X +C Y +C Z +C Y +A X +C Y +A X +B Y +B X +A X +C X +C X +A X +A Z +A X +C Y +B Y +B Z +B Y +C Z +A Z +B Y +A Z +A X +C X +B Z +C Z +B X +B Z +A Z +B Z +C X +B Z +B X +B Y +C Z +B Y +C Y +C X +C X +C Y +A Z +B Z +B X +B Z +B X +C Z +A X +A X +A X +B Y +B Y +B Z +A X +B Z +A X +A Z +B Z +B X +B X +A Z +A X +B Z +C Z +C Z +C Z +B Z +C Y +C X +C X +B Z +C Z +B Z +C Y +C X +B Z +C Z +B Z +B Z +B Z +C X +C X +B Y +B Z +B Z +C X +C Y +A X +A Z +C Z +C Z +C X +C Y +A Z +C Z +B Z +B Z +C Y +C X +B X +B Z +A Z +B Z +C Y +A X +B X +A X +C Z +C Y +C X +C X +B Z +C Z +B Z +C Z +C Z +A X +B Z +B Y +B Z +C X +B Z +A Z +C X +A X +B Z +C Z +C X +A X +C Z +A Y +B Z +C Z +C Y +A Z +B X +C Z +A X +A Y +C X +C Z +B Z +C X +A Z +B Z +C Z +C Z +A Y +C Y +C X +A Y +B Z +A Y +C X +C X +C Z +B X +B Z +C Y +A X +A Z +B Z +B Z +C Z +B Z +A X +A Y +B Y +A Z +B Z +B Z +C X +A Y +C Y +B Z +C X +B Y +B X +C Y +C X +B Z +B Z +B Z +C Y +B X +A X +B Z +C X +C Z +C X +A Z +B Z +C Y +B Z +A X +A X +B Z +C Z +C Z +B X +A Z +C Z +C X +B X +C Y +B Z +A X +C X +A Z +C Z +B X +B Z +A X +A X +B Z +C Y +C X +A Y +C X +C X +A X +A Z +B Y +C Z +C Z +C X +A Y +C X +B X +C X +B Y +C Y +B Z +A Z +C Z +A Y +A Z +B Y +C X +B Z +C X +C Y +C Z +B X +A X +C X +A Z +B Z +A Y +C Y +B Z +C X +C X +C X +B Y +C Y +B X +C X +A Z +A Y +A Z +C X +C Z +C X +C Z +B Y +A Z +B Z +C Z +B Z +B Z +C X +B Z +A Z +C Z +C Z +C X +A Y +B X +B Z +A Z +B Z +A X +B Z +C Y +C X +C X +A X +C X +B X +C Y +C X +B Z +B Z +C X +B Y +C Y +B Y +B X +C X +B X +B Z +B Z +C Y +A X +A X +A Z +A Y +C X +B Y +B Y +A Y +C Z +B X +B Z +B Z +C X +C Y +B Z +C Y +C Z +C X +C Z +A Z +B Y +A Z +B Z +C Y +C X +C Y +B Z +B Z +C X +C X +B Z +A X +A Z +C Y +B Y +A Y +B X +B X +A Z +B Z +B Z +A Z +A Z +C X +C X +C Y +C Z +A Y +C Y +B X +B Z +C X +B Z +C Z +B Z +C X +B Z +B X +A Y +B Z +C X +C Y +B Z +C X +C Y +C X +C X +A X +C X +C Y +A Z +B Z +C X +C Y +C Y +A Z +B Z +C X +C X +B X +A X +C X +C Y +B Z +C X +C X +C X +C Z +C Z +B Z +B Z +C Z +C Z +C X +A Z +C Y +C Y +C X +C Z +C Y +A Z +A Z +A Z +C Y +C Y +B X +B Z +B Y +C Z +A Z +C Z +C Y +C Z +A Y +A Y +B X +B Z +B X +A X +B X +C Z +C X +B Z +C Z +C Z +B Z +C X +C X +A X +C Z +C Y +A Z +A Z +C Z +A Y +B Y +B Z +C Z +A Z +A X +C Y +B Z +A X +B Z +B Z +A Z +A X +A Z +C Z +C X +B X +C Y +B Z +B X +C Y +C Y +B Z +C X +C Y +C Z +A Z +B X +C Y +A Z +C X +B Y +B Y +C Y +B Z +B Z +A X +C X +B Z +C X +B Z +B Y +C Y +B X +C Z +B Z +C Z +B Z +B Y +C X +C Z +C Z +C Y +B X +B Z +C Y +B Z +C Z +B Z +B Z +B Y +C X +C Y +C X +C X +A Z +C Y +C Y +C Z +A X +C X +B Y +B X +A Y +C X +B Z +C Y +C Y +B Z +B Y +B Z +C Y +C Y +C Y +C X +C X +A Z +C Y +C X +C X +A Y +C Y +B Z +A X +A X +C X +B Z +C Y +C Z +B Z +B Z +C Z +C Y +B Z +B X +C Z +B Z +C Y +C Z +B X +A Y +A Z +B X +C Z +C Y +A X +B Z +A X +B Z +B X +C Z +C Y +C X +A Z +C Y +C Y +A Z +A X +C Y +A X +A X +A X +B Z +C Y +B Z +B Z +B Z +C X +B Z +A X +B Y +C Y +C X +C X +C Y +C Y +A X +A X +C Y +C Z +B X +C Y +A X +C X +C X +C Y +B Z +B Z +A Y +B Z +C Y +C Y +C Y +B Z +C Z +C X +C X +B Z +C X +B X +B Z +B Y +C X +C Y +A X +B Z +B Z +C X +B Z +B X +B Z +C Y +B Z +C Y +C X +B Z +B Y +A Y +A X +A Z +A Z +B Y +A X +A X +C Y +C Y +A X +B Z +C X +A Z +B Z +B Z +A Y +C X +B Z +A Y +C Z +C Y +B X +C Z +C Z +C X +C Y +C X +C Y +B Z +B Z +B Z +B Z +A X +C Z +B Z +A Z +A X +A X +C X +C Y +C X +C X +C Z +C X +A Y +B Z +C X +A Z +B Z +C Y +B Z +A Z +A X +C X +A Z +C Z +A X +C Z +C Y +C Y +A X +C X +B Y +C Y +C Y +A Z +B Z +A Z +C Z +A Z +C Y +A X +C X +C Y +C Y +B Y +B Z +A Z +C X +B Y +A X +C Y +A Y +C Z +A Z +C Z +A X +B X +A Z +A Y +C X +A X +B Z +B Y +C Y +B Y +C X +B Z +C X +C Y +B Z +B X +B X +A X +C X +C Z +A X +B Z +C X +C X +C Z +B Y +A Z +A X +C Y +C Z +B Z +C X +B Y +B X +C X +C Z +C Y +B Z +A Z +B X +B Z +C X +C Y +C X +C X +B Z +B Z +B Z +B Z +B Z +C X +A Y +C Z +C Y +C X +C X +A Z +B Z +C Y +C Z +B X +B X +C Z +B Z +C Z +B X +B Z +C Z +C Y +B Z +A X +A X +C Y +C Z +C X +C X +A Z +C Z +C Z +B Z +C Z +B X +C X +A X +C X +B X +C Z +C X +A X +C Y +B Z +B X +C X +C X +C Z +B X +B Z +B Z +A Z +B Z +B X +A Z +C Y +B Z +C Z +C X +C Z +B Y +C Y +A X +B Y +B Z +C Z +B X +C Z +C Y +B Z +B Z +B Z +B Z +A X +B X +B Z +B Y +B Y +B Z +A Z +B Z +B Z +B X +B X +C X +B X +A Z +B Z +A Y +C X +B Y +A X +B Z +A X +B Z +C Y +C X +B Z +C Y +A Y +A X +C Z +B X +A Y +B Z +C Y +A X +C Z +C Y +C Z +A Z +B Y +A Z +C Y +C Y +A Y +A Z +C Y +C X +C X +C X +C Z +A Y +C X +C Y +A Z +B Y +B Y +B Z +A Z +B Z +A Y +B X +A Z +B Z +B Y +C Z +A Y +B X +A Z +B Y +B Z +B Z +B Z +B Z +B Z +A X +C Z +C Y +B Z +C X +A X +B Y +A Y +B Z +C Z +C X +C Y +B Z +B Z +C Z +B Z +B X +A X +A X +C X +B X +A Z +B X +C X +C Y +C Y +B Z +A Y +B Z +C Z +C Y +B Y +B Z +C Y +C Y +A Z +A X +A Y +C Z +A Y +C X +B Z +C Y +B Z +B Z +A Z +B Y +C X +B X +C X +B X +A Z +C X +C X +B Z +B X +C X +A X +C X +B Z +C Y +C X +B Z +A Z +B Y +A Z +B X +B X +A Z +B X +C Z +B Z +C Z +B Z +B X +A Z +C X +C X +C X +C Z +C X +C X +A Z +B Z +C Y +A Y +B X +C X +B Z +B X +C X +C Z +C Z +B Z +B Z +B X +C Y +A X +A X +B Z +B Z +B Z +C Z +B Z +C Z +A Y +A Y +B Y +C X +C Z +B Z +B Z +C X +B Z +B X +A Z +C X +B X +A Y +C Y +B Z +C Y +C Z +C Y +C Z +B Z +A X +C Z +B Z +B Z +A X +C X +C Y +C Y +C Y +C Y +B Z +B Z +B Z +C Z +A X +B Z +C Z +B Z +B X +C Z +B Z +C X +C Z +C X +B X +B Z +C X +A Z +B Z +B Y +C Y +B Z +C Z +C Z +C Z +C Y +B Z +B Z +B X +B Z +C Z +C Y +B X +B Z +C X +C Y +B X +C Y +C X +B Z +A Z +C X +A X +C X +A X +A X +B Z +B Z +A Y +B Z +A Z +C X +A Z +B Z +B Z +A Z +A X +B Z +B X +C X +B Z +C X +B X +A X +C Y +C Z +C Z +B Z +A Z +A Z +B Z +C X +B Y +C X +C Y +A Z +C X +C X +B Z +C Y +C Y +C X +B X +C Z +A X +A Y +B X +B Z +B Y +B X +C Y +C Z +B Z +B X +A X +C X +A X +A Z +B Z +B Y +B X +B Y +C Z +C X +C X +C Y +A Y +C Z +C Z +C Z +B X +C Y +C X +A Z +B X +C Y +C Y +A Z +C Z +C X +C X +A X +C X +B Z +B X +A Z +C X +B Z +B Z +B Z +B Z +A X +A Z +B X +B Z +B X +B Y +B X +B Z +A Y +C X +C Z +A Z +C X +C Y +A X +A Z +B X +B Y +C Y +C X +A X +C Z +C X +B Z +A X +B Z +A Y +A X +C Y +C X +C Y +A X +C Y +C Y +C Y +C Z +A X +A X +B Z +C X +B Z +B Z +B Z +C X +C X +B Z +B X +A X +A Z +A Y +C X +A X +A Z +B Z +B Z +C Y +A X +B Z +C Y +A X +A Z +C Y +A Z +C Z +C Z +C Y +C Z +A X +C Y +A Y +A X +A X +B X +A Z +C X +B X +C Y +C X +B Z +B Z +B Z +B Y +B Y +C Y +A X +B Z +A Z +C X +B X +A Z +C X +C Y +C Y +B Z +B Z +A Z +B Y +B Z +B Z +C X +B Y +B Z +B Z +C X +C Y +C Z +A Z +C Y +A X +C X +B Y +B Z +A Y +A X +B Z +B X +C X +A Z +C X +C Y +B X +C Y +C X +A Y +B Z +B Z +C Z +B Z +C Y +C X +C X +B Y +C Z +C X +C Y +A Z +C Y +A Z +A Y +A X +C Y +B Z +A Z +C X +C X +C X +C X +C X +B Z +A Y +A X +A Z +C Y +A Y +B Z +B Z +C X +A X +A X +C X +C X +C X +B X +A X +B Z +B Z +B X +B Z +A Y +C Z +C Y +B X +B X +B Z +A X +A X +B Z +B Z +C X +A X +C X +A Z +A X +C Z +A Z +C Z +B Z +A X +B Y +C Z +A Z +A Z +C X +A Z +B X +B Y +B Z +C X +B X +C X +B Z +B X +C Y +C X +C X +C Y +B Z +A Z +B X +C X +C Y +A Y +C X +A X +B Z +C Y +C Y +C Y +B Z +C Y +B Z +C X +B Z +B Z +A Y +C X +B X +C Z +B Z +B Z +A X +B Y +A X +B Z +C Z +B Z +C Z +A Z +C X +B Z +C X +B Z +C X +B Z +B Z +C X +B X +B Z +A Z +C X +C Y +B X +C Y +C Y +C X +B Z +C X +C X +A X +B Z +C Y +C Y +B Z +B Z +C Z +C X +C Y +B Z +A X +C Y +C Z +B Z +B X +C Y +A Z +C Z +C X +C Y +C X +C Z +A X +B X +C Y +C X +C Y +C X +C X +C Z +C X +C Z +B Z +C X +C X +A Z +C Z +C X +C X +B Z +C Y +B Z +C Y +C X +A X +C Z +C Z +A Z +B X +C Y +A Z +B Y +C Y +B X +C Y +B Z +B Y +B Z +C Z +B Z +C X +C Z +A Y +B Z +B Z +B Y +B X +B Z +C Z +C X +C Y +A Z +C X +C X +C Z +B X +B Z +C X +A Z +A Z +B Y +C X +C X +A X +C X +C X +A Z +B Z +C X +B Z +C X +C Y +B Z +C X +A X +B Z +C X +C Y +A X +C Z +B Z +B Z +C Y +C X +A Y +C Y +C X +C Y +A Z +B Z +A Y +B Y +C Y +A X +A X +C X +B Z +A Z +A X +B Y +B X +C X +B X +C X +C Z +B Y +C Y +C Z +B Z +B Y +A Z +B X +A Z +C X +A X +A X +B Z +B Z +A Y +C X +B Y +C Z +B Z +C X +A X +C X +C Z +A X +C X +C Z +C Z +C X +A X +A X +C Z +A Y +C Z +B Y +C X +C Z +A X +C Z +B Z +C Z +A Z +B Z +C Z +A Y +A Z +B Y +B X +A Y +C X +C Y +B X +B Z +C Z +B Z +C Z +C Z +A X +A Y +C X +B Z +A X +A Y +C Z +C Y +C Y +B Z +C X +B Z +B Z +A Y +B Z +B Z +B Z +B Z +B Z +B Z +B Z +C X +B X +B Z +A X +A X +C X +A Y +C X +C X +C Y +B Z +B X +C Y +A Y +A Y +C X +A Z +B Z +C X +C Z +C X +A Z +B Z +B Z +B X +B Z +C Y +A Y +C X +C X +A Z +B X +B Z +B Z +B X +C Y +C Y +A X +A Z +B Z +B Z +C X +B Y +A X +A X +C X +C Y +C Y +B Y +C X +C X +C X +A X +B Z +A Z +B X +B Z +B Z +A Z +C X +A X +B Z +B Z +C Y +C Y +B Z +C X +B X +C X +B Y +C Y +C X +C X +B Z +A X +A Z +B Z +A X +C X +A Z +C X +A Y +C Y +C Y +A X +C X +C X +C Z +B X +B Z +A Y +B Z +A Y +A X +C X +B Z +C X +C Z +C X +B Z +B Z +B Z +C Z +B Z +A Z +A Z +C Y +C Z +B X +A Y +A Z +A Z +B X +A Z +C Y +B Z +C X +C Y +B Z +A Z +C X +B Z +C X +A Y +B X +C Z +B Z +C X +A Z +B X +B Z +B Z +A Y +B X +A Z +C X +B Y +B Z +C X +C Z +B X +B Z +C X +A X +A Z +A Z +B Z +B Z +C X +B Z +C Z +B Z +C X +C Y +C Z +B Z +B Z +C X +B Y +A X +B X +A X +B Z +B Z +C X +A Z +A Z +A Z +A X +C X +B Z +A Z +C Y +C Z +A Z +C X +A Y +C Y +C Z +C Z +B Z +A X +A Y +C X +A Y +C X +A X +B Z +C Y +A X +B Z +A X +A Y +C X +A X +C Y +B X +B Z +A Z +B Z +A X +C Y +A Y +A Z +A Z +C Z +B Z +B Y +C Y +C X +B Z +A X +A X +C X +C Y +C X +A X +C Z +C X +B X +C X +A X +C X +B Z +A Z +A Z +C Z +C Z +A Z +A X +C Y +C X +B Z +C Y +C X +A Z +C Z +A Z +A Z +C Z +B Z +C X +A Z +B X +C Y +A Z +A X +A Z +A Z +A Z +A Z +C X +C Y +B X +B Z +A X +C Z +C Z +A Z +C X +C Z +B Z +A Z +C Z +C Y +A X +B Z +A Y +A Z +A Z +C Z +B Z +C Y +C X +A Y +A Y +B X +C Y +C X +B Z +C Z +C X +B Y +C X +C X +C Z +C Z +B Z +C Z +A Z +C Y +B Z +C Z +C Z +A Z +B Z +C Y +C Z +A X +B Z +B Z +A Y +B Z +C X +A Z +B X +B Z +C Z +B X +B Z +B Z +A X +A Y +A Z +B Z +B Z +A Z +A Y +B X +C Y +C Y +C Y +A Y +B Z +B X +A Z +A Z +C Y +C X +A Z +A Z +C Y +A Z +C X +C Z +B X +B Z +A X +C Z +A Z +C Y +B Z +A Z +C X +C X +B Z +C Z +B X +B X +A Z +B X +B X +C Y +A X +C Y +C X +C Y +C X +C Z +B X +B X +C X +A Z +B X +B Z +C Z +C Y +C Y +C X +B Z +C Y +B Z +C Y +C Y +B Z +A Z +A X +C Z +A Z +A X +C Y +B X +C Y +A Y +B Z +A Z +A X +C X +C X +A Y +C Z +C X +A X +C Y +B Z +B X +A Y +B Z +C X +C X +B Z +A X +C X +A Z +C Y +A Z +A Z +A X +C Z +B X +A Y +C Z +A Y +C Y +A X +A Z +A Z +A X +B Z \ No newline at end of file diff --git a/aoc3.ipynb b/aoc3.ipynb new file mode 100644 index 0000000..f7626a7 --- /dev/null +++ b/aoc3.ipynb @@ -0,0 +1,117 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "297093bf-b2ad-4645-935b-b2adea775c55", + "metadata": {}, + "source": [ + "### Part 1" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "129613b8-f732-4f41-a745-edf2c979b213", + "metadata": {}, + "outputs": [], + "source": [ + "def item_priority(item: str) -> int:\n", + " if item.isupper():\n", + " return ord(item) - 38\n", + " else:\n", + " return ord(item) - 96\n", + "\n", + "def string_halves(string: str) -> [str, str]:\n", + " length = int(len(string) / 2)\n", + " first_part = string[:length]\n", + " second_part = string[length:]\n", + " return first_part, second_part" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "069cad24-9cd2-4d1a-bfa5-f265fa578909", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7795" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc3_input.txt\", \"r\") as f:\n", + " sum_priority = 0\n", + " for rucksack in f:\n", + " comp1, comp2 = map(set, string_halves(rucksack.strip()))\n", + " intrsct = comp1.intersection(comp2)\n", + " sum_priority += sum(map(item_priority, intrsct))\n", + "\n", + "sum_priority" + ] + }, + { + "cell_type": "markdown", + "id": "86d642f4-2504-42c0-a703-2dc063810a2c", + "metadata": {}, + "source": [ + "### Part 2" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "921090d1-2d2b-4161-aad2-23af1b358645", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2703" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc3_input.txt\", \"r\") as f:\n", + " sum_badge_priority = 0\n", + " for r1 in f:\n", + " r1 = set(r1.strip())\n", + " r2, r3 = set(next(f).strip()), set(next(f).strip())\n", + " sum_badge_priority += sum(map(item_priority, r1.intersection(r2).intersection(r3)))\n", + "\n", + "sum_badge_priority" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/aoc3_input.txt b/aoc3_input.txt new file mode 100644 index 0000000..eaf8bac --- /dev/null +++ b/aoc3_input.txt @@ -0,0 +1,300 @@ +vJrrdQlGBQWPTBTF +fcpTMnMqMfTnZpgMfPbFBWzHPpBPzbCPPH +mcVMfcsqZgmgVcmfgcmZmqZNJhrlrdhNhDdrRRJSvDTRhJlD +pMFRmLwHMbRPmMbPPddvqqrrNSTFVttdrN +hgfpgCGZcjpcgfvNtdrtjvrdtSrd +gZgsBBBlZggBGhsfhpzlzLDLmLRDRMLDPw +hChhMFCvqtTMwbSSHgTZWHZd +jjBNPjJJNfsNjVnVJJNcNfPwGbSbDZnZZgHrddwHrrgWGb +mBBRRmBBQBmNJWhCzqllzhRCCv +lQgpngNgQvHdSgWwjMRmDjmMDHmm +zCLVzfzzbbCzsZZPbZPLfFJJMDWWRcDsmJRcjmwTmlRj +BblftzBtlFznptSQQQppNG +wJJwqCtCGRcVlqlM +BQpppjBQLczTrvHRjH +QQQFnmQWWRfnpQBpQpfDCwCdbPDCwbNNPtdJPCZw +gpJjshBpgjZGppJqBGJjJZzTwzTmcvzwwcmvwsCFdmcF +WPSSWWSQLVdDDfWltDWLPfttvFCVmzCCTFnmwcnnnCTCzVVv +tLldLltDQfflrRWNqBRjgHBpJNZjHj +bzVJjVnjbCGVLZQLmmsJZZQQ +RrwwzhPScWSwrhvZZvZlZvvSTsQS +HwFhzFWdPHfcPwPWPdhWffnngpjtnjgtpnfGCGnG +CPwQtftDQfPDBPBCfDDDCDptszcpVVddcRczVLVdccRGrLWs +FqlSnhlqhmhMbHqqSQlHbcrRrsWzRdzdWVzLRGRrVF +MbQmSnHZhqZMQMTJCttjCgPCwfgDwT +CCSpvHtZHSwftFtdtbfR +QJmNPmjjJNgNVNSzDlmRqbWlqWWfcqfWqbwfqR +MDhJzmSMDmsZrLhssrvh +ZhznnrLzcHhHSjsjSBSsBnSS +dTwqDdqDRQjNdwqjldggDvBJfmBfTSBbBSvfSJsmff +DjCldNglVwFVgZHHHzhCMcLhMC +vBnShjwwSshmQPmtJLpJtn +rDLFCWrClWCMWWVrbFVJqpQqpHmtbzJPQzJmzb +ZMCCDCMNrTWTrgScgGRhsvcsGLSG +LQpJglQQRjQsppfsQbjfbQlBgBhFhrvghhZCdPZZZthPgv +zVHDMSWVVMVWDzmnVMHDSMMzZvNFFrFvPCdmdFdNdrBPZhhd +ncqqSzMVCcGWVSCTWCDcVTffLLLbJsLLsRLblRQTps +zjGzLQtFzzRgwwLhVrqw +dfClCdHZsmffZDWlBZHCDBmhJbqTgbwgqbTnwrgrqRbT +HsdwPCsWDpDsBpfdWdHldWpsGvvccPvGcvzQvFQvccjNztQt +wmVVgFPrFdwJrlNHQHSHCCHL +tWBtvnBqZZMpcvmmqMBRCQQLCLWCHfNQQCSGWL +BBsnmcpqPswFsTws +BQRpFPJJJJPmPRqZNFVhcczHHzggwjBhghgzHw +snTsTLtrlvSSSslsGdcwmjhgggvjHhmH +nSsWWTtCbbDSnlRRZCfFRNZmCVJf +tRRMCWLtJWQLqLrmLHVLqmqh +JszPjSbGbsnGnSZprVpFhvFqvhrqZZ +zgbGSDBbPsTgbDBzzSDnDnPTcWlWJCQlNttNwwwMcMctcW +hlVRvPvzqqtRdwRRJsst +HHVNVBMBjHLTjVjwDjsbjJwbdmbbss +NBZHMCNVCCpgLTWggBpgNLTvqCPnGhQhCCGlqlhfcvvGfn +mwbfbfbDCqRJZRbCSvmfWTQFczTznnnFTFnrzJsz +BdhHlLjpjjjncSprnsSFWS +ljhVBPjSdHPRfZRZDvVRZM +tGqbqBSsntRgNqwNNVVHVN +hclFvJZvCDFppDpZpHNggMTwdlrMQNVgHM +CCFmcZLDFpvzZhCFJvZvmwjSRWsBLWsnfWjRRGGfnsst +GdGQQFdcMPwMdLFvWsNWFDLfss +SqjhtjnrbVznSztSqtzpjztVvTmNNmmfMMfDDMDDNTqfgsqv +rVhhZjppVrhpVzRbjSnzHPMwlJCJQdcRPPlPPcHJ +JVQLVgVZghFtFlhghtvSzsddmrdvssmzSWtd +HTMJCBMCjnwNBnCbTNwMdWfzvzsrsvffWbdsmfPr +BGnnpDnTjjHJwDBNpqlFQVQFQclcRFQqpR +BRhbrQDttbTTtRDtTRRzLHWZLZHGSqWLCBNWqLNL +fwFPPSjmsmJGLsNH +dvfSdvfVMjPTttTzczgTcd +dZgggwzgvsggtdstZTZgdfnhSJSSJDDhnDBdppnGnhSp +VQWRQWVCRLFGnThJCpFJ +LbmmbQVcHcmmlWjmVlVQNVRzvwwZvTrsrNwNwzZrMvfsqt +lDZQSlHDbLccRPQhCNhG +gtsntgvdvBvvqgsTgBggdrWRNzPhWczPbWcdWCccGGGP +sTBttvrFnnMTMJngbqfLlZLpwFVljwppZZDl +zNNNgqpgmLgqlHBHsMGslH +WdWFrFwhcwWRwhddcRWcdQbcDDslzBDszsHbGBDfbHfzVlVl +ZvhRrvPQwvWFQRZvFdJttSPgCmNppCNzJnJS +fCzRRNGfqNRvwpQhwrGcwZZT +gJnStgMmLhdHndSSTjcTrTpcmrjjcrrw +FFJBbdddFPPhFFNWCF +btrHRSBBSNLLRPLwhbhpqpfWhQppWZ +zCzTvvmgDvgDZhqWZZthtDZh +ttTjMsvCgRRLRSsBRG +LsSFFTTDWdCsmFTlLSsLDDRRQCvhpRQGNGQBJBhGGMNB +zqPtqZnjPPrPvJHBMHrJrMpv +VbqfjZfwgtfjPgZPgtwDLTLcTlcFdWLdcdVTJF +pfMCDmpHbdMQQdQFFG +gdjldRsVFRntQnqR +rlJVsWgWPWjsslSpDbScmSDPHfCd +lnFFGgBFBslDFGbFSjnNTjjppSrQHhnT +zcvmCRcvZmcZzWpTQhQrrTSPtHWH +CRccrZJmdJlwDJwgswGg +hllrrDzggGppgSSLNWgW +jlTlPwwqjjntVpWWPNnP +wjjJqvQjJjQJbTjlFqhBMzfDDmMCGBMHDCGb +jvQPhhtCRtfmqHHjqHHJsl +FFSTcBTBTMwFGCTwMTcGwTVnsHSJzqqJJJplmlpJHszZZzZD +dLMdVMNGBdGFMTNTRRLrQWCQhgWQbhgf +gdRgdgzzrvrzggDwgDGpPLzrbNljMTsbWWjWjZbTjLZMWcWj +tFfCQHJJnJMJTJjNNMjl +HmtffVttqHQmBCBQCqfFnCwRqpDvPRrGppRggNzdwgzp +DHSqzQbzWlRLDzMZNpVLgnpNLggw +cZcdTmPPthPdsvvdhPGTvJgwnpgjjTgNNwMVngNBjNfn +PPdJPvrtGtcFdFFchDRHDqHzZWSQQCrQWQ +BcgnLBLsFvRnGRRRlzfJbbPJzwHPwPFz +hCDjWMDVNfVllfzddw +qqMqpWCMjDTWNWTBLpgsgLvZwtGLLg +zczPgpGzhnbmbchhHwqwhSwfwHCFWw +VJdmVLlLdVJSJWHSTFwH +rlttQLVLdvvZpgcGbmDrzGMD +WSvtpqqtqccttVQpVvJNJSVNCmTlnCWwTTnWlBBBjwCBTlTP +ZgfPHfPfMHsDCwnlGBwTMGBM +rgdffZhPrrLsdLZpvcFSJJNvpJhcJv +qVdqJGvzgJzJgwzgWvdJzpblcRRWmLFFcLBmllFRRMRFRH +TGGSsSssNPTSLlRLcPHMmnPB +tTjTZtNGhrCjQNCjQQDTCSjZvfJbdgqrdpwqfVzwgzvdvVgb +VTmwcTVSMHwbMwbDVBTcMpJfpfnWqdJbZpJldfsjZn +hNtPhtzFzPQGCCGFFCGtnqQqWZWplsjWdlnlldJn +vRCRzvvFFFvhrRthPtLrtNGSwBVDScDSgHHjwwcBgSgTSL +dWCsWbWWchblsmbWVZqqsSpsGfBqBVBB +DtTtjPJrgjjtTTwgPwwjrTgnLqSBZQLqngQppqnfBVQfGp +PJPwwtDwHGGJtJRFHmhCFRCvdmHR +mMsMJSCjllsSSmBBclsMsJHDbcHqqbHpqHGbDZHbqHpb +RnQnGVnzGzFQgzWzpzvpqDHW +QVhRTfGLLFGTTFFwhnQVNfFwJsJsMjsBMrlsjrJlPSPlTrls +JNMJSVSGVCjnWZMZWWcH +gLTcqbqhqbbgzgnjpnjjWHnP +wqlbcrfTwrvcLBwwRtJwsNRstRsCCN +MlBssQBchZDLNJZgmvGg +fdzHMfHSzSprfgSvvJbmvDGNDW +PCHTRfjHnzHMzzfrCPCpMTlFhcFstqVwVCFllQcBtqss +TtFnnFJfDhtdfJJcFtfnsfcFjBjLDjHrDLrCjMjwCLLrZjrS +qQmWmQzvWpRQGvgpGGRGRzmWwZMwBLCHMZjbBBCLwrHSLrqr +MRllgRWWMlsJFnlFclJT +SRRrRDRBRTdbdMRZBZMprTCJCnWGvChJGzLSWWzsGhCs +wwqHPtFwjwTHLHvGTsGW +FlPtqTNVcTVtwtmjRbBZfQbfZbQmRRMR +WSWfQttffsHSfRRRStfnCsQQqlJpbhnrnmNzJbzqNbbrpmnb +FGFPddBcBwDPzpzbWlpzDbbh +ZPdPPLMFdGwFFGdwGdZwcZgTtSTVCsRRSgSRTQWTTtCTtH +vHsfGHTvSvHHHsGHctMgtHrJwbJJwrjgbrdzjWCrdrrw +hqZRLmmZpFhcLhFmrzJQbzzmQQJWJJbm +LNZFcpPlhBRhqDDllRtnMssGfBsnttGTnttT +VDVrLrZZcjrhhFrZppGlglGMPFwFWNQw +bzszSBHBWNGcscpN +TJqBqSfTBBqBHzJqddBqzcLnLjnhCRTvvRrnDrvrvZRn +GLzrNWbtMptHDmNDglgmlD +fZtcfCRvtBcQjdjgmmjj +RhBhhqfSPPpttrnPnVVW +BhVRJGwWqtHjZqTDLZ +gQnfpBdPNpQrPNSfBdndnpTTDFZttDLLzZzTzCLNLZZD +mQQPsgrldpgdBQgSbGVcmcRwGMWhwVwW +DrLCctBCLQtSSQcLbcQHWvvvlWHHnWlWBlNRRB +wqdmpgqsZhzGphwwpZGsppRvfnJsWfHWvfFfWFsfvlNN +mwmhVppTqpGqpNZpqTbSLLttDrDDtPQTtr +qwqmgnglDnlgtQzQJzJQhmWQ +pTpTpssdsVvNsdTSZGdSdjvCRcqcRcVWVczhWChtchzWcR +sGTvPqZvSGdZZGdsvNGdPHrFHFBDlDLwPgBFLLBB +BBBGsGGBrBBrqWVqRnWBBBWpzFwMhjMFSFPzzSwPFPpzzFvg +HtCdDdDctZDtbHCffcbddbNfvjvFSPFjMhMgLwPgjbFhjFFj +NJTDdltNgCNDZJJZCDJZDfJtrWWnQGBqlRVVlrBsnlrqqmnr +PwZhgbZSWSqqGznv +tTPVVmptcsrNrsTNpjRzqfHvvGfGWjfjqGzHWn +RVRtVDRmsRtrctmJDtgBBhBhbFgJPFFMFJgP +jPzzCCPzTtTfzrRtgSNVRHvFQVvbpQppVN +sSnDlBGBwJbFNplVlN +cLwSwdMhSwcBcsBZgWjCTCWfCLffrg +RSNPvTTNqFTSvNrSBvBGJGzmFMslgCMJCgmzlc +fDVfpptLWQfnVLffVHbQDQCclJzGGCtGmmGJmzMshzGh +VfQnWZfZDbdnVHWcfWnfHWVvPrTSNZqSwSqPjjvBwRqrNS +FLRpmRwcpjfzjSnD +tGvPNvBnPQggPQQvPgNHDjSSjDzzthjzfHrjlT +JGqvWNCCGQBWGBQvVLsCMMRLRnRMnwMc +fGJbzgBffCGpPGDVnG +mcTccshvbbdRNRsNjdLjnVlHVnHLqVpDpDqD +wdmsWvWssbZTcWvRhfzMQtrzMgrfrZJgfQ +NfSbvZHZNRSbQbbQgZrMjhLwMrjLjwHLCmmh +NTWdJBFcWJFcdsFJqcqPwqmjpMrLCMpLMwLP +dNJctnFBVfSGgvnfZz +GSnRJfGfRJgMDMGWnfzdmptpFJppLvwLwvLt +hbjZzrQbblqcLtpwlHvFplTH +qrzqbschrQCqqjPcCVcCGDfGMWDgWNGDDSfgnf +vmMpCdTndCvMdmnFcCRJWBJGcZJRJB +NDNwGzshPLrwVVNsjswhGzjFSfFFQQRSJWRBFcFRfsWFQB +NwNhNjVzhhzzrgzdqqvqtnqvlqdggG +MdPLVSSlMMVMmlLBBLFdvZNWqWztStttRRNqzqNGTq +DhJfhghhCgwChJgJwHHzbsHpnZRtTWqqfZRGTnWTZtNqNRWR +hwHpJbprwpQhDHDCbCCzsClBvrLMVFPvmPlMMVMdLrvj +DssDrqRsWsNfzfsWLRzjgTdBlgzFpMlgTFTglT +ttCZnSQmSQmgjGQGQgDlBp +bhDnCmbwVmCwwtZttPwbRWsRJcqWJfcfsfrqVrqq +ldBgTMTRvBDVnCCCTdSRTqNjbjSbPPPPqtfPqtPJFJ +cZHZrszLrrrZHrbNjNtbJCfqNJLt +GZzCzWZGGsGzmzZcmGssZzZVvnVdBDddRRDnVlWgRTDdBM +RjNrrjwGDDqqGJsHtzpMHHGz +QCbWgbShmBCCPClmmWFHzJzTbDdsMJsTtpTD +fffQfnSCWDBfhCDLRrNrwcrqVqwNqn +zmRrDRzqjmLLHzDjLsHLflJlVVJlWWTDTfdMtlWJ +pPQQnbvSpvNbgfgfVtMVJfgdtG +SnpnVFcPnNnPvpNSFNSbhHLhrjhCqRsRBRrHCLhzmC +CZZzlnCZNlGGcbVrbtVlMtct +MgFQDFgQRLLHhJgDFqQJQLgdtVTrttSrPSmcbmTtvSqvVSTV +hFQDDfMDfLgHwWfBzWwwsZGW +bHVDdHVHTPMvnSQnWSDQgDmm +GhrCJfbfrhfbRJcqGqlwZtnBRtBWSQgQWWnWQW +lfcCrqJhlfFqphpplNCrNVMPMPLbsLPLzFVHVLsVdz +VDhFCZhtFdPqwwcp +SvnvHNNnTvbwNNgnHwTHgwBTLcdqmmfmqLGmmTRLPfpdGP +BNWsHJgSnwgMMgMBBWMDVJjtjZrDJZzztJhjQr +HDsSHLRnpjbpbbRDbqLjLjjGGVffMVGMdvnfMcNvfBBGcB +TCzQQztwwNTMqMdBVv +hCQWmtCzZthPPZPrLjSbJqjSjLLFjLpr +ZrrZqJDcZSCFLLHBFcjjHF +TgvnDTlTtQwgBfwwwzLjGLdF +VbnVngMtvDTTVMQDQMDQlsbZJChCmCPhprrZqhqZSZPJ +glMGHBJTJJTplgwcCgcqcFhhbWncFm +sSswtPfRDmWcCqfchq +RZSdSzsVzNPSwSSQsdzSSQpGLjJTMpBGrJrLLrplZBpG +WQqqwLqQlnlWDwtbVbtCNfVbpV +dFTRjBPhcBgBrFhTPhrbVptJpNNbbtJCbJSL +hjcmcRmgPPcRcPDmHHzGLWmsDmzH +rWFmrRmmccSZJWvSLZTH +hDPhGbhSjtbpqJLvJHjLHTqj +pnplBlfBPPhlgfDbDhglPMMrwrRRSSncwccQzddzmC +LbccJCGzbcCJcfGczcnmNnvNmZNLSDZZWPWS +dwstRhTsrsFddPZqvNWP +BBggRrQstBwBRTHWTprRCHHGVljfCGCfcljHjbGV +FHVBSVDvnsFDwwSVwwvGVSMFWhWcWptMWchWMtPPcWtNNWcj +TgqJrJTRmRCNrbcLjprLnp +qQTlfdlZQgmfqqnFVznvQwvnsBsV +TGpDDMQGMZNtfvDJdtWd +jbrmstmllRmNvVhmmvJVhv +tbrRzFFLlRrjFlLlTQgLQwwLMwgTZBTB +QFgFWQQfSgLFGmtnnVmqCPWmPH +TTzjgTbRRqnRsCPCsP +NDMMgZjzcJvbjhMcjZbbbJJNpdpBfBvSBBQwBSQLQSpSplBG +zcRNsQSSMjRsNNZZFBLQHHFFBPWF +tvwCtgvqLJNnNBCH +fNNwqrqNMpTrDlcs +MMHMVPRJHJWvqzWctbtQQdQz +DFfNFffDnTllfTfFfmzsjqcdtQGQpbddQQbssn +mlFNCgFNNNLrmLFCThhhzJBvhSJPVhMgMh +PWjhljbHFhjbFMWhjbPfhbTGZvlGcGlCLvvwtGCNZGvc +SRqBqBrmQWQrgQrrqrJBLZNccLNZmTCtvTGtCvCt +rJDzDSSBrzdqQWDPHFMjMFdjHMVnbM +qqLwvvtrLFqqfqrjjjdBZfBCBBJdlT +ZGZpRZHbQDzDWRRRVdBzSSlBdzjjzdJJ +ZGpgNDQmWGDRmRpZMQbvPPtnnFnLsstFmnFrPL +TdhcfZhdZZdpdbPWttCWrrCN +MBMMqRLgpGpFFWbNsvLwvCPCCP +mpBMnBRMBGqJfZcfZZHZlhfm +CdmGdnMcMwHjhDtFFnrj +vPbVbPBPPpgpgWJpvTjqDZZqSHqVZShrDj +BppjjgvbJjbpNbzPfNcGCLlCRcmLLflllGcc +qDtgVttGFtlslStS +gCZbbHCjvJbZjCbJhHhHJrZcslJcLzLllcLNFssMSsTlSM +CWbWrZgWBQQBBpfdPm +hstPtCGtltlTClllPJLScVdPdJjLPJMV +NHRbDZDQSDFFjjdJ +RqbQpgBmqZvqZNQqgZmmbszpTtthtCswhjslwwpTWC +CVdwBJJdppbbwdBVrJbrJbGPlMFSLrjrPjmPFFmPRRDF +NNWHHhNZTcQWhnNFlmSSlRmLjnPPRF +qWsccHTZccsNsZcvTcNtStpBtbdVwpfBwbVCBq +lPQHNJhMPMPFlNMHBqZBwQwQwQZwcCqw +bWddDzbWbftdDSDbgttgnSDWccLwcvBczqcqGZzLccZTZwwc +spWrssWrnDtDpfSWDtsFqlFPjNMjRJVVNNPJNp +bCCfcWVLTHfSSdHwhH +sGQSZSzQJmmQsphwHHHsndnpHN +zPSqrmZPFCvFTbWMLV +tLtVBGLJqGqVGbzGSCsSsSqQsFvZCSQv +gRgdWlHTBHgjjHlWpWjWjrwdCfQRZFSssQQQZmQmMSvZfFMQ +lPHlpWgjTldprNWHNNdHjTctcLbVcnNJJGbVzBhnbhhJ +zVrSwzzJbVrbqFCVVVwVCztWDDtfTZsWDZTLZZmSWsDm +bpgHlgBbbGGGglBGRNvMpWfTDjmDfWDjfRZZWLtmZs +bGbvQHMpQccFJPPh +VGqCPmPjfGqCdMqVMhjhmPChDJDJzvrrbrBvrdrpnJDpJDQr +TSRsgHRSFHTlHvJvBDvvzlptbv +ZFLTsRRgZTgWscHTfWNWNPPBfGqmmMfV +TvTrrrCVCVwqjPrWfWhjfH +RRmgmnggltRgNpzRsdfqWWjdFdvNHfdh +zZlRzDGGZmbmmZbvGJVccwCMVcVVTLwDwC +QPsNlvvvSccbbNQcSPvDVSvzTLLCgRVzCJgTJpgCpphgzh +MDqHwFrMffgFpgpJLzTz +ZtdrffBrdqmBBmfwMtDtQPPPbjcNvnllnlbNtScn +HbbbcpTHHMMqNTCddCVBQvgPzJPJWQBQjvpBvQ +FFrDGtntFFwhrRFDFthfRhRmSJPJvvJZjZjWJJvJQJnvWjjg +rtfFfLmLRmNgdHqcLNHd +FpFHCFWtFSnCWnBfJJfgMJDGHDGGsG +rhrLrrhLrbtZThLfgsfGNDfgTgNcDs +QmPjbdqjmbbbrmhQqQZrZStRdlnnFdlRzVVVWlnpzR +bBMwwjzhbjhssvsGZBSZLr +JFtnDtRzJtffJHWNtHncRRrvGZvSnllZZZsgvlnvVvlv +RRPHPHFPHHdcHtzNfMQhdCwbqCmbMChhqq +pWGdFSWwwjLdvgNNvggl +mTNbmRPHmmVNmvZhnhBssBlhnb +HPTzRPffJJNzjCFpDWDz +MHlgzsqHlbmzgsHzlsbcRWPdPtjZFqhGGdrPrjPJGrVP +vpwwvQwCnhNQpSnLdVtrrZGZtZjdVSdJ +hfffwvTpvLwDpCLvDnQDHbmRRTcWRHMWWHWMmWMW +WHlNHWWldjpwntnWBPpPQFZFBFhZBZCZ +TqqvgvmgfmvDVLLfqqLsrFBRhrrBFJQBGPgPZGCR +mcDbcDmzLcmDDzfVzTQNjNzNztdzjNdwSHlH \ No newline at end of file diff --git a/aoc4.ipynb b/aoc4.ipynb new file mode 100644 index 0000000..c78d661 --- /dev/null +++ b/aoc4.ipynb @@ -0,0 +1,123 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "298d175e-fe20-4d97-8d3c-5b77b045a33a", + "metadata": {}, + "source": [ + "### Part 1" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "aed8a1d4-93f0-4bb8-9810-a20b1113ff1f", + "metadata": {}, + "outputs": [], + "source": [ + "def range_contains_range(range1, range2):\n", + " return range1.start in range2 and range1.stop in range2" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "2385899f-2a65-467e-8abf-2d7fa90aba84", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "532" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc4_input.txt\", \"r\") as f:\n", + " fully_contains_count = 0\n", + " for assignment_pair in f:\n", + " match list(map(lambda x: list(map(int, x.split(\"-\"))), assignment_pair.strip().split(\",\"))):\n", + " case [[fa1, fa2], [sa1, sa2]]:\n", + " r1, r2 = range(fa1, fa2), range(sa1, sa2)\n", + " c = int(range_contains_range(r1, range(sa1, sa2+1)) or range_contains_range(r2, range(fa1, fa2+1)))\n", + " fully_contains_count += c\n", + "\n", + "fully_contains_count" + ] + }, + { + "cell_type": "markdown", + "id": "5886c69c-229a-45f6-b31e-556b55b1bbec", + "metadata": {}, + "source": [ + "### Part 2" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "c567162f-8ef0-47c1-ba17-84bf667b3496", + "metadata": {}, + "outputs": [], + "source": [ + "def range_overlap_range(range1, range2):\n", + " return range1.start in range2 or range1.stop in range2" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "f3142767-65a1-4bf0-a64d-83ef53711e20", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "854" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc4_input.txt\", \"r\") as f:\n", + " overlapping_ranges_count = 0\n", + " for assignment_pair in f:\n", + " match list(map(lambda x: list(map(int, x.split(\"-\"))), assignment_pair.strip().split(\",\"))):\n", + " case [[fa1, fa2], [sa1, sa2]]:\n", + " r1, r2 = range(fa1, fa2), range(sa1, sa2)\n", + " c = int(range_overlap_range(r1, range(sa1, sa2+1)) or range_overlap_range(r2, range(fa1, fa2+1)))\n", + " overlapping_ranges_count += c\n", + "\n", + "overlapping_ranges_count" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/aoc4_input.txt b/aoc4_input.txt new file mode 100644 index 0000000..fe99544 --- /dev/null +++ b/aoc4_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/aoc5.ipynb b/aoc5.ipynb new file mode 100644 index 0000000..bee1cd9 --- /dev/null +++ b/aoc5.ipynb @@ -0,0 +1,133 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a19b0da1-9ac5-4d7f-9957-6268d3536564", + "metadata": {}, + "source": [ + "### Part 1" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "dc5032e6-5ad2-4b32-8a58-29679cfba227", + "metadata": {}, + "outputs": [], + "source": [ + "def split_def_in_sectors(line):\n", + " for i in range(0, len(line), 4):\n", + " yield line[i:i+3].strip()" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "cdccaa3e-0aaf-4e0a-8171-179f90c65bb6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'VQZNJMWTR'" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc5_input.txt\", \"r\") as f:\n", + " line = next(f).rstrip(\"\\n\")\n", + " stacks = [[] for _ in range((len(line) + 1) // 4)]\n", + " while \"[\" in line:\n", + " for i, e in enumerate(split_def_in_sectors(line)):\n", + " if e:\n", + " stacks[i].append(e[1])\n", + " line = next(f).rstrip(\"\\n\")\n", + " next(f)\n", + " for stack in stacks:\n", + " stack.reverse()\n", + " for cmd in f:\n", + " match cmd.split():\n", + " case [\"move\", amount, \"from\", pos, \"to\", newpos]:\n", + " amount, pos, newpos = int(amount), int(pos)-1, int(newpos)-1\n", + " stack_left, stack_right = stacks[pos][:-amount], reversed(stacks[pos][-amount:])\n", + " stacks[pos] = stack_left\n", + " stacks[newpos] += stack_right\n", + "\n", + "\"\".join(stack[-1] for stack in stacks)" + ] + }, + { + "cell_type": "markdown", + "id": "b9df4a1d-f7ec-406c-870d-e5a7269ccf0c", + "metadata": {}, + "source": [ + "### Part 2" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "55ade032-7a23-4e6e-a984-71f0e452b224", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'NLCDCLVMQ'" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc5_input.txt\", \"r\") as f:\n", + " line = next(f).rstrip(\"\\n\")\n", + " stacks = [[] for _ in range((len(line) + 1) // 4)]\n", + " while \"[\" in line:\n", + " for i, e in enumerate(split_def_in_sectors(line)):\n", + " if e:\n", + " stacks[i].append(e[1])\n", + " line = next(f).rstrip(\"\\n\")\n", + " next(f)\n", + " for stack in stacks:\n", + " stack.reverse()\n", + " for cmd in f:\n", + " match cmd.split():\n", + " case [\"move\", amount, \"from\", pos, \"to\", newpos]:\n", + " amount, pos, newpos = int(amount), int(pos)-1, int(newpos)-1\n", + " stack_left, stack_right = stacks[pos][:-amount], stacks[pos][-amount:]\n", + " stacks[pos] = stack_left\n", + " stacks[newpos] += stack_right\n", + "\n", + "\"\".join(stack[-1] for stack in stacks)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/aoc5_input.txt b/aoc5_input.txt new file mode 100644 index 0000000..9393315 --- /dev/null +++ b/aoc5_input.txt @@ -0,0 +1,511 @@ + [L] [M] [M] + [D] [R] [Z] [C] [L] + [C] [S] [T] [G] [V] [M] +[R] [L] [Q] [B] [B] [D] [F] +[H] [B] [G] [D] [Q] [Z] [T] [J] +[M] [J] [H] [M] [P] [S] [V] [L] [N] +[P] [C] [N] [T] [S] [F] [R] [G] [Q] +[Z] [P] [S] [F] [F] [T] [N] [P] [W] + 1 2 3 4 5 6 7 8 9 + +move 7 from 3 to 9 +move 5 from 8 to 9 +move 3 from 9 to 5 +move 6 from 9 to 2 +move 9 from 9 to 3 +move 3 from 7 to 3 +move 8 from 2 to 3 +move 9 from 3 to 1 +move 11 from 3 to 8 +move 5 from 6 to 9 +move 1 from 6 to 3 +move 1 from 2 to 7 +move 1 from 4 to 8 +move 1 from 3 to 9 +move 4 from 4 to 3 +move 6 from 8 to 3 +move 2 from 8 to 2 +move 4 from 9 to 3 +move 3 from 2 to 5 +move 2 from 5 to 4 +move 5 from 3 to 4 +move 11 from 1 to 4 +move 1 from 7 to 6 +move 1 from 3 to 5 +move 2 from 1 to 9 +move 1 from 1 to 4 +move 7 from 5 to 8 +move 21 from 4 to 6 +move 6 from 6 to 2 +move 6 from 8 to 9 +move 5 from 8 to 5 +move 2 from 2 to 7 +move 4 from 3 to 7 +move 1 from 2 to 6 +move 1 from 2 to 5 +move 2 from 2 to 7 +move 4 from 3 to 7 +move 1 from 4 to 6 +move 9 from 5 to 3 +move 7 from 3 to 4 +move 7 from 7 to 3 +move 7 from 4 to 1 +move 8 from 3 to 5 +move 1 from 3 to 5 +move 3 from 8 to 2 +move 2 from 2 to 9 +move 13 from 9 to 4 +move 5 from 5 to 3 +move 4 from 7 to 6 +move 1 from 7 to 4 +move 2 from 4 to 2 +move 3 from 3 to 4 +move 2 from 5 to 2 +move 6 from 1 to 7 +move 1 from 2 to 8 +move 1 from 3 to 8 +move 1 from 1 to 6 +move 1 from 3 to 4 +move 1 from 2 to 6 +move 24 from 6 to 1 +move 3 from 2 to 3 +move 3 from 3 to 5 +move 2 from 8 to 6 +move 2 from 5 to 4 +move 3 from 5 to 1 +move 7 from 4 to 8 +move 3 from 8 to 9 +move 2 from 9 to 5 +move 2 from 6 to 3 +move 1 from 9 to 8 +move 5 from 7 to 5 +move 2 from 3 to 1 +move 1 from 7 to 1 +move 7 from 4 to 7 +move 2 from 4 to 8 +move 6 from 8 to 6 +move 3 from 6 to 9 +move 10 from 5 to 1 +move 7 from 7 to 1 +move 1 from 4 to 9 +move 1 from 6 to 3 +move 2 from 9 to 7 +move 1 from 4 to 2 +move 1 from 9 to 5 +move 1 from 8 to 5 +move 39 from 1 to 8 +move 1 from 2 to 5 +move 2 from 6 to 9 +move 3 from 9 to 5 +move 3 from 1 to 6 +move 1 from 7 to 2 +move 1 from 3 to 2 +move 2 from 6 to 2 +move 3 from 2 to 3 +move 1 from 6 to 2 +move 1 from 1 to 8 +move 3 from 1 to 2 +move 3 from 2 to 4 +move 2 from 4 to 5 +move 2 from 3 to 8 +move 8 from 5 to 2 +move 8 from 8 to 2 +move 15 from 2 to 7 +move 1 from 1 to 5 +move 25 from 8 to 7 +move 2 from 2 to 4 +move 2 from 4 to 3 +move 1 from 8 to 4 +move 2 from 4 to 6 +move 1 from 2 to 1 +move 26 from 7 to 2 +move 15 from 2 to 1 +move 7 from 8 to 9 +move 10 from 1 to 6 +move 10 from 7 to 2 +move 1 from 8 to 1 +move 5 from 9 to 8 +move 1 from 8 to 9 +move 2 from 6 to 9 +move 3 from 7 to 1 +move 1 from 7 to 1 +move 5 from 9 to 2 +move 1 from 3 to 1 +move 9 from 6 to 3 +move 1 from 6 to 1 +move 4 from 2 to 4 +move 3 from 4 to 8 +move 1 from 4 to 1 +move 9 from 3 to 1 +move 1 from 7 to 6 +move 9 from 2 to 5 +move 14 from 1 to 6 +move 1 from 3 to 8 +move 5 from 2 to 6 +move 8 from 1 to 8 +move 6 from 6 to 8 +move 14 from 6 to 7 +move 1 from 1 to 7 +move 10 from 5 to 4 +move 11 from 8 to 5 +move 15 from 7 to 1 +move 4 from 5 to 6 +move 4 from 8 to 9 +move 6 from 5 to 3 +move 1 from 6 to 9 +move 1 from 1 to 6 +move 1 from 5 to 8 +move 2 from 6 to 2 +move 6 from 1 to 5 +move 1 from 5 to 8 +move 2 from 5 to 4 +move 9 from 2 to 9 +move 13 from 9 to 8 +move 1 from 2 to 1 +move 1 from 4 to 8 +move 3 from 3 to 1 +move 2 from 4 to 5 +move 2 from 1 to 5 +move 1 from 9 to 3 +move 17 from 8 to 1 +move 3 from 3 to 2 +move 4 from 5 to 1 +move 2 from 2 to 4 +move 1 from 6 to 1 +move 1 from 2 to 8 +move 4 from 4 to 6 +move 1 from 5 to 9 +move 5 from 6 to 8 +move 1 from 5 to 4 +move 1 from 5 to 6 +move 3 from 8 to 6 +move 8 from 4 to 5 +move 32 from 1 to 7 +move 11 from 7 to 6 +move 8 from 5 to 3 +move 3 from 8 to 7 +move 6 from 3 to 9 +move 4 from 3 to 8 +move 5 from 8 to 2 +move 1 from 8 to 5 +move 11 from 6 to 3 +move 1 from 5 to 2 +move 2 from 8 to 6 +move 12 from 7 to 8 +move 2 from 6 to 2 +move 2 from 6 to 4 +move 5 from 2 to 5 +move 8 from 7 to 2 +move 2 from 7 to 1 +move 2 from 7 to 6 +move 5 from 5 to 4 +move 5 from 4 to 7 +move 5 from 8 to 2 +move 2 from 9 to 7 +move 5 from 8 to 4 +move 2 from 7 to 3 +move 2 from 9 to 3 +move 3 from 7 to 9 +move 1 from 1 to 8 +move 2 from 6 to 1 +move 2 from 9 to 8 +move 1 from 7 to 8 +move 1 from 2 to 5 +move 1 from 7 to 9 +move 7 from 4 to 3 +move 3 from 3 to 6 +move 5 from 8 to 6 +move 3 from 9 to 5 +move 16 from 3 to 1 +move 2 from 9 to 1 +move 7 from 1 to 8 +move 1 from 1 to 2 +move 5 from 8 to 2 +move 12 from 1 to 4 +move 1 from 3 to 5 +move 1 from 2 to 9 +move 1 from 9 to 4 +move 4 from 6 to 5 +move 5 from 6 to 1 +move 1 from 6 to 5 +move 1 from 1 to 4 +move 1 from 4 to 7 +move 1 from 3 to 7 +move 9 from 4 to 6 +move 2 from 7 to 8 +move 1 from 3 to 4 +move 2 from 8 to 9 +move 4 from 8 to 4 +move 4 from 2 to 8 +move 2 from 9 to 7 +move 2 from 7 to 8 +move 10 from 2 to 4 +move 1 from 2 to 1 +move 5 from 4 to 7 +move 1 from 1 to 3 +move 3 from 8 to 7 +move 6 from 7 to 2 +move 3 from 2 to 7 +move 1 from 6 to 7 +move 5 from 5 to 8 +move 4 from 1 to 3 +move 4 from 3 to 1 +move 8 from 4 to 2 +move 1 from 3 to 2 +move 2 from 7 to 2 +move 2 from 6 to 3 +move 4 from 7 to 2 +move 4 from 5 to 7 +move 14 from 2 to 7 +move 3 from 2 to 1 +move 3 from 8 to 2 +move 1 from 5 to 7 +move 6 from 2 to 4 +move 2 from 2 to 7 +move 2 from 3 to 6 +move 6 from 8 to 2 +move 4 from 6 to 4 +move 2 from 6 to 9 +move 4 from 4 to 2 +move 2 from 4 to 8 +move 10 from 7 to 2 +move 18 from 2 to 6 +move 2 from 2 to 6 +move 2 from 9 to 2 +move 2 from 8 to 5 +move 1 from 2 to 9 +move 1 from 2 to 9 +move 1 from 5 to 7 +move 1 from 2 to 6 +move 2 from 9 to 2 +move 6 from 7 to 3 +move 7 from 6 to 8 +move 5 from 7 to 2 +move 1 from 7 to 4 +move 1 from 5 to 7 +move 4 from 8 to 7 +move 5 from 2 to 3 +move 1 from 7 to 5 +move 2 from 2 to 8 +move 9 from 4 to 3 +move 13 from 6 to 8 +move 10 from 3 to 1 +move 1 from 5 to 2 +move 3 from 6 to 8 +move 5 from 1 to 2 +move 1 from 1 to 8 +move 2 from 4 to 3 +move 17 from 8 to 6 +move 5 from 6 to 3 +move 3 from 1 to 2 +move 9 from 6 to 5 +move 2 from 6 to 8 +move 5 from 5 to 9 +move 3 from 9 to 8 +move 3 from 1 to 3 +move 3 from 7 to 5 +move 6 from 5 to 8 +move 7 from 2 to 4 +move 1 from 6 to 3 +move 1 from 1 to 5 +move 4 from 4 to 5 +move 2 from 2 to 9 +move 3 from 1 to 3 +move 4 from 5 to 8 +move 1 from 4 to 5 +move 6 from 8 to 7 +move 1 from 5 to 2 +move 4 from 9 to 2 +move 2 from 5 to 9 +move 2 from 1 to 8 +move 2 from 4 to 9 +move 6 from 7 to 5 +move 3 from 5 to 2 +move 3 from 2 to 5 +move 10 from 8 to 3 +move 2 from 8 to 5 +move 3 from 2 to 5 +move 6 from 5 to 1 +move 4 from 5 to 6 +move 1 from 7 to 5 +move 23 from 3 to 7 +move 2 from 5 to 9 +move 2 from 1 to 5 +move 2 from 6 to 3 +move 6 from 3 to 1 +move 1 from 1 to 7 +move 4 from 3 to 1 +move 1 from 8 to 5 +move 2 from 9 to 2 +move 3 from 3 to 8 +move 2 from 6 to 8 +move 12 from 1 to 3 +move 1 from 9 to 7 +move 3 from 5 to 9 +move 9 from 3 to 8 +move 1 from 1 to 7 +move 1 from 9 to 4 +move 3 from 3 to 6 +move 3 from 2 to 1 +move 3 from 8 to 6 +move 1 from 4 to 2 +move 1 from 2 to 9 +move 1 from 2 to 7 +move 20 from 7 to 5 +move 3 from 7 to 3 +move 3 from 1 to 3 +move 5 from 8 to 1 +move 5 from 1 to 5 +move 4 from 5 to 2 +move 3 from 2 to 6 +move 3 from 8 to 7 +move 1 from 2 to 6 +move 2 from 8 to 6 +move 2 from 7 to 5 +move 2 from 3 to 6 +move 12 from 5 to 1 +move 6 from 5 to 7 +move 12 from 6 to 8 +move 4 from 9 to 3 +move 4 from 5 to 8 +move 3 from 1 to 5 +move 4 from 7 to 4 +move 3 from 5 to 9 +move 7 from 1 to 6 +move 1 from 1 to 3 +move 6 from 7 to 6 +move 1 from 1 to 3 +move 10 from 3 to 6 +move 10 from 6 to 2 +move 2 from 9 to 5 +move 4 from 6 to 5 +move 9 from 6 to 1 +move 16 from 8 to 7 +move 3 from 8 to 7 +move 1 from 8 to 1 +move 7 from 2 to 1 +move 1 from 5 to 9 +move 1 from 6 to 1 +move 2 from 2 to 1 +move 3 from 1 to 4 +move 1 from 6 to 8 +move 7 from 4 to 1 +move 1 from 8 to 2 +move 22 from 1 to 8 +move 18 from 7 to 9 +move 6 from 5 to 2 +move 2 from 2 to 7 +move 2 from 1 to 5 +move 4 from 7 to 6 +move 1 from 5 to 6 +move 2 from 8 to 2 +move 3 from 2 to 6 +move 1 from 5 to 6 +move 15 from 9 to 6 +move 6 from 9 to 5 +move 1 from 9 to 8 +move 1 from 2 to 9 +move 5 from 5 to 9 +move 9 from 8 to 6 +move 3 from 2 to 7 +move 12 from 8 to 9 +move 1 from 7 to 5 +move 1 from 5 to 7 +move 3 from 7 to 1 +move 17 from 6 to 3 +move 1 from 2 to 6 +move 2 from 1 to 4 +move 16 from 6 to 4 +move 7 from 4 to 6 +move 1 from 5 to 7 +move 8 from 4 to 5 +move 9 from 9 to 8 +move 16 from 3 to 7 +move 1 from 1 to 5 +move 3 from 5 to 1 +move 5 from 6 to 2 +move 3 from 1 to 7 +move 3 from 6 to 7 +move 3 from 9 to 3 +move 5 from 8 to 5 +move 11 from 5 to 7 +move 2 from 3 to 7 +move 1 from 2 to 1 +move 1 from 3 to 6 +move 17 from 7 to 9 +move 1 from 3 to 2 +move 3 from 4 to 6 +move 1 from 1 to 2 +move 1 from 6 to 4 +move 14 from 7 to 6 +move 15 from 9 to 6 +move 4 from 8 to 7 +move 1 from 4 to 7 +move 7 from 9 to 5 +move 5 from 2 to 9 +move 7 from 5 to 1 +move 3 from 1 to 7 +move 29 from 6 to 4 +move 1 from 2 to 4 +move 18 from 4 to 2 +move 3 from 1 to 4 +move 1 from 1 to 7 +move 18 from 2 to 4 +move 3 from 6 to 5 +move 15 from 4 to 1 +move 1 from 5 to 1 +move 1 from 5 to 4 +move 9 from 4 to 1 +move 5 from 1 to 3 +move 9 from 1 to 5 +move 2 from 4 to 3 +move 5 from 5 to 6 +move 3 from 7 to 9 +move 7 from 7 to 5 +move 6 from 4 to 6 +move 2 from 3 to 7 +move 6 from 5 to 8 +move 2 from 8 to 4 +move 1 from 8 to 9 +move 9 from 6 to 2 +move 3 from 9 to 3 +move 1 from 2 to 1 +move 6 from 7 to 4 +move 2 from 2 to 8 +move 3 from 9 to 5 +move 5 from 4 to 8 +move 1 from 6 to 9 +move 1 from 3 to 1 +move 1 from 3 to 4 +move 1 from 6 to 5 +move 1 from 9 to 3 +move 10 from 8 to 7 +move 3 from 9 to 2 +move 7 from 2 to 4 +move 6 from 5 to 7 +move 4 from 5 to 8 +move 7 from 3 to 2 +move 3 from 7 to 1 +move 9 from 1 to 5 +move 5 from 7 to 9 +move 7 from 1 to 4 +move 11 from 4 to 2 +move 4 from 8 to 3 +move 5 from 4 to 7 +move 4 from 4 to 1 +move 1 from 3 to 6 +move 12 from 7 to 4 +move 2 from 1 to 8 +move 5 from 9 to 7 +move 7 from 5 to 6 +move 1 from 1 to 4 +move 1 from 9 to 8 +move 1 from 4 to 7 +move 1 from 8 to 9 +move 5 from 7 to 9 +move 2 from 7 to 5 +move 2 from 6 to 3 +move 5 from 2 to 7 +move 1 from 7 to 8 +move 1 from 1 to 6 +move 3 from 5 to 1 \ No newline at end of file diff --git a/aoc6.ipynb b/aoc6.ipynb new file mode 100644 index 0000000..71be493 --- /dev/null +++ b/aoc6.ipynb @@ -0,0 +1,97 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "14be2365-970d-41a2-bc43-000c718aac46", + "metadata": {}, + "source": [ + "### Part 1" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "47f56d42-e07f-4fdc-a3a3-0cd97c09bde9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1238" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc6_input.txt\", \"r\") as f:\n", + " read_str_before_packet = f.read(3)\n", + " while c := f.read(1):\n", + " read_str_before_packet += c\n", + " if len(set(read_str_before_packet[-4:])) == 4:\n", + " break\n", + "\n", + "len(read_str_before_packet)" + ] + }, + { + "cell_type": "markdown", + "id": "10e8a318-7517-4212-b619-ad1406f144e3", + "metadata": {}, + "source": [ + "#### Part 2" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "139b3b21-76a0-49d7-9533-caf170e18cb0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3037" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc6_input.txt\", \"r\") as f:\n", + " read_str_before_marker = f.read(13)\n", + " while c := f.read(1):\n", + " read_str_before_marker += c\n", + " if len(set(read_str_before_marker[-14:])) == 14:\n", + " break\n", + "\n", + "len(read_str_before_marker)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/aoc6_input.txt b/aoc6_input.txt new file mode 100644 index 0000000..6c2275a --- /dev/null +++ b/aoc6_input.txt @@ -0,0 +1 @@ +dcbcsbblhhgdgssmcmqccdwdvwdvvcfvcfvvpvmmwccdqddshhdppcfpfbbfggfjfvvhzhmmsqswsttcgtctggjllhnnqbnnnldlglplvlbvbzztpzzvpphshwwfhhgssvgsvvpfvfzznbznndqqtsqttnvtvqqqrgqrrgzzlqzzbvzbzmzffnbfnbffcggdcggqhqpqzpqzqbbqvbqbhhtzhhrrrprlrclrcrssqspqpbblggfvvbpvbbssvttsztzpzjjwffnpnfnrrqhqgqrrzqzbzzdpdjpplpclpptltztjtztqthtmmmpsmmpjpqpvvshhsfshhrvrdvdggwssdbbzbttlmlmpprmrmlrrmqrqsshjhjljzjnjllbbvjvnnppqbppqqfffrbfbdfbbqppmtppfttqddtzzwbblqqbddgwgqwqzwwpzwzjjbccdjdwwrggrmrtmrtmrrvpptwwcdcwwsdshhjjhwjwqjwwqsshrrbsblssphspsjpssnsmsqswqwfwjwccdvccrqqnsqnsnwsnsmnmccvcqqfjjfljfljfjgjffjvffvjvhjhfhrfrlrrtpphbhwbbvmmnpndnlljdjfjsffvccnhchwhddrccljllmnnhmnmpnnhtnthnhvnhnwnqqjmmgzzvssphhjljbjwjbwwdnwwdvvzpvvhccvjjlclrrppgjgsshghvvzjvvpvvbjjqhjqqfcqffchcmmvdvtddftdtppfnppcnpnznwwpdpjpnpttlbbmmqfqmffqnfnbffbrbgbwggsmsbbfgbbfbzbtzbbvmmdlmlrlnlwwbswsjjpjhhwqwzqznqzqvvwccwvwwcbbpvvwcvcvzzhzchzccbnccjlljsjbjdbbvqbvvfdfgdfggzfzlzmzrznnqsnncmnnljjtcjcfftrthtrhrgrvvjggzpggrcrpcppggdfggpmmwnmnlmlglvvmjvvddsmsjsnjssqffffctczcjzjjlbbhpbbfdbdzbbsjbjnjbbqqjbqjbjjhwhssmvsschhhwppbjppllprpjrppdpfpgpjptjtptplpnptnptpjjmcmnnnhnjhjlhjlhjlhlwwhwmwjjbhhlfffrbbgvvqwvwswtstmmmfpmfpffmcfcrrqsqzqjjjnpnnztnznddlwdldsdbssstzstswwjtttmmwmsmwssvswszsjzsjjsffmccmfccqzzvpmbbbsqffgzdqbjtzhlqdzhlpwghlstcrcrffrnbwjnqgmbmpgttfmsswdqctlrpdnlsgnlldvbfpwtcptvbwftzcnbbscrrcpnwtmllcvsrmwzzlsdmfctdcwsqdlsnzgfpmzrnswhbqjhstztzzmzpcttsgsggnlhvjmcbbrhgqhsfmglpcbdvmmmnfbtbfrqbpcmttjtnwvznbshwrmznnsvpjqjntlzspljnbwtjcqztsfcqlrggrpzjgjsvqqcrmrjmzwdsshqfhbtfmlwmfvtbcgdmjgtcnphfmfmjlbjzrvjslccftnwcchgdwjnlthlwgldjwqwgdptdjdmzdrrzcdpbfrtdgcspjtqdqvzswwdwrhggdrqjjgwwrbwhhlrpqmszvlvjfqptncjlscvzbgzgmsttlbhbfrctnsphjcrcwlhcgrcrsjbrjvptgfbjgjrvtzmnhpzcgptbmrgvstsltnctjphsjdwpdqblfswzfhgjbpfrptlmhfwcpdlzqccgtdvbzhwngrhlqftmlhjprscflgzpflvvpfsjmlnmbzsrlrshvnsqrhhlqdlzhrcbjjjfrbqcdspwsmltcrtlbdnbnvhbbwgqdcncsztbfwztzdbqgcrnvndmpstpncbwvtctzdpmcpvrgqvjjztfwpvjtdqlvcvdpfzgcghsmbcwtzztmqwdpsprgsmfhphqsqmflrjdqzjscgzlnvcwcrlmpdscnhqpqjfdbdftqgttwntdbpnshdwnmwsrslfgnzlnwwwqgdbfnthhqtvbzsqgzjhhghtmvvfhlmlpbghnsvlttzsjlgndhdqmqqfdlqnbfscsnnqzcdwzdlqcnstcbsffghftqvwrsshgwmlnprhdnnwslwfwtmtfzdjwpmlvvdhjvdwrhvdsmpgrdpnqsjpqmhttrmdwllrmnbznwjwvvpjnnbnfzbdnhjbqqrnzgdqbspbqtwdpgsbwpzfdbpvzfjpsgmztnzrpvvhwlfscfvfpfblvplgdbhvjjpdjtnwrmvpjsphvglpsntvwtqwqvprcgwjltddpjngvmzfzhmqnnwglbzsbrcztpplpsmgmcfgzgpbtgsjrfvdzzcsthznvdpbwvdlcgdhncsjdvpcbbmtrqczctjljdfghsrvrsfjglqqhjttfdhqdqwhzhqrggsjwlldrntwmmbftgqjhpvvctpbtgltnttlhdqbsbwcqmctwlsnhmhncpmnzsllmjhcgnlfgvpcqrwzvsstgwbvjtnrlbblclzdrcwddrwnptqzgwdwtgrfwffpzjmwbqfmmrcfzfzjbwsslbhggtwtcrlhffzgfgrtljgnznnlgzwfmtwwqzhlthvpfclrtmrqfzrggbctzfsmjhrtwzpfrnhwwprnbwmvwvmvnzqpggmzgslctqbqdtvhgzjwzsnblqzmcpnpwllzhvzzmfqzfjlrsrcnjzqdzbpjftljtzvvmrjszvqllnhhgnrnqttnwlvllphjtnmlwqhcvmbsvnwtcdmhsmhdcwqwtvggcqfpdsrsscmhcvfzvdnffrfhdfmgbsghdbpwdwrdmlvsnzwcfchcqvccszdqrbnfvrpbftcwnjmczwgqzmtlmrthlhtjpmchltcmcqwgfgshtvtpmcmpbmlnjmhnpdsljjmjzddnlgtnjqztzsqqlhtqcscjvjncjvfcvsgjhqgzrmtjjcgvvmwswffmlcvlhqhbvrldrvbrfmmqcnqmfzlsghvclrdbsvcbqspgbzmjnlrdhvncnbcfmdlqrssggsmlwwglcjjzmcdwcnrgvvmgjcfbzlncmgqtllgldbdztbtfcjczqtjjlnpqmrgtjsmrbscvqlgqghfbgwccgwrjrzrsbbrqnjcqhllsqmrjtzmjnndwwmdjfhspjpgdcjjpdvwrsgjcfnpllnnnccvnfvqbpddgvbgbsbczmbzrbclczljdmbhpgmhwlqvnjzjwzzfjmsmcchjrqrtmhwlgjsptctlbtdnrqgntcvngcrqdqptfmhbvlhrqchdtwdwbrbqwtswzcrrfndldwmjbczppzrnncvvqsmpvvqcnsvhprhlmrhnjbwdvrbbwwdtmzrqttschrztgjcshlhfbmhmwrrmwgmfshpdhjwgdmcfdvqrmmwgmzbrlgbfltvlzmvqbgvhppdzglqbdlrhjnntnfvtmzjqccmqdbpjqphfggmjqdrndhclcfvqsjrsbcgdhcrbjsdjmwrzvpfpcjwjfdltztfzgmlzqzmztpvbflppgnhdzssznngfjggczdtdmcczjzfsnflpwqrbggmqdbbprfptzcdqvhrvszzjqqjlrlrdpwcnzhvgfhpcdbbgsfmtnszwbhwcdwdghqqctwqlqrlqbdwfvjnhcpmzchqfrwzhzgslzhncmrlrpzcjczvzwcvwcldbmscfqnnqnwwvrpfvjswqmhgmhgnmfzpsjmdhbpvsftccttvdpcdzcnzswqmtrwbctpbgmzrvrrshjjgdqsqrwfpcmsbvqhccvjqpztlttwjjdtbmwslschpqjjllvjcjwtmrtvvwdzglstvtpndmmzcpgqsvqgfdtqdjdctsbsbmqzqhtczhgqgwbdlrhjrwcmtbzfndsbnpnhmsdhtghwwzvtdwtscdnwzmrjrsrjvvbvrpbszchwbltrjbcqmlhqnzcfbhjqnsjghlnlbsrgzrrzfvslwpbqmgfswhgjdsdfrzsdhvdqvqfbcbvmbfhjfpzwlbspcbnvrgpfnmjbwbsnpqpqhjpsnwrlcmfhpdmjbvpnctcfqgdmwzblsnr \ No newline at end of file diff --git a/aoc7.ipynb b/aoc7.ipynb new file mode 100644 index 0000000..90f7a8d --- /dev/null +++ b/aoc7.ipynb @@ -0,0 +1,217 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "34af346b-bcec-4d44-b3d9-4f3fa2caeb14", + "metadata": {}, + "source": [ + "#### Part 1" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "id": "45e4c72c-1ce9-4012-9937-ac0f0d4db3c6", + "metadata": {}, + "outputs": [], + "source": [ + "from dataclasses import dataclass, field\n", + "from queue import SimpleQueue" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "id": "a54cd000-15b6-4257-abe5-000df7ed59c5", + "metadata": {}, + "outputs": [], + "source": [ + "@dataclass\n", + "class File:\n", + " name: str\n", + " size: int\n", + "\n", + "\n", + "@dataclass\n", + "class Dir:\n", + " name: str\n", + " files: list[File] = field(default_factory=list)\n", + " subdirs: 'list[Dir]' = field(default_factory=list)\n", + " parent: 'Dir' = None\n", + " _cached_size: int = None\n", + " _cached_path: str = None\n", + " \n", + " @property\n", + " def size(self) -> int:\n", + " if self._cached_size is None:\n", + " self._cached_size = 0\n", + " for file in self.files:\n", + " self._cached_size += file.size\n", + " for subdir in self.subdirs:\n", + " self._cached_size += subdir.size\n", + " return self._cached_size\n", + " \n", + " @property\n", + " def path(self) -> str:\n", + " if self._cached_path is None:\n", + " if self.parent is None:\n", + " self._cached_path = self.name\n", + " else:\n", + " self._cached_path = f\"{self.parent.path}{self.name}/\"\n", + " self._cached_path = self._cached_path.replace(\"//\", \"/\")\n", + " return self._cached_path" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "id": "6303fecb-3618-493d-b6fb-e9c1858af90e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "('/', 44795677, 1, 8)" + ] + }, + "execution_count": 123, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open(\"aoc7_input.txt\", \"r\") as f:\n", + " root = Dir(name=\"/\")\n", + " next(f)\n", + " pwd = root\n", + " for line in f:\n", + " match line.strip().split():\n", + " case [\"$\", \"cd\", \"..\"]:\n", + " pwd = pwd.parent\n", + " case [\"$\", \"cd\", cd]:\n", + " for subdir in pwd.subdirs:\n", + " if subdir.name == cd:\n", + " pwd = subdir\n", + " break\n", + " else:\n", + " raise AttributeError(f\"Folder '{cd}' not found in current dir!\")\n", + " case [\"$\", \"ls\"]:\n", + " ...\n", + " case [\"dir\", dirname]:\n", + " pwd.subdirs.append(Dir(name=dirname, parent=pwd))\n", + " case [filesize, filename]:\n", + " pwd.files.append(File(name=filename, size=int(filesize)))\n", + "\n", + "root.name, root.size, len(root.files), len(root.subdirs)" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "id": "8ed82a45-dd7c-4a8f-b087-bc741148da47", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1391690" + ] + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "traversible, traversed, requested = SimpleQueue(), set(), []\n", + "traversible.put(root)\n", + "\n", + "while not traversible.empty():\n", + " dir: Dir = traversible.get()\n", + " if dir.path in traversed:\n", + " continue\n", + " if dir.size <= 100000:\n", + " requested.append(dir)\n", + " for subdir in dir.subdirs:\n", + " traversible.put(subdir)\n", + " traversed.add(dir.path)\n", + "\n", + "cumm_sum = sum(map(lambda x: x.size, requested))\n", + "cumm_sum" + ] + }, + { + "cell_type": "markdown", + "id": "a61f8782-d7f6-4908-b5b0-e7aacfec455b", + "metadata": {}, + "source": [ + "#### Part 2" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "id": "22bbbeea-0e73-4d05-8637-09cbc6112a7b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "179 dirs\n" + ] + }, + { + "data": { + "text/plain": [ + "('dqbnbl', '/hmw/tsrqvpbq/dqbnbl/', 5469168)" + ] + }, + "execution_count": 133, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "traversible, flat_file_list = SimpleQueue(), []\n", + "traversible.put(root)\n", + "\n", + "while not traversible.empty():\n", + " dir: Dir = traversible.get()\n", + " flat_file_list.append(dir)\n", + " for subdir in dir.subdirs:\n", + " traversible.put(subdir)\n", + " traversed.add(dir.path)\n", + "\n", + "print(len(flat_file_list), \"dirs\")\n", + "\n", + "space_left = 70000000 - root.size\n", + "flat_file_list.sort(key=lambda x: space_left - x.size, reverse=True)\n", + "big_enough = filter(lambda x: space_left + x.size > 30000000, flat_file_list)\n", + "needed_dir = next(big_enough)\n", + "needed_dir.name, needed_dir.path, needed_dir.size" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/aoc7_input.txt b/aoc7_input.txt new file mode 100644 index 0000000..4398569 --- /dev/null +++ b/aoc7_input.txt @@ -0,0 +1,1008 @@ +$ cd / +$ ls +dir cdnhnmcb +dir dmccnsqv +290229 dsm +dir gsszlj +dir hmw +dir jhmrn +dir ncb +dir npclt +dir rvvjbz +$ cd cdnhnmcb +$ ls +170937 fsjwz.css +281758 jmfcfs.gsq +109017 jwwv.zlz +295735 tsrqvpbq +$ cd .. +$ cd dmccnsqv +$ ls +273438 fsjwz.css +dir jtntzqfd +dir tqmbq +211769 vmgpwrbz.nbp +205895 wqz.qcg +$ cd jtntzqfd +$ ls +4635 wqfvvzth.vdz +$ cd .. +$ cd tqmbq +$ ls +dir bnvspstf +22264 bqcvlnw.pmq +dir hwv +200690 jlwjsbw.bzf +dir npclt +243708 qvnbwvt.sbv +157861 tsrqvpbq.mtf +$ cd bnvspstf +$ ls +46133 mwvz.vwh +289236 rjcp.gqj +$ cd .. +$ cd hwv +$ ls +dir tsrqvpbq +$ cd tsrqvpbq +$ ls +292872 rvvjbz.mgh +$ cd .. +$ cd .. +$ cd npclt +$ ls +191646 bhllwpr +26548 jlwjsbw.bzf +214302 nnqz +74637 szdjtbt.tmw +$ cd .. +$ cd .. +$ cd .. +$ cd gsszlj +$ ls +dir bjvqcfwc +dir dfzhdhs +179837 dsm.hzf +112354 gnrzhsw.jcf +175236 jlwjsbw.bzf +dir mfnllhfw +dir nwvcgb +dir rvvjbz +dir vcvmq +$ cd bjvqcfwc +$ ls +125387 rvvjbz +$ cd .. +$ cd dfzhdhs +$ ls +218291 jlwjsbw.bzf +dir jsmjbfg +dir rvvjbz +272548 zdrtjvzj.rlt +196309 ztdcrnl.hjj +$ cd jsmjbfg +$ ls +72259 bmszdt +242641 fsjwz.css +109294 mwtlz +149525 sgngzrnn.mww +$ cd .. +$ cd rvvjbz +$ ls +175613 rqjmjhrb +$ cd .. +$ cd .. +$ cd mfnllhfw +$ ls +119986 fcjrv.dvh +dir gwjgjljj +157962 jjjbv.fdp +dir mwttp +30246 vhzdjv.fqh +197554 zdrtjvzj.rlt +288875 zhdn.dtj +$ cd gwjgjljj +$ ls +237890 mlmmfh +dir ncjzqll +10935 zdrtjvzj.rlt +$ cd ncjzqll +$ ls +152092 gwwh.ttt +$ cd .. +$ cd .. +$ cd mwttp +$ ls +217929 fsjwz.css +$ cd .. +$ cd .. +$ cd nwvcgb +$ ls +131410 fsjwz.css +dir nqrdmvjm +82487 qwbg.hcb +dir tsrqvpbq +123617 tsrqvpbq.wqw +$ cd nqrdmvjm +$ ls +dir btjwzz +dir dsm +dir fcrsj +141465 fsjwz.css +133916 ztdcrnl.hjj +$ cd btjwzz +$ ls +dir nqrdmvjm +dir tsrqvpbq +150003 zdrtjvzj.rlt +$ cd nqrdmvjm +$ ls +dir dsm +160109 gzv.wzw +33187 mcgmjn.ftg +dir pbgdcwd +167821 ztdcrnl.hjj +$ cd dsm +$ ls +84979 gwwh.ttt +dir rvvjbz +$ cd rvvjbz +$ ls +189309 btvjmhp.dwm +$ cd .. +$ cd .. +$ cd pbgdcwd +$ ls +240743 rzgbfcg.dzg +$ cd .. +$ cd .. +$ cd tsrqvpbq +$ ls +284223 mmhvjn +188341 tnv.rcs +271396 zdrtjvzj.rlt +$ cd .. +$ cd .. +$ cd dsm +$ ls +128966 ptf +$ cd .. +$ cd fcrsj +$ ls +261786 qljq.nrv +$ cd .. +$ cd .. +$ cd tsrqvpbq +$ ls +57089 fsjwz.css +208087 ttfhpzll +$ cd .. +$ cd .. +$ cd rvvjbz +$ ls +dir ldglv +$ cd ldglv +$ ls +39389 wjwzdg.ldb +$ cd .. +$ cd .. +$ cd vcvmq +$ ls +dir jzgd +246541 lmfdrnnz.dcc +169613 npclt +264902 npclt.jsl +dir pwzbvvwz +82651 rch.bsc +223282 vddwtwz.pqf +dir wnb +$ cd jzgd +$ ls +91717 dqmhdw.mjr +69771 ztdcrnl.hjj +$ cd .. +$ cd pwzbvvwz +$ ls +dir cdmfv +dir fvqjbd +dir nhvhhs +dir npclt +dir rgdb +$ cd cdmfv +$ ls +172054 dsm.qjw +$ cd .. +$ cd fvqjbd +$ ls +212067 hclqv +dir tcjsbn +$ cd tcjsbn +$ ls +40576 wbzwnc.pqf +13447 wlrjhcf.jtg +$ cd .. +$ cd .. +$ cd nhvhhs +$ ls +92810 bgfgrzs +$ cd .. +$ cd npclt +$ ls +dir dcs +dir tsrqvpbq +$ cd dcs +$ ls +274856 nrqwg +$ cd .. +$ cd tsrqvpbq +$ ls +144678 jlwjsbw.bzf +dir nqrdmvjm +163728 qwddbflc.gjp +$ cd nqrdmvjm +$ ls +122069 btpm.vhg +105752 psrmw +149744 rvvjbz.bnn +126434 ztdcrnl.hjj +$ cd .. +$ cd .. +$ cd .. +$ cd rgdb +$ ls +75645 blzt +dir clz +dir ddmbzz +dir hrl +280472 jgmd.htc +217770 nqwgl.qqb +dir qjcrf +$ cd clz +$ ls +dir fshcptjq +125496 lhgsdhl.gss +291857 pfbjptg.lqh +78923 rdhmmqml.lrw +$ cd fshcptjq +$ ls +157704 btf +66314 qcpjsfr +225592 rsftvgr +$ cd .. +$ cd .. +$ cd ddmbzz +$ ls +217731 cbc.dmn +16389 cdwwz +256395 gwwh.ttt +233481 rvsslvbh +dir rvvjbz +dir zgc +$ cd rvvjbz +$ ls +dir zrwtdlzz +$ cd zrwtdlzz +$ ls +21488 gdgl.vbc +$ cd .. +$ cd .. +$ cd zgc +$ ls +222107 gwwh.ttt +35382 npclt.fpp +$ cd .. +$ cd .. +$ cd hrl +$ ls +dir rvvjbz +$ cd rvvjbz +$ ls +65335 dgn.mgd +$ cd .. +$ cd .. +$ cd qjcrf +$ ls +dir fjrdgbwh +$ cd fjrdgbwh +$ ls +143960 wvnzt.wvq +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd wnb +$ ls +66543 jlwjsbw.bzf +dir nqrdmvjm +dir pfwptjtl +3047 sbdlzbt.hlj +$ cd nqrdmvjm +$ ls +dir cqn +dir mnmbmb +182573 pmw.pdl +dir rvvjbz +92911 ztdcrnl.hjj +$ cd cqn +$ ls +38563 npclt.pcl +14353 sdlmtzzv +52230 ztdcrnl.hjj +$ cd .. +$ cd mnmbmb +$ ls +212337 fsjwz.css +24700 gwwh.ttt +10243 npclt +dir nqrdmvjm +238617 rvvjbz +$ cd nqrdmvjm +$ ls +19026 plrvst.bpd +$ cd .. +$ cd .. +$ cd rvvjbz +$ ls +23115 fsjwz.css +260656 jlwjsbw.bzf +113097 zdrtjvzj.rlt +$ cd .. +$ cd .. +$ cd pfwptjtl +$ ls +134817 jlwjsbw.bzf +80522 npclt +254529 nqrdmvjm.mbc +35322 ztdcrnl.hjj +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd hmw +$ ls +dir cfc +dir cmbtwjqm +dir dsm +81077 dzsj.bsl +dir gzgr +dir jrdhssrz +dir npclt +dir tsrqvpbq +dir vssgzdw +dir wngccwdr +5928 wrpd.zwq +113540 ztdcrnl.hjj +$ cd cfc +$ ls +159334 npclt +212665 ztdcrnl.hjj +$ cd .. +$ cd cmbtwjqm +$ ls +dir vzftvhhc +$ cd vzftvhhc +$ ls +86763 jlwjsbw.bzf +dir nbj +dir qzbf +$ cd nbj +$ ls +63776 jlwjsbw.bzf +$ cd .. +$ cd qzbf +$ ls +189850 rtszjp.zhq +$ cd .. +$ cd .. +$ cd .. +$ cd dsm +$ ls +dir bddwfjhv +258304 fltv +4285 jlwjsbw.bzf +dir nqrdmvjm +dir rvvjbz +258902 zdrtjvzj.rlt +$ cd bddwfjhv +$ ls +201408 zdrtjvzj.rlt +$ cd .. +$ cd nqrdmvjm +$ ls +250981 npclt.dnd +$ cd .. +$ cd rvvjbz +$ ls +181444 npclt.msj +146533 thzv.jbn +$ cd .. +$ cd .. +$ cd gzgr +$ ls +dir brmzzz +dir dsm +$ cd brmzzz +$ ls +40671 jlwjsbw.bzf +$ cd .. +$ cd dsm +$ ls +53299 bmdpw +dir npclt +223542 qdrlng +dir thjnrtq +$ cd npclt +$ ls +30938 bdldl +36847 gfwbhj.nvh +159051 qjpggrst.czp +233569 vwpr.drg +dir wwln +$ cd wwln +$ ls +153489 fsjwz.css +196950 lzcrjs +$ cd .. +$ cd .. +$ cd thjnrtq +$ ls +30861 fsjwz.css +$ cd .. +$ cd .. +$ cd .. +$ cd jrdhssrz +$ ls +194556 bqcn.ctq +dir gnhc +148157 gwwh.ttt +dir jcqcjbj +245407 jlwjsbw.bzf +248457 lmvh +$ cd gnhc +$ ls +183841 fsjwz.css +128648 hzcpmz +154895 mvznln +193794 ztdcrnl.hjj +$ cd .. +$ cd jcqcjbj +$ ls +266176 cbbfjsp +dir dsm +195555 sfq +$ cd dsm +$ ls +13098 bjhsqfpp.rvw +dir grpp +dir nqb +$ cd grpp +$ ls +259797 jvw.psl +32317 sfm.twr +$ cd .. +$ cd nqb +$ ls +82426 rvvjbz.fdm +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd npclt +$ ls +dir tqzmprzr +$ cd tqzmprzr +$ ls +278120 dsm.hqd +$ cd .. +$ cd .. +$ cd tsrqvpbq +$ ls +dir dqbnbl +dir dsm +dir lsglr +213028 rvvjbz.rvh +112991 tsrqvpbq.ptw +$ cd dqbnbl +$ ls +dir dhzs +281375 dsm +121452 gwwh.ttt +dir mbc +dir npclt +211213 tsrqvpbq.zsz +125518 zdrtjvzj.rlt +$ cd dhzs +$ ls +110840 gwwh.ttt +197645 tsrqvpbq +$ cd .. +$ cd mbc +$ ls +224503 drsrlls.ctp +dir dzm +65461 jlwjsbw.bzf +dir nqrdmvjm +137158 nqrdmvjm.vtq +dir rvvjbz +126868 rwrzljq +$ cd dzm +$ ls +279593 fsjwz.css +13111 gwwh.ttt +205453 hchlb.bdn +277556 jlwjsbw.bzf +dir jvd +dir nqrdmvjm +dir prqlqh +dir rhdhhfs +dir rvvjbz +$ cd jvd +$ ls +76776 fsjwz.css +85847 wqdzvs.vwf +$ cd .. +$ cd nqrdmvjm +$ ls +40200 npclt.fcq +$ cd .. +$ cd prqlqh +$ ls +267371 fsjwz.css +$ cd .. +$ cd rhdhhfs +$ ls +51224 dsm.qln +$ cd .. +$ cd rvvjbz +$ ls +dir npclt +dir wdhgmfb +60599 wjwgrq +$ cd npclt +$ ls +138588 bdqtq.slq +221322 rjmbd.pdj +279540 ztdcrnl.hjj +$ cd .. +$ cd wdhgmfb +$ ls +98271 jcg.pwz +$ cd .. +$ cd .. +$ cd .. +$ cd nqrdmvjm +$ ls +221950 swnsstls.zcl +7947 tqwhs +$ cd .. +$ cd rvvjbz +$ ls +272797 zdrtjvzj.rlt +$ cd .. +$ cd .. +$ cd npclt +$ ls +294537 bqlgnwwf.qqf +285887 flzmnmft +3041 fsjwz.css +dir npclt +dir rvvjbz +235966 zhwvl +$ cd npclt +$ ls +96669 sjcr.qmc +$ cd .. +$ cd rvvjbz +$ ls +240351 fsjwz.css +112539 rvvjbz.tlc +$ cd .. +$ cd .. +$ cd .. +$ cd dsm +$ ls +dir dpbsq +dir lmvjnd +dir vjnb +$ cd dpbsq +$ ls +dir vczm +$ cd vczm +$ ls +252709 jfzq.fvc +$ cd .. +$ cd .. +$ cd lmvjnd +$ ls +20118 rsp.njm +$ cd .. +$ cd vjnb +$ ls +192558 vvggw.ljj +$ cd .. +$ cd .. +$ cd lsglr +$ ls +222728 qvp +296718 ztdcrnl.hjj +$ cd .. +$ cd .. +$ cd vssgzdw +$ ls +dir smfhgcv +$ cd smfhgcv +$ ls +16174 dtpgsvfv.csm +43403 lhbqdpv +dir ndh +52985 pcj.csh +81157 vwsrt +278111 zdrtjvzj.rlt +$ cd ndh +$ ls +80287 jlwjsbw.bzf +$ cd .. +$ cd .. +$ cd .. +$ cd wngccwdr +$ ls +6088 ppjnslg +$ cd .. +$ cd .. +$ cd jhmrn +$ ls +dir qwqhhbth +$ cd qwqhhbth +$ ls +dir ggfmlp +dir qgflbldg +$ cd ggfmlp +$ ls +35739 dsm +38351 jlwjsbw.bzf +$ cd .. +$ cd qgflbldg +$ ls +dir pbw +dir rvvjbz +dir tqppnqmv +$ cd pbw +$ ls +dir nqrdmvjm +5912 nqrdmvjm.qvj +$ cd nqrdmvjm +$ ls +dir tnd +$ cd tnd +$ ls +dir lwsvwsl +$ cd lwsvwsl +$ ls +150503 jlwjsbw.bzf +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd rvvjbz +$ ls +dir dmrff +dir ssnbl +dir zgrgt +$ cd dmrff +$ ls +dir vmmzmf +$ cd vmmzmf +$ ls +211105 tsrqvpbq +$ cd .. +$ cd .. +$ cd ssnbl +$ ls +246210 mlj.qbv +$ cd .. +$ cd zgrgt +$ ls +207409 lnvqlhsj +$ cd .. +$ cd .. +$ cd tqppnqmv +$ ls +59007 gwwh.ttt +123705 jlwjsbw.bzf +277423 rvvjbz.hbn +170157 tbs +dir ztg +$ cd ztg +$ ls +8432 fsjwz.css +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd ncb +$ ls +30859 dsm +74337 jvp.jwl +dir lgvwz +150310 lhl.rtq +$ cd lgvwz +$ ls +105307 fftbgl.tnh +69432 npclt.sdq +49765 zdrtjvzj.rlt +214149 ztdcrnl.hjj +$ cd .. +$ cd .. +$ cd npclt +$ ls +dir dsm +dir rvvjbz +dir trr +$ cd dsm +$ ls +dir bcccgpl +dir cvddqch +210401 fsjwz.css +96482 nqrdmvjm.tgr +dir nwctzch +29453 zdrtjvzj.rlt +$ cd bcccgpl +$ ls +237918 dshtjdcs +dir mtrcfbf +dir tgt +dir tsrqvpbq +99779 wpfsbnh.nbh +257112 ztdcrnl.hjj +$ cd mtrcfbf +$ ls +dir hms +49756 tsrqvpbq +$ cd hms +$ ls +185755 zdrtjvzj.rlt +$ cd .. +$ cd .. +$ cd tgt +$ ls +dir dsm +dir jmfdpdf +256858 zdrtjvzj.rlt +$ cd dsm +$ ls +71528 dsm.rvc +$ cd .. +$ cd jmfdpdf +$ ls +231263 hgsvvrqt.vbp +$ cd .. +$ cd .. +$ cd tsrqvpbq +$ ls +218774 clhqvp +$ cd .. +$ cd .. +$ cd cvddqch +$ ls +144164 fsjwz.css +dir gfszp +60880 nqrdmvjm +222198 vhhtgj +$ cd gfszp +$ ls +127091 fsjwz.css +$ cd .. +$ cd .. +$ cd nwctzch +$ ls +258292 rfvvc +$ cd .. +$ cd .. +$ cd rvvjbz +$ ls +dir cnv +dir dtpswgq +dir ggdhw +97538 jsjlq +218535 nqrdmvjm.fhj +134022 tsrqvpbq.mbs +51273 zdrtjvzj.rlt +$ cd cnv +$ ls +208016 gzvmv.dfg +$ cd .. +$ cd dtpswgq +$ ls +dir jfbgfts +$ cd jfbgfts +$ ls +273657 bbtbqv +77349 dsm.rnc +dir nqrdmvjm +208448 zdrtjvzj.rlt +$ cd nqrdmvjm +$ ls +dir bjdrqnt +dir msqc +dir npclt +dir rsms +dir vzhdtv +$ cd bjdrqnt +$ ls +103077 tph.bpz +264222 wmvzc +$ cd .. +$ cd msqc +$ ls +72288 ztdcrnl.hjj +$ cd .. +$ cd npclt +$ ls +dir tfbzdm +$ cd tfbzdm +$ ls +dir nqrdmvjm +35970 nqrdmvjm.gwj +54275 rvvjbz.pvs +dir wwrsrmn +179618 ztdcrnl.hjj +$ cd nqrdmvjm +$ ls +dir gljgj +$ cd gljgj +$ ls +135000 gwwh.ttt +$ cd .. +$ cd .. +$ cd wwrsrmn +$ ls +17120 npclt.vhz +$ cd .. +$ cd .. +$ cd .. +$ cd rsms +$ ls +198169 fsjwz.css +$ cd .. +$ cd vzhdtv +$ ls +234619 gwwh.ttt +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd ggdhw +$ ls +dir dsm +dir fmljfpfb +dir nqrdmvjm +dir qrhnjrn +dir vpsqmmp +$ cd dsm +$ ls +185390 rvvjbz.ljl +70843 scrzhct.shj +dir zqd +$ cd zqd +$ ls +197478 lrpnc.pqp +dir nljssvvw +228126 rfsnv +dir wzvvggdp +$ cd nljssvvw +$ ls +248489 dwdcnzb.ztq +$ cd .. +$ cd wzvvggdp +$ ls +40266 jlwjsbw.bzf +$ cd .. +$ cd .. +$ cd .. +$ cd fmljfpfb +$ ls +dir chc +232964 gwwh.ttt +283351 jlwjsbw.bzf +$ cd chc +$ ls +273399 cjtznvrq.jcd +250531 dsm.djs +dir lgqz +173885 pmlw.hcb +273356 swwzbpdm +7329 wtvs.qrr +$ cd lgqz +$ ls +9432 fst.nlb +$ cd .. +$ cd .. +$ cd .. +$ cd nqrdmvjm +$ ls +129926 zdrtjvzj.rlt +$ cd .. +$ cd qrhnjrn +$ ls +dir vnvchpr +dir zchcq +271220 ztdcrnl.hjj +$ cd vnvchpr +$ ls +257931 rvvjbz +132252 wtgs.btb +$ cd .. +$ cd zchcq +$ ls +dir hmf +215104 sshml +$ cd hmf +$ ls +253334 gbvbmwbf.lhs +$ cd .. +$ cd .. +$ cd .. +$ cd vpsqmmp +$ ls +32455 gwwh.ttt +170338 rfsvs.dfq +$ cd .. +$ cd .. +$ cd .. +$ cd trr +$ ls +dir bfjwfd +dir bhrvh +dir ggfc +187910 gwwh.ttt +dir mtqftj +$ cd bfjwfd +$ ls +dir npclt +dir wqqfszn +$ cd npclt +$ ls +269520 trrcw.jmq +$ cd .. +$ cd wqqfszn +$ ls +151594 rvvjbz.gvt +$ cd .. +$ cd .. +$ cd bhrvh +$ ls +251782 cpbvqrjj +$ cd .. +$ cd ggfc +$ ls +65357 gwwh.ttt +dir jqjtwf +$ cd jqjtwf +$ ls +65025 wzrp.pbp +$ cd .. +$ cd .. +$ cd mtqftj +$ ls +294942 vtjhwjr.qgc +88168 wvbnjp.blf +$ cd .. +$ cd .. +$ cd .. +$ cd rvvjbz +$ ls +dir csfp +141875 dsm +294580 jlwjsbw.bzf +dir jqlm +25928 lqhpn.jrh +224295 zdrtjvzj.rlt +113314 zww.ftt +$ cd csfp +$ ls +153717 ztdcrnl.hjj +$ cd .. +$ cd jqlm +$ ls +163455 jlwjsbw.bzf \ No newline at end of file diff --git a/aoc8.ipynb b/aoc8.ipynb new file mode 100644 index 0000000..1fda9b1 --- /dev/null +++ b/aoc8.ipynb @@ -0,0 +1,176 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "44a4d803-d75a-4954-9395-f496f05cfa3c", + "metadata": {}, + "source": [ + "#### Part 1" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "472462b7-896e-4993-80c4-996f318c0c44", + "metadata": {}, + "outputs": [], + "source": [ + "with open(\"aoc8_input.txt\", \"r\") as f:\n", + " forest = []\n", + " for line in f:\n", + " forest.append([*map(int, line.strip())])\n", + "\n", + "W, H = len(forest[0]), len(forest)" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "id": "828ee197-c184-4826-afc4-3700b0e97762", + "metadata": {}, + "outputs": [], + "source": [ + "def get_row(row):\n", + " return forest[row]\n", + "\n", + "def get_col(col):\n", + " return list(map(lambda row: row[col], forest))\n", + "\n", + "def is_visible(x: int, y:int) -> bool:\n", + " v = forest[x][y]\n", + " r, c = get_row(x), get_col(y)\n", + " \n", + " rlp = r[:y] + [0]\n", + " rrp = r[y+1:] + [0]\n", + " cup = c[:x] + [0]\n", + " cdp = c[x+1:] + [0]\n", + " \n", + " return max(rlp) >= v and max(rrp) >= v and max(cup) >= v and max(cdp) >= v" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "92c923a5-b93f-4492-8ac0-afc98ebd0205", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1818" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "c = 0\n", + "total = W * H\n", + "\n", + "for x in range(1, len(forest)-1):\n", + " for y in range(1, len(forest[x])-1):\n", + " c += int(is_visible(x, y))\n", + "\n", + "total - c" + ] + }, + { + "cell_type": "markdown", + "id": "34161fd4-966e-4536-a338-17835748f372", + "metadata": {}, + "source": [ + "#### Part 2" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "25132b83-3c45-46e0-80df-89ebb8a431a8", + "metadata": {}, + "outputs": [], + "source": [ + "def calculate_scenic_score(x: int, y: int) -> int:\n", + " v = forest[x][y]\n", + " r, c = get_row(x), get_col(y)\n", + " \n", + " \n", + " rlp = r[:y][::-1]\n", + " rrp = r[y+1:]\n", + " cup = c[:x][::-1]\n", + " cdp = c[x+1:]\n", + " \n", + " ssl, ssr, ssu, ssd = 0, 0, 0, 0\n", + " for t in rlp:\n", + " ssl += 1\n", + " if t >= v:\n", + " break\n", + " for t in rrp:\n", + " ssr += 1\n", + " if t >= v:\n", + " break\n", + " for t in cup:\n", + " ssu += 1\n", + " if t >= v:\n", + " break\n", + " for t in cdp:\n", + " ssd += 1\n", + " if t >= v:\n", + " break\n", + " \n", + " return ssl * ssr * ssu * ssd" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "54b7e07c-4e3c-4f3b-bab8-588d11117639", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "368368" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "highest_scenic_score = 0\n", + "\n", + "for x in range(1, len(forest)-1):\n", + " for y in range(1, len(forest[x])-1):\n", + " sscore = calculate_scenic_score(x, y)\n", + " if sscore > highest_scenic_score:\n", + " highest_scenic_score = sscore\n", + "\n", + "highest_scenic_score" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/aoc8_input.txt b/aoc8_input.txt new file mode 100644 index 0000000..3d9ce68 --- /dev/null +++ b/aoc8_input.txt @@ -0,0 +1,99 @@ +200200221023111313131033314121142013103432145142351212334232423210101340410243413011333312111010010 +021002023301222221234134021422342024344555521535143232341414552024224120114233210330203002020100112 +120000123021210023111321143114331115334535223455511513445233523154411102203411040133312002213001021 +110211312303200204232110124204135453554533435152342542252215415141133330323032234114310011301232202 +112002122201001100330432244432552555524445123151222142521452233321152332132412434434431321322021220 +000131233030332102140440124221314455255431113413445553414144524134315351524134030112312012102102122 +011002120310213142402320144522121125454423123245535451115134412543215113433312403430132101003202030 +001221312201314442411333454131552331253553254425236334643151355314514413411344034432330410221101023 +133033302114012204213054544541124453214232545523665466356466451514332142121512400041213432211332332 +122103100320433433403313515121232352332442555253656542336644235234542522322522414400320014312110331 +220032121143103434234531224315451255225362634256634623342624242245654341134514413144333113211200033 +320112113344013332224131114231235263526556625325625352254643224563365551253353323542200003301120011 +130332114433413215333445212514445445656665256554333534422554442522234433415533124353022320300112030 +122220320003402342433443415465352622564252264442264334335624365224645544545412124352220434440211220 +012123032311134245212342233263346563632453535355553473445564362634252543555515242444423232000444220 +210332422344222154315435122245243633424643346345734336333746422324336263624544151122442021330341202 +122113144440445232235222443563362625543565533465377647363543377645634552632254214531354231413432430 +312340402310532324322313244522226622547366756445444754767335355365264622465662241215332253310001232 +203342203201331433144542522354633356376457563745333765735577477354743263423666625212251354244021004 +023132211325442531332565334564256663665357767653737436565453774766335532544656254552332354313323032 +104344140125552254523443534436547653753334746356364664565677777637444474643245425325454224440231203 +030303323422144551254256535247737377634445575474654433333453643564664344462332353234553115322142242 +043342223454513255464263333566337576377476354884845654658465735544446646436232534263314313142020101 +340311214411551345423466343646644336367654787858788857666654635337366537645634644263323112331404131 +040141315333331565455545334767475747755574585547567756844746644445646736447635456236413253453410130 +211021153443415666656253646443465373878486485664464485545486846643475567536535465634262415153200040 +434443334231526223353563373464374574547886487867474546748668788886554566336675234542522151345414431 +342100553111533623655466757467553555676668887764575574556755884875687334634675256256443425223423211 +421145141552463255552236436455476686566587654558577848647854485587448337355756554555544211113112433 +401034232152434624233754647737667758845867866675595798957488447876578774367337742646625521543244120 +201414142512656264345465456536564477766677986565767776589758477664747866666435364642236343442335143 +422042442525465325256445643735574646548578959977866889666586787677748745536646677524242544332243420 +101531424154626224664754337344565457557999965875599965977796778866568855445766577565632633451545144 +111515354125252635577747557658555488765757696767797558565755699985844788764347763523465333315513212 +222334234142233522754645544788567846579566995878775676667979868685866578655574543564453254615121150 +121552233464445256557546467767485865866888757989977669966767877786686475874646454752632664243132511 +412242332564644335747746348878865677677797755798669796798699855757865564547645373677564252625352445 +104135225262634344357677645645458796767865979969889676688676788669777674757634454746666526341145313 +021542323626266573437334685574765967759968767697666876767887775889896866845887736736426556541522241 +321245255565266675757675486554868969567677786789686889669988776968557656488476534636744443443445532 +424153123565322534465577464547665888797687899787966868666667897595997786576655333657432563645515114 +151513345354454444763668544475487669995769769878776696968966788666679588686556634737544644543232332 +315411214333624753546345646876778875556666766899787967667988799866697798768788653774352466325322155 +411515135354235576553778556478657685968679689776697889878966888788686556488744645555636235464132151 +521535123365535747465567756884789758877668899777979788877786896957896655744848765333672323354342345 +511122245466262643344764588545559786677866787999989789989769786875585659588677463454335226643415231 +234355522634365636744684556586586576767676868898988888987788888877768767654646777776645642226512141 +113123464223654555566666486667798785887896678897787899778677766996769787745467865757755656543512345 +513251343243554753654655574645569758987667887877878998789898989677659987488676836733553556554225344 +514313564242345475335768454478576556889868687997999987778988866675979779845785867656464634654245123 +114315542426623675675378664848688856798777688977789877988898769769667968885864643357435456442515251 +342223563236537773664686558445968779787887987788777777899877867865678669767686535536743642245412355 +125543254543547353647388564555887588899766978788778797797796898997787999888766547554567344424443422 +235522554554262346774664445787579599869688998989778778978989968998575857577865454747575353226552114 +222421136654623646474466478475666768686777899887878779887688896658596779765485853765563356364225314 +521231534444644737467764858748655998796879877877788879799986898965697856444748453437553352232525543 +451421316463534654736364878868555996777987969978898798976796968858967778666788533743354325346223354 +353521254635223475773456867765596786879787787769889887896999898885688596454456655466765442452131244 +112452332645434776643548885574558878789797669769989989886877966757566586444578445673434665652431423 +125112515242255354574555588568695879785886989867778677698879979576678878668587547744623644323213555 +222335123454333544773645644774469985799577787667779799699876685666756857858446357667422332624342332 +342124352633564466565447655564575889567797869876686996679999868665879886844677564455723264641334552 +211531121363532576364535865484865759689798698998996686966767965765789787447464533667726322444223531 +003112555432534436636776465475555776887557956877687879969697585659596546865447775565562326263355343 +433244413454525566563634447454784577659787856568996976596789778896764874668454673456462646455545115 +315114535444536635475346535567864558579958679557799758766667597987857466754537555645552424625323424 +041544243435426366744535764674465545875655656695956899997569789788477547755346553676234364525135211 +110125213453624243247556736654454474595787967599557857997699578855767558775435554762633446551353134 +230513132216566245267463366654684755868756978975659588575959655686655788733345435522656542222543322 +042134352115436525535436657767864645756586865777685969969787676584458468744346376522324323225232212 +113011555414226244554676353335845564485568555689599656977797776777868787473376444245355443123441231 +141222553351554636564756467565656675455484874698998587887767666457458846465776554544333612224555323 +410201213345143434422573347343756574748746464486554485756685477655667634334766422236535313341542224 +400013155121116452255553534765374544884448574876457458645878446585657476536357256436654223345343132 +142320132432156443246333547553474375466866456765867768748787675644755677446563663223424341524352200 +130310433221343524424456477364543647448885475465487864674454548867635637545422424333245424354220221 +104443025533452125362252625375463664447488646447874885476567646456653665465543643663511122334514003 +302020415314212533664642446555554345445458887778858887685645576353536647674424342553325334543032421 +241431045353353251642363462546445336355737566757557674865573447644353353564422462552323432524142311 +123213233322144323666345645436644754537635574357377674465747755476333656624223243445125521412332331 +012331042212144212425325652566536457633744775665435737646677453634637335562564643341411132411032042 +312330023343231454516256365325363757435647543374644573757667446466553456424326532235455225410011222 +330440423204155515131264636336326536353437335474474464535536754457526344465446535213522513202431334 +111010303340451214252454445262262654354536464545434674354557674362552463364322545323344220103312142 +011012340310414525221212256242445654336566374374366636534765356655652454533664444453134140113204011 +230024312112245355233251252646423364546365646735756334573543653656365434363633141223321213032042131 +031001023032240425233144214253446244556226622634747362226456645266342264223215113131540112130410110 +322123043034044225552242443355356433432465646225242242422346453346634325254325435535313321413201023 +022331002231110112224233354325624225342363424426633436565344545533465463152555421312331102120410200 +013020314334233240543141441351342432435423252532545655664253435662546145412112135314414140233322202 +023101011114024240134343343214355543453244325544366633232356362353335431215322232434231302030012200 +121203223241323132430512521115213312263253263242264335335446352453314333354413113210133333212120303 +102030123234100043232214342352345452215246465634534464364425653323345231332311444434220444330131120 +000331303323044244144032522114521112125142214553424464423124453113211413324230342333130021200000221 +121203123313224230334312325441234431451535345453515132125413445443323514321330302200100022013232311 +000221331111234212331404233225332533323225131525322111443344452254442544201223424140243032213101301 +010202021330012103042021024434411545123253214353525251521434235541535344240243403200122322133122101 +121102231211003113342040440404003344542241345133131133414435235243325441120032344431223311313111221 +011210032333020312123124101444102341443212553521355222414135533333310320012002223342012031112321112 \ No newline at end of file