diff --git a/2022/inputs/19.txt b/2022/inputs/19.txt new file mode 100644 index 0000000..9b8fbad --- /dev/null +++ b/2022/inputs/19.txt @@ -0,0 +1,30 @@ +Blueprint 1: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 16 clay. Each geode robot costs 3 ore and 20 obsidian. +Blueprint 2: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 4 ore and 20 clay. Each geode robot costs 2 ore and 15 obsidian. +Blueprint 3: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 15 clay. Each geode robot costs 3 ore and 8 obsidian. +Blueprint 4: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 15 clay. Each geode robot costs 2 ore and 13 obsidian. +Blueprint 5: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 12 clay. Each geode robot costs 3 ore and 15 obsidian. +Blueprint 6: Each ore robot costs 2 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 11 clay. Each geode robot costs 2 ore and 16 obsidian. +Blueprint 7: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 8 clay. Each geode robot costs 2 ore and 15 obsidian. +Blueprint 8: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 11 clay. Each geode robot costs 2 ore and 10 obsidian. +Blueprint 9: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 16 clay. Each geode robot costs 3 ore and 9 obsidian. +Blueprint 10: Each ore robot costs 4 ore. Each clay robot costs 2 ore. Each obsidian robot costs 2 ore and 16 clay. Each geode robot costs 2 ore and 8 obsidian. +Blueprint 11: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 5 clay. Each geode robot costs 3 ore and 12 obsidian. +Blueprint 12: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 3 ore and 7 clay. Each geode robot costs 4 ore and 20 obsidian. +Blueprint 13: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 18 clay. Each geode robot costs 2 ore and 11 obsidian. +Blueprint 14: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 20 clay. Each geode robot costs 2 ore and 8 obsidian. +Blueprint 15: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 10 clay. Each geode robot costs 2 ore and 7 obsidian. +Blueprint 16: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 9 clay. Each geode robot costs 2 ore and 20 obsidian. +Blueprint 17: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 17 clay. Each geode robot costs 2 ore and 13 obsidian. +Blueprint 18: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 16 clay. Each geode robot costs 4 ore and 16 obsidian. +Blueprint 19: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 7 clay. Each geode robot costs 4 ore and 13 obsidian. +Blueprint 20: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 14 clay. Each geode robot costs 3 ore and 17 obsidian. +Blueprint 21: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 19 clay. Each geode robot costs 3 ore and 19 obsidian. +Blueprint 22: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 7 clay. Each geode robot costs 2 ore and 16 obsidian. +Blueprint 23: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 19 clay. Each geode robot costs 3 ore and 17 obsidian. +Blueprint 24: Each ore robot costs 3 ore. Each clay robot costs 3 ore. Each obsidian robot costs 2 ore and 20 clay. Each geode robot costs 2 ore and 20 obsidian. +Blueprint 25: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 14 clay. Each geode robot costs 3 ore and 16 obsidian. +Blueprint 26: Each ore robot costs 4 ore. Each clay robot costs 4 ore. Each obsidian robot costs 3 ore and 5 clay. Each geode robot costs 3 ore and 18 obsidian. +Blueprint 27: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 2 ore and 19 clay. Each geode robot costs 2 ore and 12 obsidian. +Blueprint 28: Each ore robot costs 2 ore. Each clay robot costs 4 ore. Each obsidian robot costs 4 ore and 15 clay. Each geode robot costs 2 ore and 20 obsidian. +Blueprint 29: Each ore robot costs 3 ore. Each clay robot costs 4 ore. Each obsidian robot costs 3 ore and 6 clay. Each geode robot costs 2 ore and 10 obsidian. +Blueprint 30: Each ore robot costs 4 ore. Each clay robot costs 3 ore. Each obsidian robot costs 3 ore and 7 clay. Each geode robot costs 3 ore and 9 obsidian. diff --git a/2022/inputs/20.txt b/2022/inputs/20.txt new file mode 100644 index 0000000..feb1745 --- /dev/null +++ b/2022/inputs/20.txt @@ -0,0 +1,5000 @@ +7661 +-1178 +-2499 +1023 +-3113 +3609 +4927 +-8996 +-3461 +150 +5160 +6991 +-3710 +3926 +-2560 +2899 +-9634 +-3580 +-298 +8325 +4671 +1507 +-3580 +5122 +2600 +-8312 +6390 +2656 +2417 +8329 +3807 +2271 +9153 +-437 +-3964 +-2145 +-7122 +3914 +2871 +2689 +-4363 +-3341 +-3187 +-4038 +-3843 +8723 +1581 +-6825 +8158 +-1972 +-9348 +3720 +-5498 +8723 +3480 +6522 +-3219 +-8068 +1993 +5678 +133 +-9289 +-2220 +-1675 +-6713 +-3283 +6257 +212 +7912 +4371 +7211 +-6312 +-8917 +-9289 +7101 +1130 +8927 +4053 +-7968 +4956 +1733 +8216 +-2579 +-4831 +8273 +-8737 +3850 +778 +-8362 +9343 +-1661 +-4168 +-2268 +-8415 +-6940 +-695 +-7540 +-8681 +4106 +8396 +-3964 +8060 +5537 +-1705 +-2573 +1001 +-3184 +1706 +-4973 +4369 +-2479 +-8730 +-9879 +777 +-1099 +4616 +-3815 +-5595 +8337 +3904 +-8454 +8744 +2921 +-672 +0 +-315 +-2053 +-5219 +9064 +-211 +1442 +-7063 +-2059 +-2656 +5606 +7412 +-6409 +-5818 +-2370 +8654 +9502 +7018 +997 +-5884 +-1146 +-1948 +-7447 +8151 +9804 +-3132 +3659 +-390 +-8704 +9984 +6832 +-9357 +415 +8740 +1861 +9000 +7981 +-6692 +-8111 +-8134 +-9944 +-1537 +6709 +-2596 +9202 +9742 +-4073 +-3056 +-3606 +7015 +-8075 +3916 +6536 +-4426 +-274 +6169 +-4084 +7291 +8674 +-6108 +5426 +-7001 +4887 +7379 +-1452 +7890 +7860 +2910 +-7077 +4104 +475 +-4237 +-7396 +835 +-4504 +-4148 +3006 +8782 +7145 +3478 +-9867 +-5333 +6232 +3989 +4060 +2896 +-1339 +6019 +1121 +-956 +-8971 +-3321 +1453 +9066 +-7855 +-7847 +352 +1566 +-9830 +-5869 +-4121 +4467 +6161 +6771 +1009 +-3992 +-1236 +6579 +2194 +8954 +-5989 +5553 +3285 +-3353 +2073 +-4650 +8131 +8492 +5087 +-5011 +-6975 +-6605 +2165 +6002 +3748 +9587 +1544 +4905 +1490 +1788 +5416 +5359 +4413 +-8254 +7635 +835 +5349 +3426 +-6275 +-7103 +-4821 +2744 +-7837 +-8039 +8049 +1857 +7329 +9234 +9346 +809 +469 +7109 +3177 +-5359 +3212 +-6325 +1500 +3764 +-9577 +7049 +-7509 +-7576 +-78 +1502 +-4549 +-5980 +-1194 +4585 +8984 +-8370 +-3063 +-285 +-701 +7530 +-2560 +5606 +-9287 +-2942 +-1229 +6656 +-1824 +-6167 +8357 +8802 +-8617 +-7988 +-5983 +-7965 +6083 +6053 +3451 +3287 +944 +8009 +-8703 +-1588 +-8433 +-2233 +-5983 +-920 +3486 +-7710 +3931 +8104 +7272 +-3421 +-7016 +6816 +7536 +-9866 +8380 +-6312 +9472 +672 +9239 +2233 +-2139 +5789 +3896 +8645 +-6557 +9440 +5066 +4376 +2392 +-3123 +5742 +440 +-7644 +4084 +3380 +5095 +-8197 +4188 +4907 +-7103 +-6010 +6344 +-8889 +-4674 +7676 +-3007 +2743 +-4674 +2127 +8032 +-7530 +-2613 +4952 +-3574 +8304 +4682 +5963 +-1698 +8256 +-9646 +5002 +-8512 +-8689 +7826 +-572 +-3793 +-6482 +-547 +8039 +858 +-6214 +7144 +-7567 +3992 +6579 +-9249 +9531 +808 +-3455 +3876 +-1839 +2549 +-9206 +465 +728 +1680 +8326 +2372 +-1537 +-3340 +5198 +-3598 +-7259 +1180 +-7710 +-1846 +2424 +-5926 +9676 +4571 +-7684 +-2047 +8438 +-7207 +-453 +3657 +-1456 +7594 +8798 +2138 +238 +2624 +-9464 +8801 +6700 +-2627 +-298 +-6808 +-8090 +-8444 +1372 +-877 +-4013 +9278 +4921 +-1755 +8144 +-3853 +6573 +7856 +5848 +4725 +1286 +-1100 +-3537 +-6317 +7125 +-166 +-6713 +8973 +-7569 +8094 +-3176 +-4665 +1182 +-8527 +-9752 +8395 +987 +-1817 +9068 +3964 +-3998 +8043 +-1200 +-3360 +5016 +-927 +-4694 +3990 +-3051 +61 +9579 +-1392 +8933 +-6052 +-3419 +1566 +7344 +-588 +5704 +-4498 +-764 +-6736 +3570 +-4351 +-2671 +2868 +-8717 +-9583 +3096 +-4327 +-6975 +-6217 +7437 +2269 +9502 +1585 +3590 +-9769 +9441 +7976 +705 +9901 +6140 +2276 +6761 +9419 +2025 +-8527 +-7644 +-3033 +7173 +-5232 +-9041 +4997 +-5891 +-5442 +8694 +-813 +3527 +4460 +-9389 +7366 +8583 +-621 +-9010 +-3956 +6692 +5070 +-5469 +-2271 +6173 +2931 +2451 +4813 +4726 +-9946 +-523 +9579 +2545 +2700 +7030 +9917 +-298 +-2010 +-8543 +-5815 +4112 +2769 +1496 +8524 +-4405 +-8996 +6742 +3688 +-8705 +-9714 +5200 +6042 +6700 +-311 +2676 +-3091 +-1225 +-2900 +-8868 +-8898 +8499 +5426 +8939 +9813 +6257 +-7157 +6851 +-8667 +-6406 +-7092 +912 +-2186 +1204 +-4635 +1587 +5159 +-2568 +-7422 +3807 +-3819 +-8938 +4572 +-3918 +-640 +-6024 +-5343 +3664 +-9008 +-9843 +3570 +-204 +4887 +6864 +-3097 +-8245 +-3964 +6483 +5771 +2323 +8474 +-7270 +9444 +-2356 +-5663 +8534 +-2047 +-7484 +7976 +-5340 +-918 +7555 +5507 +-4413 +-4749 +8851 +-2457 +6207 +-7545 +8635 +-9451 +3378 +8091 +-386 +3451 +-278 +9965 +-687 +8241 +-4662 +-7336 +-1547 +1258 +-4206 +-8370 +7329 +4029 +5905 +2505 +-2710 +-6507 +1706 +-8006 +5023 +-7398 +-8567 +6664 +7906 +3765 +1061 +-7316 +7998 +1684 +9326 +-5632 +2563 +4975 +197 +4603 +1447 +6075 +9866 +9949 +3344 +-4902 +288 +8583 +5713 +6622 +-7527 +-9323 +-8144 +3793 +-6081 +206 +-1531 +7317 +6037 +-9528 +560 +9679 +-8394 +6588 +-1571 +-3552 +3074 +641 +-6024 +-6631 +-6473 +-5221 +-7747 +5134 +-2117 +400 +1844 +-9377 +-653 +-6945 +-5869 +-9394 +1035 +3592 +8408 +-393 +2089 +-7851 +9310 +4446 +2940 +9757 +9366 +7995 +-2539 +4993 +-5260 +-1853 +-7207 +-2996 +5920 +8474 +1627 +-1263 +2735 +-4097 +6973 +5422 +-4241 +-5034 +-7423 +1484 +-1639 +-3652 +-329 +-8666 +6196 +9657 +-8295 +-4817 +4388 +6274 +5677 +6472 +-6975 +9755 +-3397 +6690 +3063 +-7709 +-1805 +458 +-2857 +-4105 +-3873 +8230 +-4736 +-2979 +-3510 +-3320 +-6108 +1861 +1200 +5606 +1447 +4473 +1861 +-2717 +8032 +-8443 +-7115 +-1330 +-2908 +496 +-1718 +100 +-6420 +-6667 +-2269 +-6196 +2745 +-5615 +4970 +-5756 +7100 +-5967 +-8268 +7671 +-2640 +-4116 +5703 +4329 +8268 +5926 +179 +7956 +-9057 +7678 +-2120 +-4462 +-6853 +3090 +-7236 +-3469 +-6482 +-7260 +-4470 +-9350 +1747 +-457 +-2888 +6185 +-3951 +-2048 +4956 +3130 +4821 +-8206 +-7554 +-3548 +-7724 +5647 +-9482 +5006 +-1383 +-3190 +1975 +-3864 +-5574 +-6208 +-8820 +-1009 +7825 +8910 +-3566 +-7559 +7548 +-3755 +2193 +-8308 +1690 +2334 +9115 +-135 +7814 +5384 +3016 +-7968 +-9073 +-3994 +642 +-5940 +6045 +7589 +2125 +4053 +9758 +4292 +4482 +4693 +7158 +-1825 +-9277 +-3090 +9231 +4113 +-4540 +-5481 +-2449 +-5445 +7040 +7919 +-9142 +-5643 +5949 +-1695 +915 +-9813 +489 +-8480 +-3281 +3399 +-1300 +9499 +-3537 +3462 +-3524 +-398 +-457 +4064 +-9274 +4082 +6099 +-1718 +-2671 +6209 +5803 +697 +-3247 +-7942 +-5659 +2017 +2193 +512 +-9295 +-7217 +1730 +-8737 +-6009 +-2728 +-7545 +4088 +-5057 +332 +-7796 +-3112 +1248 +8236 +-4176 +8604 +-9274 +-6087 +-5038 +1586 +-5383 +-2479 +-5199 +-8111 +1012 +-6510 +-2558 +2545 +-103 +512 +-2365 +-6010 +5206 +-162 +-7631 +-9914 +7543 +1855 +5454 +-4 +9091 +1287 +2324 +9861 +6447 +4383 +1015 +3530 +-7864 +3396 +6988 +-3427 +7000 +9176 +4321 +772 +-1387 +1423 +809 +-1694 +-4924 +1928 +-3994 +9542 +7748 +8909 +-1675 +-2556 +6030 +7789 +9456 +9730 +818 +-2010 +-6244 +4921 +-1357 +-3162 +-2434 +760 +4556 +-6319 +6648 +-5029 +8446 +3674 +8064 +1694 +-2591 +-3806 +1490 +-6487 +-4454 +8214 +-6010 +382 +4388 +4599 +8954 +7215 +7230 +5868 +-8359 +6389 +5535 +8406 +5577 +2016 +-1935 +199 +4371 +2842 +-6562 +2827 +9637 +1633 +4027 +3599 +9100 +-2434 +816 +-4540 +-3173 +3728 +-7944 +144 +-8133 +-6645 +8694 +-1569 +217 +4547 +8474 +-874 +-5954 +-5359 +8524 +-7065 +-365 +37 +697 +4760 +566 +8775 +817 +2600 +3992 +-9065 +7589 +3530 +-7260 +-3658 +-3259 +7728 +7237 +-5031 +-8176 +6383 +-929 +-5193 +-8295 +4084 +4500 +9266 +4009 +2993 +-3956 +-578 +9440 +2956 +997 +9025 +4194 +-5203 +-9771 +5606 +-6244 +8709 +4161 +4679 +-2879 +3635 +-8439 +-9433 +7799 +3703 +2636 +-6290 +-7342 +928 +3643 +5501 +-8200 +-8694 +-4901 +9776 +-3051 +8011 +-2254 +4399 +-6116 +-1374 +-7060 +9255 +7492 +-3247 +7457 +-3506 +3586 +6606 +-5965 +-4649 +-2813 +-5151 +2086 +9890 +-2801 +3958 +-2625 +4840 +3535 +7965 +109 +-6357 +-5663 +-3337 +-4934 +2700 +4980 +-2925 +734 +9890 +4367 +-2533 +3546 +630 +-2079 +3802 +3213 +4980 +112 +7635 +7950 +927 +232 +1792 +-1274 +-8021 +2237 +-5807 +-4669 +1301 +-4649 +-7578 +460 +-4454 +-5807 +8984 +8631 +2444 +7725 +36 +-1001 +8277 +-8906 +504 +-1598 +-6229 +3561 +-9985 +9336 +3798 +1494 +-7809 +9949 +-7633 +-4674 +-9585 +6060 +-548 +5278 +-6138 +7932 +7019 +6922 +-4224 +8021 +2665 +782 +-3903 +6824 +5562 +4934 +-2312 +-1879 +-1899 +-7708 +-9638 +5441 +-3080 +4758 +8929 +-640 +-2053 +-3792 +9404 +8819 +8448 +-5737 +1082 +-4105 +-5343 +4036 +-8972 +-6940 +-3728 +-8307 +6083 +-4320 +-7769 +5273 +-8871 +-6638 +-6040 +-8722 +-1050 +3592 +-7004 +9098 +3315 +-8645 +4362 +8474 +6400 +4732 +-9873 +-7920 +-1449 +5307 +657 +-8850 +3462 +4961 +-2916 +4253 +-4877 +-6522 +7856 +2846 +1967 +-7975 +7633 +5649 +-9825 +-2512 +-8055 +6297 +123 +-8176 +7799 +4500 +-7041 +-9365 +-3950 +-5553 +6140 +9791 +-8378 +-8620 +6884 +4644 +-2010 +3157 +8995 +4573 +2851 +-4606 +-2649 +8928 +5753 +-8551 +512 +-2345 +-9112 +3507 +2997 +-2711 +-8752 +-6521 +-6016 +4098 +-8627 +-6607 +9499 +-3356 +9026 +5823 +-6996 +7000 +7479 +-113 +-4015 +-6024 +-5594 +-320 +3350 +6997 +-1300 +-3302 +-87 +-2632 +-4339 +-6912 +-7602 +-1888 +1871 +-9864 +8935 +3092 +-686 +-4710 +-982 +-8910 +-5238 +-4138 +-3304 +9741 +3775 +8863 +-6476 +4517 +-7935 +-4522 +-6825 +-5027 +-4344 +-9956 +-5468 +9153 +6023 +-7258 +6739 +1422 +-3557 +-3593 +-5467 +5345 +-3459 +-639 +3561 +2556 +5006 +9757 +-1478 +-2145 +1194 +1361 +7897 +-8275 +-2233 +-6688 +-6871 +4789 +6474 +9299 +-9082 +-9720 +7845 +6722 +5431 +3938 +-3090 +6408 +-6631 +5601 +-4435 +7491 +4509 +-583 +8196 +2851 +4318 +7691 +-9790 +-1891 +682 +-3348 +-7399 +2729 +-2810 +9730 +-3638 +-6919 +-5092 +8981 +-4971 +4312 +-3910 +-185 +1429 +2237 +-7868 +3674 +1584 +-6032 +-1761 +6986 +-8422 +7661 +-2724 +-4176 +-3726 +6806 +9809 +-9884 +7976 +-5182 +-4146 +-177 +-9914 +-9262 +6828 +5851 +8614 +-5779 +5447 +-5932 +3712 +-2525 +-6331 +-4934 +6534 +-2758 +-6353 +-3971 +-1084 +-5221 +-7970 +-8348 +849 +-8328 +-8279 +-9812 +4064 +4253 +-756 +-6446 +-9588 +-1398 +2678 +8757 +8064 +-2508 +9118 +781 +4098 +7932 +1419 +1539 +-728 +5460 +-4811 +-8444 +-9518 +9310 +4874 +-3587 +-7741 +9039 +4007 +-8949 +6465 +-1956 +-67 +7209 +2871 +3077 +6292 +-6097 +6413 +7338 +-9527 +4556 +-24 +-1395 +8305 +9901 +5690 +-478 +6687 +-4731 +-2005 +-3187 +-4121 +43 +5897 +2549 +6314 +-4654 +-3301 +-3862 +-6097 +1180 +-1073 +9087 +2113 +-956 +9490 +4513 +-4427 +-4694 +6119 +1574 +6342 +-9910 +-5046 +8610 +-5271 +-9372 +1424 +-3552 +4318 +7763 +-6376 +-2374 +9730 +5926 +-6317 +6104 +-6239 +8258 +6234 +5872 +-5347 +8934 +-2966 +8606 +3873 +3096 +-6010 +-7856 +809 +3753 +6189 +123 +6660 +3469 +-7038 +6017 +939 +-1050 +3812 +537 +-9010 +4887 +6120 +3700 +7028 +5388 +-6786 +-6605 +7382 +-5608 +-6194 +-9813 +5225 +1919 +-2745 +3657 +596 +-2458 +6090 +6070 +6274 +-7282 +-1972 +-5426 +1009 +1921 +-7094 +-9371 +-9260 +-9753 +584 +4887 +9638 +3887 +4230 +9432 +-6619 +9707 +-4710 +6797 +-944 +2596 +5705 +-4413 +9444 +2246 +-60 +-454 +4263 +4928 +-6306 +7435 +-4300 +5447 +871 +218 +5460 +-2151 +-8998 +6799 +3090 +-7885 +7943 +-6339 +-1686 +7100 +6241 +-6766 +-7551 +9310 +3678 +-2010 +9451 +6196 +5603 +-3464 +8351 +-8206 +4365 +1575 +4886 +-6597 +-2561 +5039 +2899 +-2936 +7728 +-7197 +-1999 +1592 +7274 +1002 +-4686 +-3149 +6146 +-7082 +-5920 +8363 +-298 +-1038 +-6222 +2689 +2702 +8666 +9157 +7689 +2451 +7146 +-6011 +-3445 +5220 +971 +-8438 +-6008 +-5443 +8681 +-3144 +-4155 +998 +-1929 +8117 +5708 +2999 +1827 +-4053 +-1488 +3464 +-7269 +-2998 +2437 +-1051 +8084 +1323 +7006 +3570 +5015 +560 +-6331 +-181 +-9646 +-5496 +-7297 +-7817 +-7942 +560 +8073 +4605 +-8028 +-603 +-2671 +-2614 +-9374 +6733 +855 +-5171 +-1873 +-2964 +-3112 +2886 +-2215 +-4121 +-7474 +6468 +6515 +9587 +-1170 +-269 +4371 +-2397 +-429 +-6205 +-2232 +4446 +-8466 +4711 +7685 +-1376 +-9382 +-410 +-8627 +-2887 +-8454 +-8969 +-930 +4921 +4298 +-6167 +2545 +-2410 +-4083 +-7417 +-8567 +-1634 +-6115 +1526 +1767 +8170 +7783 +-2942 +3378 +-6631 +3174 +-2907 +3427 +7215 +4244 +-7499 +-640 +-5745 +61 +8565 +-9016 +-7499 +6196 +-6135 +-2854 +2728 +-7648 +-7398 +-2764 +8916 +6472 +8820 +1827 +5283 +4166 +6216 +5166 +-4190 +-188 +964 +6794 +5643 +-9647 +-2421 +7910 +-9910 +5341 +-3970 +-3053 +9859 +-574 +-6607 +1088 +-640 +-6476 +-4473 +7161 +-2096 +4486 +3219 +-9910 +-4973 +-1787 +402 +-2748 +1257 +5069 +9858 +2728 +-6317 +2037 +3675 +-2037 +1357 +5942 +-8063 +-3506 +2249 +-6016 +8939 +453 +6742 +-9985 +-9607 +5614 +-8846 +-1727 +4583 +2185 +4298 +-5756 +1115 +6606 +-3751 +-1401 +6574 +1180 +4150 +4609 +7352 +5353 +5027 +5175 +-8415 +3322 +-468 +-4881 +-6353 +3482 +3595 +-7324 +2966 +8979 +-3222 +8743 +6521 +4525 +-3569 +268 +-4626 +2966 +3488 +-5151 +2689 +5166 +1351 +2017 +3666 +8652 +-6349 +1017 +-4519 +1328 +-209 +7950 +7503 +-7254 +-3657 +932 +-9864 +8146 +-8628 +8084 +3029 +7950 +-1007 +-2225 +4334 +502 +-3853 +-4448 +7350 +-5980 +-503 +1001 +-652 +3688 +-8615 +4760 +4550 +-207 +7198 +3607 +-8384 +-9481 +-1799 +6479 +6854 +6183 +3023 +-9380 +-1623 +7220 +4119 +7979 +-588 +8257 +3039 +8139 +9189 +-8055 +-2486 +-5260 +7715 +-1178 +6764 +-5260 +-5854 +-4642 +-1278 +3872 +-63 +-5944 +5573 +-5423 +-4498 +3965 +9549 +1130 +-6322 +-30 +2257 +305 +2919 +7573 +8585 +8077 +-5577 +3329 +3909 +7354 +1227 +8986 +8385 +3128 +9286 +-9626 +-2013 +568 +-4310 +-7483 +-6243 +-8374 +8823 +-4520 +1869 +-219 +-7677 +3900 +1053 +7660 +2190 +709 +-576 +-4459 +-4638 +-8502 +-9347 +-4623 +3715 +-703 +1212 +6245 +-3743 +3276 +-2337 +-9212 +258 +-8305 +7529 +-6947 +-4127 +-4123 +2976 +3798 +9074 +-9646 +3104 +3238 +3067 +970 +-227 +3214 +8158 +9310 +1272 +-7516 +6550 +6037 +4820 +-5730 +2694 +5141 +4196 +5999 +9901 +3434 +-8544 +-3873 +1007 +8705 +-8342 +-3893 +-5709 +-5096 +2726 +2628 +-7462 +5765 +6128 +-7021 +8103 +-6786 +-9382 +-5002 +-624 +-3176 +-958 +-6895 +-4123 +-227 +147 +8993 +-5879 +6337 +-5971 +-8100 +-4295 +-9948 +-3721 +1507 +-8196 +818 +5185 +-7682 +7210 +3926 +-6609 +-9855 +5303 +9310 +-3484 +-2399 +8047 +9727 +9658 +6426 +3603 +-2228 +-2813 +3811 +-55 +-6065 +9061 +-3593 +-4473 +-6597 +7346 +-5088 +-6445 +-4113 +-2829 +1817 +1425 +9901 +-6896 +-6823 +-5879 +-3163 +-1293 +-1531 +-2862 +1291 +-9679 +3591 +-7455 +4192 +5269 +-6876 +5959 +-78 +-5996 +8511 +-2993 +975 +7027 +-9008 +-3353 +-9812 +4851 +1507 +9407 +5641 +-8136 +-3689 +7132 +-7050 +-5572 +2628 +5559 +21 +-8960 +-9412 +-2841 +-7253 +-4445 +-286 +540 +-9027 +-7236 +-2343 +-2829 +7570 +7028 +8309 +5870 +605 +9679 +1795 +9064 +2437 +5647 +-7307 +1311 +6196 +4970 +-4490 +-4885 +8228 +-8916 +-3444 +-3916 +4192 +3276 +-4884 +3909 +-8928 +-8604 +7870 +-6476 +-7041 +3444 +3938 +-5389 +8485 +-1634 +-3818 +-9461 +4098 +-1774 +6215 +-5745 +3958 +-8175 +-3051 +-7554 +-5046 +-6072 +-364 +-7091 +310 +8552 +-393 +-5077 +4194 +1928 +6039 +346 +-3939 +8047 +7336 +-5052 +-518 +-3187 +-8431 +-5217 +6814 +4833 +1710 +3324 +-4500 +-5913 +-7796 +8298 +-8 +-2167 +9024 +-1545 +7335 +9745 +-6730 +-5707 +1205 +-2413 +-224 +2353 +7761 +1540 +7434 +-6173 +3239 +4132 +9407 +2847 +5787 +7775 +-1699 +6749 +-9858 +5095 +9061 +18 +6748 +8109 +-3964 +3295 +-4256 +-8544 +9749 +-6528 +3534 +-618 +-1559 +-8917 +4321 +6844 +6216 +7209 +8840 +-8999 +-912 +3835 +29 +-4101 +-1200 +-772 +-6237 +7805 +9102 +-7034 +2926 +9008 +7684 +-2463 +-1619 +5223 +7613 +-1560 +-6325 +-1930 +-5546 +4505 +-4881 +-918 +-5923 +9688 +-6823 +-564 +-4140 +-8705 +1072 +2313 +3276 +8036 +-6996 +-6523 +7275 +-5926 +-9033 +-5385 +4446 +-29 +-762 +-5888 +-3228 +9858 +8786 +-5810 +-9753 +-9487 +5807 +-6303 +9924 +8117 +-3085 +3370 +-3927 +-8493 +6 +-212 +7010 +5357 +4821 +5108 +-5605 +-8204 +-4912 +6968 +8286 +6749 +899 +-9606 +-3426 +6660 +4956 +-6619 +8064 +-756 +-8868 +2093 +-7134 +-6298 +7094 +7443 +6748 +6237 +-1478 +-5119 +-1137 +-5940 +2321 +-8308 +3570 +-2185 +-9808 +-9660 +-2567 +-1550 +-9585 +-3101 +9885 +-6072 +-4413 +-6947 +-4231 +3812 +2974 +3515 +-2268 +-6808 +9683 +-9979 +-5524 +9478 +9064 +219 +-4489 +-5701 +-2879 +-111 +-5238 +3190 +-9944 +-6196 +-1983 +-5077 +-2423 +540 +2187 +-9676 +3217 +-1273 +-1446 +4707 +-7942 +-2561 +8524 +-5484 +-8321 +8223 +-5087 +-7103 +5742 +7976 +-6513 +6108 +9127 +-5986 +-3967 +7904 +-7036 +-6479 +1676 +-4489 +-7098 +3183 +-7038 +-9929 +-4636 +-798 +3040 +1783 +-9174 +-7442 +5166 +2282 +2168 +4406 +13 +-9979 +-8074 +4725 +1298 +-3726 +-9676 +266 +-4201 +1539 +3117 +6445 +8790 +2739 +8406 +9326 +-7336 +-3397 +-4427 +5192 +9594 +-9262 +-3319 +-248 +975 +1370 +-8760 +2940 +1593 +7758 +2507 +6775 +693 +-9174 +1288 +-5759 +7093 +9710 +4421 +1946 +9182 +2516 +-5932 +4939 +-9770 +3339 +-8512 +-3530 +767 +-2900 +-8838 +8589 +9730 +-1091 +-4339 +9392 +4571 +3561 +-2652 +-3019 +-3293 +-35 +6225 +6856 +3950 +7542 +9039 +-5850 +-2829 +-6476 +-7633 +-6135 +-2213 +-4477 +-653 +-2293 +-2663 +-6510 +1395 +-3058 +7901 +-8137 +7603 +-1991 +-8588 +-8656 +-7800 +-4977 +-2865 +3751 +-7647 +-9005 +-344 +-9043 +2596 +-8125 +7576 +7799 +-4339 +7945 +-976 +2311 +7359 +7049 +-138 +-731 +-1242 +-6005 +9121 +3216 +1864 +-9676 +-9405 +1436 +8772 +8686 +-9979 +9941 +-6211 +4256 +-1263 +-2116 +2746 +9791 +7901 +-6893 +8846 +1812 +-7360 +4415 +-6766 +-437 +2683 +-9546 +-3308 +-8707 +-5310 +7901 +-8874 +-5339 +-7821 +-1864 +-7821 +-8236 +7449 +3932 +3184 +9710 +2369 +-5997 +-9347 +8800 +-2958 +-7567 +9340 +9248 +6216 +-9883 +-7300 +-8369 +-3967 +-3418 +2736 +-2568 +6825 +4798 +-9753 +9499 +3021 +-2233 +-5490 +-4861 +5451 +9791 +-7791 +7981 +9658 +7131 +1011 +7719 +-6474 +5269 +3442 +-5048 +8919 +-7400 +-2010 +3867 +-9323 +9567 +7814 +-9879 +9116 +-9645 +6459 +3595 +3812 +4371 +7244 +-513 +4681 +-361 +9587 +3650 +-9917 +-1914 +3090 +-7790 +4500 +-4141 +7811 +7573 +-3772 +2534 +2093 +8258 +7950 +7147 +-7170 +8472 +-5524 +-365 +-8415 +7698 +-1896 +7608 +1857 +1931 +6915 +3733 +-7021 +9031 +4355 +-7679 +7160 +-6623 +-2254 +117 +-4934 +912 +-4506 +2934 +725 +9013 +4096 +-9350 +1298 +2073 +6273 +-2079 +2628 +-9690 +-2159 +5426 +-5758 +-3102 +2847 +8694 +-8215 +-9327 +-4197 +5078 +7014 +4186 +-4812 +1257 +-9461 +-285 +-9481 +6192 +9960 +-4795 +-5649 +268 +6515 +-9984 +-9284 +-895 +131 +7774 +-5793 +6302 +818 +3498 +6151 +2165 +9645 +4603 +-7094 +2689 +-5124 +936 +6622 +9508 +-9212 +-3943 +6461 +998 +3104 +5308 +-9948 +9304 +-7065 +4476 +4285 +-8349 +9129 +-2970 +-9154 +4609 +2668 +3959 +-5953 +-4995 +-8143 +-8502 +-5938 +-3787 +3001 +-571 +1424 +7513 +-1056 +-2379 +858 +3437 +-4517 +3789 +-4013 +-5628 +5999 +5820 +-2558 +-5310 +1564 +6690 +-8898 +8619 +-5608 +-9445 +5752 +-4606 +-6405 +6173 +-9864 +-398 +2660 +9296 +-142 +-8501 +-2199 +7316 +-6135 +2973 +9177 +-275 +2570 +-1024 +5511 +-9701 +-1990 +-5950 +1802 +6221 +1508 +-175 +7890 +6284 +4853 +9339 +-6996 +-8305 +1728 +-6468 +-8747 +8325 +-8589 +4385 +7904 +-9332 +2902 +-3102 +-7725 +-1853 +-5524 +2257 +5564 +-7338 +-3348 +7783 +5562 +-1418 +4567 +512 +-5156 +354 +-1498 +-5509 +-808 +-1681 +7965 +7437 +3720 +-7230 +39 +-9090 +-2997 +-7652 +5713 +-3682 +5696 +8072 +7437 +5463 +4371 +4988 +-2439 +-5984 +-4533 +4798 +1602 +8979 +632 +-5632 +-8707 +7264 +-4732 +1425 +2413 +-6834 +6096 +1208 +-5100 +9343 +-500 +-5659 +-4475 +-9963 +-2906 +2708 +2560 +9501 +323 +-3967 +4087 +-9185 +7329 +-8968 +9198 +-4549 +1561 +-7530 +1966 +3454 +-9972 +-1600 +-9390 +1842 +-5940 +7841 +8923 +-8705 +-2745 +7759 +-7466 +8954 +3117 +3659 +9626 +8720 +-4861 +415 +-7679 +3668 +-8792 +562 +1855 +4110 +-6768 +1807 +-5201 +6140 +-8267 +1533 +486 +-6399 +-3142 +-1329 +-7146 +-248 +-1807 +3148 +4126 +-5142 +-8699 +927 +-1991 +8792 +-1219 +-5213 +-5222 +-4146 +-3459 +8026 +-778 +9980 +-6631 +5754 +-900 +5024 +-3951 +7075 +-5337 +9092 +-2213 +9579 +-2993 +8091 +3981 +9665 +-4147 +5525 +8167 +3923 +-7082 +-5052 +728 +3935 +-2916 +3793 +-7473 +1508 +-4613 +-6687 +4861 +-4290 +-8480 +1217 +3077 +794 +351 +6761 +6157 +-3184 +-2579 +-3102 +2140 +9725 +9622 +5343 +-7299 +3639 +7479 +8550 +-5900 +-5035 +-8754 +-6640 +2087 +9129 +-5697 +-9284 +6771 +3641 +4112 +-2846 +-9271 +-3893 +-3691 +6625 +-7387 +-9380 +-8707 +7017 +3552 +-6461 +747 +6221 +5923 +-8512 +1539 +2271 +7721 +858 +-7821 +-6135 +6682 +-6412 +-3460 +5507 +4672 +3873 +1453 +-6237 +-5005 +7530 +-1293 +1174 +8724 +9980 +-3091 +401 +-2310 +1817 +8765 +-5539 +-6211 +9093 +-8600 +6522 +3591 +-5564 +-147 +-7081 +5734 +2381 +3388 +-1570 +-8892 +6409 +3942 +-5025 +5774 +9768 +-5498 +295 +4084 +3495 +7231 +-4506 +2662 +3594 +-7001 +-6278 +2215 +-3687 +1633 +2966 +9278 +-6565 +9082 +6700 +9649 +-3865 +4683 +-3691 +654 +-2488 +4436 +-3310 +-1052 +-4749 +-3964 +-6507 +1946 +4980 +1361 +-2813 +3484 +-7882 +-4036 +2444 +9624 +8780 +9135 +8472 +-9277 +-219 +3791 +7951 +1959 +8637 +-3033 +-8861 +-2579 +-8280 +9468 +-2618 +6982 +-6533 +3165 +4238 +-5940 +8432 +-989 +3926 +-1170 +-1405 +3219 +-8802 +-5722 +-437 +7844 +6979 +7877 +-3104 +8120 +-8687 +1019 +9418 +8572 +-2871 +-3360 +9223 +1927 +-1415 +-1877 +5568 +1032 +-1690 +1212 +5960 +7943 +-8838 +8357 +695 +4957 +-6228 +-802 +4948 +6922 +6196 +7578 +8884 +-4626 +2877 +9679 +-8297 +9619 +6445 +-518 +-8493 +-7098 +-4645 +-1609 +353 +-1690 +2113 +4840 +-1623 +-621 +-6945 +9669 +3409 +4132 +-5308 +-6009 +3339 +-4723 +-7473 +-7065 +-2249 +-779 +-8950 +-4477 +9571 +-9812 +4760 +8985 +-1330 +8984 +8614 +3861 +2185 +3733 +-5792 +9234 +-6619 +660 +6409 +-5404 +-8096 +-7890 +-1261 +-2321 +-3420 +1453 +-7032 +-2574 +5078 +-8551 +-6631 +354 +8064 +-924 +5660 +-6929 +8589 +2230 +13 +-9855 +-1935 +-874 +6456 +5416 +8460 +2579 +8985 +7669 +-2973 +-7063 +5949 +995 +-2656 +-7519 +9498 +5366 +6313 +6900 +-8781 +-1145 +632 +-2027 +-6377 +-2047 +-396 +-5154 +7613 +-2862 +-9491 +7316 +9189 +8454 +-8719 +9043 +-3909 +-113 +3664 +-7809 +3358 +4941 +2237 +3992 +4650 +-9623 +2086 +-7961 +3910 +4603 +7979 +6137 +8235 +-6408 +-6415 +6291 +-7169 +3018 +8272 +3275 +-8324 +-647 +-6948 +1012 +9490 +5430 +-5046 +512 +7292 +3147 +-2751 +2654 +-2380 +-8583 +2689 +6426 +-4183 +-2246 +6880 +-7318 +1359 +3350 +2765 +-2257 +-2762 +7448 +2857 +3923 +9924 +827 +-4924 +3900 +6630 +-2647 +5949 +-1779 +3212 +-5404 +-9947 +-7916 +9508 +-5027 +-4821 +2159 +3112 +-7063 +-4377 +-9057 +7399 +-249 +6282 +5971 +8767 +-4701 +-2215 +-4423 +-8697 +-3348 +1976 +-7652 +2220 +-657 +5825 +3928 +-7668 +-5442 +2329 +-3537 +-2204 +5525 +2570 +7521 +-2379 +7039 +-5846 +7944 +-4121 +-2088 +3917 +-1732 +1257 +-4962 +-6903 +-8231 +-928 +-624 +-5724 +-2556 +6825 +8186 +-7094 +4455 +-5983 +-7404 +404 +-3187 +7538 +9280 +2962 +5992 +-2568 +3992 +-5182 +1805 +8583 +9556 +9629 +264 +6075 +7097 +9711 +-2374 +47 +-6406 +6690 +7450 +6996 +-6108 +-9271 +8777 +-5992 +9543 +3033 +-695 +-532 +4970 +9456 +5551 +5717 +-6211 +-5899 +3728 +2289 +-8394 +2266 +-1360 +3700 +-7961 +5511 +2556 +1967 +-8716 +-1032 +-3252 +489 +915 +8565 +-7392 +-4581 +-7396 +3572 +5506 +2735 +-8279 +-7763 +-6695 +-6167 +-8600 +-2561 +-2734 +2498 +-3053 +7961 +2859 +-404 +2723 +-3525 +-6766 +-6721 +-4076 +3672 +-189 +-7974 +5606 +-2102 +9323 +-1069 +-6885 +3217 +435 +-1689 +9026 +-5052 +7110 +-944 +641 +9421 +641 +-5942 +8279 +-4556 +-4431 +-2925 +1545 +-5052 +1217 +-2508 +8456 +-7318 +-1225 +-6529 +6722 +8684 +9456 +6496 +5047 +-8015 +6776 +777 +521 +-2404 +-5002 +-7129 +3217 +254 +9476 +2983 +2193 +6372 +-2457 +-3975 +-4447 +-443 +7019 +-8604 +-1117 +2847 +2054 +1733 +-7099 +-4137 +-3251 +-820 +4610 +-318 +5577 +4094 +3841 +1277 +-4822 +6019 +8377 +7040 +-6194 +2746 +8961 +6431 +-8558 +9971 +1323 +605 +2321 +1792 +481 +-8567 +-3920 +-32 +-7126 +-1220 +7570 +556 +3308 +-9335 +775 +-4466 +9280 +7279 +8053 +-4825 +-4233 +-2800 +-8666 +-1598 +544 +1967 +467 +-9544 +9463 +8743 +-7576 +4156 +6057 +5480 +-3753 +5313 +-857 +-6231 +-8722 +2449 +9665 +6752 +8044 +1325 +-2710 +-488 +8091 +5771 +-4815 +3812 +-3743 +7521 +-9010 +4185 +8091 +6973 +8406 +-537 +3039 +-2916 +8410 +2228 +-8374 +7209 +-7217 +6343 +9587 +3391 +-2048 +1872 +-2304 +-7287 +4194 +8511 +-3053 +-2596 +1215 +4312 +609 +-7325 +3388 +-4856 +-3829 +4902 +7925 +1875 +-8004 +3063 +-4676 +1650 +3530 +-2647 +-5442 +7530 +8337 +7806 +-2312 +-1321 +-1713 +-1598 +-1267 +1258 +-2360 +2257 +9087 +-9813 +-8626 +-4201 +-437 +8236 +4790 +-5383 +-7459 +-5151 +-6789 +-7743 +899 +921 +1764 +8485 +7039 +5907 +714 +509 +-9327 +-8660 +5221 +-7988 +7466 +-7994 +2327 +-7081 +5912 +1636 +-1061 +7820 +2669 +-6534 +6189 +-5221 +-5793 +6622 +5954 +5292 +1996 +5976 +2801 +-8694 +-7314 +-4036 +6776 +-839 +-9873 +32 +-9833 +-523 +7075 +-5709 +-2590 +-240 +2545 +632 +6499 +-3519 +-5832 +-2027 +465 +6849 +1627 +1820 +-5123 +-9623 +2786 +7027 +5275 +-212 +8325 +1711 +-2498 +-572 +-6487 +-4549 +-2269 +7762 +-6395 +692 +7317 +941 +-7583 +5141 +6626 +6075 +3230 +9483 +-3127 +9962 +-6947 +-7519 +-5310 +3387 +-8212 +-5963 +-2814 +3214 +-1638 +2651 +-8438 +-8417 +-6983 +7220 +-2372 +1262 +-8951 +-7829 +-3053 +1506 +-797 +-8292 +5429 +7277 +912 +-334 +-3839 +7394 +-6735 +-3619 +939 +-5947 +-5058 +9135 +2597 +2807 +-6066 +-7921 +-887 +-8349 +7148 +-8477 +7581 +-1445 +-2810 +5894 +6791 +4862 +7573 +-3203 +3521 +1388 +-4870 +-8970 +9788 +9805 +-4121 +7450 +9135 +1005 +-1012 +197 +2014 +1248 +-2930 +4263 +-3030 +-4654 +6818 +-8433 +237 +1424 +2965 +-4924 +-8802 +3756 +998 +8961 +-4459 +-1690 +-4881 +4406 +7497 +-224 +1658 +-547 +-6458 +9409 +-6293 +8186 +6786 +-7790 +-5648 +-8448 +3867 +1518 +513 +670 +-4663 +-284 +705 +-5013 +-2434 +-4867 +8862 +-19 +9730 +5400 +2545 +6216 +4028 +-9295 +-867 +-4190 +4845 +8170 +-4897 +-4154 +2475 +2106 +-2660 +-5219 +-1056 +-2525 +-6888 +4760 +9619 +-4540 +6426 +-6529 +5577 +-1229 +4556 +4096 +-4489 +-7193 +-1694 +-3013 +4575 +-1194 +5742 +9406 +799 +-6319 +-501 +3816 +9829 +4928 +-788 +9698 +-328 +470 +-8195 +2003 +2843 +9112 +-2748 +-5770 +3355 +90 +-8551 +-4545 +9407 +3790 +-2813 +1361 +8777 +-5610 +6409 +7395 +1626 +-6135 +-4912 +6544 +3369 +-5495 +7000 +-7398 +1363 +-123 +1218 +-392 +238 +-2359 +9376 +-5398 +-6717 +5740 +7521 +8590 +809 +-152 +3437 +1556 +3641 +-8716 +7856 +-6730 +2654 +-205 +-7705 +351 +-1026 +9123 +8196 +4939 +7491 +-268 +3021 +3016 +-6298 +-7132 +2662 +217 +7098 +-6473 +4284 +7546 +-5914 +-5900 +6746 +6215 +-2507 +-3904 +6885 +5539 +5225 +3515 +-6984 +2780 +-5030 +3650 +6371 +-2202 +-2647 +3902 +451 +-6005 +-7691 +7759 +-6795 +7687 +-3864 +3213 +4367 +521 +-2453 +-820 +2353 +2025 +-5109 +-4300 +3063 +-6387 +3324 +-3840 +-1330 +166 +5247 +-1140 +-1795 +3456 +-5864 +-2997 +-4677 +-6913 +4587 +5372 +1027 +-4937 +9757 +-3673 +5568 +-5142 +8164 +6447 +-5501 +-398 +8018 +-4472 +-5090 +-2711 +-5338 +6547 +2426 +-1209 +-4448 +-2904 +7656 +9725 +6378 +5923 +-1713 +9994 +-6144 +-4747 +2379 +4644 +-4595 +-8115 +-6134 +-8789 +6328 +-2903 +8250 +-3559 +7761 +7264 +4132 +894 +-9045 +1843 +-4716 +-6546 +71 +7548 +-6052 +9861 +8574 +-7915 +-7455 +7065 +2338 +6133 +6941 +6676 +3238 +5253 +5515 +-5077 +9912 +5568 +-5326 +7265 +2851 +1722 +-5963 +3872 +-4351 +-7103 +-905 +3117 +-929 +9983 +9579 +8927 +5581 +-4518 +8951 +6810 +835 +2950 +6445 +-3557 +-8118 +-3751 +5824 +-9970 +-3648 +-3304 +7154 +8445 +-1466 +1452 +8789 +7676 +1425 +5887 +6825 +5309 +-8469 +4927 +6432 +9798 +7466 +-7700 +-3247 +-3510 +-4592 +1117 +-9059 +-3757 +-9873 +6810 +7782 +-8433 +-9860 +-7360 +3971 +-4190 +-3133 +2313 +-2734 +2096 +7531 +2114 +-1178 +9729 +-1724 +-1914 +-5783 +8694 +6781 +1574 +4081 +5303 +8829 +-4644 +-3506 +-5459 +-3030 +3639 +-6529 +-9563 +-9352 +4298 +-2458 +853 +3647 +8492 +-5459 +8372 +-697 +-9694 +-3412 +2002 +7323 +-2436 +-9944 +7687 +8117 +-6117 +-73 +-8263 +9755 +-1032 +8072 +-7989 +-4881 +-6120 +849 +3706 +-1996 +-9494 +-7933 +-2255 +2367 +9312 +-185 +2237 +2425 +8819 +3971 +9481 +7901 +5217 +-1412 +-1557 +62 +-219 +-6479 +9962 +763 +8545 +1733 +-6832 +-762 +-6161 +-5504 +1463 +-647 +5447 +5472 +8723 +-285 +305 +3565 +-8100 +-9996 +-1170 +-7606 +-8197 +5824 +-9012 +7448 +5853 +-2751 +736 +798 +-6695 +-4190 +1370 +-764 +933 +8533 +-2217 +7578 +-4308 +9256 +6144 +7343 +-8588 +8329 +-8762 +-632 +-2808 +-3394 +3115 +-3658 +7660 +-2888 +3900 +2280 +6949 +-311 +9406 +1511 +9167 +899 +5460 +1129 +5533 +3665 +-8729 +8024 +-7627 +474 +4603 +-9367 +9852 +688 +-1180 +6072 +-7497 +-4337 +-2145 +-6357 +4158 +8624 +6961 +9755 +-4613 +7719 +4845 +-8267 +6915 +-6216 +970 +1393 +6700 +4585 +8667 +5856 +1452 +-2657 +-7781 +-2874 +-7683 +1880 +-6080 +2708 +-8111 +2545 +1393 +-5704 +6129 +-5328 +-1171 +-8953 +-6983 +5472 +8929 +4087 +3147 +-8967 +736 +7904 +-7258 +2418 +-2806 +5665 +-1268 +5647 +-6732 +4576 +4123 +-3964 +-6529 +-2336 +4545 +-7474 +7392 +-2795 +-8081 +7111 +6435 +2660 +8748 +-7047 +6750 +-7970 +4462 +-212 +-7114 +-728 +2918 +4239 +8877 +-207 +8543 +-8600 +-8967 +-4372 +-9240 +3104 +4928 +5673 +-7263 +1834 +-5805 +-7122 +-6040 +-1993 +-6426 +-8402 +8902 +458 +8260 +-6164 +1767 +-410 +-7820 +-5491 +1448 +5130 +-255 +4646 +-4441 +296 +9326 +-9016 +-1090 +-761 +1005 +8170 +-8560 +-7056 +-510 +-561 +-7685 +1563 +9182 +-9855 +-2478 +-1423 +660 +7040 +1652 +4042 +-4348 +-5174 +2375 +8677 +-6196 +3039 +-5807 +9061 +1746 +-2145 +-24 +-6990 +-4360 +4853 +343 +-3285 +-9661 +7806 +8406 +6613 +4903 +-1144 +-386 +9522 +-5160 +8934 +-1725 +-6729 +-8028 +-6476 +-7455 +-6120 +-7930 +3064 +1527 +-5176 +-2351 +6017 +-7422 +-924 +-412 +-309 +-6435 +-9613 +3405 +-2087 +-7351 +688 +-2187 +-6164 +9407 +2664 +-8032 +-684 +-3878 +-3372 +-2724 +-3477 +5703 +-6148 +-9347 +5854 +-1853 +2905 +-7909 +-5957 +4948 +8740 +-4311 +-4253 +3178 +7401 +2533 +-2179 +5201 +-2310 +-8129 +4844 +-818 +289 +-877 +-5802 +-4691 +-9845 +-1445 +-2093 +-9405 +-7441 +-9505 +817 +5636 +-5129 +-5781 +-2015 +-6473 +8003 +1170 +-1476 +-4256 +4313 +6622 +-6595 +3308 +5141 +1827 +3910 +-5773 +5341 +-3091 +-3989 +5122 +2689 +539 +-9013 +4282 +-1984 +7995 +9832 +6750 +5040 +-5456 +6963 +-3893 +429 +3515 +4111 +-2517 +8988 +-2608 +-7154 +-3815 +3953 +9442 +5600 +-7676 +5131 +-6182 +-4744 +-4454 +54 +-3397 +-1142 +4957 +-1817 +-3162 +7487 +5604 +-6713 +3046 +4609 +2076 +-4778 +-2920 +8157 +9890 +-8775 +8139 +4652 +-5398 +-6891 +-3523 +-6508 +2824 +-1948 +-228 +7323 +-3483 +-8120 +2187 +9310 +-8204 +9963 +-6322 +9323 +-5096 +4036 +-3361 +-3445 +-4771 +-5783 +9067 +-5255 +6786 +1018 +3115 +4839 +1817 +-8375 +-1126 +6368 +-6834 +7030 +9464 +-7756 +-2828 +-9188 +9480 +-1200 +-4884 +-81 +8679 +9406 +-4194 +7935 +-6999 +910 +947 +1490 +2563 +2237 +3854 +-2722 +-7704 +-4831 +-429 +-5477 +6687 +-2671 +3063 +-8655 +-1523 +9535 +2589 +-1135 +-5923 +1038 +-1577 +-393 +-8688 +147 +7035 +-3038 +3691 +-8707 +8743 +-3113 +4355 +-7063 +60 +-6157 +2318 +6845 +-387 +1857 +4853 +-8967 +-3102 +7721 +6472 +694 +4086 +-6812 +-6508 +8910 +4814 +212 +-3256 +5134 +2840 +-9144 +-4652 +-6235 +-7788 +-5984 +-6071 +-8348 +-857 +1747 +-1622 +-3870 +-4551 +-3956 +5713 +871 +4887 +2066 +6776 +1277 +1012 +6070 +-1837 +-956 +6505 +-4055 +6930 +-7188 +-5369 +2997 +3454 +-6231 +-560 +-4147 +8985 +-4299 +3023 +4406 +6978 +-2804 +-8744 +1252 +-2131 +9116 +-3757 +-8433 +-7709 +-8600 +7184 +204 +-3342 +-1099 +-8805 +6179 +-6889 +-9188 +-1663 +9751 +-2479 +-6636 +98 +-514 +2754 +-6526 +-2381 +-8394 +2157 +-8451 +-6134 +9672 +6807 +-5056 +7352 +-3051 +8979 +3564 +4185 +-8846 +8246 +6651 +-332 +5874 +-4851 +-3418 +32 +8510 +-6461 +5192 +-9008 +4624 +5220 +3063 +-7380 +971 +-7912 +2516 +1429 +8400 +-4925 +2606 +-219 +-5533 +4644 +3454 +-8127 +6126 +-8776 +7346 +8467 +5686 +-8100 +-5923 +9 +-9903 +-9002 +4565 +-7965 +7210 +-3135 +979 +-2708 +985 +-3523 +-1395 +7694 +-3917 +2249 +-5688 +-745 +3238 +1488 +3862 +2896 +-8864 +-749 +-3574 +-9240 +6163 +7758 +6341 +-7738 +-237 +5914 +1194 +6427 +-5758 +-6370 +-4196 +7627 +7209 +-9136 +-1290 +-8846 +6713 +9583 +-4734 +3111 +-216 +-874 +-6055 +-8674 +-2618 +-2183 +-6444 +6075 +1125 +2730 +4269 +-6567 +-160 +4757 +9296 +584 +-8576 +-8388 +807 +7944 +6362 +-5310 +-3741 +-9206 +1545 +6933 +4197 +6220 +8069 +9207 +8786 +-8544 +7494 +1627 +8557 +6786 +-7695 +9672 +-2059 +-2914 +-7203 +-9676 +-9332 +-7958 +-3145 +8769 +-1742 +-269 +6993 +-4516 +9485 +9557 +-1392 +2076 +4927 +6696 +-7909 +-7734 +9334 +-920 +-8733 +1807 +809 +-8355 +4095 +-5182 +2745 +9846 +8566 +6467 +4878 +-9377 +-2005 +8677 +8833 +-7004 +-5987 +6140 +-6957 +617 +-8583 +-9632 +4002 +8863 +-3551 +-1194 +-2027 +-3610 +8406 +3899 +4585 +915 +4036 +7108 +-4833 +-6003 +5824 +3557 +-7644 +4166 +6092 +-188 +-2310 +-312 +9407 +8481 +-9141 +-6186 +1280 +-6164 +-178 +6257 +6462 +8723 +-5359 +334 +-3521 +1817 +3570 +-370 +-4199 +-6024 +-4747 +-5463 +-9136 +-6635 +284 +-9704 +-3067 +2219 +-6947 +-7837 +705 +-4518 +6486 +-8737 +9423 +3990 +6626 +6208 +-8197 +-7791 +5959 +7972 +-1725 +9594 +-8996 +-3758 +-5661 +-2739 +2329 +4610 +3304 +9015 +722 +2863 +2066 +-7307 +-1623 +-9174 +-4507 +-8004 +-5452 +-1069 +2240 +-9507 +5313 +-5775 +-5908 +7487 +6211 +8032 +3295 +-8968 +8081 +1747 +2878 +7581 +-5807 +-2851 +-2531 +-3448 +9782 +5244 +-5747 +9574 +9477 +816 +7612 +-4310 diff --git a/2022/src/day20.rs b/2022/src/day20.rs index acd2238..4d6701d 100644 --- a/2022/src/day20.rs +++ b/2022/src/day20.rs @@ -1,9 +1,135 @@ +use std::cmp::Ordering; +use std::fmt::Write; +use std::iter::once; + +use anyhow::Context; use anyhow::Result; +use nom::character::complete::newline; +use nom::multi::many0; +use nom::sequence::terminated; +use nom::IResult; -pub fn part1(_input: &[u8]) -> Result { - anyhow::bail!("not implemented") +use crate::common::parse_input; + +fn parse_encrypted(input: &[u8]) -> IResult<&[u8], Vec> { + many0(terminated(nom::character::complete::i64, newline))(input) } -pub fn part2(_input: &[u8]) -> Result { - anyhow::bail!("not implemented") +fn step(steps: &[usize], mut start: usize, count: usize) -> usize { + for _ in 0..(count % (steps.len() - 1)) { + start = steps[start]; + } + + start +} + +#[allow(unused)] +fn print(encrypted: &[i64], next: &[usize]) { + let mut base = String::new(); + + let mut start = 0; + + for _ in 0..encrypted.len() { + if base != "" { + base += ", "; + } + + write!(base, "{}", encrypted[start]).unwrap(); + + start = next[start]; + } + + println!("{base}"); +} + +fn move_between(prev: &mut [usize], next: &mut [usize], i: usize, before: usize, after: usize) { + if before == i || after == i { + return; + } + + let before_i = prev[i]; + let after_i = next[i]; + + // Remove i from its original place + prev[after_i] = before_i; + next[before_i] = after_i; + + // Connect i properly to before + prev[before] = i; + next[i] = before; + + // Connect i properly to after + prev[i] = after; + next[after] = i; +} + +pub fn part1(input: &[u8]) -> Result { + let encrypted = parse_input(input, parse_encrypted)?; + + shuffle(&encrypted, 1) +} + +fn shuffle(encrypted: &[i64], times: usize) -> Result { + let mut next: Vec<_> = (1..encrypted.len()).chain(once(0)).collect(); + let mut prev: Vec<_> = once(encrypted.len() - 1) + .chain(0..(encrypted.len() - 1)) + .collect(); + + for _ in 0..times { + for (i, &value) in encrypted.iter().enumerate() { + match value.cmp(&0) { + Ordering::Less => { + let before = step(&prev, i, (-value) as usize); + let after = prev[before]; + + move_between(&mut prev, &mut next, i, before, after); + } + Ordering::Equal => continue, + Ordering::Greater => { + let after = step(&next, i, value as usize); + let before = next[after]; + + move_between(&mut prev, &mut next, i, before, after); + } + } + + // print(&encrypted, &next); + } + } + + let mut start = encrypted + .iter() + .position(|&v| v == 0) + .context("Could not find zero")?; + + let mut sum = 0; + + for _ in 0..3 { + start = step(&next, start, 1000); + sum += encrypted[start]; + } + + Ok(sum.to_string()) +} + +pub fn part2(input: &[u8]) -> Result { + const ENCRYPTION_KEY: i64 = 811589153; + + let mut encrypted = parse_input(input, parse_encrypted)?; + + encrypted.iter_mut().for_each(|v| *v *= ENCRYPTION_KEY); + + shuffle(&encrypted, 10) +} + +#[cfg(test)] +mod tests { + use super::*; + + const SAMPLE: &[u8] = include_bytes!("samples/20.txt"); + + #[test] + fn sample_part1() { + assert_eq!(part1(SAMPLE).unwrap(), "3"); + } } diff --git a/2022/src/samples/19.txt b/2022/src/samples/19.txt new file mode 100644 index 0000000..ef39b0b --- /dev/null +++ b/2022/src/samples/19.txt @@ -0,0 +1,11 @@ +Blueprint 1: + Each ore robot costs 4 ore. + Each clay robot costs 2 ore. + Each obsidian robot costs 3 ore and 14 clay. + Each geode robot costs 2 ore and 7 obsidian. + +Blueprint 2: + Each ore robot costs 2 ore. + Each clay robot costs 3 ore. + Each obsidian robot costs 3 ore and 8 clay. + Each geode robot costs 3 ore and 12 obsidian. diff --git a/2022/src/samples/20.txt b/2022/src/samples/20.txt new file mode 100644 index 0000000..52c68ff --- /dev/null +++ b/2022/src/samples/20.txt @@ -0,0 +1,7 @@ +1 +2 +-3 +3 +-2 +0 +4