diff --git a/day20-input.txt b/day20-input.txt new file mode 100644 index 0000000..cd07c18 --- /dev/null +++ b/day20-input.txt @@ -0,0 +1,5000 @@ +6362 +8171 +-2371 +2207 +-9265 +-8767 +-8900 +4779 +405 +6873 +-41 +1259 +-720 +-9746 +5384 +3316 +8814 +1865 +9077 +-6009 +4068 +-6521 +2061 +-9971 +9548 +7007 +-6658 +6019 +1477 +-4912 +6737 +5717 +-5926 +4535 +-6975 +-969 +5312 +-3560 +-9866 +150 +7370 +-9382 +-8222 +-7759 +2876 +-9673 +-4692 +-6354 +-7996 +1431 +-5036 +-3326 +8664 +1215 +7948 +-3794 +-7110 +1225 +-9106 +9908 +6153 +-6228 +-2237 +3104 +-9819 +6872 +-6451 +2596 +1397 +-4770 +6765 +-3434 +-1945 +-3809 +6752 +-1855 +7571 +8345 +2440 +6110 +-5874 +-6330 +222 +-8103 +9508 +-6 +-4915 +-9966 +5013 +191 +8213 +-9053 +-4418 +-6204 +-1083 +-7142 +827 +-1983 +3063 +8305 +-9973 +7390 +1594 +-8640 +-7096 +2341 +6028 +1820 +9986 +4281 +-4183 +6312 +2570 +4290 +349 +10000 +711 +6970 +1151 +6642 +-3962 +-2198 +-8684 +3264 +-6109 +8027 +4265 +9146 +-8042 +6547 +7218 +-5070 +5622 +-7 +-155 +-5912 +-589 +9776 +-5426 +5449 +-5857 +-9773 +5834 +-2708 +2485 +-5737 +1395 +-6960 +1565 +-9824 +-2768 +-6737 +-8221 +-5982 +3161 +4236 +1798 +-3281 +-5647 +9331 +-2370 +-8470 +5854 +7544 +4702 +6724 +-4961 +9891 +-6636 +8998 +-4035 +6654 +-4907 +8809 +-2491 +986 +-3174 +8082 +6684 +-215 +1603 +-7582 +3002 +-1392 +-5327 +-6882 +3229 +9114 +-9590 +1323 +1523 +3040 +-5369 +-4556 +-9816 +-2918 +2207 +-6648 +3002 +8824 +-6959 +-5127 +-5865 +-2594 +-7891 +5305 +5029 +3583 +-6821 +-1469 +4242 +-7350 +3909 +5239 +-9238 +3501 +-41 +7239 +-5943 +258 +2857 +-1237 +-7816 +-1762 +2678 +-6002 +-8167 +-9175 +5871 +4340 +-741 +5159 +-8521 +8782 +-1628 +-7387 +4594 +5834 +-6762 +759 +8819 +6640 +877 +1633 +-5869 +-1375 +3522 +-1338 +8899 +2139 +-9579 +-7557 +5281 +6113 +-8453 +8455 +-7500 +-7146 +-4451 +-5989 +-5846 +-5070 +-676 +-8472 +8138 +-3535 +-2097 +-9120 +-5026 +-7738 +-44 +-4217 +3386 +2293 +6574 +-5053 +1622 +-1296 +-9233 +-3472 +-4215 +-4536 +4288 +-2524 +-1762 +-5456 +5605 +-9919 +8201 +-6314 +3132 +-7810 +-4950 +-2179 +-9310 +-9424 +-7360 +-6629 +3355 +-7061 +-5748 +-1962 +-5673 +-6071 +-3849 +327 +2625 +-6365 +-4142 +-8137 +5353 +-9968 +-7572 +7226 +-5940 +-4839 +2296 +-2143 +-3302 +1766 +277 +-9092 +7734 +4106 +2590 +5928 +4640 +8086 +3874 +3415 +999 +-9730 +-1949 +-7583 +-4271 +3357 +-5701 +-8075 +-105 +4625 +-1581 +-2070 +7211 +-8910 +-6598 +-9058 +-3809 +6744 +5660 +-6739 +1042 +-8597 +7846 +9434 +-9197 +2091 +-813 +-6314 +-2364 +4543 +8213 +-7390 +4018 +9988 +-9375 +1576 +-6733 +-105 +8808 +9321 +432 +-5748 +8996 +-4045 +5506 +-3905 +3518 +-9114 +-1078 +8571 +-3056 +3049 +8682 +-5655 +5583 +-1926 +180 +-3623 +2836 +-3880 +-1016 +8292 +-3797 +-4578 +-1396 +4776 +708 +-1236 +8028 +8856 +8495 +8731 +-8937 +-4099 +-7593 +-6832 +7225 +2923 +-7644 +7706 +3842 +-1479 +-4623 +-3612 +7075 +1295 +8163 +-6024 +4755 +-1811 +-3185 +9038 +3285 +5405 +3189 +-8953 +-681 +41 +6530 +6696 +-936 +1786 +-7219 +3907 +4374 +2429 +-9554 +-3104 +-7642 +4114 +-1378 +2994 +6425 +3676 +-454 +4171 +-5589 +6279 +-7472 +-9111 +-4924 +2839 +-9589 +2481 +-2969 +3045 +-6584 +-3853 +7334 +7949 +4582 +-3480 +-4756 +-7403 +4625 +-636 +-2291 +6946 +8819 +8260 +-5812 +-9316 +-544 +5885 +-644 +9659 +9575 +-6289 +5333 +8234 +1126 +-4560 +2685 +2028 +4307 +9908 +8025 +5506 +7170 +-6098 +-9702 +-7436 +-4945 +7268 +1622 +3589 +1685 +-8629 +9583 +9860 +-2193 +-1283 +5506 +864 +-3790 +7097 +-8232 +-7577 +2829 +23 +-6515 +-3008 +1215 +6339 +-4675 +4875 +5416 +3316 +-7644 +-6086 +864 +-6381 +-2874 +3184 +-5637 +-6687 +-3634 +-2952 +2600 +5502 +2697 +-4359 +-6413 +-725 +-7107 +4588 +4594 +2522 +2772 +5301 +2531 +-6469 +5769 +-6200 +4004 +-9250 +-7404 +-9589 +711 +2916 +-6623 +8570 +-6510 +2557 +9814 +5235 +7734 +8224 +4876 +-2799 +3480 +2985 +-7706 +-4484 +3646 +-6757 +4513 +7830 +-3943 +-1915 +-4960 +-5651 +-4632 +-4904 +1849 +7167 +8582 +6457 +7752 +3263 +-309 +-8402 +5789 +8171 +-8079 +-791 +9092 +2276 +6640 +-6501 +6637 +-7104 +-3045 +7301 +-4965 +-7086 +-5331 +9159 +-5507 +-4883 +-6301 +-822 +3931 +-8824 +-5232 +-7445 +-8580 +8693 +-7561 +-7202 +489 +-5851 +-4274 +6862 +6272 +8039 +-805 +1053 +-6248 +4169 +8305 +-6774 +-5794 +-969 +-5995 +-5343 +6582 +-1813 +6467 +-7151 +3528 +-3539 +-6086 +-741 +-4545 +995 +-5924 +-3591 +5142 +8421 +6886 +-833 +6816 +4613 +-650 +-4725 +7987 +-8078 +-1338 +-2630 +-8638 +153 +-5807 +-4219 +147 +-9301 +7628 +518 +-9421 +395 +-1265 +-4843 +-8894 +-8002 +3693 +-4360 +-6410 +3118 +-4675 +-1953 +3120 +7570 +-3262 +7366 +-4890 +1772 +-6475 +1933 +7061 +-445 +5329 +8008 +-3932 +-293 +-8456 +5571 +-565 +3425 +3170 +8064 +464 +-3478 +7077 +5110 +-6508 +-5543 +-705 +-3337 +-7530 +-9339 +3560 +7139 +7343 +7141 +9564 +-4111 +-9490 +-1821 +-9985 +2576 +-7205 +7191 +-5444 +6796 +-6926 +9721 +1394 +-4298 +-6150 +-5536 +-1250 +-5006 +-6111 +5080 +2453 +-403 +8281 +4269 +-5822 +-8411 +5823 +-3346 +-3315 +5880 +3855 +8201 +-8232 +-7652 +-1186 +9613 +3938 +7225 +-8205 +2033 +-1531 +2603 +6816 +-9138 +7614 +5459 +-9384 +866 +3535 +-4394 +-7830 +2867 +4229 +-5349 +3103 +6276 +-8437 +5768 +6287 +2607 +397 +-8568 +-1281 +-2197 +4008 +-6226 +2453 +5985 +6272 +775 +-2345 +-4841 +9231 +-9190 +5940 +3756 +-3985 +-6331 +-3509 +-146 +4854 +-3798 +-9890 +-2129 +5079 +-4936 +-9999 +1523 +-3794 +-4217 +-1037 +3626 +276 +8340 +919 +-6639 +8301 +-6721 +4596 +-9230 +-5764 +4489 +1611 +-7785 +-6835 +-5305 +-8073 +-48 +9550 +-8882 +8669 +253 +-1741 +-659 +4646 +2692 +-9447 +-5989 +9594 +-7107 +-8833 +-983 +-6405 +2139 +2923 +-133 +-1586 +5784 +20 +180 +-1390 +-7801 +8472 +7549 +8053 +-8858 +895 +-7817 +3528 +2500 +-4475 +1315 +-7397 +632 +6908 +5703 +-5305 +9522 +7191 +3642 +3526 +-8196 +8630 +396 +3596 +-7789 +4070 +-6589 +472 +1071 +-4740 +-1659 +5370 +7276 +-8146 +-6216 +-8838 +5525 +-4790 +-9935 +5049 +7414 +364 +-9200 +6417 +6768 +3476 +-8013 +7632 +-8177 +-1509 +1170 +9203 +7620 +-5594 +1621 +-7476 +3400 +-4650 +7632 +2425 +-7862 +-7458 +1016 +-6896 +-9439 +-8774 +7251 +6147 +4123 +751 +3363 +5098 +6364 +9467 +-4260 +-5120 +-1481 +4371 +-4035 +-6198 +8571 +-7615 +-4522 +8213 +9427 +-1024 +3696 +-2054 +8809 +-1714 +-5975 +8009 +-1634 +5918 +9077 +4352 +-923 +7372 +8729 +-673 +-9163 +2249 +-7707 +-103 +2494 +3721 +2328 +-9286 +-8002 +-3095 +-1204 +281 +4600 +2368 +-732 +753 +-5899 +-191 +5556 +-3667 +-8656 +-6455 +-7853 +8305 +-1375 +5356 +590 +5754 +180 +8194 +1564 +5176 +-8392 +2792 +-8569 +-7693 +7890 +9457 +-9977 +7789 +-4271 +-2300 +-9334 +2532 +887 +-2130 +9776 +-1771 +-7344 +9473 +8507 +-1284 +-6314 +-6336 +-7142 +-9047 +3723 +8294 +-1750 +-7101 +1981 +1288 +5483 +-2651 +-621 +5167 +-2590 +253 +-4246 +6073 +6873 +-529 +1 +-3765 +6813 +5186 +7161 +4559 +8805 +-6525 +9923 +-3941 +-6892 +-2680 +5267 +3560 +9000 +3128 +610 +-1286 +-1300 +-6536 +2110 +4245 +5253 +-1662 +-5032 +9473 +8415 +1752 +6319 +-6247 +-7663 +-7801 +422 +2134 +739 +6602 +-9240 +-7130 +-9963 +-2467 +-1 +-9404 +-6835 +-8579 +-5400 +-656 +-8794 +-7439 +-8176 +7725 +7096 +5010 +-6739 +7229 +-2729 +-4650 +3236 +-7482 +-2722 +169 +-528 +4060 +-1676 +2453 +8566 +-1312 +701 +7544 +3560 +9673 +-135 +-2114 +2322 +4008 +-9736 +-3007 +9069 +6188 +-6908 +-5561 +6967 +5072 +745 +5029 +7569 +-4630 +688 +5224 +9595 +4588 +-7360 +-2515 +2836 +2490 +8987 +1241 +9242 +-9583 +-177 +-764 +3400 +3721 +-6846 +-3425 +-3627 +-7369 +-3582 +-1933 +-8232 +-3626 +-477 +-8286 +-4991 +-6207 +8424 +-7109 +2820 +4594 +130 +-2768 +3560 +1238 +-239 +4753 +-1124 +-4012 +1129 +2276 +3838 +9583 +-8503 +4790 +-4184 +8053 +-2978 +797 +-6619 +-5464 +1836 +1079 +1004 +-1408 +2006 +4363 +2307 +6532 +-5684 +-3723 +-8752 +-143 +5480 +6796 +-1828 +9043 +-7237 +5985 +-9778 +6423 +9968 +-6465 +-1334 +-1325 +7830 +4383 +-4457 +-1810 +-1416 +-7995 +4588 +5789 +3226 +-478 +-9285 +4149 +-3202 +6114 +-1813 +1805 +-6589 +-3115 +-8707 +-4468 +-1714 +2091 +-7410 +-1513 +-2081 +9303 +-8267 +-8744 +4573 +-4484 +1042 +9322 +5759 +-2799 +7680 +0 +-2014 +61 +-2929 +-1312 +-9602 +4543 +-3237 +-5526 +-4992 +-4948 +-5686 +7529 +-9190 +-7764 +1657 +-710 +-5659 +9381 +-8135 +5054 +-6457 +-5982 +9114 +3042 +5448 +-2178 +-6430 +4588 +1013 +-2595 +8703 +-2840 +-5698 +5487 +-9043 +-1282 +-6444 +-1108 +-5864 +-2208 +1511 +-2031 +-9236 +-729 +9224 +827 +8056 +-6344 +-1164 +-573 +-5381 +6844 +-7 +7937 +-2322 +4919 +-9011 +2173 +8393 +-7258 +8365 +-9161 +-5246 +-5207 +5072 +-6333 +3718 +10000 +-7441 +-2935 +9814 +2695 +8046 +7676 +3305 +9084 +-4650 +-2418 +4010 +7494 +-6248 +3560 +280 +5432 +6063 +6366 +-905 +187 +-3138 +534 +-545 +5926 +8485 +-4359 +7191 +-3249 +2114 +-762 +-7813 +-7482 +-4471 +-5492 +8979 +-3179 +-9263 +-4530 +165 +4163 +1954 +-3173 +1349 +-2931 +6813 +1025 +-2159 +3166 +-9221 +1849 +2724 +-8917 +-5437 +7500 +-3249 +-9879 +9860 +-3048 +3902 +5146 +-5733 +-6925 +-7155 +-210 +8105 +3916 +-418 +-6188 +8646 +2213 +-4519 +-5311 +-6491 +1267 +775 +-327 +-2686 +8611 +-9001 +-9919 +-4623 +-8561 +171 +-215 +7349 +-4262 +-9954 +5768 +-7726 +-1864 +8674 +-6014 +9506 +-84 +5353 +-4504 +3197 +7762 +4529 +6986 +349 +-6851 +4396 +-8307 +-4936 +-9063 +-9274 +-1692 +-4253 +9763 +-1563 +-4803 +1353 +3875 +-9401 +-488 +6526 +-6007 +7267 +-682 +-6622 +6884 +-4364 +-7785 +-2154 +5878 +8799 +1042 +1908 +-369 +349 +9671 +-3882 +-8509 +1097 +-1514 +-750 +-4546 +4287 +-797 +6929 +5929 +9284 +4850 +6696 +3197 +3696 +1947 +-7697 +318 +1395 +-499 +6970 +9084 +-396 +1800 +-5232 +1170 +-4615 +-4111 +8570 +-7414 +-8478 +-2518 +213 +-115 +-9919 +1959 +-3183 +4086 +393 +-709 +3016 +-8749 +-6185 +-4289 +-9435 +-5201 +-8833 +6941 +8814 +2369 +6095 +9339 +-7842 +6104 +-131 +-1233 +9207 +1686 +4657 +3018 +4469 +-2199 +-8198 +-8221 +-8903 +4416 +-2933 +2281 +4856 +-8015 +5072 +4787 +-8804 +9659 +-7738 +5920 +-7130 +1538 +-2495 +-8865 +-3539 +5194 +9290 +4162 +6946 +564 +-6587 +9060 +5418 +4154 +8876 +3986 +1562 +4992 +-8339 +-3021 +3777 +-8999 +-5467 +-9257 +-4546 +5916 +-7039 +-3941 +-5047 +-8900 +-7581 +9981 +-9201 +-3112 +-5181 +-2673 +9207 +9658 +-4704 +5922 +-1954 +9237 +-4740 +7921 +-2076 +1954 +3102 +2429 +7550 +-185 +1083 +-1228 +-4950 +103 +-2209 +6662 +-9477 +4068 +-2967 +4864 +-8198 +4503 +3307 +-2866 +-8144 +6956 +-5883 +-7738 +-4270 +-1586 +4271 +-7061 +-1975 +-621 +-3641 +3531 +7126 +-7178 +-3393 +-7036 +-9970 +-8040 +3607 +2181 +-4786 +8493 +6552 +6066 +393 +-9384 +2688 +-8170 +371 +-7474 +-2101 +-5152 +-2686 +-373 +6294 +-8054 +9557 +4825 +-8378 +83 +-1083 +-1507 +8571 +768 +5824 +-791 +5326 +4472 +-6770 +3732 +3293 +-8824 +5281 +1754 +-7635 +7919 +9240 +4582 +7158 +8399 +-1526 +-4099 +-1760 +6099 +724 +255 +-609 +-6024 +-9917 +-4063 +723 +1248 +5624 +-7879 +-5063 +1164 +1981 +-6512 +-2809 +5501 +-1586 +2029 +1407 +-6063 +5814 +-8229 +4262 +-9167 +8948 +-6044 +-7308 +3080 +-1505 +6882 +3863 +1408 +-5167 +677 +1947 +6137 +-1223 +-1601 +-4522 +6737 +-4248 +6450 +8345 +2226 +-2725 +-7623 +-9521 +5568 +6654 +517 +4098 +-1609 +-6508 +-9967 +-3093 +-6992 +-5183 +-5507 +1762 +-895 +735 +-9285 +6225 +-3104 +-3427 +-7705 +-7842 +-8865 +512 +-1845 +-9326 +-5733 +-4191 +-1832 +4835 +8670 +-396 +-2407 +-1123 +-8854 +5921 +3385 +9981 +-5842 +5088 +-7593 +-7061 +-4137 +9929 +6457 +7779 +-2405 +-2345 +-4457 +-8815 +-3056 +-3906 +-7613 +822 +1418 +9607 +2173 +8010 +9360 +-5771 +-5504 +5371 +8014 +5967 +-8111 +9788 +-8605 +-9477 +4472 +2476 +-4883 +-7323 +6344 +3122 +6629 +8168 +7835 +-3683 +5266 +-7740 +-8097 +3952 +-5614 +5256 +-5887 +4144 +589 +-6664 +-988 +5947 +4098 +8943 +-4650 +2046 +3563 +-135 +-9746 +-3487 +-926 +-2628 +-5448 +7843 +6455 +-2591 +6450 +-873 +-662 +-9953 +-4624 +4510 +8397 +-1196 +-9973 +8383 +-7555 +7259 +-2686 +5584 +428 +6637 +2207 +5003 +-5568 +-3281 +7949 +-6536 +-7582 +-6926 +5391 +9114 +-9666 +-9576 +6742 +-5464 +-417 +8508 +-8800 +-8741 +-7180 +-8677 +6594 +3812 +-9608 +3883 +-3906 +-3183 +9200 +5965 +-4121 +9322 +8693 +-6648 +1159 +-1338 +8802 +-5828 +8611 +-5764 +7751 +-7224 +1434 +7110 +-5500 +6160 +-797 +5602 +-7445 +-2635 +6682 +-1609 +7537 +-1085 +5479 +8214 +6075 +-4660 +-9111 +1671 +2773 +-7083 +4411 +292 +3693 +-656 +5731 +5835 +-1268 +-2475 +-7474 +-4948 +3295 +-3056 +-3042 +1957 +-7053 +2334 +-7744 +6759 +3559 +8639 +-9481 +-2686 +2999 +-8228 +-7510 +-8587 +4963 +2335 +2042 +9381 +-3019 +-4891 +-8811 +-1947 +-9546 +-8418 +3664 +-8361 +-5223 +9763 +6251 +-7085 +4941 +3002 +8657 +7989 +-8212 +1241 +3777 +-3456 +8122 +318 +-5686 +-339 +-1301 +-7472 +-3992 +2474 +-111 +4212 +118 +-8880 +-4745 +-7441 +3660 +-9843 +-5423 +-6292 +9094 +7614 +6241 +3196 +-8270 +2731 +-7381 +-4993 +4411 +-4608 +-4546 +-6500 +-725 +-3519 +2839 +-754 +-6607 +1743 +-2321 +-5787 +-4305 +-7342 +-4936 +-4094 +7762 +-5691 +-990 +5649 +-5993 +7447 +4344 +9575 +-3261 +-229 +-797 +-232 +-5942 +-9827 +2075 +5181 +-4546 +-9664 +4560 +-1752 +1026 +5617 +-1821 +-8571 +9909 +-30 +-1430 +1204 +6423 +-4138 +-9236 +1126 +3299 +-7688 +6515 +7466 +5714 +-7549 +6547 +4262 +-7608 +-694 +-8972 +61 +3824 +-1236 +3855 +7550 +900 +-4111 +1751 +812 +-308 +-6252 +6980 +-6106 +-9291 +-9963 +9724 +-6341 +4196 +-4056 +9337 +6371 +741 +-8943 +2935 +4600 +9498 +-9621 +7433 +5044 +-9480 +-2884 +-1741 +1562 +6099 +-2558 +-8528 +6208 +-3266 +8701 +-6817 +4852 +-9480 +-5496 +9677 +-7625 +4179 +8068 +-2955 +-8503 +1071 +-7903 +4355 +7735 +-7910 +-1959 +4535 +-2771 +3007 +-6562 +5808 +5878 +-4857 +7646 +4334 +-5651 +9165 +-5966 +-6537 +-2845 +-9903 +2798 +-5801 +-4790 +-427 +5825 +-5686 +9551 +1458 +3151 +-5515 +-1529 +-2524 +1024 +9724 +-5485 +8963 +-3941 +650 +1925 +6478 +-4615 +3749 +5428 +7726 +3885 +-8270 +-5947 +-3170 +3490 +-5344 +-7698 +-7678 +5877 +-8966 +-4390 +-1411 +-5476 +-8835 +-3100 +-4268 +-8536 +-5630 +-9899 +-8137 +7472 +-2349 +8171 +-3892 +5258 +6364 +-2554 +7113 +520 +9069 +-3865 +-2074 +-2032 +9077 +7894 +7620 +1657 +-143 +5800 +2061 +-2247 +-4151 +-7193 +5948 +3264 +5333 +6354 +9776 +2139 +-9870 +8594 +-1921 +5712 +-4343 +9446 +-5591 +-5912 +-429 +-7205 +7778 +-4750 +2430 +5862 +-2728 +6424 +-2809 +4599 +-4054 +-2676 +-7098 +-9041 +-6193 +-7202 +-3056 +3864 +3349 +5362 +2219 +3095 +7376 +3215 +8294 +-710 +-1117 +9583 +8970 +2861 +-9602 +-6076 +-3282 +-1828 +-3421 +5680 +-6987 +-2034 +3938 +-1922 +7835 +-2793 +-7983 +2563 +-8159 +8336 +8318 +489 +-5303 +5242 +2694 +7231 +1467 +7068 +4203 +3263 +-1213 +-3797 +323 +-8774 +-5373 +-6834 +-5456 +1170 +3615 +3095 +-4971 +-5042 +-5279 +-4367 +-6268 +-1531 +-1505 +67 +-3379 +8615 +-8269 +-7475 +-3414 +9806 +-1949 +-2501 +-420 +2264 +-7479 +1359 +6395 +8630 +-2707 +-1227 +-3175 +-7680 +-373 +-5509 +167 +-487 +603 +-5446 +-7180 +-8030 +1572 +6946 +7606 +-9664 +1595 +-4979 +-9414 +4114 +8363 +3364 +-7912 +8441 +-406 +-4613 +-3711 +8746 +5713 +8225 +7238 +-3135 +7374 +5662 +664 +-1024 +520 +9766 +5325 +-6461 +8987 +-5069 +8009 +-5359 +1787 +1847 +-5975 +-673 +-4042 +-2803 +-7998 +6131 +1565 +7894 +-3684 +-9313 +-805 +7569 +7393 +9571 +7387 +2324 +-2126 +-8162 +-7296 +-916 +7697 +-6896 +-1108 +-790 +-9884 +5326 +-1110 +7854 +3838 +-5359 +-4238 +1321 +4374 +-6474 +7988 +-1228 +-8528 +71 +9191 +-4690 +-7052 +8824 +6168 +-6961 +6466 +9788 +-8111 +-7533 +-9257 +-2808 +-3337 +-9181 +-6207 +-5807 +6193 +7868 +9919 +5009 +2499 +2045 +4302 +2217 +-266 +2281 +-6256 +-6388 +9261 +-9264 +-6523 +5702 +-6586 +1299 +7141 +-8547 +-8972 +8027 +-1756 +8902 +-729 +1129 +5075 +-6840 +2882 +-4856 +-1791 +-9433 +-783 +-6995 +4202 +9343 +935 +-7680 +-5623 +-4841 +1630 +-1237 +-1731 +-2848 +6383 +-2809 +-9236 +5250 +-8525 +-1326 +-3045 +-1254 +-5637 +8672 +-9884 +3831 +3404 +-9361 +266 +-4910 +7472 +-7381 +-1396 +9491 +5517 +849 +-743 +8979 +-7010 +-203 +5480 +-3941 +711 +5747 +-9919 +7779 +3264 +3045 +-6809 +-7414 +8213 +-4971 +-7177 +-1653 +-9236 +6165 +-9297 +5500 +-128 +5517 +-7497 +3787 +8940 +-5791 +-3555 +6707 +-5464 +-5415 +1866 +9217 +822 +-6096 +-7623 +9364 +2219 +-5769 +9356 +-9870 +-399 +3472 +-5279 +-5097 +5500 +3228 +-4131 +-7542 +-6391 +2418 +-6896 +-9143 +3626 +-8919 +-5918 +1903 +-9433 +-3677 +1660 +-3519 +3795 +4553 +8088 +-2230 +-3104 +-6525 +-7841 +9658 +-2580 +5087 +-7113 +-1721 +4498 +7057 +7009 +-6797 +4716 +2096 +-7673 +7132 +7041 +479 +7088 +-9072 +-9855 +8421 +-3537 +-9712 +-2183 +-6966 +-891 +-7258 +1064 +7267 +537 +-9154 +-2978 +-7904 +-7014 +-6024 +7943 +-3248 +-9384 +-1078 +9247 +9571 +-8221 +7143 +-9334 +2032 +-8971 +6450 +-3068 +-7457 +-9717 +-4128 +4441 +-675 +632 +-946 +2410 +-1813 +1754 +-6064 +5660 +5565 +-7234 +4145 +-8950 +4196 +-4796 +-3110 +-1405 +-4566 +-3527 +-3269 +3470 +-8883 +6085 +-4637 +2833 +4771 +7197 +-3546 +3559 +-7582 +1161 +9958 +-5593 +8989 +-9982 +-5988 +1205 +3666 +-646 +836 +4541 +1129 +3267 +-2960 +5624 +5760 +2762 +4035 +-9282 +-1050 +-5813 +8434 +1569 +6002 +-682 +5267 +-7113 +-7842 +-5099 +-446 +-7000 +7396 +-7022 +3299 +1012 +-8054 +-2492 +-4919 +-5530 +-6125 +8009 +-9367 +-5273 +8392 +2971 +1533 +-9689 +6496 +-197 +-1310 +6439 +2115 +-7582 +2362 +8956 +8989 +6737 +-9063 +-5561 +4271 +-1505 +1587 +731 +9703 +-2397 +-3666 +-4979 +7665 +-477 +8040 +9703 +-6208 +3143 +-884 +9073 +-3071 +-6384 +-3546 +-1613 +-6242 +517 +-1577 +-6226 +5384 +6050 +4751 +-3058 +3002 +6486 +2173 +3063 +-2418 +781 +1205 +187 +-9200 +-9110 +-6761 +-7592 +-3121 +2533 +4603 +7132 +-6998 +-2883 +-8855 +5457 +8902 +7230 +-6676 +8486 +-6047 +-4340 +7934 +-4366 +4918 +4038 +-3711 +5007 +5483 +-650 +3971 +2478 +5042 +-8956 +-4153 +998 +-6222 +4488 +1894 +-4353 +3363 +1288 +-6842 +-2960 +-3536 +-1017 +6693 +5052 +-7618 +2798 +10 +-5605 +5789 +5284 +4726 +-6049 +-1761 +-210 +3661 +-8271 +-1297 +-8139 +-6698 +153 +-4217 +4010 +-4936 +-7676 +3388 +1473 +-2573 +6394 +-1687 +-9946 +9063 +3560 +6043 +1071 +1205 +7929 +5728 +7603 +-8195 +-7 +-9047 +3522 +-4271 +-9498 +5595 +-9898 +8377 +-8718 +1071 +-7657 +-2542 +-6198 +753 +-4758 +-6801 +3864 +1947 +-6537 +4290 +-9359 +9063 +-2905 +1458 +-7715 +-7707 +-2445 +-2291 +-109 +-4173 +-9050 +8993 +-9816 +2461 +-9950 +-3360 +1944 +7417 +840 +7387 +594 +9700 +2705 +-8208 +5356 +843 +7846 +-1219 +276 +6097 +-8716 +-5509 +-4408 +8294 +-3530 +-5698 +-2332 +-5520 +3540 +-4117 +546 +7788 +9392 +-8263 +-945 +-3824 +8895 +-4056 +-5887 +-9333 +-2703 +-5111 +2952 +6109 +-1440 +-3104 +6393 +8378 +-9368 +5794 +-4992 +5929 +6548 +-4607 +-2235 +1763 +-4065 +2867 +856 +-2491 +-9602 +3845 +-1283 +-9647 +-2781 +-8528 +-6234 +2042 +-4111 +4348 +1467 +-7367 +-6105 +-5892 +-5496 +-6096 +9600 +4434 +-4421 +5484 +1027 +-3781 +-5777 +-6253 +942 +1275 +-6474 +-7742 +1043 +-3183 +6768 +-5048 +1395 +70 +-4969 +6718 +-4790 +-7110 +-4509 +8652 +-9081 +4647 +-1796 +-7702 +8256 +9152 +6592 +1567 +5715 +5500 +-9671 +5504 +3234 +-3151 +9556 +7827 +-3739 +7552 +6132 +4371 +-2890 +9708 +8725 +4058 +-3594 +-9973 +-9363 +-3765 +6079 +7072 +-1375 +-8439 +-2208 +9990 +5617 +-2923 +8501 +3531 +-168 +-6796 +-7545 +-674 +-9966 +-7166 +-5087 +7957 +6554 +-2921 +-7533 +4760 +-8041 +-14 +-1551 +3928 +8505 +5392 +-5037 +-4432 +4257 +-7130 +7989 +2217 +9518 +-7985 +-116 +4269 +824 +2800 +7665 +-7385 +422 +-9963 +2061 +8257 +-8135 +8424 +-4344 +-7538 +3551 +-3639 +5914 +-6418 +9763 +1435 +384 +6362 +-1208 +-266 +4716 +-3912 +-4559 +-3482 +3731 +9839 +9928 +8578 +2680 +-5464 +-3278 +-198 +-2448 +2148 +6578 +8053 +4704 +9280 +-8254 +6250 +4394 +-4274 +-9172 +-623 +6312 +-3125 +6364 +4119 +-877 +2666 +-7146 +-9994 +7938 +2158 +3867 +-6614 +-8229 +5235 +992 +294 +9133 +-1023 +-4422 +-14 +-8083 +1757 +3285 +-47 +6664 +-8972 +-3693 +-3948 +6731 +-4042 +-510 +9800 +-673 +1434 +-7423 +-3274 +-3669 +7259 +5264 +-8177 +-3148 +5517 +-9341 +-3220 +-2997 +1616 +5897 +1872 +2651 +7136 +-1385 +-9722 +-6779 +-4919 +9201 +3047 +-983 +-6151 +-4974 +-863 +-8674 +84 +-5738 +7206 +820 +2162 +3931 +-4637 +-7110 +1533 +-8579 +-6558 +9202 +6872 +-2020 +9492 +-7607 +1309 +-4446 +2461 +-4893 +3357 +-9841 +-9509 +-5683 +87 +-1831 +583 +1863 +-4993 +-44 +1959 +9152 +-233 +-7474 +5451 +3229 +6045 +534 +-2574 +-8414 +-9455 +-9416 +6131 +9106 +1220 +-3851 +-9621 +8579 +-185 +377 +1385 +1506 +3418 +6467 +-1465 +-6347 +-673 +8788 +-124 +6200 +-9919 +-6815 +-9935 +-4574 +7843 +-6582 +-2651 +704 +-8159 +-1587 +837 +3229 +4704 +-686 +-210 +-9249 +-339 +7139 +-8195 +7892 +3474 +-7549 +3041 +6612 +5796 +7676 +-6953 +7854 +6097 +4582 +-9904 +-7839 +-3639 +-7744 +2731 +-5922 +-4943 +-3052 +-2066 +4135 +-9644 +9550 +-7812 +5396 +-5075 +-1334 +-5533 +-3948 +-3906 +638 +4119 +6759 +9125 +8809 +2561 +-9900 +8570 +3783 +3531 +5504 +-8807 +-3778 +1374 +4910 +-5623 +741 +-7467 +-9301 +-987 +-6874 +9094 +751 +6111 +6806 +4639 +-9858 +-7108 +8952 +-6961 +8295 +-6926 +-2915 +-7968 +-7586 +1533 +4352 +-553 +9322 +5568 +6588 +-9917 +-9326 +3131 +3642 +-4546 +-6430 +9556 +9247 +-3670 +-7011 +-5944 +-686 +-6491 +-9870 +-9939 +7393 +-9372 +-4148 +1225 +3979 +5298 +2475 +-3006 +9677 +1161 +603 +677 +2627 +192 +2786 +-4422 +2462 +8142 +1206 +6219 +8542 +4486 +-2707 +-3315 +8899 +-6761 +949 +-2110 +8244 +-7637 +-1505 +3670 +8790 +1295 +-8387 +-2081 +-3948 +-7740 +-132 +9217 +-5527 +-875 +1087 +1053 +8979 +420 +-84 +8191 +-1955 +-8294 +-1223 +4280 +-7582 +-8369 +6113 +9191 +7651 +-750 +6777 +-3048 +-116 +-750 +6164 +4393 +-4170 +-3370 +2941 +-403 +-8804 +464 +-9274 +-9890 +-8213 +-8144 +-541 +-2157 +-4745 +-2990 +-8667 +-9733 +7789 +-8614 +5357 +-4657 +8119 +7166 +1992 +-2580 +-3615 +6306 +-7385 +4734 +-2744 +-4447 +7261 +258 +-8357 +3248 +2475 +7676 +-3620 +4114 +6099 +9177 +-6567 +-8953 +3664 +-8369 +-9285 +1362 +364 +-8002 +2332 +7051 +4249 +-5437 +5502 +5710 +5171 +-6809 +-5087 +-4536 +7066 +-7082 +-8388 +2090 +-2610 +-3381 +6777 +1798 +3610 +-375 +-5069 +6903 +2027 +1489 +8557 +4812 +-1940 +1271 +5073 +9356 +-1505 +8028 +847 +-680 +-3866 +-7178 +-9155 +3558 +4434 +4411 +-7248 +-5565 +1752 +7957 +6969 +-8133 +1620 +-9917 +8507 +5889 +-6185 +-6834 +-3567 +-8991 +3102 +8392 +5517 +-8708 +-5865 +-1266 +4133 +-656 +-4856 +-7671 +-4509 +-5218 +-4673 +5693 +-7012 +-6215 +-3045 +-9764 +-7623 +-373 +-2795 +6496 +7824 +5668 +-3177 +3107 +-9644 +-1273 +9839 +7437 +-7476 +-7005 +-1563 +-4318 +7598 +1697 +-9420 +4696 +1336 +8244 +-1501 +8368 +-2524 +-7550 +-3237 +201 +-3364 +-5869 +-7735 +7808 +-7454 +-3643 +9763 +7845 +8048 +7026 +7155 +-321 +-1627 +-1499 +771 +6099 +6393 +1418 +6028 +3896 +-5258 +-6344 +-2803 +7676 +-308 +5716 +1967 +7989 +-6059 +-9987 +7440 +-1036 +-5349 +-5470 +-1406 +4691 +8343 +191 +-966 +-4597 +7781 +-9051 +2298 +-8418 +5054 +-6866 +-4604 +7260 +-7803 +8490 +-2676 +3320 +-8179 +2306 +-5508 +-9143 +-6815 +5617 +7053 +-2493 +-6201 +-784 +4886 +4434 +7117 +837 +-515 +-198 +5828 +-4578 +-8275 +8909 +-429 +-9731 +2232 +-7013 +3248 +-6896 +-3691 +2266 +-1488 +6298 +192 +5010 +1786 +-7556 +-3095 +-5026 +7243 +1172 +-9130 +7009 +2415 +6592 +-4521 +-9022 +7136 +6844 +-6293 +-1723 +-3745 +5808 +6149 +6451 +-1970 +9550 +-6698 +7893 +24 +489 +9779 +5395 +9854 +396 +-8373 +-3452 +-8201 +-9970 +-2702 +-4274 +8809 +8401 +-3863 +2800 +-4299 +2994 +-4259 +-6728 +-6405 +-3428 +3875 +7816 +-2708 +8876 +-3505 +-8300 +5871 +8967 +-6252 +-3858 +9469 +412 +4753 +-6491 +4835 +4925 +6574 +-9925 +266 +3233 +7546 +9654 +1416 +-8540 +-7010 +-5790 +4967 +4614 +-8167 +-473 +-2392 +-9904 +1800 +1418 +8260 +5985 +-2573 +601 +5244 +-4061 +-7123 +8493 +-9154 +3463 +-7705 +7421 +4856 +6114 +-9967 +2190 +3410 +-5090 +-5799 +4135 +9395 +4290 +4930 +9432 +8611 +1210 +8213 +518 +-9713 +-8102 +9941 +924 +2501 +2257 +-549 +3588 +-7607 +4403 +4585 +3302 +-1543 +-8666 +-2462 +3425 +-5121 +6969 +9360 +711 +-6116 +-8139 +5041 +-1245 +-4690 +-1586 +-8460 +-5903 +-5797 +-6252 +3816 +2915 +6540 +1954 +-7587 +-1406 +5475 +5416 +6830 +1657 +-5873 +-3539 +-8096 +2947 +-7476 +-4968 +1511 +9388 +-5790 +-6986 +-2811 +3002 +9226 +576 +3425 +6111 +-9528 +3063 +8954 +2054 +-9702 +-2929 +4842 +-1291 +-6812 +-8555 +6768 +5078 +4927 +723 +6995 +6264 +-7880 +-2936 +-9011 +-6426 +-3686 +-8354 +3794 +4785 +7067 +7788 +-3798 +-9509 +-8560 +5219 +3113 +-4770 +-6815 +4334 +-6303 +4913 +-8177 +6131 +-7490 +590 +6261 +8336 +-8369 +-6960 +7247 +-3588 +4097 +-1629 +2876 +-3949 +7949 +-8723 +183 +5002 +5516 +8492 +-6027 +4974 +-2412 +4661 +-5276 +-4931 +-2628 +-9156 +4931 +9081 +-7643 +3595 +-9927 +1181 +6314 +-1597 +-7100 +-4022 +3665 +6538 +-8403 +-5480 +-446 +315 +-3937 +-1936 +-9270 +-9690 +-1169 +-7010 +6168 +8502 +-4222 +-1051 +-6553 +6333 +1544 +-2017 +-5464 +-7482 +687 +1725 +-6209 +8392 +-34 +7972 +8979 +9077 +-7938 +-9361 +256 +-4655 +-2467 +-2902 +-9665 +4498 +-8345 +7106 +6915 +-9675 +5730 +2515 +1063 +9378 +-1076 +6589 +1533 +7022 +-2931 +3513 +1820 +5391 +7634 +2442 +9557 +-8749 +3563 +-2332 +-9249 +-1027 +-6327 +7372 +-642 +5526 +-5594 +5760 +1321 +9942 +2476 +9233 +2257 +-6184 +-3397 +7736 +-416 +5258 +9428 +9446 +8392 +-9061 +1640 +-2231 +-5323 +-9565 +-705 +-406 +6816 +7827 +7908 +-5740 +5792 +3400 +2415 +4338 +-4690 +7097 +3545 +4876 +-9263 +-9953 +8122 +-9236 +6791 +-1949 +1439 +-7993 +-2267 +-167 +8095 +-5510 +-7584 +6532 +2033 +4825 +2175 +928 +-2074 +1550 +-2551 +383 +6158 +-9163 +-7472 +-714 +-124 +-479 +5923 +-4340 +995 +-863 +-4221 +6507 +-7138 +-1416 +-9710 +-3987 +6613 +8010 +5842 +8294 +2692 +-4693 +-6024 +-3110 +2822 +2162 +7707 +-4305 +-2559 +1670 +1789 +-3505 +-6 +6744 +-389 +-471 +7528 +-7592 +-7527 +-2458 +-8281 +3824 +6552 +3502 +-3756 +-8149 +9255 +305 +2461 +-6750 +-2330 +-6266 +-7891 +-2400 +-3029 +-9346 +843 +-7232 +-2838 +-3555 +1479 +1014 +-3121 +-5063 +-7698 +6187 +-4042 +-19 +6719 +-6063 +-3969 +-9492 +583 +731 +-1601 +-5655 +-8631 +-6425 +-227 +3343 +-3246 +-7353 +-1959 +6252 +2303 +-7090 +-9361 +8835 +-2300 +7523 +7110 +-7606 +335 +7178 +-852 +-813 +9226 +-9191 +8722 +8455 +2499 +-7499 +1908 +-2650 +-4039 +2271 +-4993 +-4801 +-6318 +3731 +8856 +8793 +-4498 +4581 +-5651 +8640 +9247 +3018 +-9716 +1294 +1968 +2379 +2544 +8451 +9043 +-2392 +-6796 +-6266 +-8138 +8997 +-5084 +-1412 +-7146 +7877 +-1273 +-1945 +3469 +2952 +-3823 +4850 +-8504 +-6220 +-7454 +-6834 +-7010 +-4793 +-8896 +-4520 +4960 +6028 +-4044 +-5612 +7290 +-4042 +-6570 +8443 +3714 +-6631 +-3458 +-6896 +-6149 +4887 +-2273 +-73 +-3851 +-1421 +3011 +6980 +-358 +6793 +9284 +5412 +9563 +-5308 +-493 +8309 +-4962 +-5637 +-6991 +2154 +-3562 +-5673 +-4353 +-3299 +-8364 +-906 +-7155 +8750 +4294 +-7180 +-1078 +3821 +-6465 +-3492 +-9006 +-5026 +-4899 +7993 +-8864 +8138 +8471 +7908 +1679 +-6675 +-2552 +4162 +436 +-706 +5412 +8883 +9077 +-9834 +-7971 +6299 +8462 +-8854 +2971 +169 +1533 +50 +6663 +3215 +-8125 +-6797 +-6992 +-3871 +-1226 +3138 +-5538 +6065 +4199 +-5014 +-3346 +-9334 +9486 +1523 +-4485 +7129 +-5530 +5371 +-5912 +3559 +2096 +2422 +-3716 +-8047 +-9412 +7079 +8136 +3477 +-9375 +-382 +5237 +4369 +2905 +-6229 +6326 +-1017 +-812 +2533 +-6746 +-6733 +648 +150 +-7688 +-3669 +-2467 +-888 +-6597 +-2616 +-83 +8411 +2533 +3211 +-2438 +-6834 +9000 +5995 +1467 +6241 +8281 +-7010 +-4066 +377 +6164 +-9193 +5799 +5854 +1664 +8710 +-6129 +4973 +5300 +2362 +3839 +-5673 +9374 +-8723 +-2606 +-3794 +-6401 +-9982 +1292 +7222 +-6895 +1442 +7731 +-3719 +8434 +-8213 +1429 +3853 +2967 +-9092 +-252 +-8124 +-3593 +1564 +-2076 +5036 +-7735 +7900 +-8004 +9467 +3615 +-4542 +4683 +7049 +5617 +83 +7308 +2836 +-1845 +-3705 +-6734 +-7088 +6975 +-8319 +-6658 +-8504 +6395 +7459 +-6925 +8301 +-7779 +-6227 +4398 +-3816 +-5467 +3463 +546 +6231 +9566 +-4796 +3855 +-5224 +9872 +2876 +-5388 +-3370 +-9233 +-1428 +-3058 +9358 +6068 +-4076 +4114 +-9773 +-1190 +8371 +8837 +-6076 +-2799 +-1479 +-1388 +9360 +-9450 +9488 +-5975 +8997 +5321 +-6587 +-7340 +-5332 +-1708 +3175 +4133 +-2001 +-3084 +-5879 +-6532 +7685 +-4758 +-6736 +-4580 +-7476 +4665 +-6987 +9379 +7206 +-9366 +-4042 +1434 +517 +-9409 +2822 +9069 +5602 +7943 +7016 +-9106 +3664 +3651 +-9914 +1321 +4349 +6661 +8808 +-6586 +-575 +2944 +-1035 +5627 +-681 +1267 +3189 +-9948 +-782 +4756 +4830 +-2527 +5224 +6504 +-8828 +6566 +6830 +5477 +-5157 +-4604 +7262 +1310 +-6779 +-6332 +9662 +-9054 +-9238 +-4899 +2362 +4058 +-304 +-3639 +9680 +7652 +9237 +9600 +8291 +-7726 +-2115 +-5764 +9140 +-5437 +4727 +-843 +-6565 +6628 +285 +-5828 +-6198 +4038 +-1585 +-8707 +-7594 +9417 +-1556 +-6458 +-5710 +-5301 +-6397 +-9288 +-3566 +-9369 +4535 +-4574 +412 +7830 +-9834 +1079 +-3357 +6770 +2461 +5778 +-4324 +1280 +-142 +8294 +-7671 +6098 +-4948 +-7907 +3918 +7386 +3669 +1506 +731 +4250 +-8663 +7825 +1056 +-3691 +9084 +-9337 +-370 +-2524 +6219 +-4498 +-8995 +6792 +2338 +-4509 +6451 +-7760 +-8657 +8049 +-6821 +-9390 +-448 +4258 +-3458 +-4560 +1657 +9106 +8188 +-3546 +-6345 +-7814 +7959 +9201 +7382 +-2049 +9564 +1908 +2820 +-3249 +-9404 +6969 +2131 +577 +-2657 +-2749 +-5613 +-2210 +-3187 +-8496 +6141 +-5966 +7096 +8122 +-266 +-6193 +-2039 +8246 +5663 +-3496 +-294 +-227 +-6874 +-5851 +8168 +7574 +9561 +-4271 +-6635 +7088 +-6442 +-8663 +-3056 +-3948 +6359 +-2129 +-203 +4930 +-1529 +1616 +5321 +1079 +-5475 +5721 +1365 +3776 +7690 +-933 +-1653 +6163 +9174 +-3535 +2602 +-402 +7552 +-7555 +3456 +6346 +591 +8610 +-1531 +-8517 +-3311 +-198 +-9971 +-4675 +7140 +-7607 +5797 +-6567 +-9193 +7356 +-875 +3107 +-5520 +-9770 +-9250 +-9881 +-5032 +-6659 +9278 +-5301 +1013 +1107 +-2974 +-4756 +-8625 +207 +8012 +-8900 +7231 +-5320 +-1345 +8013 +8318 +7868 +-8183 +-6345 +-7921 +7952 +-4451 +-6228 +-7414 +5438 +-6936 +1798 +-2183 +10000 +-9052 +-8096 +-2006 +3837 +6620 +-3739 +6587 +-2692 +922 +2306 +8611 +-4596 +6349 +8729 +-8102 +-8030 +9872 +-5500 +-4675 +-1813 +-4225 +3477 +-7100 +-676 +9201 +-5077 +-1759 +-1297 +3069 +-1731 +2604 +8094 +7723 +-4253 +-9501 +-7593 +-6253 +-2500 +603 +-7010 +1686 +5041 +6806 +-6222 +-4558 +3874 +2265 +-3360 +-3406 +-7618 +5525 +-748 +-7785 +902 +8260 +-9780 +3062 +825 +-8286 +-2131 +-8398 +1660 +3102 +5791 +-724 +2532 +2276 +-9211 +2247 +-85 +524 +-7998 +7182 +9632 +6232 +-3940 +-3571 +6467 +5254 +5854 +8795 +-686 +-895 +8984 +1981 +-4421 +6802 +1798 +-6164 +3693 +-6461 +2544 +-8806 +6699 +-1954 +-4089 +3709 +-6817 +-1526 +-7152 +-5599 +6718 +-6556 +-5476 +-3862 +-3448 +294 +3759 +5258 +3044 +8171 +8698 +-4887 +-2528 +-6303 +-8950 +-9369 +8738 +5926 +3896 +2267 +9870 +5290 +-3337 +-4956 +5088 +3306 +8805 +-3391 +5799 +8595 +5408 +1856 +-9773 +5694 +6616 +6937 +4679 +-3519 +6047 +8294 +-9138 +-2749 +6966 +-9746 +-7010 +-2686 +-6397 +-3682 +8908 +-6926 +-4608 +-7151 +395 +-969 +-5359 +2025 +-7400 +847 +-6446 +9341 +3138 +6165 +3254 +-5359 +6767 +3203 +7565 +-7248 +3374 +-8926 +2181 +3913 +1175 +-3706 +-3860 +5699 +7178 +-5186 +2985 +-7577 +9457 +-7048 +9563 +5328 +9360 +-1213 +-9763 +1418 +3583 +-5593 +7924 +-3701 +-1110 +-7801 +7989 +3267 +-5531 +8324 +-5592 +-8514 +5721 +-1401 +1202 +6050 +395 +-8275 +-9110 +3947 +2490 +-1081 +3862 +5342 +-807 +9286 +1763 +-835 +148 +-3679 +3305 +7422 +-1591 +-4839 +-4856 +-4169 +-3217 +-4790 +-9397 +-2491 +9006 +8360 +7433 +3989 +-2131 +-9948 +-403 +-3967 +8856 +-7718 +-3221 +3709 +-1060 +6230 +-6564 +-2912 +-805 +9764 +7201 +-4623 +-529 +2695 +-2241 +-9134 +-1945 +-7993 +4233 +-8387 +5914 +1458 +9986 +4056 +1148 +695 +8576 +1518 +-1219 +9727 +-3151 +-8442 +-8850 +8563 +-7632 +9764 +5584 +610 +-8665 +8058 +8701 +184 +-4650 +1872 +6193 +5130 +7031 +2379 +9845 +1023 +8171 +-1816 +-5136 +-8903 +2929 +8421 +2067 +-7353 +-639 +-3379 +5044 +-8047 +7321 +-2803 +5158 +-1416 +-621 +-4012 +-9265 +-1074 +-6622 +939 +-591 +9894 +-4540 +6085 +-1348 +7568 +7038 +-4183 +4443 +9218 +-9319 +5446 +4631 +-1760 +8289 +6354 +5828 +1821 +1389 +-5309 +-6388 +-3970 +6986 +-568 +-1310 +5040 +1349 +-9439 +2312 +4600 +-7107 +6504 +-1759 +-5630 +2276 +3985 +-1796 +-7477 +-9418 +-8063 +-4993 +-6232 +-4560 +-775 +1258 +7336 +-1830 +-4175 +-7985 +7788 +5674 +1016 +572 +-2939 +138 +-7149 +-9142 +-9230 +6146 +-3100 +-1791 +-1 +-7217 +-782 +-6731 +-4485 +8328 +3838 +9070 +-4604 +-6114 +4422 +-9498 +1086 +6759 +4735 +2293 +-5884 +-9073 +-6594 +1416 +2923 +-2933 +4349 +-8421 +-7591 +8640 +276 +-2652 +-1576 +-5218 +9321 +1981 +25 +5687 +-9111 +-7554 +1251 +-9384 +-9937 +5993 +-5741 +-6305 +-2303 +-8953 +3730 +-5857 +-3796 +-7474 +-716 +-81 +4162 +4341 +466 +2215 +-7515 +1565 +-7898 +-8746 +-6988 +4513 +3219 +-6317 +-2091 +-2317 +-3938 +9077 +-8998 +9191 +3673 +1790 +9940 +1273 +9077 +8833 +-1008 +-7259 +-4586 +-7816 +-7912 +9077 +-8227 +-2847 +-4937 +-2890 +-3844 +1997 +-8167 +6251 +3522 +3285 +4214 +-1226 +-5790 +8275 +2697 +24 +2128 +-9450 +1655 +-2032 +-2063 +6995 +-3938 +3560 +6441 +-8357 +1204 +8394 +3293 +-7951 +8116 +978 +-6409 +-2624 +-7385 +-1740 +3533 +-7146 +2762 +3117 +9184 +6923 +7723 +8424 +-135 +1774 +-5469 +-8712 +-3311 +8275 +3842 +-6430 +6984 +-27 +-8524 +-2063 +1393 +3824 +-5438 +8399 +4126 +7222 +-528 +5757 +-4837 +-1983 +-9926 +2724 +5174 +-3073 +-3290 +3971 +-8228 +-2847 +-7457 +-3983 +9115 +9911 +8444 diff --git a/day20-scratch.lisp b/day20-scratch.lisp new file mode 100644 index 0000000..64af866 --- /dev/null +++ b/day20-scratch.lisp @@ -0,0 +1,241 @@ +;; https://adventofcode.com/2022/day/20 + +(in-package :day-20) + +;; so. how would i do moves in a list? +;; and are there duplicate numbers? +;; it's possible but not sure. +;; also in the input numbers are 4k 5k. +;; i guess on during the moving it would be best to figure out their index? +;; could i insert into list at index? +;; it could be nice to use just cycled list. but. +;; maybe use array? + +'(1 2 -3 3 -2 0 4) +;; calculating index and then modifying array. is it easy to do shifts on array? +;; and i'd sometimes need to +;; and how multiple passes work with going over self? +;; let's take a break +;; i guess i could copy part of array with the offset arrays +;; +;; the stupid version seems to be 4 cases : +;; - to right inside of array +;; - to right over with overflow +;; - to left inside of array +;; - to left over with overflow +;; but when overflow - could stop to the left or to the right of self. + +(defparameter *my-arr* + (aops:linspace 0 9 10)) + +;; imagine i'm displacing 345 by 1 to right +;; ( that would mean 6 moving 3 to the left) +(setq *my-arr* (aops:linspace 0 9 10)) +(let ((to-be-moved (make-array 3 :displaced-to *my-arr* :displaced-index-offset 3)) + (into-these-move (make-array 3 :displaced-to *my-arr* :displaced-index-offset 4))) + (loop + for i from 2 downto 0 + do (setf (aref into-these-move i) (aref to-be-moved i)))) + +*my-arr* + +;; now displacing 345 by 1 to left +(setq *my-arr* (aops:linspace 0 9 10)) +(let ((to-be-moved (make-array 3 :displaced-to *my-arr* :displaced-index-offset 3)) + (into-these-move (make-array 3 :displaced-to *my-arr* :displaced-index-offset 2))) + (loop + for i from 0 below 3 + do (setf (aref into-these-move i) (aref to-be-moved i)))) +*my-arr* + +;; now let's also remember "moved" element and put it to the "freed up space" +;; moving 6 by 3 to the left +(setq *my-arr* (aops:linspace 0 9 10)) +(let* ((index-of-moved 6) + (moved-value (aref *my-arr* index-of-moved)) + (move-by -3) + (to-be-moved (make-array 3 :displaced-to *my-arr* + :displaced-index-offset (+ index-of-moved move-by))) + (into-these-move (make-array 3 :displaced-to *my-arr* + :displaced-index-offset (+ index-of-moved move-by 1)))) + (loop + for i from 2 downto 0 + do (setf (aref into-these-move i) (aref to-be-moved i))) + (setf (aref *my-arr* (+ index-of-moved move-by)) moved-value)) +*my-arr* + +;; ok. but these 2 downto 0 || 0 to 2 dependent on -3 +3 and that's ugh + + + +;; moving 2 by 3 to the right (now displacing 345 by 1 to left) +(setq *my-arr* (aops:linspace 0 9 10)) +(let* ((index-of-moved 2) + (moved-value (aref *my-arr* index-of-moved)) + (move-by 3) + (to-be-moved (make-array 3 :displaced-to *my-arr* + :displaced-index-offset (+ index-of-moved 1))) + (into-these-move (make-array 3 :displaced-to *my-arr* + :displaced-index-offset index-of-moved))) + (loop + for i from 0 to 2 + do (setf (aref into-these-move i) (aref to-be-moved i))) + (setf (aref *my-arr* (+ index-of-moved move-by)) moved-value)) +*my-arr* + +;; so also difference in displaced indexes. +;; shift to LEFT (move item left): +;; +;; shift to RIGHT (move item right): + +;; well, i could just save this code as two separate functions +;; would be nice to immediately start doing the repeatable tests + +(move-item-to-left (aops:linspace 0 9 10) 6 6) + +;; and a separate function for swithing to the right? + +(move-item-to-right (aops:linspace 0 9 10) 6 1) +(move-item-to-right (aops:linspace 0 9 10) 6 2) +(move-item-to-right (aops:linspace 0 9 10) 6 3) + +;; next what? calculation of the target index through modulo +'(1 2 3 4 5 6 7 8 9) +;; if we're moving 2 by -2 how does that work? +;; we have starting index 1, we have length 9. +;; my guess is that take MOD by 9-1 +;; how many swaps to the right until the element returns to its original place? +'(1 2 3 4 5 6 7 8 9) +'(2 1 3 4 5 6 7 8 9) +'(1 3 4 5 6 7 8 9 2) +'(1 3 4 5 6 7 8 2 9) +'(1 3 4 5 6 7 2 8 9) +'(1 3 4 5 6 2 7 8 9) +'(1 3 4 5 2 6 7 8 9) +'(1 3 4 2 5 6 7 8 9) +'(1 3 2 4 5 6 7 8 9) +'(1 2 3 4 5 6 7 8 9) +;; so, if moving by 9. hm + +;; then moving by 12 is 9 + 3 +(mod 9 3) +(mod 10 3) +(length (make-array 7)) + +(move-item-to-left (aops:linspace 0 9 10) 6 9) + +;; ok, now join into one function that moves the element by it's value? + +(find 4 '(1 4 3 2 9)) +(position 4 '(1 4 3 2 9)) + +(defparameter *test-array* (make-array 7 :initial-contents '(1 2 -3 3 -2 0 4))) +*test-array* + +(move-elem-by-itself *test-array* -2) + + +;; whelp. my movements are ugh. +;; so. "i'd want additional move on top of my move-left and move-right"? +(mod -1 3) + +(move-item *test-array* 3 3) +(move-item *test-array* 3 4) + +(defparameter *test-array* (make-array 7 :initial-contents '(1 2 -3 3 -2 0 4))) +*test-array* + +(move-elem-by-itself *test-array* -2) +;; this seems to work. +;; now back to the loop? + +(defparameter *test-array* (make-array 7 :initial-contents '(1 2 -3 3 -2 0 4))) +(mixing-array *test-array*) +;; after moving 2, arr: #(1 -3 2 3 -2 0 4) +;; after moving -3, arr: #(1 2 3 -2 0 -3 4) +;; -3 move wasn't correct + +(loop for elem across *test-array* + do (print elem)) + +(defparameter *test-array* (make-array 7 :initial-contents '(1 -3 2 3 -2 0 4))) +(move-elem-by-itself *test-array* -3) +;; 0 -> 0 +;; -1 -> (len - 1) +;; -2 -> (len - 2) +(mod -1 7) +;; so, just hack it? when we move to the left, we add one more? +;; so, ugh and when moving to positive, but going over the what +;; the number is not "switched" with the neighbor, it's jumping over the neighbor... +;; so, if we go to 0 or to len-1 then we jump to the other side? + +(defparameter *test-array* (make-array 7 :initial-contents '(1 -3 3 -2 2 0 4))) +(move-elem-by-itself *test-array* 2) + +(defparameter *test-array* (make-array 7 :initial-contents '(1 -3 3 -2 2 4 0))) +(move-elem-by-itself *test-array* 4) + +(defparameter *test-array* (make-array 7 :initial-contents '(1 2 -3 0 3 4 -2))) +(move-item *test-array* 5 4) +(move-elem-by-itself *test-array* 4) + +;; now this incorrect: +;; after moving 3, arr: #(1 2 -2 -3 0 3 4) +;; after moving -2, arr: #(-2 1 2 -3 0 3 4) +;; -2 should have went instead of to 0 straight to the end. so +;; + +;; and now it works +;; god i also need to take 1000th value with overbound. ugh. +(defun get-ugh-nth (arr n) + (let* ((zero-ind (position 0 arr)) + (unsafe-index (+ zero-ind n)) + (safe-n (mod unsafe-index (length arr)))) + (aref arr safe-n))) + +(get-ugh-nth (mixing-array *test-array*) 1000) +(get-ugh-nth (mixing-array *test-array*) 2000) +(get-ugh-nth (mixing-array *test-array*) 3000) +;; uh. after the value 0... +;; so first find index of 0 + +(let* ((nums (mapcar #'parse-integer (uiop:read-file-lines "day20-input.txt"))) + (input-arr (make-array (length nums) :initial-contents nums)) + (mixed (mixing-array input-arr))) + (+ (get-ugh-nth (mixing-array mixed) 1000) + (get-ugh-nth (mixing-array mixed) 2000) + (get-ugh-nth (mixing-array mixed) 3000))) +;; 1797 is too low, + +(defun part-1-ans (filename) + (let* ((nums (mapcar #'parse-integer (uiop:read-file-lines filename))) + (input-arr (make-array (length nums) :initial-contents nums)) + (mixed (mixing-array input-arr))) + (+ (get-ugh-nth (mixing-array mixed) 1000) + (get-ugh-nth (mixing-array mixed) 2000) + (get-ugh-nth (mixing-array mixed) 3000)))) + +(part-1-ans "day20-test.txt") +(part-1-ans "day20-input.txt") + +;; well, do we have duplicates? + +(ql:quickload :fset) +(fset:set 1 2 3) +(fset:set '(1 2 3)) +(print (let* ((nums (mapcar #'parse-integer (uiop:read-file-lines "day20-input.txt"))) + (input-arr (make-array (length nums) :initial-contents nums)) + (input-set (fset:convert 'fset:set nums)) + ) + (list 'arr (length input-arr) 'set (fset:size input-set)) + )) +;; (ARR 5000 SET 3613) +;; well, yupikayey +;; how should i be doint that? +;; AND i should have checked that from the start. +;; so. there are duplicates. + +(fset:convert 'fset:bag '(1 2 3 2 4 5)) +;; what should i do about the duplicates? +;; i'd need to store elements with their initial indexes i suppose +;; and then what? iterate not over initial collection, but just over "initial" indexes diff --git a/day20-test.txt b/day20-test.txt new file mode 100644 index 0000000..52c68ff --- /dev/null +++ b/day20-test.txt @@ -0,0 +1,7 @@ +1 +2 +-3 +3 +-2 +0 +4 diff --git a/day20.lisp b/day20.lisp new file mode 100644 index 0000000..eef460e --- /dev/null +++ b/day20.lisp @@ -0,0 +1,112 @@ +;; https://adventofcode.com/2022/day/20 + +(defpackage :day-20 + (:use :cl)) +(in-package :day-20) + +(ql:quickload :array-operations) +(ql:quickload "fiveam") +(ql:quickload 'alexandria) + +(5am:def-suite day20-tests) + +;; and shift some slice 1 to right +(defun move-item-to-left (array moved-index move-size) + (declare (optimize (debug 3))) + (let* ((move-size (mod move-size (1- (length array)))) + (moved-value (aref array moved-index)) + (move-by (- (mod move-size (length array)))) + (moving-slice-size move-size) + (to-be-moved (make-array moving-slice-size :displaced-to array + :displaced-index-offset (+ moved-index move-by))) + (into-these-move (make-array moving-slice-size :displaced-to array + :displaced-index-offset (+ moved-index move-by 1)))) + (loop + for i from (1- move-size) downto 0 + do (setf (aref into-these-move i) + (aref to-be-moved i))) + (setf (aref array (+ moved-index move-by)) moved-value) + array)) + +(5am:def-test move-left-inside-of-array (:suite day20-tests) + (5am:is (equalp (make-array 10 :initial-contents '(0 1 2 6 3 4 5 7 8 9)) + (move-item-to-left (aops:linspace 0 9 10) 6 3)))) +(5am:def-test move-left-to-edge (:suite day20-tests) + (5am:is (equalp (make-array 10 :initial-contents '(6 0 1 2 3 4 5 7 8 9)) + (move-item-to-left (aops:linspace 0 9 10) 6 6)))) +(5am:def-test move-by-arr-size-leaves-intact (:suite day20-tests) + (5am:is (equalp (make-array 10 :initial-contents '(0 1 2 3 4 5 6 7 8 9)) + (move-item-to-left (aops:linspace 0 9 10) 6 9)))) +(5am:def-test move-by-more-than-arr-size (:suite day20-tests) + (5am:is (equalp (make-array 10 :initial-contents '(0 1 2 6 3 4 5 7 8 9)) + (move-item-to-left (aops:linspace 0 9 10) 6 12)))) + +(defun move-item-to-right (array moved-index move-by) + (declare (optimize (debug 3))) + (let* ((move-by (mod move-by (1- (length array)))) + (moved-value (aref array moved-index)) + (moving-slice-size move-by) + (to-be-moved (make-array moving-slice-size + :displaced-to array + :displaced-index-offset (+ moved-index 1))) + (into-these-move (make-array moving-slice-size + :displaced-to array + :displaced-index-offset moved-index))) + (loop + for i from 0 below move-by + do (setf (aref into-these-move i) + (aref to-be-moved i))) + (setf (aref array (+ moved-index move-by)) moved-value) + array)) + +(5am:def-test move-right-inside-of-array (:suite day20-tests) + (5am:is (equalp (make-array 10 :initial-contents '(0 1 2 3 4 5 7 6 8 9)) + (move-item-to-right (aops:linspace 0 9 10) 6 1)))) +(5am:def-test move-right-to-edge (:suite day20-tests) + (5am:is (equalp (make-array 10 :initial-contents '(0 1 2 3 4 5 7 8 9 6)) + (move-item-to-right (aops:linspace 0 9 10) 6 3)))) +(5am:def-test move-right-by-arr-size-leaves-intact (:suite day20-tests) + (5am:is (equalp (make-array 10 :initial-contents '(0 1 2 3 4 5 6 7 8 9)) + (move-item-to-right (aops:linspace 0 9 10) 6 9)))) +(5am:def-test move-right-by-more-than-arr-size (:suite day20-tests) + (5am:is (equalp (make-array 10 :initial-contents '(0 1 2 3 4 5 7 8 9 6)) + (move-item-to-right (aops:linspace 0 9 10) 6 12)))) + +(defun move-item (array move-index move-by) + (let* ((raw-target-index (if (>= move-by 0) + (+ move-index move-by) + (+ move-index move-by))) + (in-array-target-index (mod raw-target-index (1- (length array)))) + (in-array-target-index (if (= 0 in-array-target-index) + (1- (length array)) + in-array-target-index ; a hack + )) + (safe-move-by (- in-array-target-index move-index))) + ;; (list move-index move-by + ;; 'raw-target raw-target-index + ;; 'in-array-target in-array-target-index + ;; 'safe-move-by safe-move-by) + (if (> safe-move-by 0) + (move-item-to-right array move-index safe-move-by) + (move-item-to-left array move-index (- safe-move-by))) + )) + +;; we know the element value, but not it's place +(defun move-elem-by-itself (array element) + (declare (optimize (debug 3))) + (let ((i (position element array))) + (move-item array i element))) + +(defun mixing-array (arr) + (let ((to-be-modified (alexandria:copy-array arr))) + (loop + for elem across arr + do (progn (move-elem-by-itself to-be-modified elem) + (format t "after moving ~a, arr: ~a~%" elem to-be-modified) + )) + to-be-modified)) + + + + +(5am:run! 'day20-tests)