summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2023-12-09 21:12:17 -0500
committerJesse Luehrs <doy@tozt.net>2023-12-09 21:12:17 -0500
commit9c091ebd551f620c09d518c0f2d5eb9dac8b09fd (patch)
tree806da53d33054faa3a9397614492d5373b745a00
parent97296bee681f3ab61313c02ad394fd73e46d2f0a (diff)
downloadadvent-of-code-9c091ebd551f620c09d518c0f2d5eb9dac8b09fd.tar.gz
advent-of-code-9c091ebd551f620c09d518c0f2d5eb9dac8b09fd.zip
day 9
-rw-r--r--benches/2023.rs5
-rw-r--r--data/2023/9.txt200
-rw-r--r--src/bin/2023/day9.rs49
-rw-r--r--src/bin/2023/main.rs2
4 files changed, 256 insertions, 0 deletions
diff --git a/benches/2023.rs b/benches/2023.rs
index ceb37db..992b801 100644
--- a/benches/2023.rs
+++ b/benches/2023.rs
@@ -17,6 +17,8 @@ mod day6;
mod day7;
#[path = "../src/bin/2023/day8.rs"]
mod day8;
+#[path = "../src/bin/2023/day9.rs"]
+mod day9;
// NEXT MOD
day!(2023, 1, day1);
@@ -27,6 +29,7 @@ day!(2023, 5, day5);
day!(2023, 6, day6);
day!(2023, 7, day7);
day!(2023, 8, day8);
+day!(2023, 9, day9);
// NEXT DAY
fn bench_2023(c: &mut criterion::Criterion) {
@@ -40,6 +43,7 @@ fn bench_2023(c: &mut criterion::Criterion) {
day_combined!(2023, 6, day6);
day_combined!(2023, 7, day7);
day_combined!(2023, 8, day8);
+ day_combined!(2023, 9, day9);
// NEXT DAY COMBINED
})
});
@@ -56,5 +60,6 @@ criterion::criterion_main!(
bench_2023day6,
bench_2023day7,
bench_2023day8,
+ bench_2023day9,
// NEXT GROUP
);
diff --git a/data/2023/9.txt b/data/2023/9.txt
new file mode 100644
index 0000000..4fb3525
--- /dev/null
+++ b/data/2023/9.txt
@@ -0,0 +1,200 @@
+10 37 82 150 246 389 638 1129 2122 4057 7618 13804 24006 40089 64478 100247 151210 222013 318226 446434 614326
+4 11 32 93 230 496 975 1798 3150 5243 8219 11979 16093 20384 27760 52853 143831 431834 1235397 3270284 8055403
+26 49 90 163 288 500 869 1531 2730 4871 8584 14799 24832 40482 64139 98903 148714 218493 314294 443467 614832
+-4 4 20 51 110 210 353 506 565 334 -395 -1456 -1197 6132 35806 122961 341002 832656 1860042 3882361 7672508
+-3 -11 -26 -51 -85 -123 -145 -71 358 1848 6104 16888 41913 96030 206362 420524 820437 1547812 2855682 5217834 9561853
+24 46 85 148 242 385 636 1166 2420 5460 12633 28796 63504 134925 276946 552208 1075976 2059234 3884733 7237580 13323150
+21 39 83 178 359 678 1219 2121 3609 6033 9915 16004 25339 39320 59787 89107 130269 186987 263811 366246 500879
+10 25 44 76 151 341 784 1707 3444 6445 11272 18578 29065 43417 62204 85753 113982 146193 180820 215128 244859
+-7 -12 -17 -19 -1 80 320 924 2313 5335 11696 24823 51490 104671 208280 404983 769974 1438716 2670276 5000869 9616078
+11 6 11 42 130 347 846 1920 4090 8237 15798 29051 51519 88528 147959 241239 384621 600808 920981 1387296 2055920
+1 9 28 54 83 111 131 124 37 -251 -937 -2140 -3223 -734 16937 82214 276484 789748 2042200 4924402 11260416
+21 38 63 97 143 206 306 516 1037 2322 5261 11439 23479 45482 83576 146586 246837 401102 631707 967805 1446831
+5 16 33 66 130 257 523 1090 2263 4562 8809 16230 28572 48235 78419 123286 188137 279604 405857 576826 804438
+7 15 45 110 242 510 1037 2019 3752 6686 11563 19784 34327 61856 117179 231986 470861 958909 1926897 3781406 7208824
+17 42 76 131 234 432 797 1439 2554 4570 8522 16908 35479 76730 166325 354352 734215 1473186 2860224 5378689 9814112
+11 30 66 129 241 437 773 1348 2344 4087 7133 12386 21260 35904 59518 96799 154569 242652 375084 571759 860635
+-1 -7 -11 4 83 326 938 2325 5274 11283 23158 46078 89456 170104 317453 581895 1047713 1852557 3216019 5480568 9168937
+4 17 52 119 229 401 674 1132 1955 3519 6594 12758 25329 51585 108157 233992 520718 1181662 2704178 6176752 13973529
+6 20 54 124 252 474 851 1491 2598 4579 8286 15587 30720 63425 135930 297947 657678 1443646 3123770 6627130 13744012
+14 35 74 148 285 534 990 1841 3447 6468 12069 22245 40328 71761 125251 214444 360300 594385 963340 1534834 2405359
+29 41 50 56 59 59 56 50 41 29 14 -4 -25 -49 -76 -106 -139 -175 -214 -256 -301
+19 37 72 149 310 634 1280 2557 5028 9670 18147 33322 60275 108413 196008 360199 679099 1319809 2639656 5392637 11137286
+26 53 88 127 170 238 405 850 1937 4334 9200 18536 35972 68651 131669 258138 521205 1081063 2283755 4866515 10379943
+3 1 -9 -19 -12 33 148 413 1045 2579 6237 14715 33900 76593 170430 374402 812719 1743149 3692707 7722173 15931140
+2 13 29 50 76 107 143 184 230 281 337 398 464 535 611 692 778 869 965 1066 1172
+21 38 66 114 191 306 468 686 969 1326 1766 2298 2931 3674 4536 5526 6653 7926 9354 10946 12711
+20 32 56 120 270 575 1132 2071 3560 5810 9080 13682 19986 28425 39500 53785 71932 94676 122840 157340 199190
+-1 -1 -9 -15 17 161 537 1324 2800 5444 10148 18600 33912 61580 110876 196785 342613 583405 970325 1576163 2502147
+16 22 45 102 210 392 701 1271 2420 4857 10085 21163 44142 90823 184171 369045 733382 1449608 2854917 5606422 10981452
+8 23 41 67 131 298 683 1495 3144 6466 13167 26667 53639 106669 208561 398765 742000 1337993 2328717 3894571 6222067
+9 8 5 0 -7 -16 -27 -40 -55 -72 -91 -112 -135 -160 -187 -216 -247 -280 -315 -352 -391
+23 43 72 109 160 257 497 1116 2629 6094 13593 29059 59605 117533 223295 410138 732799 1287316 2260839 4057511 7605344
+-5 10 35 80 171 359 739 1483 2901 5567 10586 20131 38441 73545 140109 264179 491771 906656 1671501 3127338 6031731
+17 38 75 144 265 466 801 1397 2559 4977 10106 20863 42965 87614 176965 355122 709669 1412564 2795569 5485754 10643249
+-8 -13 -6 33 137 359 783 1538 2811 4852 7961 12444 18522 26174 34892 43323 48770 46521 28972 -15493 -103905
+-3 1 10 26 65 165 397 883 1825 3549 6568 11668 20021 33329 54003 85381 131989 199849 296838 433102 621529
+8 18 43 85 145 231 380 709 1523 3533 8280 18922 41605 87668 176873 341682 632443 1123657 1923398 3193680 5203054
+-5 3 26 78 178 342 586 968 1714 3494 7945 18606 42603 93833 199268 411681 835139 1674971 3333414 6589328 12932182
+11 17 26 38 53 71 92 116 143 173 206 242 281 323 368 416 467 521 578 638 701
+7 17 38 76 134 207 277 308 241 -11 -568 -1588 -3272 -5869 -9681 -15068 -22453 -32327 -45254 -61876 -82918
+13 31 77 163 302 506 777 1100 1461 1929 2868 5401 12360 30160 72376 166334 364813 766067 1546895 3015503 5693514
+11 26 56 118 236 441 774 1299 2147 3635 6526 12509 24983 50243 99229 190181 352951 636508 1122536 1950228 3360746
+16 19 17 18 36 84 171 323 666 1633 4387 11588 28674 65874 141225 284925 545420 997695 1754317 2979862 4909448
+10 19 30 43 60 90 160 348 876 2334 6145 15415 36332 80294 167019 329195 620177 1128708 2010371 3557722 6355595
+4 17 47 106 214 398 691 1131 1760 2623 3767 5240 7090 9364 12107 15361 19164 23549 28543 34166 40430
+18 23 20 12 17 77 269 718 1612 3219 5906 10160 16611 26057 39491 58130 83446 117199 161472 218708 291749
+-3 -3 -1 3 9 17 27 39 53 69 87 107 129 153 179 207 237 269 303 339 377
+13 10 17 46 106 205 359 625 1199 2651 6404 15600 36530 80834 168698 333285 626633 1127232 1949451 3254922 5265898
+18 45 88 163 297 530 933 1655 3015 5658 10797 20566 38512 70257 124364 213444 355544 575859 908814 1400565 2111971
+14 17 19 20 20 19 17 14 10 5 -1 -8 -16 -25 -35 -46 -58 -71 -85 -100 -116
+12 10 4 10 57 188 462 963 1841 3440 6609 13344 27972 59162 123133 248525 483506 905806 1636498 2858486 4840811
+1 11 49 134 295 577 1047 1800 2965 4711 7253 10858 15851 22621 31627 43404 58569 77827 101977 131918 168655
+7 14 39 84 145 210 257 252 147 -122 -637 -1500 -2835 -4790 -7539 -11284 -16257 -22722 -30977 -41356 -54231
+8 19 48 112 246 516 1037 1992 3648 6365 10594 16860 25726 37734 53319 72692 95688 121575 148820 174808 195510
+2 1 -6 -11 10 115 426 1167 2705 5585 10553 18596 31140 50823 83887 146617 281233 592826 1331237 3065196 7038703
+10 24 50 91 157 281 548 1141 2406 4940 9721 18354 33675 61406 114644 225397 472484 1045368 2383345 5466690 12403661
+9 26 53 92 145 214 301 408 537 690 869 1076 1313 1582 1885 2224 2601 3018 3477 3980 4529
+15 23 42 77 127 197 333 699 1738 4505 11355 27360 63198 140949 305518 646813 1342402 2739280 5510713 10957600 21587310
+19 37 61 94 146 245 457 921 1909 3922 7842 15196 28676 53239 98468 183600 348119 673831 1330219 2665814 5387734
+4 -3 -17 -40 -78 -141 -238 -367 -500 -563 -411 202 1658 4515 9552 17819 30692 49933 77755 116892 170674
+-1 1 8 27 66 128 198 213 2 -818 -3003 -7910 -17797 -36193 -68327 -121594 -206023 -334697 -524058 -794011 -1167720
+1 -1 0 11 53 181 512 1270 2872 6117 12616 25730 52480 107173 217866 437281 860403 1651755 3086264 5608725 9918151
+17 31 55 111 236 482 916 1620 2691 4241 6397 9301 13110 17996 24146 31762 41061 52275 65651 81451 99952
+0 10 33 89 223 518 1108 2194 4081 7279 12745 22386 39996 72865 134378 248021 453334 814504 1432481 2461735 4133061
+4 -5 -14 -23 -22 37 297 1104 3202 8074 18526 39669 80531 156610 293712 533311 939276 1604957 2658166 4259557 6587732
+26 49 82 125 178 241 314 397 490 593 706 829 962 1105 1258 1421 1594 1777 1970 2173 2386
+14 24 37 53 80 146 325 794 1957 4702 10900 24317 52213 108112 216713 423068 810836 1540384 2930127 5629961 10984722
+17 32 55 92 151 240 377 625 1165 2420 5243 11182 22835 44308 81789 144251 244297 399160 631871 972608 1460239
+14 18 28 47 72 97 128 213 499 1344 3538 8745 20418 45744 99763 213822 452144 942698 1931932 3877439 7598384
+16 31 57 106 193 331 522 744 942 1042 1015 1009 1514 3379 7175 10748 2592 -53483 -250583 -802088 -2159965
+15 26 43 69 117 221 456 977 2090 4380 8952 17898 35184 68236 130557 245712 453081 816341 1437855 2488540 4278275
+11 12 20 44 95 183 317 515 841 1512 3165 7447 18195 43613 100034 218082 452327 895860 1701610 3112686 5504559
+10 20 40 72 128 251 560 1339 3198 7339 15972 32974 65017 123691 229785 422260 777466 1450816 2767623 5420691 10896672
+9 24 43 65 96 169 380 953 2356 5499 12054 24946 49073 92322 166957 291464 492947 810178 1297413 2029095 3105574
+15 24 48 102 200 348 534 724 887 1103 1867 4799 14114 39405 100553 235907 515279 1059778 2071066 3873260 6971428
+18 41 77 129 203 311 475 728 1120 1765 3022 6012 13867 34429 85620 205451 469702 1021769 2121131 4219443 8076523
+11 18 31 49 89 198 473 1110 2524 5624 12400 27107 58581 124749 261505 540357 1103485 2232434 4479569 8912417 17553909
+5 5 3 9 43 135 327 675 1246 2101 3250 4554 5533 5055 1056 -8925 -23929 -26243 55221 432483 1648635
+24 37 51 71 111 204 412 828 1570 2788 4753 8213 15468 33174 78947 195701 480720 1141251 2595563 5648743 11786953
+9 8 3 -3 3 65 306 1017 2803 6806 15031 30809 59441 109079 191914 325757 536117 858900 1343875 2059077 3096343
+8 18 43 89 164 278 443 673 984 1394 1923 2593 3428 4454 5699 7193 8968 11058 13499 16329 19588
+-2 -12 -14 5 64 200 482 1036 2103 4172 8269 16559 33551 68408 139207 280648 558215 1095495 2130207 4134284 8074665
+2 11 36 82 151 245 374 569 900 1499 2588 4512 7777 13093 21422 34031 52550 79035 116036 166670 234699
+10 16 13 5 4 36 164 534 1456 3557 8101 17694 37848 80395 170752 362969 770150 1624734 3396021 7016083 14308004
+6 22 45 84 167 355 769 1639 3400 6895 13820 27701 56003 114583 236900 492721 1025458 2125312 4369583 8885622 17831503
+3 8 24 73 190 423 833 1494 2493 3930 5918 8583 12064 16513 22095 28988 37383 47484 59508 73685 90258
+8 10 11 11 10 8 5 1 -4 -10 -17 -25 -34 -44 -55 -67 -80 -94 -109 -125 -142
+-3 5 32 89 188 341 561 867 1304 2013 3437 6855 15647 38087 93150 221955 509247 1121997 2376078 4847429 9551590
+13 26 48 91 168 293 481 748 1111 1588 2198 2961 3898 5031 6383 7978 9841 11998 14476 17303 20508
+4 1 5 30 99 248 542 1119 2292 4772 10134 21754 46653 99118 207881 430492 882132 1792807 3618723 7253786 14420127
+6 5 14 53 163 421 955 1959 3708 6573 11036 17705 27329 40813 59233 83851 116130 157749 210618 276893 358991
+20 38 69 109 152 192 234 318 567 1292 3236 8134 19944 47459 109783 247905 549506 1202430 2608943 5624723 12044252
+8 18 39 79 157 311 625 1282 2659 5514 11386 23449 48242 98951 201258 403208 791090 1513994 2820505 5111939 9017627
+14 20 26 46 100 210 400 701 1158 1832 2786 4040 5476 6670 6624 3367 -6610 -29124 -73318 -152974 -288172
+9 21 31 39 61 141 365 893 2053 4591 10254 23022 51549 113813 245773 517287 1061241 2126913 4178213 8075541 15413429
+10 5 0 -5 -10 -15 -20 -25 -30 -35 -40 -45 -50 -55 -60 -65 -70 -75 -80 -85 -90
+2 8 14 20 26 32 38 44 50 56 62 68 74 80 86 92 98 104 110 116 122
+25 43 82 152 271 484 885 1649 3106 5936 11653 23709 49830 106651 228414 482512 996095 1999905 3898092 7376110 13563041
+25 37 58 110 239 536 1174 2470 4995 9773 18638 34882 64481 118529 218222 405141 762261 1456041 2818722 5505066 10782955
+9 9 25 72 165 319 549 870 1297 1845 2529 3364 4365 5547 6925 8514 10329 12385 14697 17280 20149
+0 2 6 13 24 44 86 175 352 678 1238 2145 3544 5616 8582 12707 18304 25738 35430 47861 63576
+6 30 75 162 327 623 1122 1917 3124 4884 7365 10764 15309 21261 28916 38607 50706 65626 83823 105798 132099
+8 6 1 -7 -18 -32 -49 -69 -92 -118 -147 -179 -214 -252 -293 -337 -384 -434 -487 -543 -602
+10 5 -1 -5 -4 5 25 59 110 181 275 395 544 725 941 1195 1490 1829 2215 2651 3140
+4 13 25 51 116 268 605 1333 2875 6078 12633 25968 53154 108866 223288 457209 929642 1866383 3682349 7116701 13448156
+4 0 2 13 42 113 275 610 1240 2340 4170 7146 11982 19959 33423 56695 97708 170888 302090 536811 953458
+13 33 74 145 256 421 664 1027 1588 2525 4326 8374 18378 43560 105290 250237 575532 1275865 2731024 5670202 11488003
+15 44 87 148 246 435 830 1634 3159 5832 10175 16746 26026 38235 53058 69260 84167 92988 87951 57224 -16410
+9 22 35 48 61 74 87 100 113 126 139 152 165 178 191 204 217 230 243 256 269
+3 18 49 114 243 485 923 1695 3025 5296 9266 16673 31761 64816 139895 311086 695823 1541682 3357467 7164580 14967135
+28 44 59 86 152 292 552 1021 1927 3858 8218 18120 40076 87085 184046 376823 746783 1433430 2669722 4840316 8588709
+18 27 47 92 192 399 804 1592 3180 6501 13512 28013 56869 111743 211525 385925 681562 1174191 1996269 3401322 5911706
+20 34 55 83 118 160 209 265 328 398 475 559 650 748 853 965 1084 1210 1343 1483 1630
+9 6 -5 -22 -27 36 293 995 2626 6113 13203 27072 53190 100343 181447 313295 513543 791920 1130659 1446270 1520747
+9 26 59 111 177 254 363 583 1103 2307 4919 10252 20629 40081 75506 138688 250155 447262 801933 1459475 2720655
+11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96 101 106 111
+18 25 45 97 205 392 684 1132 1858 3127 5437 9599 16745 28150 44680 65578 86170 93909 61973 -60611 -363635
+7 7 16 46 125 306 672 1338 2462 4296 7335 12657 22590 41893 79697 152519 288737 534997 965114 1692128 2884283
+8 9 1 -8 16 142 491 1277 2889 6031 11937 22674 41526 73399 125094 205199 323391 489436 713718 1014627 1444769
+13 19 33 74 184 433 926 1830 3455 6444 12163 23451 46018 91000 179536 350773 675489 1278617 2375429 4328080 7731708
+11 24 48 94 196 426 916 1903 3839 7652 15309 30921 62746 126592 251301 487210 918739 1682552 2993078 5177568 8723304
+6 27 73 154 275 442 675 1029 1623 2668 4461 7264 10904 13799 10921 -10067 -75636 -237807 -592423 -1307346 -2664647
+-2 -4 -1 13 54 164 435 1047 2326 4828 9455 17609 31390 53844 89267 143571 224718 343228 512767 750821 1079462
+-4 -14 -18 -1 66 242 646 1509 3256 6626 12838 23811 42446 72978 121406 196009 307956 472018 707390 1038631 1496730
+16 23 40 74 123 175 208 191 99 -20 150 1648 7185 23051 62985 156232 364624 818923 1795546 3876244 8274637
+2 18 40 65 98 159 305 691 1716 4348 10809 25940 59770 132095 280246 571702 1123798 2133502 3921102 6992667 12127338
+20 24 25 30 65 200 583 1481 3330 6799 12878 23025 39509 66408 112572 199850 384145 805463 1799712 4135921 9498542
+12 27 62 134 270 505 880 1440 2232 3303 4698 6458 8618 11205 14236 17716 21636 25971 30678 35694 40934
+24 34 44 54 64 74 84 94 104 114 124 134 144 154 164 174 184 194 204 214 224
+11 13 10 14 46 133 321 728 1666 3867 8856 19518 40892 81176 152849 273811 468865 773613 1247830 2017298 3388454
+10 10 25 68 148 264 412 617 999 1879 3928 8359 17159 33355 61305 107002 178376 285576 441211 660526 961486
+4 9 22 51 114 252 548 1148 2286 4325 7849 13904 24647 45033 86956 178824 386516 857089 1906160 4186141 8999036
+1 19 50 96 162 258 401 617 943 1429 2140 3158 4584 6540 9171 12647 17165 22951 30262 39388 50654
+5 12 34 77 147 250 392 579 817 1112 1470 1897 2399 2982 3652 4415 5277 6244 7322 8517 9835
+29 42 59 86 129 194 287 414 581 794 1059 1382 1769 2226 2759 3374 4077 4874 5771 6774 7889
+9 5 -2 -9 2 87 383 1176 2999 6773 14033 27352 51218 93869 170994 312817 576957 1070669 1987696 3667085 6684034
+18 33 70 137 235 357 502 725 1255 2730 6624 15979 36608 79006 161298 313669 584864 1051519 1831290 3100989 5121217
+10 21 59 154 354 736 1428 2659 4873 8969 16761 31792 60696 115426 216996 402316 738199 1352851 2509645 4779745 9436447
+10 23 59 134 281 554 1036 1855 3206 5370 8713 13639 20461 29143 38854 47262 49482 36577 -6505 -103692 -291399
+13 31 65 130 261 522 1016 1902 3436 6071 10672 18922 34010 61698 111857 200538 352599 604839 1009491 1637794 2583195
+12 22 45 99 219 458 881 1549 2490 3654 4849 5655 5313 2586 -4411 -18415 -43256 -84138 -147963 -243701 -382809
+0 5 14 28 55 121 298 761 1902 4571 10602 23944 52989 115115 245094 509913 1033788 2038793 3908662 7286044 13216899
+18 37 68 116 195 335 588 1046 1899 3577 7037 14274 29154 58687 114879 217324 396720 699517 1193930 1977576 3187021
+-7 2 25 70 153 298 537 910 1465 2258 3353 4822 6745 9210 12313 16158 20857 26530 33305 41318 50713
+20 31 42 53 64 75 86 97 108 119 130 141 152 163 174 185 196 207 218 229 240
+11 23 47 99 199 378 692 1247 2244 4058 7386 13567 25338 48605 96353 196685 408273 848345 1740857 3495859 6835425
+14 22 40 82 187 438 999 2180 4547 9117 17722 33698 63175 117473 217603 402985 748977 1403173 2661589 5128171 10043916
+11 34 68 113 169 236 314 403 503 614 736 869 1013 1168 1334 1511 1699 1898 2108 2329 2561
+-1 -11 -12 10 69 179 354 608 955 1409 1984 2694 3553 4575 5774 7164 8759 10573 12620 14914 17469
+18 30 42 54 66 78 90 102 114 126 138 150 162 174 186 198 210 222 234 246 258
+18 27 56 123 259 513 959 1709 2944 4999 8599 15477 29863 61781 133810 294051 639606 1357043 2789234 5541767 10647019
+14 10 2 2 43 186 525 1187 2337 4222 7325 12758 23116 44162 87942 178271 360024 714354 1382892 2605218 4775489
+10 18 26 34 42 50 58 66 74 82 90 98 106 114 122 130 138 146 154 162 170
+5 23 60 134 285 595 1228 2497 4970 9651 18327 34280 63777 119185 225423 433107 844696 1664968 3295303 6503971 12723886
+22 39 68 128 254 500 944 1697 2916 4814 7653 11727 17457 26049 41905 79433 179556 445855 1118254 2715958 6305702
+15 15 25 62 145 299 563 1002 1723 2895 4773 7726 12269 19099 29135 43562 63879 91951 130065 180990 248041
+10 19 46 108 229 440 779 1291 2028 3049 4420 6214 8511 11398 14969 19325 24574 30831 38218 46864 56905
+23 39 56 84 144 260 449 718 1081 1622 2660 5131 11413 27024 63986 147268 326735 698621 1442948 2886826 5608554
+18 34 55 89 150 258 439 725 1154 1770 2623 3769 5270 7194 9615 12613 16274 20690 25959 32185 39478
+15 29 57 115 232 456 866 1590 2829 4887 8207 13413 21358 33178 50352 74768 108795 155361 218037 301127 409764
+14 20 24 23 14 -6 -40 -91 -162 -256 -376 -525 -706 -922 -1176 -1471 -1810 -2196 -2632 -3121 -3666
+6 26 60 121 248 515 1050 2091 4134 8271 16880 34938 72435 148776 300874 598273 1171929 2269863 4365915 8373002 16059681
+8 13 35 97 238 515 1005 1807 3044 4865 7447 10997 15754 21991 30017 40179 52864 68501 87563 110569 138086
+17 25 35 55 107 241 550 1180 2337 4326 7725 13903 26226 52431 108729 226129 459109 895883 1667827 2952731 4961913
+8 26 57 104 173 286 519 1076 2410 5402 11609 23592 45335 82766 144391 242052 391820 615034 939497 1400840 2044065
+3 10 29 78 188 403 780 1389 2313 3648 5503 8000 11274 15473 20758 27303 35295 44934 56433 70018 85928
+-5 -5 -1 18 82 253 651 1515 3345 7216 15440 32908 69721 146196 302134 613573 1222536 2389442 4585992 8663273 16166069
+12 24 50 106 221 436 803 1384 2250 3480 5160 7382 10243 13844 18289 23684 30136 37752 46638 56898 68633
+6 21 61 136 263 470 807 1383 2461 4663 9379 19577 41458 87954 186242 393845 832659 1759550 3710060 7785731 16219200
+-2 1 1 -10 -36 -70 -88 -44 134 547 1327 2638 4676 7668 11870 17564 25054 34661 46717 61558 79516
+0 2 5 14 48 146 386 934 2144 4736 10094 20763 41304 79829 150883 281126 521120 970802 1835611 3549656 7040224
+5 14 23 30 40 75 201 596 1695 4475 11002 25468 56123 118821 243520 486375 952760 1841967 3534836 6765525 12956133
+19 41 76 129 205 309 446 621 839 1105 1424 1801 2241 2749 3330 3989 4731 5561 6484 7505 8629
+13 23 40 84 185 398 844 1803 3900 8445 18024 37522 75971 150138 291990 564885 1099058 2168489 4353507 8875046 18261740
+10 19 39 70 112 165 229 304 390 487 595 714 844 985 1137 1300 1474 1659 1855 2062 2280
+28 41 61 97 171 343 747 1650 3558 7410 14929 29240 55919 104715 192340 347091 616960 1084883 1898873 3332571 5905659
+5 10 31 73 145 271 512 1018 2143 4669 10192 21719 44505 87118 162653 289918 494281 807692 1267173 1910797 2769849
+4 24 65 144 300 615 1244 2461 4749 9003 16979 32223 61894 120239 235122 460136 896646 1732814 3310349 6234322 11546476
+17 31 54 99 194 382 721 1284 2159 3449 5272 7761 11064 15344 20779 27562 35901 46019 58154 72559 89502
+5 4 7 20 54 146 402 1082 2767 6686 15354 33810 71997 149271 302774 602609 1178613 2266292 4283477 7954868 14509316
+14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6
+22 42 84 163 293 491 795 1302 2231 4015 7425 13728 24880 43754 74402 122349 194916 301568 454282 667929 960663
+3 0 1 12 36 73 120 171 217 246 243 190 66 -153 -494 -987 -1665 -2564 -3723 -5184 -6992
+20 43 88 178 348 653 1188 2134 3858 7123 13531 26473 53172 109004 226365 472214 981488 2018447 4085466 8109904 15755812
+14 26 48 80 122 174 236 308 390 482 584 696 818 950 1092 1244 1406 1578 1760 1952 2154
+23 29 33 35 35 33 29 23 15 5 -7 -21 -37 -55 -75 -97 -121 -147 -175 -205 -237
+5 12 23 38 57 80 107 138 173 212 255 302 353 408 467 530 597 668 743 822 905
+14 27 44 73 126 224 420 849 1809 3880 8109 16338 31839 60555 113439 210644 388656 711889 1290786 2309103 4063804
+17 33 58 96 170 349 800 1881 4291 9297 19079 37285 69978 127287 226233 395362 681933 1162409 1956784 3246718 5296378
+7 21 43 83 155 274 453 700 1015 1387 1791 2185 2507 2672 2569 2058 967 -911 -3821 -8049 -13925
+12 27 45 64 92 160 339 767 1701 3625 7485 15222 30992 63876 133584 281743 592957 1232214 2509179 4987588 9674485
+12 25 37 43 28 -30 -144 -283 -303 191 2130 7587 21086 52414 122509 275338 600961 1279037 2659960 5417729 10846175
+0 3 22 63 141 300 650 1445 3236 7139 15273 31482 62636 121260 231241 440403 847714 1660461 3311075 6690622 13608639
+5 4 8 22 48 90 174 390 963 2360 5440 11654 23302 43854 78342 133830 219969 349644 539720 811894 1193660
+18 34 60 102 166 258 384 550 762 1026 1348 1734 2190 2722 3336 4038 4834 5730 6732 7846 9078
+15 29 56 116 236 450 799 1331 2101 3171 4610 6494 8906 11936 15681 20245 25739 32281 39996 49016 59480
+9 18 41 106 249 522 1015 1889 3418 6059 10638 18904 35049 69480 147439 327464 738904 1654857 3628600 7740039 16026822
+-7 -3 9 44 136 346 781 1639 3303 6525 12785 25007 49000 96309 189672 373150 730754 1421573 2750017 5316307 10355491
+17 28 58 129 284 596 1172 2157 3745 6202 9900 15351 23216 34246 49090 67879 89465 110160 121782 108773 44108
+4 10 18 29 44 65 100 179 390 951 2348 5598 12758 27924 59182 122318 247584 491440 955886 1818627 3377640
diff --git a/src/bin/2023/day9.rs b/src/bin/2023/day9.rs
new file mode 100644
index 0000000..d04c209
--- /dev/null
+++ b/src/bin/2023/day9.rs
@@ -0,0 +1,49 @@
+#![allow(dead_code)]
+#![allow(unused_variables)]
+
+use advent_of_code::prelude::*;
+
+fn calculate_next(v: Vec<i64>) -> i64 {
+ if v.iter().all(|n| *n == 0) {
+ return 0;
+ }
+ calculate_next((1..v.len()).map(|i| v[i] - v[i - 1]).collect())
+ + v[v.len() - 1]
+}
+
+fn calculate_prev(v: Vec<i64>) -> i64 {
+ if v.iter().all(|n| *n == 0) {
+ return 0;
+ }
+ v[0] - calculate_prev((1..v.len()).map(|i| v[i] - v[i - 1]).collect())
+}
+
+pub fn parse(fh: File) -> Result<Vec<Vec<i64>>> {
+ Ok(parse::raw_lines(fh)
+ .map(|line| {
+ line.split_whitespace()
+ .map(|s| s.parse().unwrap())
+ .collect()
+ })
+ .collect())
+}
+
+pub fn part1(report: Vec<Vec<i64>>) -> Result<i64> {
+ Ok(report.into_iter().map(calculate_next).sum())
+}
+
+pub fn part2(report: Vec<Vec<i64>>) -> Result<i64> {
+ Ok(report.into_iter().map(calculate_prev).sum())
+}
+
+#[test]
+fn test() {
+ assert_eq!(
+ part1(parse(parse::data(2023, 9).unwrap()).unwrap()).unwrap(),
+ 0
+ );
+ assert_eq!(
+ part2(parse(parse::data(2023, 9).unwrap()).unwrap()).unwrap(),
+ 0
+ );
+}
diff --git a/src/bin/2023/main.rs b/src/bin/2023/main.rs
index 569886c..2a5c575 100644
--- a/src/bin/2023/main.rs
+++ b/src/bin/2023/main.rs
@@ -19,6 +19,7 @@ mod day5;
mod day6;
mod day7;
mod day8;
+mod day9;
// NEXT MOD
#[paw::main]
@@ -33,6 +34,7 @@ fn main(opt: Opt) -> Result<()> {
6 => advent_of_code::day!(2023, opt.day, opt.puzzle, day6),
7 => advent_of_code::day!(2023, opt.day, opt.puzzle, day7),
8 => advent_of_code::day!(2023, opt.day, opt.puzzle, day8),
+ 9 => advent_of_code::day!(2023, opt.day, opt.puzzle, day9),
// NEXT PART
_ => panic!("unknown day {}", opt.day),
}