From cae56e170cd3832ebe938766126a5b39876c7b31 Mon Sep 17 00:00:00 2001 From: kageru Date: Sat, 9 Dec 2023 09:24:38 +0100 Subject: [PATCH] add 2023/09 --- 2023/inputs/day09 | 200 ++++++++++++++++++++++++++++++++++++++++++ 2023/src/bin/day09.rs | 67 ++++++++++++++ 2023/src/common.rs | 4 +- 3 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 2023/inputs/day09 create mode 100644 2023/src/bin/day09.rs diff --git a/2023/inputs/day09 b/2023/inputs/day09 new file mode 100644 index 0000000..681707e --- /dev/null +++ b/2023/inputs/day09 @@ -0,0 +1,200 @@ +21 32 43 50 52 63 128 354 980 2536 6198 14571 33400 75257 167315 367301 795349 1696172 3558635 7344376 14925482 +29 42 53 56 39 -4 -34 127 1001 3868 11543 29740 69331 149906 305152 590695 1095189 1955590 3377721 5663416 9245727 +4 13 31 69 161 382 885 1967 4170 8430 16326 30587 56237 103154 191459 362164 697242 1356689 2647559 5156471 10012899 +8 14 21 35 62 107 169 235 286 352 697 2286 7805 23735 64493 160875 377960 854409 1890137 4141400 9048308 +-2 0 12 46 132 343 844 1984 4452 9527 19484 38295 72924 135831 249908 458206 842858 1561142 2912508 5459800 10242444 +16 42 79 127 186 256 337 429 532 646 771 907 1054 1212 1381 1561 1752 1954 2167 2391 2626 +-4 9 49 128 256 441 689 1004 1388 1841 2361 2944 3584 4273 5001 5756 6524 7289 8033 8736 9376 +6 15 41 99 222 476 978 1915 3562 6297 10611 17111 26514 39630 57332 80511 110014 146563 190653 242427 301526 +17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 +11 16 34 80 183 405 879 1875 3912 7964 15871 31182 60871 118775 232387 456109 896725 1761432 3446324 6695212 12877019 +12 27 71 159 310 551 921 1475 2288 3459 5115 7415 10554 14767 20333 27579 36884 48683 63471 81807 104318 +25 39 67 123 222 381 631 1047 1800 3232 5952 10948 19707 34332 57642 93238 145515 219597 321169 456177 630364 +0 5 27 89 226 485 938 1719 3105 5678 10630 20317 39265 76053 146973 283300 545702 1052215 2030893 3915501 7513460 +17 36 76 147 258 419 648 991 1582 2816 5801 13425 32663 79211 186233 420013 906687 1876052 3730754 7151959 13255880 +7 11 17 38 109 303 743 1609 3143 5659 9569 15440 24101 36823 55599 83555 125527 188843 284353 427754 641261 +8 14 30 74 164 316 543 855 1260 1766 2384 3132 4040 5156 6553 8337 10656 13710 17762 23150 30300 +9 29 71 151 297 560 1025 1822 3137 5223 8411 13121 19873 29298 42149 59312 81817 110849 147759 194075 251513 +2 5 6 11 45 174 534 1367 3067 6242 11801 21078 36008 59373 95139 148908 228512 344779 512504 751661 1088895 +3 -5 -6 15 91 296 783 1837 3951 7968 15412 29285 55880 108627 215786 435173 881471 1775732 3533590 6920582 13323821 +11 18 25 32 46 101 291 827 2155 5217 12011 26726 57918 122488 252680 508039 995457 1902498 3552967 6500842 11692428 +11 24 37 50 63 76 89 102 115 128 141 154 167 180 193 206 219 232 245 258 271 +13 24 35 46 57 68 79 90 101 112 123 134 145 156 167 178 189 200 211 222 233 +22 28 44 84 162 292 488 764 1134 1612 2212 2948 3834 4884 6112 7532 9158 11004 13084 15412 18002 +27 45 67 96 138 201 294 428 633 1028 2015 4713 11804 29030 67658 148319 306727 601895 1127587 2027878 3517838 +8 30 63 121 237 485 1024 2185 4646 9781 20348 41841 85141 171666 343209 680367 1336484 2599512 5004405 9537913 18013797 +10 10 14 42 136 379 933 2105 4463 9056 17866 34769 67544 131882 258944 508821 993268 1912306 3610674 6661600 11986844 +7 13 25 66 168 379 783 1537 2936 5525 10284 18918 34291 61055 106548 182077 304773 500317 807003 1281842 2009738 +11 21 36 60 108 208 400 741 1351 2584 5494 12906 31614 76529 178004 394079 830019 1668255 3212664 5952008 10648248 +2 10 19 29 40 52 65 79 94 110 127 145 164 184 205 227 250 274 299 325 352 +-5 2 29 85 179 320 517 779 1115 1534 2045 2657 3379 4220 5189 6295 7547 8954 10525 12269 14195 +4 14 39 89 175 320 578 1060 1967 3636 6638 12065 22361 43471 89833 195044 433277 960398 2090534 4436219 9163714 +21 41 72 131 253 494 930 1655 2787 4506 7183 11741 20578 39801 84406 189816 436559 1000915 2254664 4953815 10582281 +-5 6 28 69 155 345 759 1638 3478 7327 15428 32567 68787 144607 300592 614104 1227345 2392320 4539856 8380705 15045783 +18 31 56 109 207 370 626 1019 1620 2541 3952 6101 9337 14136 21130 31139 45206 64635 91032 126349 172931 +22 41 77 143 260 474 887 1719 3443 7075 14767 30963 64582 133092 270144 540021 1065144 2078221 4019725 7716207 14698156 +5 12 30 69 144 294 609 1261 2535 4856 8808 15141 24762 38706 58083 83997 117433 159108 209282 267525 332436 +13 23 43 81 141 225 343 546 1025 2377 6244 16709 43130 105590 244973 541055 1144241 2330135 4591621 8791389 16409943 +20 43 84 154 278 505 921 1681 3100 5882 11631 23892 50133 105348 218464 443802 882247 1722191 3322063 6380638 12289547 +13 24 61 153 351 743 1488 2878 5446 10168 18876 35129 66017 125783 242944 474251 932396 1841997 3654208 7281858 14577432 +24 36 61 113 223 451 908 1803 3534 6846 13083 24565 45125 80845 141034 239495 396132 638952 1006521 1550937 2341387 +13 31 58 85 98 78 1 -162 -445 -887 -1532 -2429 -3632 -5200 -7197 -9692 -12759 -16477 -20930 -26207 -32402 +4 16 34 64 118 214 376 634 1024 1588 2374 3436 4834 6634 8908 11734 15196 19384 24394 30328 37294 +0 8 29 77 171 335 598 994 1562 2346 3395 4763 6509 8697 11396 14680 18628 23324 28857 35321 42815 +18 30 52 101 215 464 963 1906 3659 6980 13490 26638 53664 109612 225525 464976 956767 1958266 3975889 7991209 15881332 +10 16 19 19 22 44 118 305 715 1550 3194 6415 12852 26207 55060 119140 262452 579200 1262385 2690847 5579062 +10 23 62 139 267 469 805 1434 2748 5652 12123 26270 56260 117733 239826 475877 922618 1754665 3286004 6077749 11122661 +3 23 59 116 210 384 739 1498 3132 6604 13845 28675 58528 117543 231875 448547 849996 1578028 2873822 5145925 9087381 +10 15 29 72 176 391 804 1583 3072 5981 11728 23000 44642 85151 159526 295296 545638 1017171 1925979 3704516 7195220 +27 50 99 196 384 747 1436 2701 4929 8688 14777 24282 38638 59697 89802 131867 189463 266910 369375 502976 674892 +-1 9 35 73 119 175 265 485 1132 2998 7993 20396 49248 112722 245761 512898 1028997 1991719 3730863 6781403 11989085 +2 -6 -17 -31 -48 -68 -91 -117 -146 -178 -213 -251 -292 -336 -383 -433 -486 -542 -601 -663 -728 +14 28 59 122 244 464 833 1414 2282 3524 5239 7538 10544 14392 19229 25214 32518 41324 51827 64234 78764 +12 22 41 65 90 112 127 131 120 90 37 -43 -154 -300 -485 -713 -988 -1314 -1695 -2135 -2638 +13 37 80 154 282 497 850 1448 2565 4904 10147 22032 48377 104819 221770 457708 925433 1845227 3653286 7220830 14287600 +-1 -6 -6 2 25 96 308 856 2076 4457 8595 15081 24402 37127 54997 84091 142053 272492 571160 1230420 2610879 +3 9 28 62 112 178 259 353 457 567 678 784 878 952 997 1003 959 853 672 402 28 +19 40 87 183 362 678 1222 2163 3844 6979 13012 24714 47109 88835 164061 295096 515841 876250 1447981 2331433 3664380 +0 -5 -10 -15 -20 -25 -30 -35 -40 -45 -50 -55 -60 -65 -70 -75 -80 -85 -90 -95 -100 +7 12 23 54 144 369 856 1795 3452 6215 10775 18687 33821 65670 136226 293290 634805 1351286 2796903 5604532 10866454 +7 14 42 112 253 494 848 1288 1723 1998 1965 1702 2013 5505 19045 59827 170862 459857 1192547 3005047 7361792 +13 18 38 93 226 527 1166 2435 4799 8956 15906 27029 44172 69745 106826 159275 231857 330374 461806 634461 858134 +19 28 39 55 89 186 453 1101 2509 5326 10633 20193 36823 64928 111243 185835 303423 485080 760387 1170115 1769517 +-1 -5 -3 13 55 147 343 755 1591 3207 6185 11461 20543 35879 61459 103763 173199 286211 468277 758061 1213031 +24 49 83 122 168 243 417 870 2031 4877 11546 26544 59038 127052 264818 534995 1047702 1987749 3648997 6468498 11039752 +5 12 36 92 191 344 576 951 1603 2771 4864 8664 15972 31435 67185 153670 363341 859814 1995608 4499528 9824817 +0 6 15 29 64 158 392 933 2105 4491 9066 17358 31631 55081 92033 148124 230454 347684 510057 729315 1018482 +13 11 11 15 27 54 113 251 586 1383 3191 7083 15067 30820 61210 120074 238471 492299 1072847 2455763 5781103 +1 -4 -9 -14 -19 -24 -29 -34 -39 -44 -49 -54 -59 -64 -69 -74 -79 -84 -89 -94 -99 +7 16 28 43 61 82 106 133 163 196 232 271 313 358 406 457 511 568 628 691 757 +10 5 -6 -23 -38 -22 103 512 1550 3835 8396 16851 31630 56248 95633 156514 247874 381473 572446 839981 1208082 +8 34 85 183 373 742 1459 2855 5565 10750 20410 37805 68058 119193 204287 346326 589250 1022625 1835625 3432928 6678819 +5 15 50 129 279 537 952 1587 2521 3851 5694 8189 11499 15813 21348 28351 37101 47911 61130 77145 96383 +7 4 11 39 104 234 474 888 1573 2738 4980 10045 22668 54691 133852 321950 751427 1697236 3714453 7894811 16332024 +17 31 59 109 192 331 593 1157 2431 5231 11035 22325 43030 79083 139105 235229 384077 607903 935915 1405789 2065388 +4 23 47 84 151 266 446 730 1252 2401 5143 11687 26937 61735 140023 314179 696706 1523629 3278065 6926340 14362313 +8 15 29 53 91 154 266 484 972 2210 5475 13795 33632 77579 168379 344727 669988 1247009 2247245 3973269 6994941 +10 28 65 139 290 594 1180 2250 4102 7156 11983 19337 30190 45770 67602 97552 137874 191260 260893 350503 464426 +-2 5 28 86 224 519 1076 2012 3430 5387 7858 10704 13704 16884 21805 35415 80057 217361 602265 1600596 4037315 +16 36 60 88 125 193 363 816 1943 4504 9897 20658 41452 81077 156491 300791 578834 1117596 2164918 4202664 8163063 +3 1 -1 -3 -5 -7 -9 -11 -13 -15 -17 -19 -21 -23 -25 -27 -29 -31 -33 -35 -37 +-3 -1 10 39 110 277 661 1525 3403 7298 14962 29268 54680 97822 168141 278652 446745 695025 1052146 1553589 2242322 +10 30 62 102 143 187 275 543 1318 3284 7777 17305 36414 73001 140100 258154 458293 789341 1337679 2284475 4057632 +-1 8 28 61 124 259 539 1070 1989 3458 5654 8755 12922 18277 24877 32684 41531 51084 60800 69881 77224 +1 16 53 121 234 421 751 1390 2716 5538 11513 23968 49586 101947 208990 428557 880119 1807897 3702851 7531050 15146778 +14 32 63 106 170 293 575 1234 2708 5857 12376 25631 52311 105622 211377 419549 826259 1616051 3144318 6100173 11830933 +21 48 95 167 268 412 653 1149 2295 4992 11163 24683 52958 109468 217681 416849 770313 1377072 2387511 4024335 6609920 +16 28 44 81 180 415 900 1791 3272 5500 8463 11676 13599 10595 -4866 -47200 -142354 -333762 -685820 -1270723 -2098484 +1 -1 11 56 161 364 717 1289 2169 3469 5327 7910 11417 16082 22177 30015 39953 52395 67795 86660 109553 +18 45 88 145 219 334 569 1129 2476 5550 12134 25488 51555 101452 196862 381858 748582 1491751 3020928 6184195 12698771 +3 5 11 21 35 53 75 101 131 165 203 245 291 341 395 453 515 581 651 725 803 +17 33 63 105 164 268 490 990 2107 4560 9868 21181 44836 93123 188975 373592 718381 1343051 2442253 4323809 7462340 +9 23 57 119 219 374 621 1036 1749 2934 4744 7176 9953 12839 17624 34779 101193 321513 955899 2593509 6476439 +7 19 61 148 295 517 829 1246 1783 2455 3277 4264 5431 6793 8365 10162 12199 14491 17053 19900 23047 +21 38 60 87 119 156 198 245 297 354 416 483 555 632 714 801 893 990 1092 1199 1311 +3 1 3 20 71 195 478 1108 2481 5400 11454 23762 48450 97532 194331 383273 746991 1435693 2718066 5073041 9365215 +11 7 1 6 54 205 562 1296 2686 5178 9470 16659 28585 48744 84606 152966 291173 578793 1176475 2391408 4781528 +-3 -4 -6 -4 28 164 572 1594 3899 8799 18916 39570 81597 166944 339586 686518 1377527 2739292 5390832 10486002 20138400 +-8 -8 -3 7 22 42 67 97 132 172 217 267 322 382 447 517 592 672 757 847 942 +-1 0 1 0 -5 -16 -31 -32 54 477 1993 6632 19294 50777 123123 278526 593489 1200454 2319769 4305608 7710333 +11 25 50 85 126 172 244 431 995 2608 6866 17331 41486 94127 202808 415903 813491 1520355 2718546 4653681 7623718 +-8 -2 19 61 144 309 620 1175 2156 3964 7504 14715 29491 59222 117331 227521 431372 803446 1484353 2756569 5217854 +6 16 36 80 175 368 732 1378 2498 4491 8258 15785 31152 62099 122255 234164 433539 776254 1352552 2320115 3983784 +25 42 75 147 293 560 1002 1662 2532 3493 4278 4606 4865 8190 25705 88487 273202 754587 1908904 4510872 10095920 +28 46 73 115 178 268 391 553 760 1018 1333 1711 2158 2680 3283 3973 4756 5638 6625 7723 8938 +10 16 33 64 110 172 269 488 1097 2775 7044 17027 38703 82885 168210 325501 603940 1079578 1866803 3133490 5120668 +8 22 61 145 311 635 1264 2458 4643 8478 14942 25451 42020 67491 105855 162704 245858 366222 538939 784917 1132821 +17 28 44 89 200 432 876 1696 3191 5888 10672 18959 32918 55748 92016 148062 232477 356660 535460 787909 1138052 +-7 -5 13 56 128 221 317 420 655 1507 4357 12657 34461 87730 211050 484406 1067785 2270071 4667481 9300322 17989898 +15 26 37 48 59 70 81 92 103 114 125 136 147 158 169 180 191 202 213 224 235 +17 31 45 59 73 87 101 115 129 143 157 171 185 199 213 227 241 255 269 283 297 +6 0 -2 19 96 274 600 1102 1756 2442 2892 2635 946 -3192 -11102 -24390 -44870 -74420 -114750 -167061 -231572 +16 37 85 182 366 702 1296 2312 3992 6679 10843 17110 26294 39432 57822 83064 117104 162281 221377 297670 394990 +9 21 42 72 111 159 216 282 357 441 534 636 747 867 996 1134 1281 1437 1602 1776 1959 +7 13 28 63 135 281 591 1268 2716 5652 11253 21418 39400 71416 130468 244623 473549 939359 1880978 3745553 7336141 +-3 -1 1 10 54 191 525 1242 2687 5516 10985 21507 41771 81082 158377 313086 628643 1282987 2655535 5549498 11643446 +16 21 27 33 38 41 41 37 28 13 -9 -39 -78 -127 -187 -259 -344 -443 -557 -687 -834 +9 18 32 45 63 125 328 854 1997 4188 8016 14243 23811 37839 57608 84532 120113 165878 223296 293673 378023 +23 50 99 185 340 618 1096 1881 3150 5287 9257 17497 35852 77529 170857 374135 803533 1684672 3446307 6887105 13466072 +-8 2 26 74 163 312 531 799 1033 1075 782 419 1773 10829 43698 139199 384858 969400 2286094 5130524 11067635 +6 17 57 155 364 786 1612 3179 6057 11212 20358 36726 66660 122726 229428 433217 819324 1539135 2853467 5199337 9290808 +20 31 43 73 157 357 767 1526 2854 5131 9039 15783 27399 47145 79955 132916 215704 340887 523971 783029 1137713 +11 19 27 46 112 312 821 1955 4266 8754 17369 34153 67670 135848 275086 556557 1114185 2190937 4213027 7905588 14468576 +22 29 36 43 50 57 64 71 78 85 92 99 106 113 120 127 134 141 148 155 162 +-1 -6 -5 19 93 268 645 1413 2899 5630 10407 18391 31201 51024 80737 124041 185607 271234 388019 544539 751045 +11 12 28 88 250 618 1360 2734 5134 9174 15845 26827 45156 76731 133822 243301 465777 939108 1974358 4260058 9281170 +-3 6 37 100 204 357 566 837 1175 1584 2067 2626 3262 3975 4764 5627 6561 7562 8625 9744 10912 +7 13 19 25 31 37 43 49 55 61 67 73 79 85 91 97 103 109 115 121 127 +21 33 49 75 117 181 273 399 565 777 1041 1363 1749 2205 2737 3351 4053 4849 5745 6747 7861 +8 3 -9 -24 -30 9 181 674 1874 4579 10454 22950 49070 102617 209940 419748 819340 1560659 2900985 5264908 9336546 +0 -1 -4 -9 -16 -25 -36 -49 -64 -81 -100 -121 -144 -169 -196 -225 -256 -289 -324 -361 -400 +8 22 58 134 278 532 966 1714 3050 5528 10216 19060 35420 64826 116008 202260 343204 567026 913262 1436218 2209114 +14 22 45 109 262 586 1217 2387 4527 8517 16241 31704 63106 126490 252015 494865 954984 1814628 3412789 6395547 12019194 +7 6 2 -10 -35 -78 -144 -238 -365 -530 -738 -994 -1303 -1670 -2100 -2598 -3169 -3818 -4550 -5370 -6283 +-3 -7 -8 4 46 158 440 1124 2698 6097 12974 26074 49781 91047 161262 280425 486675 857613 1556156 2924876 5671816 +26 44 75 127 208 326 489 705 982 1328 1751 2259 2860 3562 4373 5301 6354 7540 8867 10343 11976 +18 34 60 112 219 431 845 1656 3240 6275 11896 21865 38748 66201 109806 179668 297474 513316 941800 1833442 3706877 +15 32 53 87 162 341 750 1621 3353 6594 12347 22103 38004 63039 101276 158133 240691 358052 521745 746183 1049174 +0 11 39 106 244 498 943 1737 3256 6400 13240 28332 61325 132062 280424 585017 1197947 2408229 4755563 9233031 17649795 +18 27 50 95 172 297 508 916 1838 4102 9683 22939 52900 117392 250396 515221 1028290 2002397 3825452 7202899 13411956 +2 7 27 81 203 459 965 1909 3599 6600 12095 22721 44314 89286 182813 373725 753080 1485037 2857027 5359617 9811189 +23 35 61 117 217 383 678 1281 2638 5744 12642 27282 57014 115305 226987 438835 841137 1611045 3097163 5978791 11554847 +21 48 84 122 158 199 280 507 1162 2944 7484 18364 42989 95824 203819 415666 818856 1574720 2997048 5735627 11204595 +11 20 39 66 100 147 244 526 1367 3626 9017 20598 43362 84981 157036 277796 479194 823845 1444298 2629535 5010339 +13 30 65 123 214 374 700 1399 2851 5686 10875 19835 34548 57694 92798 144391 218185 321262 462277 651675 901922 +24 38 56 78 106 147 217 346 584 1008 1730 2906 4746 7525 11595 17398 25480 36506 51276 70742 96026 +26 46 78 124 182 251 341 488 774 1352 2476 4536 8098 13949 23147 37076 57506 86658 127274 182692 256926 +26 52 96 158 239 346 497 726 1088 1664 2566 3942 5981 8918 13039 18686 26262 36236 49148 65614 86331 +8 20 33 41 37 14 -23 -22 196 1106 3814 10687 26506 60580 130707 270788 545700 1080392 2116163 4117365 7968791 +9 15 36 90 202 414 817 1611 3207 6404 12720 25069 49235 97138 193942 392967 805641 1659073 3402208 6894216 13727420 +9 5 1 -3 -7 -11 -15 -19 -23 -27 -31 -35 -39 -43 -47 -51 -55 -59 -63 -67 -71 +-2 -4 -6 -8 -10 -12 -14 -16 -18 -20 -22 -24 -26 -28 -30 -32 -34 -36 -38 -40 -42 +14 29 65 132 250 461 853 1616 3155 6289 12576 24843 48109 91342 171008 318334 593884 1115809 2112483 4016842 7629460 +7 11 14 29 83 215 484 1002 2007 3991 7898 15407 29315 54035 96224 165556 275655 445203 699238 1070657 1601939 +14 20 34 66 147 350 814 1773 3602 6906 12696 22718 40027 69928 121440 209477 357982 604296 1005094 1644274 2643243 +25 50 87 136 208 340 627 1281 2727 5746 11675 22674 42070 74788 127879 211155 337941 525954 798319 1184732 1722780 +10 23 41 74 151 331 711 1444 2791 5242 9755 18198 34197 64937 125330 247907 505764 1063445 2284177 4944950 10648687 +2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 56 59 62 +17 34 62 98 136 159 136 41 -82 31 1180 5366 17198 46829 115941 269729 600768 1296786 2737078 5687933 11697555 +-4 2 24 75 180 380 727 1274 2073 3203 4859 7542 12399 21771 40016 74683 138122 249624 438194 746069 1233102 +0 2 3 14 68 227 585 1269 2453 4421 7740 13629 24629 45688 85801 160525 296431 540825 985869 1829358 3521633 +4 -3 -15 -35 -66 -100 -87 135 972 3286 8687 19870 40906 77315 135639 222090 339668 482923 629269 725443 667334 +8 1 1 16 53 131 299 652 1336 2531 4399 6982 10033 12761 13469 9062 -5600 -38531 -101659 -212108 -393755 +16 38 83 176 363 733 1456 2838 5408 10085 18542 34018 63069 119148 229527 447998 877104 1705456 3268101 6141044 11285031 +15 28 42 57 73 90 108 127 147 168 190 213 237 262 288 315 343 372 402 433 465 +9 19 40 95 210 423 820 1616 3315 7007 14889 31128 63214 123977 234461 427857 754693 1289459 2138806 3451397 5429402 +8 8 7 20 76 224 542 1146 2194 3875 6371 9797 14205 19992 29701 53641 124600 332086 895211 2307026 5603526 +13 24 44 74 127 242 514 1154 2603 5740 12246 25214 50129 96382 179528 324550 570449 976544 1630936 2661666 4251179 +-1 -5 -9 -8 4 47 182 550 1431 3354 7325 15289 31004 61580 120024 229233 427991 779653 1384339 2395614 4042796 +-2 7 26 52 82 129 259 666 1809 4654 11107 24803 52543 106858 210438 403507 755664 1384257 2482024 4357534 7492904 +23 35 52 77 113 163 230 317 427 563 728 925 1157 1427 1738 2093 2495 2947 3452 4013 4633 +23 29 35 39 31 5 -2 172 962 3328 9182 22127 48764 101020 200255 384354 719641 1320311 2379213 4215287 7344821 +-4 -5 -1 17 60 147 335 785 1889 4512 10462 23423 50840 107764 224685 463291 947494 1922849 3866917 7687909 15071384 +3 3 7 21 69 214 592 1480 3431 7523 15800 32054 63236 122034 231623 434567 810055 1508651 2824621 5348275 10284171 +21 32 42 49 58 87 173 382 847 1903 4470 10967 27236 66230 154589 343710 727529 1469994 2846138 5301781 9538222 +6 19 45 94 175 299 503 910 1840 4000 8832 19224 41044 86435 180702 376335 781063 1613369 3311338 6743524 13610498 +13 17 38 89 190 380 735 1404 2700 5321 10834 22649 47865 100620 207965 419860 825719 1581081 2949534 5367057 9538568 +14 34 76 160 323 630 1185 2142 3716 6194 9946 15436 23233 34022 48615 67962 93162 125474 166328 217336 280303 +12 35 77 144 252 442 797 1456 2611 4466 7141 10538 14298 18290 24867 45994 122477 371167 1093487 3013051 7776621 +21 32 47 74 129 236 430 782 1491 3133 7231 17442 41911 97842 220310 479203 1011714 2084459 4211816 8380503 16473754 +9 -1 -13 -22 -23 -1 100 437 1378 3712 9054 20599 44448 91802 182389 349544 647391 1160565 2016845 3402928 5583339 +18 30 53 96 190 403 855 1733 3306 5940 10113 16430 25638 38641 56515 80523 112130 153018 205101 270540 351758 +-2 5 32 104 263 567 1095 1965 3380 5734 9839 17393 31947 60949 120134 242909 499954 1038783 2160586 4463858 9103247 +-3 9 36 87 179 347 665 1295 2610 5478 11842 25781 55287 115047 230590 444272 823767 1474067 2554548 4303535 7074127 +18 27 37 56 110 258 608 1334 2694 5049 8883 14824 23666 36392 54198 78518 111050 153783 209025 279432 368038 +7 10 23 68 188 460 1016 2078 4010 7382 13028 22062 35793 55452 81611 113136 145473 168018 160269 86400 -112166 +19 37 59 87 130 215 403 809 1628 3172 5926 10634 18429 31024 50984 82102 129905 202319 310525 470041 702068 +9 35 82 155 269 469 863 1679 3363 6736 13222 25158 46254 82533 144891 256500 473057 933989 1982762 4432101 10117535 +12 21 46 108 233 456 835 1488 2684 5047 9970 20384 42085 85890 170971 329804 615268 1110537 1942526 3299780 5455833 +-6 -5 11 51 128 277 596 1325 2988 6647 14365 30066 61148 121512 237250 457402 874660 1666206 3176229 6085656 11764662 +0 0 13 53 138 298 595 1157 2229 4249 7968 14652 26433 46917 82212 142610 245246 418166 706367 1180527 1949324 +8 5 15 61 188 492 1161 2523 5091 9586 16903 27954 43260 62044 80358 87401 58574 -57129 -359205 -1033041 -2411304 +1 13 53 139 303 597 1102 1942 3310 5528 9188 15456 26666 47386 86203 158549 290975 527375 937767 1630353 2767705 +14 26 38 50 62 74 86 98 110 122 134 146 158 170 182 194 206 218 230 242 254 +22 34 54 102 210 433 873 1721 3325 6294 11650 21042 37040 63544 106402 174488 281836 452086 727634 1187674 1981962 +-1 7 18 26 31 49 132 407 1141 2844 6445 13628 27507 53962 104163 199087 377195 706893 1305964 2370838 4219375 +14 25 53 114 230 440 837 1648 3375 7017 14404 28710 55306 103330 188803 340996 615344 1118937 2059099 3832618 7183906 +11 17 24 25 22 44 170 570 1595 3984 9336 21163 47176 104104 227581 491997 1049739 2207916 4577110 9357568 18885542 +13 30 66 143 303 618 1197 2189 3794 6315 10322 17076 29512 54353 106383 216620 447187 917180 1845890 3622477 6914757 +23 45 90 175 319 541 858 1295 1931 3010 5145 9649 19071 38152 75731 148745 290543 567483 1110468 2172027 4225151 +24 32 35 33 26 14 -3 -25 -52 -84 -121 -163 -210 -262 -319 -381 -448 -520 -597 -679 -766 diff --git a/2023/src/bin/day09.rs b/2023/src/bin/day09.rs new file mode 100644 index 0000000..2810350 --- /dev/null +++ b/2023/src/bin/day09.rs @@ -0,0 +1,67 @@ +#![feature(test)] +extern crate test; +use aoc2023::{boilerplate, common::*}; +use itertools::Itertools; + +const DAY: usize = 9; +type I = i64; +type Parsed = Vec>; + +fn parse_input(raw: &str) -> Parsed { + raw.lines().map(|l| parse_nums_separator(l, ' ')).collect() +} + +fn build_levels(levels: &mut Parsed) { + loop { + let previous = levels.last().unwrap(); + let level = previous.iter().zip(previous.iter().skip(1)).map(|(a, b)| b - a).collect_vec(); + levels.push(level); + if levels.last().unwrap().iter().all(|n| n == &0) { + break; + } + } +} + +fn part1(lines: &Parsed) -> I { + lines + .iter() + .map(|line| { + let mut levels = vec![line.to_owned()]; + build_levels(&mut levels); + for i in (1..levels.len()).rev() { + let new = levels[i].last().unwrap_or(&0) + levels[i - 1].last().unwrap(); + levels[i - 1].push(new); + } + *levels[0].last().unwrap() + }) + .sum() +} + +fn part2(lines: &Parsed) -> I { + lines + .iter() + .map(|line| { + let mut levels = vec![line.to_owned()]; + build_levels(&mut levels); + for i in (1..levels.len()).rev() { + let new = levels[i - 1].first().unwrap_or(&0) - levels[i][0]; + levels[i - 1].insert(0, new); + } + levels[0][0] + }) + .sum() +} + +boilerplate! { + TEST_INPUT == "\ +0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45", + tests: { + part1: { TEST_INPUT => 114 }, + part2: { TEST_INPUT => 2 }, + }, + bench1 == 2038472161, + bench2 == 1091, + bench_parse: Vec::len => 200, +} diff --git a/2023/src/common.rs b/2023/src/common.rs index ab83add..b5d1ce8 100644 --- a/2023/src/common.rs +++ b/2023/src/common.rs @@ -22,8 +22,8 @@ pub fn parse_nums>(l: &str) -> Vec { l.lines().map(parse_num::).collect() } -pub fn parse_nums_comma>(l: &str) -> Vec { - l.trim().split(',').map(parse_num::).collect() +pub fn parse_nums_separator>(l: &str, s: char) -> Vec { + l.trim().split(s).map(parse_num::).collect() } pub trait Splitting {