From 23c20b9f24283347bc33469eca52193635d98476 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 20 Dec 2022 00:49:54 -0500 Subject: day 20 --- benches/2022.rs | 5 + data/2022/20.txt | 5000 +++++++++++++++++++++++++++++++++++++++++++++++++ src/bin/2022/day20.rs | 74 + src/bin/2022/main.rs | 2 + 4 files changed, 5081 insertions(+) create mode 100644 data/2022/20.txt create mode 100644 src/bin/2022/day20.rs diff --git a/benches/2022.rs b/benches/2022.rs index 6fc9bf7..60b5b3c 100644 --- a/benches/2022.rs +++ b/benches/2022.rs @@ -39,6 +39,8 @@ mod day17; mod day18; #[path = "../src/bin/2022/day19.rs"] mod day19; +#[path = "../src/bin/2022/day20.rs"] +mod day20; // NEXT MOD day!(2022, 1, day1); @@ -60,6 +62,7 @@ day!(2022, 16, day16); day!(2022, 17, day17); day!(2022, 18, day18); day!(2022, 19, day19); +day!(2022, 20, day20); // NEXT DAY fn bench_2022(c: &mut criterion::Criterion) { @@ -84,6 +87,7 @@ fn bench_2022(c: &mut criterion::Criterion) { day_combined!(2022, 17, day17); day_combined!(2022, 18, day18); day_combined!(2022, 19, day19); + day_combined!(2022, 20, day20); // NEXT DAY COMBINED }) }); @@ -111,5 +115,6 @@ criterion::criterion_main!( bench_2022day17, bench_2022day18, bench_2022day19, + bench_2022day20, // NEXT GROUP ); diff --git a/data/2022/20.txt b/data/2022/20.txt new file mode 100644 index 0000000..19a8ef9 --- /dev/null +++ b/data/2022/20.txt @@ -0,0 +1,5000 @@ +4684 +2398 +-3344 +-5140 +-745 +-5689 +6646 +3472 +-7400 +729 +-7545 +-3988 +-3567 +-8436 +501 +594 +-1536 +-7409 +-5355 +3441 +3340 +-9981 +-9722 +-3583 +6781 +-8016 +4158 +8219 +-9528 +-9540 +2014 +-6484 +-6316 +-5801 +-4910 +5496 +-7254 +7511 +4256 +-7934 +2109 +-9004 +-478 +7657 +9781 +3054 +8953 +-6614 +2940 +-8500 +-7806 +2452 +3377 +6180 +8810 +4001 +8053 +2613 +2738 +4470 +-2170 +-8104 +-7976 +-7928 +5270 +-1116 +3806 +1150 +6555 +-5630 +6815 +1805 +-6705 +1863 +1676 +-5997 +-2373 +1369 +-4515 +-430 +-1448 +-5567 +-3699 +3609 +-445 +-5919 +-2997 +-2233 +4620 +-3825 +-1668 +8030 +-2126 +-9737 +8766 +-8932 +-8791 +3208 +-1978 +8778 +-5932 +-458 +-4253 +-733 +7391 +-5745 +4360 +6720 +5971 +804 +-4390 +-8630 +584 +-536 +8828 +6962 +-3185 +-4065 +6336 +3911 +-6151 +-1462 +-1405 +-5208 +9938 +-5532 +4270 +-3230 +-9047 +-5744 +-3112 +-9064 +-3768 +-9153 +-7239 +1252 +-442 +1661 +2396 +8824 +-2596 +-5947 +-1000 +6663 +8324 +-2741 +8820 +7466 +-4928 +-5136 +-6566 +-3416 +-7545 +1380 +-267 +-8578 +-6485 +7693 +6567 +2189 +-7286 +-3330 +-8927 +3681 +-2970 +2887 +-1548 +-3144 +-109 +-376 +9832 +1094 +8721 +-7675 +-818 +-6324 +-3180 +1014 +-5991 +318 +-5737 +-6722 +-1728 +4841 +4186 +6053 +-5998 +-8015 +1629 +9534 +5961 +-8106 +-7396 +8846 +7876 +-7068 +-7441 +6741 +4763 +-8904 +-5853 +6971 +9214 +-2109 +-9605 +4726 +4136 +-5896 +3973 +1916 +7575 +-7190 +740 +-4124 +-8603 +-8104 +-2966 +2737 +-3254 +-9742 +7268 +3529 +2432 +7754 +-1744 +-5193 +207 +-457 +-3878 +-6977 +8324 +5575 +-1753 +-3573 +-1331 +8757 +-5997 +-6019 +-7549 +4871 +-4749 +-5603 +8901 +1057 +-9311 +8551 +-4521 +2588 +-1726 +-1889 +9500 +7328 +3305 +1355 +-8160 +6532 +-6981 +-7305 +-9275 +-1641 +354 +-3729 +6885 +-2815 +-2450 +3775 +-1870 +-9272 +-9292 +4776 +5404 +-2153 +6734 +832 +-5454 +-9602 +-710 +137 +-6739 +4743 +2706 +-4641 +-4512 +-3043 +2244 +1263 +8244 +6950 +-960 +-4149 +-7038 +736 +4385 +-3041 +3296 +454 +-5138 +-7351 +8626 +8168 +-2317 +8494 +-3243 +2214 +6801 +2390 +513 +7543 +4782 +4767 +1500 +8747 +-4718 +-759 +-1655 +-7524 +-8971 +5145 +1530 +2372 +4057 +2246 +3583 +1532 +9880 +2073 +-4570 +-1916 +-3122 +-3228 +-1963 +6386 +-4237 +3366 +-132 +-6765 +-9632 +-7129 +5092 +-8031 +-5435 +8884 +9136 +-7328 +-7396 +2652 +1628 +400 +-9534 +-4548 +3780 +1410 +-3013 +-718 +4051 +9713 +762 +-8039 +-3502 +2621 +-8604 +2372 +-6319 +282 +-5290 +9486 +3305 +-1908 +-5968 +-8664 +3992 +-558 +5496 +-2946 +-4923 +-9254 +5429 +-9840 +4698 +4750 +7394 +-2172 +-6078 +-2565 +-365 +9674 +9036 +9600 +-2799 +1570 +-7849 +-3558 +-8188 +6172 +5684 +-9368 +4740 +8383 +9781 +-2962 +-5991 +1035 +-3373 +-2172 +-1455 +5285 +1194 +-8428 +-7963 +5432 +-6829 +-3319 +-8789 +9009 +-2417 +-4267 +6152 +7650 +1046 +3660 +-884 +6260 +-2096 +-6843 +-4457 +-6314 +-1674 +-8279 +7865 +-2585 +8198 +8616 +2184 +-7359 +-3244 +253 +-96 +-1914 +-509 +6776 +-4403 +-6941 +-6194 +4228 +4970 +404 +-3970 +-7529 +-5865 +5765 +-6131 +4419 +117 +-599 +5053 +2846 +-585 +-6378 +9136 +-2858 +2381 +9188 +7294 +1540 +-8369 +-6279 +-8630 +-7618 +-8552 +-3400 +-6755 +5204 +8732 +1535 +8151 +3475 +-3372 +-7524 +2675 +-5905 +3723 +3432 +2189 +540 +-7336 +9081 +-7451 +-6631 +547 +-5952 +9010 +9867 +2662 +-445 +-6201 +58 +12 +-7062 +5903 +-8596 +9758 +5077 +2190 +-6669 +-6971 +1094 +1840 +-9430 +1407 +-6986 +-4331 +-7336 +9030 +2993 +7840 +-9777 +-604 +-3098 +6808 +-474 +-9628 +4248 +7152 +-3800 +-1296 +-5284 +6012 +8942 +-3366 +-9245 +9590 +3012 +-6103 +-5190 +-2384 +-8334 +-561 +-4112 +747 +-9772 +-898 +1661 +5668 +1753 +7674 +42 +-8967 +7392 +3441 +9272 +5837 +4380 +-9117 +9930 +-6140 +4767 +656 +9087 +-1213 +-7239 +-3720 +-4078 +-107 +-7043 +-7255 +3228 +2567 +-5137 +3700 +3863 +-4621 +-6785 +4904 +-8106 +-6759 +-5233 +-5842 +-5748 +-17 +-7313 +-2867 +-8184 +-6794 +1034 +-7328 +-6499 +2513 +9322 +-12 +1094 +1864 +6258 +-1858 +9646 +-5746 +5716 +-3394 +-9600 +-1706 +-5820 +1883 +-9012 +2418 +4454 +5123 +-8504 +2153 +8169 +5064 +-6406 +8768 +7725 +-4105 +-7111 +-1012 +3406 +6204 +-6916 +-7069 +-3357 +8189 +-6613 +7294 +3088 +5615 +5716 +6213 +6776 +-2672 +6185 +1701 +174 +6824 +9359 +-874 +-7849 +7693 +6404 +-8273 +-9878 +7047 +7692 +-7222 +3055 +9707 +1669 +-5421 +-7155 +-6800 +7872 +-5667 +-9544 +-3773 +-5752 +-4993 +-1333 +-5225 +8635 +-7832 +-2063 +-1674 +-6330 +3992 +-4604 +-3500 +-7734 +-6538 +6576 +-8075 +9955 +-7064 +7044 +3547 +-4869 +-6423 +1126 +-4390 +9580 +-985 +8809 +5341 +7855 +6670 +1921 +1530 +9121 +8428 +-7320 +-1336 +-6180 +9566 +-420 +1230 +-3751 +5946 +-7969 +-6451 +7263 +-3500 +5381 +-9491 +5907 +-5744 +9158 +8860 +-9964 +-4633 +631 +-807 +8884 +6306 +4743 +-2065 +-3231 +-3183 +6801 +-1598 +-7166 +6495 +5453 +-5997 +-6652 +-1768 +-5865 +8372 +841 +5147 +9643 +-4046 +6063 +7263 +1540 +4799 +-8368 +1948 +6312 +-7340 +7566 +-718 +6314 +-1492 +-8674 +2086 +-8271 +4212 +5304 +-9123 +6108 +-7350 +-1909 +1195 +-3244 +3244 +9548 +3905 +49 +-1206 +-4255 +-9747 +1863 +-4224 +-4139 +-8333 +7027 +4334 +7391 +3538 +5800 +7504 +6503 +-7243 +-1642 +1618 +-2192 +4356 +2488 +-2209 +3043 +253 +-5558 +9416 +-1744 +-1235 +-2994 +-1155 +-7663 +5932 +4688 +-8818 +-2311 +-6859 +-4006 +2946 +-7676 +4347 +9777 +3555 +-3084 +-7418 +3414 +-9753 +-9414 +-3370 +3014 +-5648 +907 +-953 +91 +7161 +6105 +-8247 +-9692 +-8160 +-5501 +-7092 +7589 +-4892 +-4863 +-7553 +1818 +-5509 +-7599 +9702 +-5408 +4352 +-9061 +-3259 +5636 +9412 +9781 +-306 +927 +-6977 +4380 +-8630 +-1648 +-8862 +1778 +-1364 +9793 +4906 +9235 +-8385 +3860 +2843 +7959 +9099 +8806 +-2303 +8386 +4548 +-2513 +1562 +-5954 +4876 +8243 +7600 +1029 +4380 +-3579 +3567 +3380 +9224 +3747 +4393 +-5750 +4902 +4517 +-1941 +-4863 +8994 +-8062 +9758 +-6105 +0 +5449 +7504 +2412 +8593 +9584 +5668 +5979 +7026 +-2854 +-8046 +8221 +-3767 +-7621 +9779 +9926 +5690 +5678 +2046 +9152 +-5997 +-367 +-2227 +5509 +-5233 +-1652 +3276 +6881 +-8459 +-9756 +7263 +-4140 +2080 +-2335 +-8848 +2397 +-8181 +186 +2365 +-8599 +-3418 +9274 +4339 +9673 +-6102 +5052 +5967 +-8447 +9405 +7209 +2843 +-8789 +9471 +-1757 +-3001 +4400 +-5469 +8324 +3088 +8604 +8605 +-4434 +7581 +141 +3300 +1175 +-8428 +-3653 +7500 +1293 +1249 +-6721 +6247 +-46 +6260 +3516 +2071 +2552 +-2088 +9590 +9042 +-123 +-2525 +6388 +-4153 +-2995 +2993 +1971 +2497 +-1829 +4385 +-86 +5211 +-4528 +3289 +6761 +8017 +1836 +-1631 +5386 +-2331 +-1013 +-8124 +-9575 +-4112 +3162 +4779 +580 +-4838 +-4276 +7368 +9678 +-9401 +-3536 +-5933 +-1511 +9088 +907 +-1450 +-7915 +-9486 +8244 +7566 +5319 +6823 +3251 +2125 +-6974 +8430 +-897 +1988 +2733 +-9029 +8968 +1434 +410 +-5136 +1683 +8697 +-4570 +1549 +-3698 +2901 +-1494 +-5032 +3443 +-8307 +-7272 +-1494 +2267 +4859 +9088 +-9090 +-6899 +5239 +286 +-7591 +-5954 +853 +1592 +6924 +3666 +1838 +3700 +-7731 +6332 +5696 +-2657 +3934 +410 +3067 +8760 +-7062 +-199 +4977 +-8287 +-1557 +-8765 +6772 +-1019 +-5912 +-5866 +8893 +-738 +6481 +4634 +513 +-3550 +-4604 +-1115 +3769 +666 +-7823 +-3320 +3868 +2848 +-8634 +-6463 +893 +-6183 +-7823 +37 +-4990 +9843 +2960 +-9568 +2737 +-9342 +3541 +-7087 +-7802 +-9156 +6550 +-1728 +8459 +-6887 +-8826 +1489 +6164 +9988 +-7593 +-2719 +9942 +-4581 +3340 +-3565 +3864 +135 +-6331 +1821 +-9827 +-5398 +6258 +8515 +-3600 +3625 +-7145 +-1277 +-8396 +-568 +-7350 +2397 +-3679 +7754 +4064 +-1497 +-3167 +-8372 +6396 +155 +3216 +-9117 +-1877 +-3659 +5793 +7127 +2936 +3992 +1210 +7841 +6210 +-8146 +-3569 +6986 +4872 +-2170 +-4787 +7391 +-112 +-5515 +1501 +-3374 +-5670 +3547 +-23 +3937 +-509 +-2525 +-221 +1107 +-49 +3487 +-1088 +-233 +6378 +3111 +7180 +-2601 +6646 +7123 +-47 +8189 +-5954 +-5737 +-7333 +9222 +-1470 +-710 +-5698 +383 +-7339 +-4515 +-5236 +-6132 +5045 +4945 +9415 +9070 +-1275 +1252 +-6598 +7242 +3138 +-1498 +8494 +-6941 +4385 +-3012 +-9080 +908 +409 +-3737 +7155 +6818 +8320 +6957 +3804 +6359 +4730 +2092 +-1942 +88 +-9793 +-4869 +6428 +-6376 +-6381 +-2970 +-1981 +-2212 +-8760 +5210 +4643 +-6118 +6082 +-9099 +618 +7242 +-7845 +-4874 +1446 +-3985 +-7483 +2281 +-1770 +-107 +5389 +-9013 +5158 +-2268 +1565 +-2879 +-8868 +9997 +-4570 +8802 +6532 +-210 +4502 +3443 +9806 +-1656 +-4478 +8244 +-7060 +-616 +5983 +7311 +-8319 +-9142 +6141 +4759 +6200 +8524 +-1750 +-759 +-9442 +1067 +9400 +-7657 +-8000 +8385 +7571 +-2719 +4779 +-9486 +9625 +1723 +-3910 +7590 +-6103 +-578 +-3374 +8930 +-7280 +2403 +-4202 +-355 +9059 +-1665 +9235 +6567 +3075 +-9877 +-1753 +-6306 +8788 +8860 +8271 +-814 +9322 +-1959 +-7998 +4578 +-7563 +6905 +-8089 +1766 +-2522 +4850 +2381 +-531 +-4056 +293 +-6130 +-7874 +-6398 +-9135 +-4944 +-8522 +-2674 +7155 +-2264 +8161 +-5845 +4995 +1962 +7885 +8394 +-8039 +-4708 +1207 +-2602 +3065 +-6190 +-3922 +-4047 +-3262 +-3755 +-9900 +1223 +-5533 +1564 +-9981 +289 +8059 +8905 +4155 +-1142 +7865 +3426 +-8280 +7111 +3512 +-6553 +8189 +3 +-2669 +-9972 +-2969 +-2073 +-8160 +-579 +1390 +5797 +-7198 +653 +5112 +2710 +-6206 +5685 +6827 +-6408 +4688 +-1583 +-7060 +9818 +-9593 +3043 +-5729 +4728 +-3538 +4880 +-772 +618 +-1977 +-1087 +1873 +6142 +-7213 +6761 +8876 +3997 +-5149 +-4512 +5600 +946 +-3347 +-7203 +7583 +-3856 +-8931 +1074 +3 +-7204 +2053 +-4637 +-9548 +8732 +-985 +-9437 +-8560 +-6216 +9281 +3541 +6682 +4701 +5720 +-5469 +8206 +7417 +-3573 +2269 +-4157 +-8671 +-8734 +9949 +5788 +-7671 +5593 +1269 +3057 +790 +-3753 +-5745 +6598 +-2579 +-9264 +-7309 +8786 +6717 +6204 +-3729 +-2466 +-91 +-8257 +1251 +950 +4682 +9767 +6653 +-7941 +8609 +720 +5069 +4507 +-7573 +1951 +-1918 +6442 +-553 +8429 +4958 +-7053 +1298 +6396 +-1839 +-971 +-9642 +-3411 +-359 +9971 +9468 +9106 +1274 +-8119 +-3020 +-7030 +6361 +1031 +-4153 +5277 +-3662 +8003 +-3418 +-2585 +9169 +1210 +-374 +7615 +457 +-7333 +-2287 +-9663 +-1066 +-182 +3940 +1415 +-8329 +-7394 +6818 +3547 +-4841 +-6406 +-6625 +7279 +-166 +-4763 +-4910 +-2958 +6153 +-3964 +7429 +-6622 +-8472 +-8039 +-237 +3441 +-6205 +-267 +-4333 +-669 +1086 +-5384 +-6635 +2773 +6663 +-9610 +-2920 +2350 +-801 +8845 +5566 +-6722 +-1775 +6372 +-5692 +-1936 +7913 +-1547 +-6846 +6571 +7809 +-8898 +-3152 +-9176 +3040 +7696 +408 +-8365 +-2135 +2912 +-2098 +-9742 +3190 +5044 +666 +7581 +3072 +1604 +-2956 +8903 +-6197 +464 +9955 +-4412 +6419 +-5170 +1971 +-1339 +-2657 +-9986 +-9317 +2046 +-1477 +1910 +5855 +-307 +3631 +-1075 +-8409 +-2902 +-8417 +7883 +9516 +-9102 +7315 +-7169 +6995 +-9519 +-2624 +9427 +-9570 +2362 +2080 +-1919 +-9393 +7604 +5651 +-8357 +6194 +2483 +4701 +-3645 +1268 +9781 +-2482 +-9629 +-1277 +2548 +-3098 +5292 +5557 +-646 +3111 +1701 +-730 +322 +8244 +1070 +-6847 +-2684 +-17 +-1977 +-7665 +-5502 +6185 +-2624 +-683 +7363 +8420 +-6831 +4583 +9723 +8176 +-592 +8593 +2246 +-2039 +7720 +-6681 +-4390 +4970 +1540 +4355 +4765 +-4616 +9877 +-4838 +1725 +-4742 +-6254 +-802 +-3588 +2009 +-5690 +406 +-2619 +-3208 +-1000 +-3133 +3073 +9309 +4704 +-4823 +1534 +-6393 +7987 +-3243 +-7524 +8254 +498 +-6252 +-3550 +-4526 +7246 +82 +2252 +-6388 +9674 +9104 +1791 +-6188 +-9972 +-9244 +7045 +4336 +-1153 +-8932 +-4481 +-3869 +6451 +-1204 +7982 +9456 +3541 +-4621 +3050 +3208 +-3178 +7501 +-3778 +6108 +5140 +-9825 +-193 +9206 +-5233 +-7280 +-6333 +8030 +-3495 +6388 +1753 +2750 +-8994 +5167 +1390 +5850 +-1379 +-7024 +-6677 +-8853 +9114 +-9012 +35 +4825 +8524 +858 +-3764 +-2030 +6969 +1549 +-271 +-1936 +1349 +-3030 +-6599 +-3758 +-9856 +8325 +1527 +9331 +-3717 +-4955 +-7092 +-6738 +-1710 +4846 +6415 +1269 +-9549 +-1308 +6425 +-4915 +6153 +-5743 +9456 +927 +-7559 +-7849 +-4782 +-2684 +-2335 +-8649 +7056 +-3230 +-362 +-1598 +2043 +-4749 +3187 +8226 +-8 +-5635 +1336 +5843 +-648 +5253 +2270 +8604 +-5821 +877 +-9186 +2585 +8967 +9881 +1479 +3182 +-4253 +-1300 +-2034 +7368 +-3489 +-2163 +7206 +9535 +-4214 +9081 +8395 +-3135 +-9504 +3432 +-5975 +-4933 +-2704 +6387 +3148 +-7446 +6141 +244 +5482 +2805 +-1771 +-2628 +-8565 +9169 +-4816 +-8867 +2343 +-9612 +-686 +-743 +3905 +5816 +-5752 +338 +-6547 +-7441 +-4909 +-9737 +8910 +8544 +5239 +1014 +-1402 +-6506 +9942 +-9199 +1390 +6445 +-7360 +9683 +83 +-6772 +6203 +3228 +3807 +-8015 +-1112 +6891 +-5954 +-9371 +464 +-8904 +1394 +-8354 +-9786 +-2098 +-4678 +-6185 +-9098 +-6314 +-978 +3580 +-480 +-6690 +5692 +9158 +6114 +-851 +-4592 +1816 +7225 +3052 +8744 +-5962 +-7626 +-2290 +-2022 +-8884 +43 +442 +6815 +8104 +675 +-7328 +-2114 +-1769 +-4787 +8137 +5082 +-8431 +-9046 +-5085 +3052 +-6230 +4880 +9121 +4587 +-1876 +8904 +1745 +3236 +-3416 +-592 +6194 +6741 +3866 +-6367 +2100 +-8499 +492 +-224 +-2634 +-1344 +-8987 +-8271 +7327 +-4202 +4834 +5076 +-758 +-5245 +4690 +8714 +3980 +-3698 +-916 +-4379 +-522 +3057 +-5689 +-584 +9059 +-1859 +-6639 +7799 +8377 +-6314 +-1916 +959 +179 +-8085 +-1286 +-8701 +4090 +-4932 +9975 +6708 +-5085 +1142 +5200 +2843 +8954 +-2492 +9176 +9581 +-9874 +5136 +-5539 +5797 +6678 +-7094 +-5384 +2189 +-9856 +9399 +8806 +5589 +-4784 +9423 +1974 +3161 +-7306 +2272 +-7537 +388 +-405 +-7665 +7496 +-7998 +-1993 +-5688 +-1459 +-7179 +-7225 +-5329 +-4820 +-9586 +-1668 +3420 +-107 +-2519 +-6568 +7257 +3518 +8311 +6678 +5999 +-1028 +2525 +793 +-8614 +8162 +-9895 +5993 +-6381 +-2892 +5152 +4445 +1863 +2236 +-8968 +8428 +8968 +-8452 +3871 +-7475 +5210 +-8169 +7439 +288 +3720 +-5391 +-2677 +-7229 +-6344 +-1012 +9437 +2490 +8059 +-2031 +-6724 +6204 +-8169 +-1274 +-2076 +589 +3200 +729 +-3566 +-7366 +-1114 +1233 +8769 +8686 +-8314 +7800 +8507 +5285 +684 +-7537 +5786 +-9548 +967 +5975 +3506 +-7603 +9368 +-3524 +6019 +-3525 +-3727 +4938 +-4403 +-7400 +4197 +618 +-4512 +5448 +-6859 +-6596 +9030 +-5516 +-1378 +-5445 +-7802 +9241 +3956 +-7469 +-6811 +-8849 +186 +7466 +3427 +7284 +-4154 +-6918 +6080 +-157 +3189 +-1744 +-2030 +7049 +3389 +-5821 +-7878 +-6733 +-9602 +4521 +5942 +1629 +6455 +1576 +1540 +8679 +-9593 +106 +3873 +-6681 +9676 +4444 +6172 +-2574 +7452 +-8948 +-2348 +6441 +8859 +5745 +5380 +406 +1366 +9181 +-1459 +-8247 +3810 +2897 +4136 +464 +-6098 +-2073 +-9000 +9184 +-174 +4005 +-2609 +-7040 +-8614 +1622 +-3848 +-7573 +-5640 +-2141 +-1013 +-4245 +-6227 +-341 +8911 +-8179 +-976 +-5163 +-7469 +5640 +2174 +411 +5764 +7189 +1330 +-9742 +5322 +6548 +-7003 +-828 +6153 +-1852 +-5334 +9297 +8090 +7015 +3766 +-7299 +-6470 +-8675 +5482 +-1689 +-6804 +2782 +-3771 +1922 +328 +-7069 +-6916 +-8096 +-2874 +-4910 +918 +-4543 +6246 +6848 +-2874 +1709 +-7604 +7519 +-8280 +4578 +6746 +-2090 +838 +-7121 +-828 +-8911 +6367 +1183 +5454 +102 +1948 +-7562 +7453 +-7603 +-863 +6105 +9347 +-8909 +9185 +3414 +1988 +-9054 +-2082 +4905 +-4703 +-2243 +-1066 +9287 +-3755 +-236 +-7088 +-619 +476 +-2857 +-861 +-1905 +-4651 +7540 +-4700 +-4288 +-534 +39 +5147 +-6406 +-8184 +-2364 +9444 +-7917 +-8672 +3401 +-2096 +-9580 +9184 +-7201 +-2815 +1535 +2750 +371 +9808 +-8190 +2720 +5097 +2609 +-1028 +49 +796 +-8584 +-7499 +-6122 +-5563 +-8995 +4297 +-2701 +4146 +1194 +-2414 +3491 +-2500 +6492 +-9863 +7903 +-3700 +-405 +1379 +9188 +-2667 +1838 +4287 +-619 +-438 +1107 +-5583 +-1259 +-1925 +-593 +6451 +2365 +6465 +-7529 +-3767 +8508 +3053 +-8362 +-804 +-6625 +1106 +-7280 +-7877 +-9054 +4681 +6521 +8838 +9584 +-2206 +8476 +3654 +-2077 +-5010 +1518 +-9283 +-9972 +-7366 +1347 +-7673 +-3634 +-4050 +-4048 +-9662 +-3833 +513 +4629 +-9572 +3588 +-2675 +-6901 +-4558 +8929 +6528 +-5097 +6369 +3212 +-5865 +-6035 +6475 +4892 +4348 +1031 +-6284 +5267 +8930 +-4737 +-8749 +-8942 +640 +-68 +-9996 +6859 +-1449 +4610 +-6748 +-2201 +-4528 +3628 +5242 +-2146 +1699 +334 +-1768 +4945 +-362 +1240 +-6714 +-7917 +5932 +6746 +7049 +5158 +7911 +-7198 +-4540 +-2616 +-7671 +-7143 +9932 +9847 +9926 +6073 +-6665 +1874 +-6788 +-4651 +-2022 +-4059 +2245 +3587 +3351 +-1621 +6166 +6052 +-249 +611 +-9943 +9306 +-3194 +-480 +3389 +-8241 +-7161 +9001 +538 +-3830 +4155 +3625 +4400 +-8779 +-6506 +-7325 +8927 +-3809 +-5891 +-5017 +-901 +-6427 +3424 +7114 +8422 +5322 +664 +5480 +-4250 +-5226 +2525 +-1541 +-4752 +-5667 +8115 +-7109 +6209 +6180 +302 +8244 +-4718 +-6785 +-2020 +2975 +-6956 +-3228 +8954 +8884 +6141 +5271 +-1765 +8386 +-9068 +3145 +5339 +412 +-619 +2154 +-2292 +7600 +6678 +5951 +6702 +1725 +-3479 +-588 +-2602 +6036 +-7483 +-8749 +-628 +-9590 +8244 +13 +-589 +-7088 +-8767 +3251 +-1343 +9351 +1683 +4057 +-704 +-3672 +9942 +547 +8368 +-9877 +2990 +874 +8911 +122 +4093 +-8023 +-2243 +1631 +-9865 +-7360 +4711 +1763 +5644 +-2956 +6901 +-4682 +-8188 +3858 +-554 +729 +7263 +2353 +-2867 +-4434 +-4616 +-881 +5260 +-8873 +6939 +-2028 +4259 +-4734 +6021 +5645 +-3235 +-8401 +-8301 +-2967 +924 +4643 +3700 +-8023 +-6790 +1337 +2701 +1091 +-1711 +2684 +8479 +2965 +6178 +1978 +-9737 +6051 +4419 +-6838 +-5714 +-6863 +-376 +-401 +-9170 +-2459 +-9427 +2044 +89 +785 +8495 +5396 +6105 +-3266 +5413 +4005 +-841 +7351 +2684 +-2109 +406 +-2377 +7152 +-6463 +-6463 +-3035 +-7905 +1320 +8196 +-7875 +-9273 +-8560 +-3643 +-1949 +-9701 +-8967 +-8423 +-97 +2733 +-1861 +8170 +7342 +-5162 +-1598 +4578 +-2848 +9636 +8128 +2469 +-6505 +-7370 +1141 +2819 +5944 +1950 +-7096 +5932 +-2504 +2418 +-2652 +-3409 +1274 +-7116 +3087 +964 +5317 +1334 +2513 +-5371 +-5750 +1940 +8704 +7592 +-3958 +9774 +9093 +5993 +5975 +-592 +-9943 +-5501 +1175 +2015 +-7272 +-4490 +-6485 +-1326 +-3035 +-3351 +9246 +733 +7780 +9070 +-6547 +6570 +1766 +-7704 +589 +9274 +2916 +7942 +-2928 +-5018 +1725 +-5512 +1133 +5902 +1698 +7455 +-5809 +-3099 +-6398 +9359 +8995 +-3469 +3599 +-108 +-1213 +-3062 +-1820 +2188 +-9442 +-5980 +4320 +-7639 +-2996 +-1514 +-1949 +-5933 +4520 +-2872 +8014 +-9442 +8193 +2843 +-5661 +5629 +-6955 +9099 +1916 +-3595 +8291 +6314 +1276 +7880 +-2612 +-8675 +-2969 +-5225 +1392 +230 +8204 +5897 +-1880 +-6448 +-3980 +3934 +-7642 +2922 +8113 +-8540 +-766 +-9489 +-9640 +3028 +-8305 +8752 +-5341 +510 +-4112 +-4948 +-8463 +-4137 +2801 +-3089 +3189 +-7382 +-1452 +-1364 +-4047 +3138 +-3351 +-2185 +-5377 +-9610 +720 +7908 +6498 +-9923 +5832 +-3081 +-3873 +2865 +8189 +-1328 +7663 +-6136 +3151 +-7014 +9253 +-1032 +-5567 +-9810 +3800 +5275 +6902 +9461 +-5804 +2455 +4993 +4750 +-4516 +106 +-8630 +-8604 +879 +6052 +-7446 +-5021 +-592 +-1717 +-4567 +6197 +7269 +-5990 +1274 +8903 +4749 +-5507 +5389 +2569 +2711 +-3418 +6363 +-3830 +-2335 +7044 +6673 +-2894 +8766 +-8927 +-137 +-3055 +-3653 +1067 +-1852 +-4536 +-5826 +-5138 +2125 +-2263 +3475 +-4445 +-1170 +4400 +-2703 +-5741 +3244 +-3809 +35 +-7421 +-928 +-794 +1699 +8907 +8398 +2358 +8655 +-638 +-849 +8930 +-2711 +4850 +-3332 +-3651 +7675 +-1034 +-3768 +1402 +2180 +513 +-4288 +6260 +-4925 +2843 +-9826 +-3363 +-8853 +1763 +6194 +8766 +-3453 +-7234 +-4170 +-820 +8686 +-8244 +3367 +-4294 +-359 +-1446 +286 +-6790 +-4398 +-7044 +-7876 +-6953 +-6722 +340 +-3183 +-6622 +6954 +-9205 +-405 +-2139 +-2902 +1535 +-2928 +1434 +-210 +6524 +410 +4427 +-812 +364 +-7874 +6740 +-8231 +2297 +1464 +-8564 +3391 +8250 +1194 +-421 +-7983 +-3255 +-7566 +-3415 +-7798 +-866 +2821 +1330 +-9158 +4998 +4117 +-9882 +5942 +-8529 +4882 +-812 +6772 +7338 +4277 +-4929 +8987 +-9371 +2801 +-7333 +6781 +1330 +-8309 +4717 +-8202 +6252 +5152 +-9862 +6227 +7253 +3546 +-604 +6465 +9159 +5688 +-7459 +950 +4062 +3997 +2693 +4550 +1955 +-8180 +-3693 +-2039 +611 +6665 +-1280 +2907 +-6699 +-1302 +-4078 +2361 +-2918 +1304 +635 +5116 +6336 +-1888 +-4797 +8427 +-8436 +2469 +-1069 +-9756 +-4555 +7986 +-9297 +-1219 +-6066 +2236 +8072 +763 +1985 +-1618 +3671 +-7289 +1602 +-5910 +1733 +552 +-6180 +4334 +-7242 +554 +-8849 +5158 +2037 +-4840 +8420 +-5610 +-6894 +-3001 +-163 +6980 +8907 +-7333 +1349 +-558 +2750 +-5826 +-4697 +-6754 +4187 +454 +-6635 +7974 +9718 +5857 +3441 +2190 +-1859 +-6596 +5031 +9165 +-2421 +2168 +-4049 +-1317 +747 +-191 +9859 +9888 +5153 +-2627 +-5780 +-806 +2415 +-5097 +5454 +2960 +8115 +7730 +-8552 +-3656 +8812 +-6077 +-3659 +9949 +-2051 +1838 +-3588 +-6451 +-2700 +-7969 +5907 +-3823 +-3845 +-7062 +-9972 +-4528 +8897 +-6993 +-4006 +6275 +-3480 +-1100 +-901 +-3099 +234 +-1342 +1256 +8812 +-1970 +-2329 +-8767 +-1449 +3303 +-4399 +-3577 +5850 +-8168 +3104 +8977 +1252 +7022 +-794 +-8020 +2619 +-1744 +4146 +-6772 +844 +8041 +-7691 +-1477 +3055 +-8881 +-9473 +-6216 +-5507 +-3284 +8871 +-5435 +2009 +-4592 +4476 +5878 +3521 +9184 +4701 +-3509 +8447 +9284 +2100 +-1879 +-8168 +-7563 +-17 +945 +-3264 +-4698 +-6197 +4351 +-3720 +7780 +7897 +6980 +4894 +-3951 +1388 +2782 +1401 +5689 +513 +-5990 +-2657 +-6151 +4872 +7177 +3266 +7374 +-6239 +1366 +9832 +-3055 +4970 +6524 +-1914 +9881 +-9722 +-7293 +9659 +-645 +-2675 +9253 +4711 +-7145 +7021 +1785 +3305 +-6916 +8399 +8060 +6856 +-6126 +8915 +6024 +-362 +3429 +-9387 +513 +9019 +4388 +-9967 +-9772 +-9774 +1471 +4345 +9167 +-5211 +-4041 +-3614 +6013 +9783 +6861 +-1120 +631 +6390 +-7419 +5707 +2360 +4728 +235 +6141 +-2602 +-5749 +9667 +3512 +-4944 +-1777 +-7336 +-8711 +6626 +4736 +497 +-4248 +-8452 +-5888 +-377 +4314 +-3069 +-7313 +-904 +-421 +-1311 +-1981 +-2925 +-4074 +-5957 +3706 +5629 +-8207 +3633 +-4296 +6336 +-9272 +-8515 +-5126 +-8403 +-2039 +-8873 +-4154 +-6384 +-2565 +-5501 +4693 +4782 +9124 +7268 +4684 +8576 +5565 +-8056 +-8392 +-5149 +1703 +-9266 +3917 +-1968 +5865 +-8452 +-1028 +4136 +4328 +9606 +3377 +-1536 +-916 +9617 +7044 +4052 +-5311 +3937 +5928 +9733 +7184 +5398 +-1345 +9866 +9182 +-1069 +-7628 +6853 +4770 +9456 +2675 +2508 +-2982 +-2022 +2415 +-457 +-4844 +729 +4042 +-4250 +6096 +1700 +-4149 +-851 +-26 +-1308 +2549 +-4333 +-3765 +9866 +-3695 +-8976 +-9367 +-8271 +230 +8797 +3351 +-1245 +5270 +-2785 +2248 +923 +9615 +-7070 +-9249 +9346 +-6738 +-6600 +-1288 +1086 +-2915 +-5677 +-8634 +2711 +-1815 +-2806 +-4497 +-7943 +834 +1756 +-7824 +8252 +9574 +-1879 +-2580 +-6668 +-6610 +-9612 +812 +-1047 +-3164 +2343 +1020 +6421 +-7124 +514 +-9562 +-8522 +8652 +8893 +-2585 +5158 +5679 +-6056 +2037 +9400 +-7024 +-9899 +5968 +4429 +-557 +-3134 +-7062 +5446 +-539 +-3749 +1705 +4798 +-322 +9840 +-6173 +4546 +7807 +7627 +4454 +-6260 +5052 +5289 +2989 +-2297 +4782 +-2261 +-3696 +-941 +7729 +-1630 +-7218 +-3494 +-8421 +2935 +9184 +7566 +-7670 +6455 +-7675 +6129 +6260 +-5745 +8630 +-6201 +-8946 +7482 +4754 +-9836 +3538 +-6705 +-3302 +9758 +-2885 +790 +-4224 +-4470 +-5474 +-3618 +-5165 +-6330 +-4403 +-2585 +-6587 +1236 +-3877 +7882 +1066 +-1981 +-5058 +4776 +-8365 +-1550 +-9545 +-3684 +-7254 +766 +-4294 +4454 +1120 +-6461 +2236 +9069 +-2728 +1988 +4798 +1766 +2333 +-7323 +511 +1230 +-8887 +-2849 +-2285 +9715 +682 +729 +8489 +-3284 +-152 +-9442 +8505 +-5994 +4380 +-4078 +7382 +1910 +-4635 +-5567 +3101 +-8853 +-2535 +-3490 +8187 +-3044 +6723 +-4732 +9731 +-1514 +-8075 +-4064 +3100 +-474 +2652 +-5010 +6265 +-2111 +-8765 +-1820 +9019 +-9437 +42 +-1511 +3546 +8797 +1328 +-6846 +-4575 +5499 +849 +5715 +-17 +-6738 +-7771 +-2874 +8203 +207 +-6295 +9767 +5237 +-6385 +-7044 +-9569 +-2952 +8567 +7015 +4970 +7982 +6771 +2086 +3053 +-9484 +-7497 +-5840 +6484 +8683 +-9181 +2158 +388 +8045 +2721 +-4406 +9910 +-7003 +3268 +-9437 +7428 +-5087 +-7469 +-8873 +-9425 +3718 +-5355 +3999 +-8431 +8476 +9543 +6924 +1648 +-9947 +7647 +-6621 +-3192 +-7994 +8108 +-6341 +5256 +4300 +3797 +7312 +716 +2846 +-9590 +-4865 +-7915 +-9796 +4132 +7818 +-9960 +6260 +-6451 +-7018 +5238 +-5900 +-5595 +5029 +2432 +4454 +4452 +3441 +-6864 +9435 +1361 +-4225 +-700 +-3868 +8045 +3852 +7889 +-8703 +8821 +4701 +1179 +-3269 +1560 +-6677 +-9181 +2348 +-7934 +-2409 +9346 +-6664 +-6714 +1175 +-5646 +7177 +-3275 +637 +-2522 +5710 +-7475 +7856 +-5446 +7590 +-7483 +-5018 +-3959 +8207 +-1905 +1683 +-4304 +9242 +2210 +5794 +140 +-8217 +-8944 +-1416 +-6240 +-8342 +-6110 +6561 +-270 +-5698 +3043 +-8379 +-9487 +-2579 +7959 +-5501 +4844 +2741 +8203 +5288 +7184 +-7878 +-1031 +-3301 +-5353 +3367 +-7768 +-4497 +6880 +1363 +-1088 +-3414 +7056 +5818 +9189 +-367 +8161 +-8874 +-8638 +-3436 +-810 +-45 +-7091 +9817 +8834 +804 +2993 +-1389 +1596 +6133 +8207 +-9954 +-3256 +2015 +-9740 +-9103 +5013 +7436 +-5238 +-2419 +510 +8145 +5769 +-2149 +-1354 +-8621 +2916 +-1950 +-3262 +5324 +-8030 +-7404 +-5532 +8324 +-4406 +7022 +6202 +2639 +5932 +-835 +-2210 +9549 +5716 +6530 +-3055 +4837 +-4250 +5729 +5989 +-8056 +4737 +3058 +-1186 +-4933 +-3727 +-5131 +-8160 +-3550 +-9046 +1763 +3723 +4260 +8960 +-4724 +8001 +2306 +5269 +5886 +-3928 +1336 +-8334 +5993 +-1775 +-4306 +-35 +-831 +-2838 +-322 +7898 +2189 +-9625 +6507 +-5815 +-8197 +8954 +-5972 +7807 +-8309 +2142 +-3386 +23 +-4100 +2125 +-7367 +-4338 +-9003 +-3954 +-1069 +-9411 +-6406 +-3867 +-7986 +-1738 +793 +-5741 +8359 +6889 +-6194 +-910 +-4255 +-8284 +4603 +1554 +-6198 +5668 +-4401 +-7482 +-8047 +8593 +5802 +6734 +5951 +-3392 +6839 +7357 +-5314 +-6827 +-7229 +-7335 +-5204 +-6663 +-8948 +4967 +-3415 +2397 +6158 +4435 +-5232 +-2035 +-5303 +-4331 +-898 +9997 +2077 +-3659 +-6406 +8049 +2028 +-1674 +-5426 +3569 +-4875 +-3955 +-851 +7369 +1955 +8945 +9818 +-4441 +-6755 +8312 +-4341 +-918 +151 +-7698 +-8962 +3957 +4081 +1508 +-6376 +3327 +-3659 +8884 +-4379 +3167 +-4950 +2040 +-2958 +329 +-6505 +-8115 +5684 +-7242 +4062 +1268 +-5763 +-9104 +-4431 +3979 +-6688 +-5391 +8793 +1426 +-4531 +9399 +7575 +2632 +1625 +-5490 +-5974 +1629 +-753 +9704 +-3166 +-7844 +-2293 +6209 +8325 +-6994 +-4540 +1853 +9188 +9087 +-1336 +5932 +3786 +-9805 +-7573 +-9605 +-6785 +-2137 +-9904 +2582 +-216 +2843 +-7773 +-5111 +-8421 +-5822 +-686 +-4617 +5133 +4680 +1605 +6665 +8459 +3973 +-6755 +6351 +4530 +2693 +-1275 +-5417 +-8626 +-8020 +5446 +245 +9124 +-9683 +-7007 +1993 +9849 +-7937 +5578 +-3327 +-815 +6665 +2398 +336 +6406 +5971 +8382 +-6980 +3401 +7047 +-8984 +-2994 +-3812 +-464 +-7033 +-430 +733 +-1019 +-7563 +-522 +668 +-3185 +9761 +-6290 +-4042 +3159 +-3194 +-3490 +-4997 +2639 +3143 +8954 +-8749 +-7044 +2887 +-4414 +-9954 +-8432 +4329 +7170 +4162 +9172 +-3659 +-6098 +-5954 +-5414 +-1957 +-6729 +3429 +3104 +-7577 +7872 +9942 +-7625 +-4614 +4897 +-1128 +-7844 +937 +4348 +874 +-9288 +7942 +3729 +-6930 +3786 +-5007 +-5954 +-8309 +-6827 +-8677 +-3144 +6472 +-4266 +6846 +8046 +-6963 +9646 +4155 +-3166 +7807 +-3653 +-8452 +-7103 +-8396 +2272 +3613 +754 +4524 +6306 +-8935 +9309 +6056 +-9391 +9835 +1919 +957 +9242 +721 +-7540 +5158 +-763 +3172 +-4073 +-7128 +9281 +-7984 +8390 +7152 +-7318 +4627 +-8499 +-8518 +-9205 +318 +8455 +7701 +-1759 +-4732 +2288 +-474 +511 +-239 +1523 +6869 +497 +-3809 +2303 +1269 +1020 +1422 +-4097 +2989 +8809 +-2875 +-8608 +7807 +3592 +-8276 +-3294 +2211 +-5269 +6361 +-430 +-2466 +-3286 +-2982 +-9686 +-4872 +-9749 +1131 +-2947 +-558 +8827 +2268 +9581 +5600 +7896 +5112 +-9438 +9859 +-7190 +-6185 +-3181 +6738 +8091 +-6785 +6939 +4348 +6209 +4213 +8057 +-2334 +5496 +-3727 +-4060 +-7699 +-6714 +3781 +-1476 +-5993 +-1308 +1535 +1929 +-1738 +-9747 +8306 +-6913 +64 +6878 +-2453 +-4193 +-8504 +-2264 +-4220 +-157 +7519 +-9099 +1205 +-2206 +5288 +3544 +-8375 +-548 +-8788 +-7313 +269 +-3379 +1604 +-9484 +4163 +-333 +4237 +-4600 +722 +6713 +-7252 +-558 +9189 +-1908 +-8021 +-9464 +2316 +-5506 +6448 +6924 +-9610 +8346 +-2634 +9107 +-9865 +6350 +6223 +7391 +-1712 +-1750 +6252 +-1914 +8849 +4615 +3208 +-5728 +-817 +8827 +766 +-8417 +8820 +-2701 +-2982 +5450 +8060 +-7305 +4452 +7242 +-1431 +2888 +4393 +-1280 +-5173 +-6955 +3438 +7463 +-4692 +5496 +-5615 +-613 +1164 +-1732 +-5646 +5195 +5766 +-1155 +8930 +-3192 +-1829 +3467 +-9193 +-564 +3646 +4510 +1734 +5784 +-4490 +-4460 +-143 +-202 +-8015 +462 +-4555 +-3291 +-9685 +900 +8488 +-6275 +-7604 +5023 +3574 +-6461 +7729 +6058 +8390 +329 +-9949 +-5977 +8053 +-8743 +1334 +3038 +90 +-2543 +-8235 +-9644 +-9892 +-2947 +-4509 +-5900 +-753 +-1949 +-7763 +-7014 +-6911 +-6878 +-5694 +5819 +3084 +-2432 +-6675 +-3181 +-5469 +-8515 +1133 +-323 +3414 +283 +-6213 +-5106 +-5055 +-1964 +4993 +3208 +-9073 +8980 +7231 +7063 +-7511 +6399 +3335 +1046 +8205 +-8554 +-4202 +-3448 +-8630 +-6880 +-4023 +5546 +-6282 +1258 +-985 +-7874 +1812 +-7575 +-1213 +7511 +-453 +-2667 +8544 +-7280 +-7663 +1783 +-180 +7984 +-5809 +-8869 +5778 +-3764 +-2304 +-4567 +-4655 +-1429 +9580 +-8779 +3273 +-6729 +3100 +3257 +7212 +4478 +-1548 +-7696 +6421 +1978 +-2656 +-2129 +-5300 +3975 +-646 +8024 +3666 +-9989 +-4269 +9573 +2657 +5506 +-2894 +5565 +1838 +-5501 +-9575 +-8273 +-1459 +9127 +-7976 +-3152 +8033 +2623 +-8153 +2522 +3354 +-939 +-6184 +-1215 +6582 +3507 +-3955 +920 +9427 +8011 +6194 +9276 +-3538 +-4726 +-4457 +7305 +-9421 +1099 +9325 +4610 +5496 +-3765 +-9973 +6311 +-9861 +4027 +736 +730 +1077 +-6330 +-2374 +7883 +-3684 +8665 +6517 +-916 +-7402 +5260 +-60 +-9347 +-271 +-2704 +-8967 +690 +-9163 +-4756 +-2031 +-3645 +5227 +-5170 +4234 +-5518 +-2891 +5158 +7569 +-8582 +-4512 +8074 +9961 +5285 +-2915 +-831 +7579 +5715 +2116 +-7721 +5908 +-8543 +3538 +-3827 +-5640 +-3205 +3541 +-1967 +8511 +2221 +-851 +8551 +-4680 +-4961 +5832 +9025 +-2607 +-621 +4336 +-9135 +3093 +6859 +5999 +-8926 +-372 +4701 +6481 +1328 +-167 +2960 +-4129 +1838 +3976 +-2000 +1257 +-4558 +-6448 +-7158 +108 +4598 +8283 +-6059 +-3955 +-4039 +2078 +3187 +6851 +-432 +-4434 +-594 +5009 +43 +6401 +-6248 +-6252 +-1473 +7648 +4454 +3351 +8930 +-9654 +235 +7234 +2221 +690 +7416 +8718 +9758 +8931 +5099 +-5501 +7675 +-4993 +-1066 +-3740 +-248 +874 +-3752 +-656 +681 +2353 +-7911 +-3007 +-6635 +1330 +8211 +4502 +-6432 +4561 +-3909 +2585 +9547 +-3349 +-5462 +1729 +7395 +3244 +1160 +-2717 +-3748 +-8031 +4379 +909 +6467 +6617 +-8745 +-2662 +2494 +-4592 +2712 +6971 +408 +464 +-194 +-8329 +7375 +-4278 +8410 +1559 +4834 +-5951 +8426 +532 +-9643 +1973 +5909 +-4379 +5229 +-5043 +6260 +2525 +-4420 +-4202 +3362 +-307 +7635 +7155 +-5692 +7198 +996 +8574 +1215 +-7483 +-7122 +9460 +1232 +2621 +9403 +-8037 +-6151 +-8715 +9643 +1763 +321 +5250 +3870 +2448 +-72 +-9176 +5615 +-3878 +1991 +-575 +19 +4265 +-1613 +-5868 +-2074 +-3679 +-1633 +-5204 +-4990 +6620 +2585 +1489 +3897 +2693 +-4094 +3779 +9453 +3012 +-536 +116 +-36 +-7419 +2944 +9324 +-8711 +8244 +-9193 +7202 +-2038 +1081 +924 +4412 +888 +4727 +-7511 +7693 +9801 +1328 +5272 +2386 +-1053 +5361 +-3378 +-5452 +736 +6252 +2308 +-7932 +7474 +4283 +7263 +-3658 +4739 +2551 +7420 +9220 +-7316 +-474 +-8333 +-6110 +9107 +-6894 +8562 +4169 +-8062 +-8799 +9867 +-6098 +1629 +-2153 +9408 +317 +-5966 +-1571 +-1112 +9712 +5826 +9519 +-5043 +8834 +-1450 +-2900 +4268 +2086 +2843 +1660 +2843 +-1669 +3957 +-7276 +-3453 +8987 +-1499 +-5162 +-263 +798 +901 +-5163 +-5285 +9270 +-6151 +4234 +-8296 +-3480 +-3152 +1485 +-3980 +-8153 +-3672 +1388 +-1436 +-2020 +6247 +-6829 +-7984 +-4105 +3478 +-3767 +4475 +-1476 +640 +-3488 +-2596 +9387 +78 +289 +-5745 +-6685 +7411 +8660 +6497 +-6793 +-7351 +8221 +1401 +-2808 +4643 +4380 +-2997 +6909 +-1625 +5146 +5836 +3816 +8979 +-1981 +9128 +-7497 +-3267 +-5010 +8769 +-6700 +-7421 +-1819 +-1329 +-2203 +-7495 +-5667 +-8932 +-4345 +747 +-6694 +1520 +-1803 +7546 +-3895 +3700 +253 +-6527 +-8239 +4654 +4629 +-9690 +6917 +-9919 +3027 +-4495 +5807 +6581 +5800 +9189 +-6197 +4094 +7920 +1763 +-9679 +6388 +-9703 +4517 +1187 +1398 +3273 +924 +8960 +-6967 +9085 +2976 +-1949 +3720 +-2928 +8879 +-108 +6821 +6528 +6594 +-1315 +-7877 +-8 +-2562 +996 +9134 +1812 +4025 +-5069 +-5069 +7686 +2543 +4452 +8987 +-1772 +-4494 +-2577 +1330 +-3626 +5872 +-4997 +2046 +6717 +-1770 +2169 +6124 +-1032 +674 +3204 +9348 +447 +-1038 +-3373 +-6868 +4551 +1631 +6509 +-8957 +-3183 +7044 +9518 +3351 +-7222 +2153 +5453 +9136 +-4048 +-9573 +-1266 +903 +5245 +5809 +2358 +8359 +-4613 +-6953 +-8749 +-6066 +8374 +-3699 +8455 +7417 +-3944 +2249 +-190 +8766 +-9265 +5023 +9381 +-1919 +2452 +1058 +6606 +1533 +2353 +3856 +-1803 +5040 +-2982 +4259 +8790 +9437 +6481 +-1116 +9394 +-7814 +-1164 +-2513 +1929 +1899 +2417 +-3648 +-4121 +1768 +2334 +815 +-4023 +2937 +7936 +-6524 +-3830 +1213 +-8499 +-3970 +-2000 +-6926 +8749 +-9912 +5067 +-267 +-6759 +8196 +880 +-7517 +6570 +-6130 +5754 +-6197 +-5517 +1282 +4478 +-4643 +4825 +1676 +-4742 +-1069 +-578 +-6103 +-4509 +-7124 +-2660 +1377 +3892 +2623 +-3208 +2681 +6152 +-916 +8425 +-91 +3147 +8997 +5239 +-8047 +-7407 +2363 +2393 +-9651 +-342 +3518 +1551 +637 +1743 +5975 +624 +-8202 +4378 +-4923 +874 +-2596 +3 +2782 +-2970 +288 +747 +-1196 +1401 +8512 +-7241 +5153 +-6591 +-9073 +-7671 +7600 +9065 +-5744 +-5293 +-5293 +2046 +3240 +-3015 +730 +8386 +-9434 +3354 +-5760 +-3324 +9218 +457 +4091 +1763 +4548 +-7088 +-8067 +3898 +-1433 +3969 +6657 +-9921 +2086 +7934 +7369 +9186 +2354 +6754 +8974 +-1655 +-3446 +-9090 +-9679 +-8935 +8155 +3073 +-3578 +-5224 +-5398 +-5987 +6106 +-8453 +9260 +-9045 +14 +9906 +-6752 +8732 +6360 +-3845 +-4847 +3034 +-7026 +1967 +-611 +3857 +7428 +9273 +-2861 +-2367 +7305 +733 +4629 +3997 +-4840 +3424 +2032 +547 +2661 +2876 +-4439 +-3002 +9251 +-7564 +-1104 +-9747 +7726 +-7600 +-6350 +-5470 +-2601 +4420 +6924 +2179 +8266 +3038 +8382 +-9052 +-928 +-9188 +1075 +3057 +8845 +1295 +5473 +629 diff --git a/src/bin/2022/day20.rs b/src/bin/2022/day20.rs new file mode 100644 index 0000000..654ea60 --- /dev/null +++ b/src/bin/2022/day20.rs @@ -0,0 +1,74 @@ +#![allow(dead_code)] +#![allow(unused_variables)] + +use advent_of_code::prelude::*; + +#[derive(Default)] +pub struct WrappingQueue { + queue: Vec<(usize, isize)>, +} + +impl std::fmt::Debug for WrappingQueue { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_list() + .entries(self.queue.iter().copied().map(|v| v.1)) + .finish() + } +} + +impl WrappingQueue { + fn mix(&mut self, idx: usize) { + let val = self.queue.remove(idx); + let new_idx: usize = ((idx as isize + val.1) + .rem_euclid(self.queue.len() as isize)) + .try_into() + .unwrap(); + self.queue.insert(new_idx, val); + } +} + +pub fn parse(fh: File) -> Result { + Ok(WrappingQueue { + queue: parse::lines(fh).enumerate().collect(), + }) +} + +pub fn part1(mut q: WrappingQueue) -> Result { + for i in 0..q.queue.len() { + let idx = q.queue.iter().position(|(idx, _)| *idx == i).unwrap(); + q.mix(idx); + } + let zero_idx = q.queue.iter().position(|(_, val)| *val == 0).unwrap(); + Ok(q.queue[(zero_idx + 1000) % q.queue.len()].1 + + q.queue[(zero_idx + 2000) % q.queue.len()].1 + + q.queue[(zero_idx + 3000) % q.queue.len()].1) +} + +pub fn part2(q: WrappingQueue) -> Result { + let key = 811589153; + let mut q = WrappingQueue { + queue: q.queue.into_iter().map(|(i, v)| (i, key * v)).collect(), + }; + for _ in 0..10 { + for i in 0..q.queue.len() { + let idx = q.queue.iter().position(|(idx, _)| *idx == i).unwrap(); + q.mix(idx); + } + } + let zero_idx = q.queue.iter().position(|(_, val)| *val == 0).unwrap(); + Ok(q.queue[(zero_idx + 1000) % q.queue.len()].1 + + q.queue[(zero_idx + 2000) % q.queue.len()].1 + + q.queue[(zero_idx + 3000) % q.queue.len()].1) +} + +#[test] +fn test() { + assert_eq!( + part1(parse(parse::data(2022, 20).unwrap()).unwrap()).unwrap(), + 17490 + ); + assert_eq!( + part2(parse(parse::data(2022, 20).unwrap()).unwrap()).unwrap(), + 1632917375836 + ); +} diff --git a/src/bin/2022/main.rs b/src/bin/2022/main.rs index 2aa8500..d13e807 100644 --- a/src/bin/2022/main.rs +++ b/src/bin/2022/main.rs @@ -30,6 +30,7 @@ mod day16; mod day17; mod day18; mod day19; +mod day20; // NEXT MOD #[paw::main] @@ -55,6 +56,7 @@ fn main(opt: Opt) -> Result<()> { 17 => advent_of_code::day!(2022, opt.day, opt.puzzle, day17), 18 => advent_of_code::day!(2022, opt.day, opt.puzzle, day18), 19 => advent_of_code::day!(2022, opt.day, opt.puzzle, day19), + 20 => advent_of_code::day!(2022, opt.day, opt.puzzle, day20), // NEXT PART _ => panic!("unknown day {}", opt.day), } -- cgit v1.2.3-54-g00ecf