From a572f1303d939075e87756a0143254186e1fb879 Mon Sep 17 00:00:00 2001 From: Oscar Najera Date: Fri, 13 Jan 2023 12:07:33 +0100 Subject: Day 20 part1 --- AoC2022/20/input | 5000 ++++++++++++++++++++++++++++++++++++++++++++++++ AoC2022/20/solver.lisp | 70 + 2 files changed, 5070 insertions(+) create mode 100644 AoC2022/20/input create mode 100644 AoC2022/20/solver.lisp (limited to 'AoC2022/20') diff --git a/AoC2022/20/input b/AoC2022/20/input new file mode 100644 index 0000000..37ef098 --- /dev/null +++ b/AoC2022/20/input @@ -0,0 +1,5000 @@ +-6020 +220 +7003 +5151 +-5167 +-4529 +-7297 +7928 +7858 +5260 +4589 +8577 +3834 +8394 +-1263 +16 +-1154 +8866 +-1567 +-3897 +5296 +-9679 +3326 +-4820 +-5420 +7422 +-2362 +1846 +-4812 +4533 +-5053 +5797 +-9706 +8176 +-5578 +-6153 +-8867 +967 +-1606 +8631 +-2007 +-2131 +-9973 +-9393 +-8517 +-5611 +3953 +7057 +-1110 +48 +-8868 +1968 +4244 +4226 +-5170 +-3376 +6910 +849 +-3768 +-7193 +-4215 +4884 +8741 +8266 +821 +-8829 +-9118 +8318 +70 +9721 +9700 +-3173 +8343 +-5529 +-5930 +-6108 +-5763 +-1211 +8808 +8145 +-9406 +-7515 +9969 +3382 +-8533 +4390 +-5170 +748 +-4671 +4644 +-9028 +1247 +8102 +6550 +-2162 +-9278 +-2993 +1537 +-5404 +-6896 +-7924 +-2902 +-4008 +5527 +-5316 +554 +-1092 +7887 +-1848 +-5755 +-836 +-2896 +8429 +-9743 +-2936 +-9298 +6856 +1329 +8520 +-7719 +-9373 +-891 +-6503 +1624 +-9078 +3401 +-2454 +-7258 +-9190 +9475 +-5601 +799 +-1752 +-815 +5126 +-5495 +-3138 +9629 +9821 +5467 +3396 +-5477 +-836 +112 +-3627 +8991 +-8279 +3340 +-5575 +3579 +5953 +4793 +2224 +-4681 +-853 +-1958 +-8587 +3010 +-3817 +-7577 +8446 +-5639 +-232 +-5152 +228 +3459 +9918 +8432 +5008 +-5730 +4175 +-6584 +9093 +7304 +3287 +7364 +-8520 +-3073 +-94 +991 +-948 +-368 +-9909 +730 +-5892 +8730 +1081 +-9994 +-8238 +-2873 +7132 +7080 +-8848 +3764 +-810 +6531 +-1615 +-8497 +9397 +-5357 +2867 +9579 +7570 +7003 +9257 +-1606 +-4359 +-8164 +-3942 +-9684 +8672 +8512 +5207 +-74 +9474 +3184 +254 +-5215 +-7933 +-6057 +-6273 +-699 +-6542 +2573 +2655 +-1425 +3187 +9764 +6375 +2489 +-2170 +-4041 +-6031 +9333 +-5966 +-8721 +6417 +-6632 +-3234 +1537 +-8845 +-8150 +-1502 +1725 +4587 +-2474 +-9468 +-1874 +6662 +-8546 +-8676 +9764 +2568 +8870 +7739 +6321 +4364 +3798 +535 +-9354 +-8468 +3321 +8520 +-5254 +8377 +-5381 +813 +-3118 +-1419 +-3775 +9351 +-3336 +-4623 +-6333 +6849 +-7378 +-7619 +-7577 +-6920 +-4234 +2787 +-1744 +-7627 +3017 +-6363 +-5850 +369 +-5580 +-9654 +-6901 +1593 +-2310 +9756 +-6934 +-9210 +-9278 +1166 +-6484 +6409 +-2218 +-2345 +-7657 +-2128 +-7239 +-2135 +-1472 +-7812 +8427 +4322 +5264 +4538 +9616 +1861 +5447 +9211 +-884 +3016 +-2210 +8815 +-4915 +1782 +-3420 +4455 +-5306 +2924 +6224 +9006 +-9514 +1073 +5027 +6263 +1468 +4960 +7042 +79 +-5421 +-9546 +-4891 +8505 +6142 +702 +-6989 +5595 +-7619 +8560 +7410 +2113 +-1829 +-4798 +8117 +3982 +4566 +-5154 +-1810 +2936 +-3496 +-8547 +920 +2914 +-9441 +1968 +-9987 +3306 +-499 +7484 +1118 +-1654 +9626 +-7232 +3048 +3865 +6707 +-8345 +1101 +-8433 +-7435 +-6020 +-4885 +-1460 +6257 +1205 +-4764 +3958 +809 +-3048 +-5653 +6894 +-1242 +-4273 +6541 +-8116 +-1426 +-3284 +-4030 +-833 +-9843 +7617 +-958 +-6290 +-3027 +-8377 +7517 +-2000 +-4032 +6321 +6282 +-9284 +-844 +4394 +-4853 +-8408 +3398 +9725 +-8308 +7241 +4074 +-8096 +-2128 +4141 +9684 +-7146 +-8106 +-4077 +-7135 +-8309 +-544 +-5925 +-5569 +-7683 +-2136 +3060 +2894 +-2688 +-8250 +-4429 +1379 +2433 +7184 +7560 +-2598 +-9922 +3897 +-6836 +8789 +4947 +-7268 +-6558 +994 +-7232 +-9573 +876 +7934 +-6282 +8720 +-8835 +-1257 +-3588 +-4181 +-7846 +-9865 +0 +5590 +-12 +-8835 +2735 +-6271 +53 +-9689 +7262 +7517 +6430 +6361 +-1306 +4277 +4531 +3569 +7360 +-1476 +-6083 +1452 +3592 +5196 +-3959 +9832 +-2758 +9086 +-3182 +8547 +8394 +8244 +-2937 +-6317 +-4030 +-7400 +-6971 +-9181 +-5640 +6012 +4957 +7683 +3666 +962 +864 +2116 +-5743 +3673 +535 +2574 +-3790 +-7553 +-8816 +6272 +-7494 +2400 +-9333 +-4505 +-4202 +-7221 +-5269 +1139 +-8149 +-8446 +4306 +-8897 +-1830 +-1097 +-7010 +-3033 +-2344 +686 +2876 +4133 +-5085 +-3725 +8241 +5114 +439 +4973 +-9664 +4385 +-1110 +1073 +-7165 +8519 +1485 +-1242 +-7273 +-233 +6479 +-9973 +-5656 +-1140 +-6241 +8077 +-9037 +-9192 +2839 +9693 +3636 +7033 +-664 +7456 +741 +3234 +-8575 +1880 +-5302 +-1550 +-8942 +-9280 +-9706 +-815 +390 +-7743 +9211 +1498 +-9723 +-3574 +788 +2290 +-2596 +-5809 +-9055 +6221 +306 +-499 +-3415 +-7239 +8627 +2634 +-7135 +-9761 +-9906 +-2193 +248 +-7237 +5559 +-3716 +386 +-1736 +7862 +3285 +2290 +1279 +-2206 +-5049 +2736 +-4728 +7090 +6773 +5979 +4847 +7956 +2435 +-5271 +-5382 +9214 +-2300 +-1688 +6864 +-6213 +2039 +9348 +-4429 +5695 +-4602 +3888 +-3718 +9513 +4584 +2678 +7210 +6775 +5933 +-6648 +5216 +-1354 +6177 +-4088 +6426 +-8164 +1649 +4605 +-1537 +-5927 +-8450 +-5927 +1353 +1166 +9951 +-3182 +4347 +5515 +-3264 +3587 +8204 +-4975 +1321 +1867 +-8010 +-8378 +1589 +-7543 +2169 +-8724 +-8179 +-1875 +-1226 +-4239 +-1305 +-878 +-9446 +-4798 +-9354 +-8160 +-3449 +-9079 +5036 +-5762 +-365 +-6476 +5178 +4003 +-7560 +5307 +6 +8689 +-8423 +7658 +3038 +-6035 +8632 +8537 +1783 +7872 +514 +-2801 +5729 +9466 +584 +-9127 +-681 +-4547 +-872 +-8909 +6857 +-4086 +2328 +7832 +1787 +9604 +-7742 +3371 +-6494 +-6651 +-5533 +1608 +4417 +6551 +-8395 +9672 +-928 +-2147 +3059 +-8113 +-7444 +7021 +3659 +6366 +2377 +-4693 +-5500 +-8835 +-25 +-2585 +-9123 +330 +9280 +-3264 +3396 +3276 +-9729 +-4706 +-6822 +350 +6551 +-7288 +-3118 +5211 +-3973 +4453 +220 +4944 +4284 +-729 +-2702 +-1585 +-9337 +2294 +8329 +8852 +-3309 +4311 +-6328 +-2933 +-5925 +7634 +-8603 +1171 +164 +1561 +2894 +-8160 +-4826 +7484 +-7548 +5385 +-1606 +7389 +4010 +2628 +120 +-4553 +-2293 +6529 +-9076 +-7088 +-5736 +-2885 +-8865 +8105 +-6176 +9977 +-8527 +8631 +3514 +5564 +-5695 +1937 +3303 +6436 +-7667 +-4747 +2426 +2411 +-8717 +-3026 +4815 +8400 +-7618 +-4423 +6741 +-1743 +3376 +3741 +2033 +2700 +7898 +2634 +-157 +8742 +-884 +-364 +2309 +9534 +-4077 +5397 +-3341 +8446 +-5427 +-8375 +9521 +-4758 +-4394 +7131 +-8292 +5158 +4198 +6048 +-3973 +-7746 +-5495 +-5154 +8130 +7528 +6550 +-136 +8822 +-6826 +-2933 +-1864 +-3261 +7195 +381 +-8867 +-8256 +-9285 +1937 +-3588 +8908 +228 +-5469 +2438 +659 +8146 +-9702 +-175 +1850 +-7532 +-7343 +2805 +-8250 +5045 +5444 +-348 +8361 +2088 +7368 +6048 +-10000 +-2956 +2489 +9962 +-6349 +-8149 +-3264 +-1277 +-7821 +2207 +-7098 +1040 +3767 +5119 +-1222 +7968 +-922 +4796 +-9752 +173 +9781 +-5210 +-3204 +-1719 +-5189 +-6779 +-9162 +-9433 +-1869 +1442 +-6291 +-9778 +6129 +-539 +-4077 +9888 +-6552 +5551 +-2090 +8431 +-8608 +-5925 +-2090 +3979 +3320 +-4699 +6618 +3902 +-5772 +2090 +-2747 +2489 +5198 +-9278 +-8620 +-5518 +-3278 +-5306 +4029 +-4416 +-8601 +2994 +1153 +9932 +-1419 +-2662 +8856 +-637 +-8178 +-1574 +-2315 +9857 +9671 +5322 +7397 +-7724 +6742 +5343 +-4997 +926 +193 +-7016 +-9678 +-8608 +809 +-9356 +7388 +-803 +-8741 +6529 +6059 +-4106 +5455 +2980 +-8286 +8676 +-6866 +-434 +2365 +-4691 +488 +-4776 +6680 +-6853 +-7089 +6179 +6021 +-3213 +-2371 +-792 +9846 +-1815 +-4630 +2969 +4935 +-1747 +1115 +5449 +7962 +-8918 +6275 +351 +-4077 +3041 +3681 +-9990 +2833 +8187 +-2332 +3061 +6973 +-8661 +2715 +8469 +9091 +-5627 +8193 +-5925 +5419 +-4630 +1486 +-7129 +-3768 +-5316 +-530 +-6257 +637 +-7771 +-7679 +3996 +-2387 +-741 +77 +6815 +3613 +8939 +-8665 +-8393 +-394 +6676 +4943 +9596 +7943 +-9408 +9737 +-1999 +-6929 +9371 +-145 +-9259 +-8676 +-3477 +6379 +-4748 +-390 +-8723 +4119 +5343 +-2427 +6426 +-1013 +-233 +-6366 +3855 +2877 +-864 +-3094 +6137 +3026 +-8546 +-4215 +8564 +4809 +7578 +8063 +-6060 +-277 +-1910 +3081 +8970 +4228 +-9199 +6048 +-4550 +-2086 +2363 +-7361 +9767 +-8207 +541 +9234 +-2200 +-329 +7905 +-5101 +4270 +5328 +4473 +8922 +1867 +4279 +318 +-3336 +6061 +-9013 +1038 +9344 +9216 +6940 +8741 +4443 +8334 +-9345 +5119 +-6272 +7425 +-1942 +-8765 +306 +-4017 +-4981 +-8670 +-2117 +2065 +-8562 +-8827 +-4571 +-1178 +-6393 +-909 +-834 +3497 +-610 +2161 +7819 +8257 +8488 +9790 +-6496 +7555 +8779 +2815 +-366 +4630 +-6215 +-5752 +4375 +1107 +-1130 +-5677 +8965 +3074 +-2482 +2483 +-8312 +-1851 +9557 +4133 +6752 +849 +9236 +-1248 +-7364 +48 +281 +-8146 +-9253 +1056 +-8942 +404 +-9354 +-5995 +5767 +-8232 +7825 +1589 +-2078 +-5428 +-2991 +-4382 +-1558 +-9920 +6645 +-6784 +-8717 +4231 +-965 +-2846 +4153 +-1201 +-4623 +3479 +-3445 +874 +4390 +954 +6124 +4818 +7546 +-7967 +4028 +-2162 +-2291 +6541 +5567 +-8125 +-100 +-9677 +-8254 +6086 +4192 +-8729 +-3048 +3728 +3834 +-8041 +-8879 +-5578 +6570 +4814 +6879 +-1387 +-9793 +1114 +7558 +3663 +-5421 +265 +-5691 +9371 +-2581 +-1243 +4141 +1345 +1773 +2196 +-4003 +1568 +3499 +-2662 +-4413 +-3388 +-7089 +-5676 +4983 +5383 +5109 +9922 +8918 +-6107 +1346 +-2953 +-2446 +8606 +-5433 +-7462 +4431 +5140 +-5845 +-9773 +-334 +-2761 +7099 +-1207 +5873 +-4397 +-4299 +-2431 +-4191 +939 +8299 +-3435 +-1091 +7394 +5540 +9596 +-864 +-9152 +9457 +-2801 +-8324 +8343 +-6052 +2751 +-2827 +-1038 +-9657 +8308 +5470 +702 +2365 +-64 +-6312 +544 +-1715 +2830 +-4045 +7039 +4630 +1439 +-6960 +1281 +-4574 +3293 +8905 +8682 +6912 +-9882 +-3003 +-5411 +1033 +-8096 +9668 +5690 +3464 +-5357 +7513 +2013 +-5142 +-9456 +6575 +-3721 +2229 +6300 +-751 +1186 +-2223 +102 +-2033 +2782 +2013 +-812 +4361 +-5829 +3208 +-1508 +-8360 +-4642 +-4742 +568 +-547 +2188 +9227 +4385 +-1438 +-8928 +8338 +824 +-4541 +-5572 +8468 +-930 +-1197 +3745 +7016 +7894 +-3545 +-3397 +-5627 +8728 +3374 +-2485 +3266 +-9553 +5138 +-4867 +-5243 +1486 +-1536 +4126 +441 +848 +9918 +-7878 +3251 +-5780 +5866 +8542 +425 +-3645 +6741 +1643 +5258 +-6363 +2878 +7979 +9402 +-5598 +-5550 +-2854 +-3819 +-1550 +-7846 +9519 +-5405 +8858 +2494 +-6141 +4277 +7456 +2955 +5507 +-5232 +1652 +5143 +3707 +-467 +6233 +-5760 +2433 +9488 +-4539 +-5880 +-1277 +-6275 +-8183 +662 +-9959 +-8158 +9291 +-7585 +1549 +-9356 +946 +-534 +5454 +-9783 +289 +-803 +6693 +-9356 +8433 +-5291 +2877 +-3706 +9314 +5103 +6413 +7814 +9209 +-9055 +-9411 +2751 +-2253 +-1794 +-2210 +-1953 +-6134 +-5668 +-7525 +-9399 +5089 +5542 +-1794 +1656 +4355 +9466 +-3836 +9995 +1395 +-4822 +6455 +-4198 +5604 +-1827 +2795 +8748 +6235 +3764 +-2978 +-2852 +-6883 +-6532 +-1405 +3187 +-6973 +1250 +-4533 +408 +544 +2411 +-7772 +-6306 +2464 +3569 +-6349 +753 +8547 +-9804 +5374 +4194 +6895 +6645 +-9599 +-7667 +-1131 +8928 +4030 +-854 +6773 +-4180 +-6141 +9061 +9750 +5021 +-5511 +-4798 +3791 +-8827 +6857 +-7608 +1031 +7663 +-2131 +6022 +-5254 +-6748 +-9285 +178 +-2925 +4744 +-2240 +-2812 +5176 +6356 +4479 +-5767 +3520 +-430 +9930 +-5750 +-4742 +-2791 +211 +-1210 +-1138 +-1119 +-4669 +4488 +-8830 +4523 +-4973 +-5839 +-3717 +-7955 +-5760 +1601 +-5680 +-7533 +6607 +-4273 +7223 +5698 +3995 +9096 +-6910 +-4595 +-1674 +-7321 +-8757 +-7547 +7441 +3136 +390 +7936 +-9093 +-2078 +-5479 +-5251 +-1118 +-2662 +3993 +8515 +-2169 +-8009 +-516 +8230 +-8343 +4540 +7243 +8536 +-2945 +-7416 +2406 +-3592 +-2025 +9191 +-389 +-5018 +5330 +4815 +3443 +3701 +9579 +6872 +9776 +-9253 +345 +-1851 +730 +-9243 +4690 +8210 +317 +-165 +8149 +3660 +-8597 +-3722 +6940 +-7425 +-6784 +16 +-9385 +2114 +8658 +8973 +4527 +-4699 +-7618 +-9491 +-5620 +9472 +-1215 +-4556 +-8527 +568 +-4496 +1256 +3905 +3618 +-450 +3236 +2433 +8785 +5221 +8508 +6506 +6741 +3234 +7484 +4861 +2879 +-2298 +-1715 +8591 +-4215 +-7894 +3963 +-8025 +-9906 +-622 +5998 +-1607 +7590 +445 +3843 +5275 +360 +-1797 +170 +6439 +-7216 +-883 +-9678 +3170 +-8294 +9191 +3694 +-3528 +-4837 +6832 +4523 +-7578 +-4298 +-7470 +-8116 +-5929 +7389 +-4349 +1299 +587 +2509 +-4741 +-7833 +-1083 +-2547 +2580 +7162 +-2213 +5998 +1416 +3170 +307 +3854 +5745 +8279 +-7359 +8566 +-9629 +5202 +5082 +-4664 +-573 +7898 +-9575 +-8558 +-3422 +-5580 +3183 +-2928 +-953 +-9755 +6356 +-8925 +-4436 +-2636 +4748 +-9627 +7583 +-9906 +4697 +5515 +2792 +-4195 +-2068 +3104 +4722 +-1276 +-336 +-4911 +6782 +8266 +-8317 +3505 +9434 +9924 +-947 +-9537 +9994 +8174 +5532 +-2490 +8332 +-6768 +6588 +-1131 +2255 +3649 +5913 +8908 +4443 +-8086 +6453 +6910 +-8256 +7994 +-1170 +9567 +-9405 +-3519 +-2053 +-1839 +4464 +-7600 +-4522 +-6953 +9068 +-7335 +-1930 +-3739 +-2660 +-8172 +1570 +2022 +-3713 +-5732 +2559 +7508 +9235 +4731 +-8036 +-1120 +826 +7968 +8722 +-6052 +5119 +961 +1177 +8547 +4101 +-1584 +7396 +-8308 +780 +-167 +-2894 +4230 +-9476 +-1248 +-4973 +5628 +-7233 +-3587 +-4822 +3876 +1799 +4644 +3791 +9249 +-480 +8035 +-2640 +8950 +4113 +-6020 +1997 +7694 +-4831 +7264 +3116 +9710 +-5382 +488 +-1131 +8348 +-3150 +-3688 +-1815 +8209 +-733 +349 +9847 +6529 +-3170 +9594 +6533 +3536 +9209 +9786 +4178 +-2599 +8030 +-3633 +2926 +-7362 +-9878 +-5767 +6936 +-1283 +5360 +1089 +8768 +-9768 +-2490 +6829 +-1776 +-5101 +-2264 +5353 +-5973 +-9126 +4437 +-4366 +-4090 +-1827 +951 +-348 +1811 +-9560 +6233 +807 +5495 +-9582 +-5707 +-8229 +3194 +-2221 +6782 +9613 +-1606 +-2 +2277 +2674 +-7657 +6454 +-5929 +-2427 +1850 +1403 +951 +3401 +627 +4847 +363 +8897 +-5537 +9327 +6813 +7943 +-1455 +6531 +-3179 +6209 +4671 +9638 +5663 +-3049 +8154 +3834 +-2643 +5016 +-2602 +8742 +-4792 +-6776 +-7193 +-597 +-3809 +9538 +-6358 +5634 +1444 +-1656 +-6644 +-8766 +-3333 +-1138 +-5326 +6747 +558 +-8307 +-4735 +5257 +-8544 +-2736 +9012 +8837 +-7146 +-8135 +5633 +-8297 +7117 +4572 +291 +-8884 +1781 +9793 +-4266 +7490 +-6709 +-8820 +4924 +-9603 +-6942 +8016 +9339 +7038 +-12 +-1218 +-6836 +-1218 +3303 +2811 +-5741 +-4426 +864 +8120 +-7690 +-4736 +-1151 +796 +-9743 +2052 +-5850 +-6629 +-931 +-4448 +-1151 +2580 +-9028 +1944 +6686 +6674 +-136 +-4180 +5126 +6674 +3479 +-1887 +7957 +-2621 +4581 +7753 +-1308 +9167 +-5420 +-2009 +7021 +4862 +-2030 +-9142 +-9214 +4309 +622 +-7265 +8386 +9523 +2962 +1881 +-104 +7904 +1157 +-4547 +2573 +-6474 +2136 +9379 +986 +-7812 +-7221 +-4509 +-2927 +8164 +-8164 +-8922 +-8967 +-6825 +-1718 +7259 +722 +1604 +7789 +-8087 +-4247 +9952 +-8392 +-833 +-6182 +8454 +-8444 +1568 +-1229 +1147 +-9430 +8121 +-9310 +-4691 +1181 +986 +8834 +3340 +7663 +1063 +1589 +3118 +-6667 +-6920 +-5709 +-9418 +-4830 +8055 +2579 +-5089 +2607 +-4747 +363 +9786 +-9137 +-6369 +-9747 +-8135 +3712 +8213 +-8619 +-6360 +7832 +9900 +7377 +-8316 +-5829 +-3900 +-1092 +-8589 +-3726 +6317 +-3170 +-8345 +-2662 +-9027 +7301 +5038 +-6595 +9831 +-1054 +-8129 +6434 +-5487 +328 +4277 +-4127 +3858 +5162 +-6498 +-456 +548 +-2770 +5796 +-6515 +5746 +488 +-4701 +-9754 +-1228 +-348 +5600 +-5779 +-997 +4497 +1379 +8655 +-9754 +1414 +4059 +-8319 +-1995 +3240 +-9523 +4403 +-19 +-3079 +-1357 +-6020 +2953 +-201 +642 +8692 +8471 +9607 +-6975 +-3274 +660 +5542 +4806 +334 +4252 +3600 +4473 +1401 +7484 +-9504 +-1669 +777 +-6004 +-8265 +-7719 +5495 +9995 +9662 +9236 +1181 +7359 +3670 +-6507 +207 +9604 +3780 +522 +-9438 +7620 +6454 +7345 +-7193 +-6653 +664 +-7011 +-2620 +-1218 +-4300 +3194 +7485 +-6004 +-516 +6694 +-38 +-6668 +4922 +26 +2751 +6326 +8856 +476 +2951 +-9236 +1346 +1274 +3293 +24 +6372 +-5246 +-4580 +1139 +3306 +7084 +-8872 +8020 +1485 +-4999 +-2747 +2634 +-7398 +-8872 +4464 +-5257 +-7129 +1575 +9980 +9780 +-9905 +-2148 +2994 +-9514 +-7907 +-151 +-258 +-4386 +2459 +-4906 +-7232 +6782 +1379 +-7135 +-3619 +9096 +-5167 +-2293 +-5492 +1934 +-7285 +9777 +6628 +9315 +-4968 +3184 +-7165 +-6423 +-3711 +2573 +-7843 +-4385 +8684 +201 +5893 +8901 +-825 +-7821 +122 +8925 +9937 +5893 +-8009 +-9523 +-2652 +-5762 +-6611 +4726 +7059 +2058 +813 +7490 +3764 +-2566 +6031 +9983 +-4149 +5479 +9870 +-5584 +-434 +-7757 +-8867 +-1326 +9235 +-4911 +-2457 +-5676 +-8638 +-7171 +7728 +6423 +-8549 +-6737 +-806 +-2751 +-7466 +-2956 +3702 +1476 +9813 +7572 +-2267 +6297 +-9505 +-9219 +-801 +-2285 +6380 +-104 +2596 +-5223 +3854 +1038 +-8494 +-6674 +-1178 +-4822 +-4776 +6528 +7804 +3764 +7084 +-5705 +-7780 +2537 +7899 +460 +4531 +6417 +-6138 +8113 +3587 +2580 +1870 +-4279 +-7454 +1256 +8940 +-4402 +-5363 +-1245 +-4776 +6936 +-7195 +-4682 +-7398 +-7264 +-4673 +9693 +703 +2309 +-9792 +2005 +-1928 +-5382 +-7940 +-1201 +9042 +1536 +-4048 +-3319 +-2758 +-6363 +-4223 +3751 +4518 +8149 +6677 +8908 +5886 +-3855 +-2959 +4983 +2741 +-4802 +541 +-609 +8342 +-6656 +-6322 +-2385 +2769 +-198 +5200 +396 +631 +9951 +1234 +-7748 +4922 +3609 +1886 +-5333 +-4735 +-6312 +-7129 +1066 +-4509 +2277 +-1870 +-3136 +579 +606 +-4358 +3510 +6761 +-7739 +-323 +9436 +1625 +7963 +-6475 +8404 +4908 +-2243 +-9236 +4015 +79 +-3709 +1486 +3293 +8163 +5058 +9235 +960 +25 +-4483 +-9738 +-8984 +5538 +5535 +-9477 +4048 +-1744 +3549 +7925 +-2367 +2025 +9585 +8946 +-7793 +898 +-1708 +2601 +-8638 +2428 +-557 +3270 +8907 +-4881 +1624 +-7683 +-6736 +314 +673 +-3094 +-8691 +8393 +5190 +-9755 +2908 +1742 +1341 +-1910 +6515 +-5027 +7757 +-1303 +2811 +9601 +6257 +-2366 +-2599 +9715 +-3376 +5797 +5360 +7560 +-9956 +6096 +3252 +-3233 +-7356 +3436 +6983 +-815 +1835 +3882 +-3987 +-8009 +5437 +6290 +-7879 +4708 +-2991 +8569 +9648 +-2747 +-6070 +488 +8433 +1625 +9314 +-6281 +8547 +-734 +7788 +-1908 +-9740 +-4555 +-1266 +8053 +9981 +-2121 +-4427 +-1049 +-6745 +-5044 +-6103 +1319 +-4195 +3844 +-7821 +-5717 +2326 +-7548 +3116 +-286 +3834 +9197 +-6191 +6183 +-4163 +5595 +-8835 +9427 +5358 +-4410 +4218 +-6107 +5565 +8699 +-4687 +-3359 +1893 +-7703 +7082 +4589 +-8702 +-4742 +9047 +-3840 +1574 +9636 +4473 +-2452 +-5412 +7740 +2544 +-7467 +-2356 +4375 +7077 +-8759 +7517 +-8660 +-2409 +-2190 +2520 +1115 +-2701 +1997 +-17 +-4093 +-201 +8338 +-6901 +-5332 +-4576 +840 +3537 +-2516 +5486 +-2828 +5162 +-1377 +4873 +1290 +-1408 +-6062 +-3243 +-7742 +-8799 +7273 +8431 +-9405 +7990 +-4851 +-4838 +-429 +9269 +-7833 +-5050 +-3831 +6327 +350 +-39 +-7324 +1441 +-4362 +9139 +-2485 +7117 +6114 +5786 +-5355 +5223 +-751 +7019 +7968 +-8585 +5767 +748 +-218 +-1097 +-7265 +-7697 +-9453 +-4243 +321 +-1330 +3494 +-7165 +3076 +1164 +1990 +-9902 +-6567 +-1127 +6585 +9085 +-1848 +5495 +-5413 +5857 +-1132 +2180 +-9953 +6791 +-7553 +7971 +-7540 +-6595 +-4088 +7255 +-6660 +7669 +-672 +-8097 +8187 +2262 +-6257 +3926 +748 +-4790 +8399 +8107 +7833 +-7376 +2566 +4798 +7208 +652 +318 +-6557 +9334 +-4463 +-8125 +-6009 +-3592 +1212 +-5760 +2855 +-1108 +8732 +-7355 +1890 +2969 +-6443 +7243 +3313 +-3176 +-9199 +5447 +144 +2699 +5296 +9086 +8993 +-4247 +-1972 +-6162 +-8378 +4726 +-5487 +-4649 +204 +232 +-6661 +2528 +-4243 +8709 +369 +5685 +4365 +-430 +5788 +1264 +-4689 +-3195 +2041 +9631 +6209 +-1839 +-9051 +5814 +-1209 +-9356 +6330 +-1531 +-2367 +-3539 +6565 +-391 +5340 +1608 +-1288 +9646 +-5752 +1750 +-8335 +2537 +7051 +4003 +4916 +3552 +3848 +5722 +7603 +8913 +9035 +-9738 +-2291 +752 +5598 +4973 +421 +2816 +1343 +-4896 +124 +-4929 +8781 +-2756 +-4709 +-9547 +4490 +-5170 +-4247 +8114 +-9693 +-7046 +8190 +-5380 +-8738 +6864 +1610 +3683 +4806 +-6185 +-5381 +-6081 +-4633 +-2575 +2583 +-8239 +2791 +-7117 +-3004 +7293 +-8319 +5296 +-6321 +-1520 +5330 +7766 +-9308 +-3187 +8949 +-8796 +2882 +7683 +-6133 +4540 +-7600 +2341 +6602 +9096 +-7877 +1186 +5492 +2232 +-3490 +548 +-8948 +-209 +7560 +-3054 +5759 +420 +-7362 +-2824 +-78 +2722 +-3627 +5016 +4977 +8502 +-4171 +-7533 +-1719 +9395 +3234 +-484 +-9404 +7962 +4257 +6312 +544 +2708 +7025 +928 +7726 +2892 +1617 +-9973 +504 +-6732 +-5598 +1114 +1770 +-4812 +8826 +-8585 +6968 +3922 +8855 +5951 +2039 +-3831 +3000 +-8740 +5190 +-4030 +9352 +-2302 +-8345 +-3695 +783 +-5927 +-5905 +2639 +1163 +-9603 +-1331 +-4801 +-2688 +6550 +3324 +-3563 +-6211 +-8146 +-4272 +-3542 +9904 +-9743 +4347 +8107 +3702 +-5236 +-8822 +-2181 +-1296 +-4549 +-6306 +-9266 +4322 +-6009 +-4097 +5268 +8739 +-6020 +-1138 +9523 +8532 +-9795 +4384 +-9134 +-8971 +-759 +-1864 +-939 +-391 +-975 +3340 +5717 +7877 +7360 +-3415 +7196 +-740 +-729 +5056 +-8146 +90 +-5639 +-4081 +5975 +-6073 +-3523 +-6333 +-4005 +-5317 +-7616 +9504 +5488 +-2875 +-8250 +-6382 +5196 +3057 +-3267 +-4888 +3400 +-4770 +5772 +-6323 +-364 +-7285 +-6140 +-9987 +8114 +-7164 +3469 +2764 +-5046 +8329 +9385 +2 +-9072 +6338 +144 +-8149 +1742 +-556 +-1435 +412 +-4544 +6322 +3994 +-7179 +-5929 +5641 +-948 +-840 +514 +-3963 +-1937 +8307 +2290 +-9893 +5122 +-7112 +5255 +-3361 +1850 +2309 +-1586 +-7645 +-8146 +-5302 +-5715 +-6395 +3653 +2692 +-7544 +2967 +-4325 +-6322 +3184 +-6275 +-2940 +-84 +-9617 +-1794 +9769 +4231 +-7854 +2230 +1320 +-8648 +6395 +3208 +1476 +4263 +-6895 +9533 +9689 +-6140 +7436 +-6737 +813 +9052 +-458 +-5380 +8856 +6940 +-9514 +2048 +4020 +-4219 +8403 +8525 +-8807 +3812 +2411 +2600 +-5936 +-2874 +2039 +8127 +-5553 +-3169 +-2211 +1062 +663 +-248 +-973 +-9973 +-1421 +5122 +-348 +4375 +-833 +-2503 +-9013 +-1325 +5971 +-970 +5496 +-8433 +6872 +2715 +-7821 +4269 +1340 +-2464 +4470 +9091 +-6382 +8246 +-699 +8835 +4868 +1668 +-8701 +-7543 +-4339 +8500 +-7445 +5605 +2426 +-919 +1163 +-6837 +-7110 +-9627 +-1806 +-3099 +-676 +-2259 +-6656 +8089 +-8665 +2058 +4526 +-4707 +-17 +-4962 +5045 +1671 +6002 +8724 +-8902 +4562 +-4961 +-3766 +9278 +-5507 +-3323 +7001 +7658 +-2940 +8938 +-1468 +-6903 +7560 +5567 +-1173 +-8151 +1235 +-6567 +6476 +5759 +-32 +939 +-3397 +-8254 +3309 +-8376 +4808 +4960 +-4392 +1625 +-3399 +-5745 +3378 +-2928 +7398 +-1234 +7936 +-7212 +-1870 +-2541 +7035 +-3397 +-290 +-7098 +6518 +-8256 +-8321 +6382 +6791 +8939 +-3071 +763 +967 +1624 +5664 +8925 +-7765 +3822 +6618 +6221 +-3815 +700 +7137 +-5769 +-6883 +-9020 +-7246 +9517 +6360 +3455 +6965 +-2279 +6786 +-4764 +9519 +7463 +4361 +9425 +4306 +1997 +4628 +-3552 +7041 +-8935 +-3416 +-6891 +2365 +4907 +-8926 +-8388 +-6473 +-4973 +2516 +-7317 +9438 +3399 +-1155 +4533 +7837 +7074 +1162 +-9773 +-7547 +6369 +5999 +6143 +77 +-8562 +8261 +2760 +4787 +-7237 +7905 +-1384 +7538 +-1432 +2458 +2269 +-5936 +3549 +-4595 +6319 +9784 +3587 +-9622 +-2688 +-7110 +-1794 +7533 +-5936 +-2291 +5117 +1780 +1728 +-5966 +9684 +3717 +1395 +1264 +5162 +960 +579 +-6016 +-2430 +739 +-9308 +-8301 +-5372 +5515 +-5150 +-3029 +-63 +8728 +7709 +-2264 +6152 +9521 +7264 +-5695 +-4963 +-4975 +-6727 +1770 +-5786 +7834 +-6963 +6859 +-1299 +-8236 +-3052 +5206 +-4599 +1070 +-4236 +-3236 +7528 +7710 +5855 +-4429 +4460 +2207 +4614 +-232 +-1651 +-6328 +-5520 +-7119 +8276 +-8207 +1598 +2914 +8667 +-1615 +4059 +1688 +-1738 +3609 +869 +-1062 +4416 +-3822 +-8146 +1444 +8661 +-3069 +-2674 +-9122 +801 +986 +2926 +-5673 +-7706 +-2710 +-9787 +4818 +-9755 +-9847 +-1788 +4424 +606 +-315 +-6211 +7961 +-3782 +-3463 +9534 +-4626 +-8147 +5818 +-473 +-3717 +3690 +9768 +-6608 +-6653 +7064 +-3938 +-6417 +3618 +-9166 +-7011 +-5834 +-3565 +807 +-3252 +4059 +-4736 +-5867 +-9504 +-6259 +4955 +9502 +-3978 +-994 +-8203 +364 +4587 +7804 +745 +6545 +-5627 +-9315 +-84 +-6637 +-7120 +-3158 +-4843 +5183 +6455 +-4382 +535 +6497 +-4298 +-9232 +-1527 +-3496 +9068 +-8923 +-4643 +-4036 +-4034 +-9296 +314 +507 +-1719 +-9050 +5473 +-807 +3349 +-2599 +-8672 +661 +1325 +-3978 +-9752 +-2600 +8983 +-1173 +472 +-2356 +-368 +4359 +6028 +3587 +-2344 +5417 +-5930 +568 +-5527 +1147 +-9934 +9395 +-8433 +-2121 +4739 +9693 +-9777 +3204 +6662 +8732 +-6538 +753 +2323 +-8759 +-9468 +-5137 +5798 +-4402 +7827 +2421 +4145 +5588 +-7285 +3108 +4086 +2782 +7019 +95 +-3472 +374 +6303 +6674 +-2652 +874 +-9598 +7313 +4148 +-8709 +7788 +-8738 +3726 +6473 +2428 +-9196 +-6759 +-7445 +9236 +649 +7770 +-8807 +8454 +2162 +6895 +8182 +2273 +9769 +-3138 +-8046 +4836 +-5495 +-7547 +-4279 +-5301 +486 +-6382 +274 +-1373 +9286 +440 +7978 +8472 +-5582 +5495 +-3889 +6945 +17 +4113 +4394 +1411 +-4077 +1401 +-4246 +2655 +4368 +-5184 +-4176 +-8144 +5079 +518 +1006 +-729 +-2867 +-7305 +-5977 +-2873 +9367 +-5183 +-9438 +4288 +-7891 +-3219 +6085 +-9144 +2192 +9190 +5981 +6482 +-6391 +2600 +6235 +7804 +-5421 +2025 +-3991 +-772 +1606 +4587 +-1566 +3193 +-5614 +155 +8975 +-2328 +8763 +-474 +-5314 +-1322 +8785 +-5630 +4980 +3931 +-1732 +-8279 +9596 +4224 +5563 +1958 +2959 +8756 +6806 +3995 +-6552 +6842 +3353 +6978 +664 +-6271 +4992 +-7288 +-7933 +-5124 +5712 +752 +9161 +-8692 +-4811 +-3324 +-4081 +-3683 +1921 +6458 +-8146 +4174 +3025 +-555 +-8440 +-6008 +8732 +5587 +-1534 +7470 +8499 +-9991 +-8942 +9000 +3117 +9325 +9555 +-3197 +8151 +7753 +5019 +-7425 +-8395 +2051 +935 +2458 +3189 +541 +2882 +421 +6880 +-4576 +-5302 +6562 +-2820 +-144 +-3094 +6922 +7903 +5116 +-2917 +3477 +-9066 +3703 +581 +969 +-5473 +4257 +-1648 +2313 +1898 +-1972 +-3159 +505 +7410 +-8872 +-4714 +8746 +-8177 +-3470 +5176 +-4385 +1453 +4129 +-8661 +3252 +2139 +-4711 +-5086 +-6009 +-1295 +-4565 +-6846 +3351 +4126 +-9706 +-2054 +8144 +-1808 +-2171 +-482 +-5765 +-5183 +3316 +6521 +5695 +-8205 +1369 +4797 +-6706 +7444 +9101 +-2181 +4973 +-953 +-8667 +5913 +-6532 +-1327 +-1537 +4664 +-9441 +5296 +-1516 +554 +-9922 +5236 +6694 +-8841 +-799 +3676 +-6674 +3398 +-8012 +9333 +6492 +3336 +961 +4298 +-7082 +-555 +-2325 +-7697 +-3119 +-8613 +3983 +-6558 +7974 +7441 +-4300 +9424 +9992 +206 +1892 +-1118 +994 +-7343 +-3724 +-8423 +4687 +8759 +7810 +3681 +8649 +4193 +-9905 +8808 +-4286 +5831 +1841 +6926 +6280 +-9077 +-8051 +-3298 +133 +-8279 +6272 +-7297 +-6369 +-5181 +6949 +8905 +-2446 +7251 +6941 +-6133 +-2634 +5907 +3251 +3234 +3093 +6662 +-4003 +9314 +-9572 +2751 +-2279 +3371 +-366 +2465 +-1705 +5004 +-1537 +-8776 +-1151 +6369 +-4630 +7774 +-3554 +4229 +8579 +1326 +3826 +-8948 +5783 +-5940 +-5447 +-1537 +-6325 +8604 +-4219 +7557 +-9090 +6290 +1199 +3639 +488 +8698 +-9790 +-3684 +-315 +5178 +-1850 +-8729 +-9322 +-4630 +-210 +-1107 +-3538 +-5905 +6706 +9804 +-9404 +5605 +2407 +5003 +960 +9289 +-1083 +2951 +-19 +-633 +1994 +-77 +-1127 +6967 +6674 +8403 +-4196 +-9322 +-6549 +4562 +1509 +-5966 +6961 +-4987 +-1419 +501 +3690 +5146 +-1293 +7802 +120 +4388 +-4283 +469 +7247 +-8672 +1841 +-446 +-7485 +-3169 +501 +5439 +1742 +-7092 +-8826 +542 +-3415 +2790 +-9648 +-8321 +1700 +460 +5751 +3270 +-2721 +-6165 +-1979 +7830 +542 +6090 +-343 +-6264 +4761 +-1351 +-5081 +-5512 +-7607 +2065 +5655 +-9876 +9707 +-3676 +4921 +7422 +113 +-4036 +3702 +-5302 +1624 +-9453 +4150 +-8227 +-2159 +-9831 +8889 +-7289 +-6589 +-7731 +-1154 +-2288 +4468 +9348 +-6328 +2674 +2646 +6889 +-4801 +9006 +1079 +2211 +-8227 +-5254 +-569 +-1013 +-8701 +3751 +-2412 +-2873 +-2708 +-5167 +8655 +-8558 +9171 +-2457 +-5316 +7080 +2720 +7139 +-7016 +2641 +-5516 +7628 +-800 +-673 +6829 +-934 +-2758 +3134 +8961 +-1114 +-6287 +3351 +-4664 +-7585 +-6152 +1339 +930 +1606 +-4875 +9784 +-3724 +4164 +-1874 +-6706 +-2828 +-4615 +9344 +1480 +7360 +-8086 +9411 +-1969 +-3041 +6242 +5987 +6052 +2815 +-123 +-7643 +-4720 +728 +-4525 +-1197 +-9322 +978 +9587 +955 +7424 +4229 +3075 +6589 +5662 +1236 +-9198 +2302 +-611 +4665 +9628 +-1752 +110 +776 +6562 +6278 +-9333 +4458 +6059 +5473 +-5442 +-2885 +-8081 +-1215 +4898 +-569 +-3309 +1345 +-4420 +-6581 +5970 +-6301 +-2804 +7533 +1337 +-2558 +9816 +9534 +-7338 +8759 +6661 +9894 +8669 +6133 +-9004 +-4455 +1670 +-2585 +7042 +-1804 +-9322 +8661 +-8584 +809 +445 +3177 +9249 +6662 +1056 +3764 +554 +-1649 +3636 +-6496 +9014 +8317 +-9268 +9874 +-5345 +3655 +9432 +8717 +-6710 +8805 +6225 +-5121 +-9905 +-9652 +-1325 +-451 +-7054 +-9537 +1449 +-3537 +-6674 +9203 +6889 +4566 +464 +-2876 +1227 +8572 +2094 +921 +8858 +6653 +-7709 +-3505 +-8232 +7386 +-3800 +-4651 +1250 +3994 +-8113 +-7305 +-555 +-1855 +9950 +-9134 +7100 +-3507 +7141 +-8942 +-9875 +6638 +8332 +6918 +-8897 +2181 +8720 +-7478 +1640 +-8289 +-3587 +-2410 +-4189 +6492 +9605 +6395 +-3285 +9895 +-7821 +3579 +7100 +3037 +-4086 +6551 +-9049 +9180 +-1954 +2760 +686 +5140 +-8321 +-7936 +2803 +8303 +8041 +4117 +-1601 +-6762 +-5710 +3673 +-9858 +-8533 +-7165 +-9416 +-7821 +-6620 +4555 +3692 +-6007 +-7111 +8742 +-2964 +7308 +270 +9861 +-9547 +7978 +5003 +-6129 +4940 +9932 +1374 +6224 +4660 +1629 +9740 +4964 +-3658 +-2678 +2648 +9089 +-3515 +-9561 +-8584 +6168 +3877 +6949 +4948 +-1715 +1247 +1762 +9195 +4697 +5268 +5982 +3832 +3728 +-7825 +-5678 +8480 +-4171 +-3189 +5104 +-8162 +-7854 +2978 +-1806 +2421 +-5355 +-4227 +1089 +-9974 +5745 +7149 +-3444 +4326 +6843 +-6238 +5677 +7886 +-4929 +-7305 +8529 +-8112 +1038 +1992 +6077 +6048 +-9316 +5180 +-3445 +1643 +-1536 +745 +1830 +-7564 +4059 +4873 +-8667 +-6984 +541 +9160 +-8274 +6883 +-964 +-7065 +-7589 +-5087 +4257 +6278 +4787 +3266 +-8085 +-5673 +7561 +-4636 +204 +-4091 +-6052 +6371 +8547 +9139 +-80 +-8415 +-1338 +-9847 +-8026 +3750 +-3341 +-4643 +4260 +-8829 +-6962 +-5046 +877 +6747 +5634 +-4882 +-2300 +6588 +1326 +-4637 +-8802 +-792 +4806 +-8286 +-8424 +-4463 +9892 +4627 +6095 +-6265 +-3445 +522 +9046 +6653 +-4037 +-760 +-9897 +-5927 +-5577 +-7324 +-7877 +-2427 +789 +-6049 +2574 +-9450 +9988 +1401 +9648 +-8333 +6067 +-1533 +-4696 +1558 +-5730 +-2722 +9406 +8446 +-3471 +8067 +6034 +-6503 +-1718 +1139 +-6070 +7904 +-3592 +-4623 +-7674 +-6414 +-2090 +9588 +-4704 +7840 +5495 +6936 +4135 +155 +-6130 +-6748 +968 +8603 +-1401 +-4430 +5698 +-7016 +-6583 +-9783 +996 +-8037 +-3299 +6297 +-5236 +-6910 +-3542 +7253 +-9362 +88 +4546 +-1853 +852 +5232 +7324 +2260 +3396 +3334 +4605 +2027 +-7200 +-3634 +-9453 +7419 +-5717 +1247 +-8865 +8873 +-6325 +-8409 +2509 +7261 +7091 +9269 +1238 +-5564 +7328 +4153 +3041 +-740 +-3522 +-884 +-3861 +-8535 +-2326 +-9337 +1327 +-600 +8217 +-3294 +5397 +-9290 +-8794 +-8802 +-379 +8592 +-7147 +8628 +5796 +-9987 +8724 +-7023 +-4133 +6506 +8107 +-2534 +-916 +5660 +6791 +-6200 +-897 +-3213 +-7754 +4013 +-8162 +1990 +-3349 +-8427 +-4362 +-1550 +-6769 +568 +-284 +5421 +4634 +-1878 +-3213 +-7894 +-801 +254 +-8291 +7441 +-4403 +8190 +757 +1073 +5796 +-1560 +7828 +4038 +8094 +-3334 +4638 +-1542 +4390 +9000 +-2125 +5205 +8685 +-5071 +-509 +-7778 +1301 +5899 +-8402 +1944 +7528 +3721 +-6359 +-9684 +5878 +6666 +-4973 +2092 +-6214 +950 +-4896 +-7011 +1392 +-4590 +-3052 +2764 +4119 +-7171 +1274 +4244 +428 +1937 +9870 +765 +-9471 +-2920 +9472 +-1586 +5651 +9901 +6680 +-3881 +-5927 +-8818 +-4298 +828 +9778 +-6960 +-6723 +408 +4394 +-4034 +1997 +9648 +7368 +9269 +8899 +8033 +-7863 +-2135 +-3745 +1750 +5027 +-2566 +2100 +9553 +-3428 +-8256 +9083 +-1828 +119 +9316 +-530 +7038 +-6296 +-5170 +1601 +7663 +-4714 +3958 +-366 +-6436 +5496 +-9876 +-5249 +-4529 +-1426 +-7067 +-8351 +-7614 +7827 +-2418 +2769 +-6561 +-3572 +-5442 +-5345 +7230 +1110 +-6873 +2624 +5385 +3926 +9409 +4171 +9279 +-64 +-7931 +2402 +9724 +2573 +-5181 +4218 +-4056 +3666 +7425 +3581 +-7100 +-3189 +5447 +-610 +-2269 +-9572 +322 +-7833 +-6366 +7539 +3142 +-7838 +-4628 +-2228 +-6271 +9601 +-6252 +79 +-4066 +-4388 +-739 +-1448 +-8759 +-5946 +7590 +8844 +3653 +-5268 +-2566 +-672 +-7268 +-9408 +-4996 +-7110 +-8158 +-853 +5641 +2299 +3 +544 +2120 +543 +-2397 +-5748 +-5254 +-2211 +9110 +1686 +-2111 +5205 +-6580 +8083 +7906 +2365 +-2297 +2134 +7324 +-3706 +4376 +-5752 +-6498 +-9322 +4887 +8164 +8348 +-4691 +3549 +-3083 +-6128 +-5703 +4540 +-6273 +-1076 +-4927 +4908 +7787 +7225 +-8602 +-3167 +-3220 +-6579 +8631 +-2463 +2620 +6177 +369 +9830 +2139 +4445 +2973 +-5818 +-4127 +-8541 +-3781 +6924 +9278 +-2109 +-5737 +698 +184 +7041 +5247 +-3049 +6117 +9714 +2648 +6027 +9890 +1070 +1068 +8148 +-256 +-3889 +3733 +1652 +7137 +5602 +-8723 +3831 +-2151 +-6028 +-6242 +-9905 +2703 +2985 +3189 +-8471 +-6168 +5122 +-5669 +4545 +-3790 +1076 +-8349 +9951 +776 +-3840 +9725 +-2804 +4288 +3835 +4766 +3559 +6312 +5495 +-2613 +653 +2169 +-3457 +1408 +9153 +-5834 +-2300 +2432 +8787 +-3706 +-8562 +1081 +9052 +248 +-872 +448 +5214 +5665 +-4687 +-1383 +6129 +777 +-6845 +5929 +289 +-9129 +1115 +-9581 +8029 +-5513 +-8522 +6899 +2138 +-3138 +-8193 +7253 +1890 +-2562 +9338 +-6589 +6271 +1139 +8194 +-6456 +-3889 +812 +1299 +4516 +-8254 +-9873 +-5987 +-6434 +4794 +9579 +9739 +-8368 +-664 +-3538 +-9468 +3673 +6237 +-9922 +-5752 +-4595 +226 +-8402 +-123 +644 +9727 +7704 +1403 +2046 +-1848 +-6962 +-1851 +-2376 +6021 +-6370 +7001 +7080 +3859 +7922 +960 +-5768 +6856 +-5149 +1779 +4799 +1924 +-456 +-1850 +-8392 +4943 +7819 +3938 +8361 +-8986 +-1408 +-7574 +2248 +3537 +-9678 +8080 +-1771 +-4461 +8037 +9638 +8508 +2189 +2715 +5171 +798 +5913 +-1909 +4050 +1990 +4040 +7313 +8658 +-571 +9434 +-4610 +-4212 +-8918 +79 +-1616 +-1082 +-5067 +-2914 +4626 +5970 +9990 +6256 +6061 +-6842 +-2433 +-2171 +-3496 +-6129 +8156 +6330 +6368 +-2371 +-6241 +-7507 +6320 +-3226 +8922 +3185 +7502 +6829 +-63 +4444 +-3857 +-1942 +5016 +9526 +1917 +6816 +-517 +776 +3556 +9352 +-1242 +3639 +-9755 +753 +-4701 +-410 +-2827 +-2996 +-6763 +5109 +4746 +-1520 +9596 +5466 +9888 +4209 +7476 +-9652 +53 +-2751 +2641 +8121 +-6732 +7141 +5340 +4310 +3121 +8143 +4714 +-4177 +-7549 +-1394 +-891 +-9011 +3108 +-399 +-6369 +-9370 +-8454 +739 +7485 +7263 +3026 +9444 +-9789 +5387 +-844 +-3537 +1303 +308 +1234 +-4027 +-9743 +-9858 +164 +-9028 +7917 +3579 +-282 +-5880 +-7891 +1947 +5831 +1139 +1834 +-5357 +1038 +8268 +3764 +-7846 +-6854 +-9441 +4394 +-5071 +-7008 +-8952 +2742 +-6214 +-9589 +3609 +-6568 +-5508 +8403 +-5184 +2231 +-7569 +-8613 +-7902 +-6404 +-1131 +5118 +3236 +6209 +-7633 +-7240 +5093 +1509 +9165 +2464 +8083 +2685 +-6963 +6492 +-1148 +9409 +1069 +6040 +-963 +9406 +8468 +-4638 +-1497 +-2867 +7892 +-6989 +3016 +2450 +-8108 +6993 +-8297 +6052 +9086 +-2721 +-1815 +1171 +9672 +-6370 +3189 +-248 +3378 +-2350 +-1553 +-9116 +-9166 +254 +4417 +-973 +-3805 +-4867 +1846 +-5427 +6961 +8520 +3116 +6241 +-3231 +2592 +-446 +6048 +-1277 diff --git a/AoC2022/20/solver.lisp b/AoC2022/20/solver.lisp new file mode 100644 index 0000000..f341a43 --- /dev/null +++ b/AoC2022/20/solver.lisp @@ -0,0 +1,70 @@ +(ql:quickload '(fiveam uiop)) + +(defparameter *msg* #(1 2 -3 3 -2 0 4)) + +(defun directional-pointers (size) + (let ((forward (make-array size)) + (reverse (make-array size))) + (dotimes (i size) + (setf (svref forward i) (mod (1+ i) size) + (svref reverse i) (mod (1- i) size))) + (values forward reverse))) + +(defun follow-pointer (pointer index count) + (if (zerop count) + index + (follow-pointer pointer (svref pointer index) (1- count)))) + +(defun move! (forward reverse element-idx shift) + "FORWARD is the leading array, not necessarily forward movement" + (let ((next-element (svref forward element-idx)) + (prev-element (svref reverse element-idx))) + ;; remove element from sequence + (setf (svref reverse next-element) prev-element) + (setf (svref forward prev-element) next-element)) + (let* ((amount (1+ (mod (1- shift) (1- (length forward))))) + (target-index (follow-pointer forward element-idx amount))) + (psetf (svref reverse element-idx) target-index + (svref reverse (svref forward target-index)) element-idx + (svref forward element-idx) (svref forward target-index) + (svref forward target-index) element-idx)) + (values forward reverse)) + +(defun shuffle! (forward reverse element-idx shift) + (cond + ((zerop shift)) + ((plusp shift) + (move! forward reverse element-idx shift)) + ((move! reverse forward element-idx (abs shift)))) + (values forward reverse)) + +(defun shuffle-pointers (msg) + (multiple-value-bind (forward reverse) (directional-pointers (length msg)) + (dotimes (element-idx (length msg)) + ;; (format t "st: ~a f: ~a r: ~a~%" (ordered-series msg forward) forward reverse) + (shuffle! forward reverse element-idx (svref msg element-idx))) + ;; (format t "st: ~a f: ~a r: ~a~%" (ordered-series msg forward) forward reverse) + (values forward reverse))) + +(defun ordered-series (msg forward) + (let* ((len (length msg)) + (series (make-array len))) + (do ((i (position 0 msg) (svref forward i)) + (count 0 (1+ count))) + ((<= len count) series) + (setf (svref series count) + (svref msg i))))) + +(defun solver (message) + (let ((new-array + (ordered-series message (shuffle-pointers message)))) + (+ + (svref new-array (mod 1000 (length new-array))) + (svref new-array (mod 2000 (length new-array))) + (svref new-array (mod 3000 (length new-array)))))) + + +(fiveam:test solutions + (fiveam:is (= 3 (solver *msg*))) + (fiveam:is (= 7225 (solver + (map 'vector #'parse-integer (uiop:read-file-lines "input")))))) -- cgit v1.2.3