From: Pat Thoyts Date: Sat, 9 Dec 2023 12:22:05 +0000 (+0000) Subject: day9: [python] completed X-Git-Url: https://privyetmir.co.uk/gitweb.cgi?a=commitdiff_plain;h=299770ae098ac1a528df50ab982a089fc964cbb3;p=aoc2023.git day9: [python] completed --- diff --git a/day9/data/input b/day9/data/input new file mode 100644 index 0000000..8ab2df7 --- /dev/null +++ b/day9/data/input @@ -0,0 +1,200 @@ +4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 +8 10 21 62 176 448 1042 2259 4634 9116 17421 32738 61151 114506 216170 412530 795822 1549262 3035999 5973950 11778148 +16 30 62 134 281 559 1056 1909 3332 5662 9448 15671 26340 46040 85632 170374 356396 761786 1621354 3376772 6814703 +-6 3 27 78 181 389 817 1720 3663 7875 16957 36239 76266 157151 315877 618073 1176344 2177915 3925167 6893612 11812987 +14 27 55 109 203 365 653 1183 2185 4115 7866 15139 29056 55121 102662 186917 331960 574699 970217 1598769 2574793 +9 24 51 90 141 204 279 366 465 576 699 834 981 1140 1311 1494 1689 1896 2115 2346 2589 +20 47 83 120 150 177 237 432 985 2323 5198 10866 21365 39969 71950 125858 215634 364007 607797 1005956 1651432 +9 19 50 112 215 369 584 870 1237 1695 2254 2924 3715 4637 5700 6914 8289 9835 11562 13480 15599 +8 16 32 65 126 244 501 1108 2552 5853 12986 27565 56010 109762 209970 398019 759334 1475880 2937718 5970891 12285948 +8 19 30 41 52 63 74 85 96 107 118 129 140 151 162 173 184 195 206 217 228 +30 43 54 78 156 376 914 2101 4525 9187 17762 33095 60221 108479 195748 356543 656776 1219559 2268710 4199904 7694074 +16 40 91 193 386 738 1370 2508 4588 8451 15667 29017 53146 95387 166733 282809 464192 733906 1106111 1551613 1908970 +11 21 58 138 290 562 1020 1733 2746 4077 5839 8696 15042 31601 74680 180212 422209 945585 2022868 4149554 8200326 +2 9 16 15 -9 -83 -246 -533 -925 -1242 -961 1048 6903 20444 49221 110304 246066 563097 1320347 3115736 7261163 +10 19 47 109 235 479 928 1711 3008 5059 8173 12737 19225 28207 40358 56467 77446 104339 138331 180757 233111 +3 8 11 12 11 8 3 -4 -13 -24 -37 -52 -69 -88 -109 -132 -157 -184 -213 -244 -277 +5 14 29 54 105 217 451 901 1701 3032 5129 8288 12873 19323 28159 39991 55525 75570 101045 132986 172553 +25 36 58 107 215 446 914 1819 3534 6799 13113 25471 49681 96621 185952 351998 652861 1184840 2107186 3690129 6417913 +12 17 25 49 115 270 594 1219 2362 4385 7903 13971 24393 42210 72440 123161 207048 343497 561493 903405 1429919 +8 4 0 -4 -8 -12 -16 -20 -24 -28 -32 -36 -40 -44 -48 -52 -56 -60 -64 -68 -72 +10 35 76 148 276 491 829 1339 2116 3404 5869 11230 23564 51776 113954 244619 506238 1006801 1925778 3551376 6332716 +10 13 12 7 -2 -15 -32 -53 -78 -107 -140 -177 -218 -263 -312 -365 -422 -483 -548 -617 -690 +10 21 57 130 252 435 691 1032 1470 2017 2685 3486 4432 5535 6807 8260 9906 11757 13825 16122 18660 +11 3 -5 -5 11 43 75 73 2 -112 -30 1012 4876 15494 40420 93192 196789 388529 726821 1300257 2239609 +17 34 64 110 181 313 599 1218 2448 4649 8227 13670 21924 35699 62808 123379 263747 580992 1263338 2652778 5337039 +2 1 7 39 132 353 833 1820 3754 7361 13774 24742 43136 74313 129680 235474 453290 926145 1978529 4327765 9519172 +15 19 34 77 173 364 730 1433 2799 5462 10612 20420 38761 72425 133100 240534 427439 746893 1283230 2167687 3600405 +2 -4 -11 -18 -24 -28 -29 -26 -18 -4 17 46 84 132 191 262 346 444 557 686 832 +27 37 44 48 49 47 42 34 23 9 -8 -28 -51 -77 -106 -138 -173 -211 -252 -296 -343 +23 51 97 162 241 321 378 367 189 -390 -1896 -5387 -12696 -26367 -48478 -76606 -93577 -45095 204391 952284 2795863 +4 16 55 140 307 627 1231 2342 4314 7678 13195 21916 35249 55033 83619 123958 179696 255276 356047 488380 659791 +2 9 27 53 90 165 358 856 2071 4899 11260 25170 54786 116167 239934 482597 945020 1801237 3341461 6033395 10605486 +11 27 73 162 311 561 1022 1954 3895 7847 15531 29722 54675 96653 164568 270746 431827 669811 1013261 1498674 2172031 +13 23 34 41 39 23 -12 -71 -159 -281 -442 -647 -901 -1209 -1576 -2007 -2507 -3081 -3734 -4471 -5297 +9 3 3 22 86 255 656 1534 3347 6963 14054 27813 54130 103333 192507 348221 609189 1027931 1669845 2607208 3904446 +9 9 11 20 41 75 127 232 511 1286 3311 8215 19303 42922 90671 182817 353373 657399 1181203 2056246 3477693 +10 22 30 33 32 27 7 -62 -234 -531 -786 -298 2816 12724 37631 92421 202482 409064 776582 1402343 2429248 +27 36 50 78 129 212 336 510 743 1044 1422 1886 2445 3108 3884 4782 5811 6980 8298 9774 11417 +21 42 82 158 291 506 841 1386 2388 4489 9224 20008 43998 95441 201425 411350 811943 1550268 2867942 5150674 8998309 +6 13 12 11 31 112 320 765 1652 3400 6886 13923 28206 57233 116248 236238 479702 970655 1949624 3870895 7568853 +11 6 9 29 85 214 474 942 1709 2876 4557 6897 10115 14584 20962 30390 44775 67178 102329 157293 242313 +12 21 44 85 157 303 637 1413 3126 6657 13506 26223 49253 90554 164507 296766 531704 942849 1645944 2812677 4680253 +16 27 63 147 325 678 1340 2527 4577 8005 13609 22748 38079 65315 116975 219659 427106 842179 1651951 3181205 5970853 +13 26 48 89 180 393 876 1907 3974 7897 15018 27490 48692 83784 140411 229660 367919 582370 929412 1553529 2860096 +12 20 28 36 44 52 60 68 76 84 92 100 108 116 124 132 140 148 156 164 172 +-2 -6 -2 21 85 248 659 1659 3956 8933 19220 39825 80470 160470 318754 633774 1261502 2505016 4936998 9607633 18385895 +8 23 45 70 110 208 453 995 2060 3965 7133 12108 19570 30350 45445 66033 93488 129395 175565 234050 307158 +-3 -3 -1 -5 -21 -31 43 391 1385 3673 8315 17000 32411 58835 103139 176240 295173 485789 785975 1249057 1946699 +7 10 23 56 140 347 813 1765 3568 6834 12672 23206 42547 78475 145168 267407 486789 870594 1524077 2607092 4356102 +5 16 51 125 261 495 879 1479 2370 3644 5471 8288 13238 23041 43553 86358 172843 340328 650963 1204263 2154331 +-2 6 23 57 128 275 580 1236 2710 6093 13796 30868 67441 143296 296618 601324 1202147 2386178 4727732 9377011 18623787 +17 24 26 23 15 2 -16 -39 -67 -100 -138 -181 -229 -282 -340 -403 -471 -544 -622 -705 -793 +19 36 55 76 99 124 151 180 211 244 279 316 355 396 439 484 531 580 631 684 739 +9 5 3 19 82 240 587 1338 3005 6767 15181 33449 71538 147546 292817 559432 1030841 1836553 3171967 5324607 8708218 +15 36 68 112 180 303 542 1020 2015 4202 9220 20882 47556 106537 231618 485566 979831 1904576 3573028 6485228 11417516 +2 -7 -23 -51 -103 -208 -414 -764 -1216 -1463 -583 3614 15815 45554 111702 250877 532702 1086489 2146209 4123667 7723797 +7 19 49 109 224 438 824 1511 2762 5168 10066 20358 42037 86978 178029 358291 707921 1374117 2623527 4931647 9131438 +9 5 11 46 140 350 784 1630 3183 5870 10306 17489 29376 50293 89939 169167 330285 654339 1288741 2489712 4685348 +2 -4 -11 -2 64 275 806 1983 4377 8940 17228 31859 57617 104212 192967 372211 750950 1569311 3340603 7129505 15084324 +-2 3 11 28 82 232 570 1226 2410 4567 8789 17731 37425 80585 172253 358954 722906 1403263 2626843 4751290 8324112 +23 40 69 115 190 321 562 1018 1906 3709 7522 15738 33278 69675 142631 284548 555721 1072645 2069265 4026142 7932426 +9 30 75 159 293 486 762 1212 2117 4206 9162 20565 45578 97893 202911 407195 796688 1533621 2933598 5628132 10905498 +19 32 53 97 197 428 942 2011 4073 7771 13967 23702 38059 57869 83180 112386 140887 159122 149785 83999 -83815 +9 12 35 99 247 568 1242 2617 5331 10498 20002 37028 67184 121065 220076 409041 781945 1531556 3040241 6038741 11872865 +20 41 73 128 225 390 656 1063 1658 2495 3635 5146 7103 9588 12690 16505 21136 26693 33293 41060 50125 +12 21 44 87 160 283 502 941 1931 4274 9719 21748 46793 96030 187923 351720 632134 1095475 1837534 2993557 4750686 +17 25 43 83 169 349 723 1506 3148 6532 13266 26076 49294 89418 155700 260693 420659 655707 989493 1448273 2059055 +11 7 1 -9 -11 33 204 664 1743 4118 9154 19531 40380 81313 159972 308049 581143 1074309 1945691 3451171 5993443 +6 14 41 100 210 414 809 1581 3042 5689 10358 18640 33872 63225 121694 239163 472182 922664 1766399 3295100 5976654 +13 39 88 172 305 500 773 1160 1749 2724 4413 7328 12183 19877 31434 47902 70229 99157 135206 178860 231117 +24 34 45 58 87 169 377 837 1757 3494 6714 12740 24234 46421 89136 170059 319598 587986 1055275 1845038 3142729 +6 5 7 16 50 159 448 1117 2553 5547 11771 24762 51892 108319 225058 465756 961779 1985245 4099296 8463062 17442233 +15 26 50 84 129 207 390 845 1913 4263 9197 19245 39328 79102 157883 315271 634047 1288360 2641452 5435630 11146015 +8 18 37 75 151 296 557 1002 1726 2858 4569 7081 10677 15712 22625 31952 44340 60562 81533 108327 142195 +22 31 41 50 57 72 134 339 879 2097 4576 9306 18016 33822 62431 114259 207972 376147 673979 1192234 2075971 +-1 -6 2 37 116 278 617 1331 2794 5679 11210 21725 41935 81646 161419 323948 656321 1332612 2693746 5394289 10666670 +10 30 62 102 152 229 378 694 1359 2714 5434 10984 22741 48513 105720 231280 499328 1051358 2145294 4232450 8074422 +-9 -12 -14 -15 -15 -14 -12 -9 -5 0 6 13 21 30 40 51 63 76 90 105 121 +10 28 52 82 118 160 208 262 322 388 460 538 622 712 808 910 1018 1132 1252 1378 1510 +8 6 4 2 0 -2 -4 -6 -8 -10 -12 -14 -16 -18 -20 -22 -24 -26 -28 -30 -32 +2 -3 -12 -16 4 90 339 962 2392 5497 12022 25500 53047 108696 219230 433838 839330 1583093 2906436 5191448 9024978 +15 30 56 100 180 328 587 1011 1696 2909 5449 11480 26238 61259 140159 308665 651924 1324995 2608765 5017079 9508523 +21 49 86 139 234 427 828 1651 3308 6575 12874 24746 46676 86677 159673 295192 555040 1073010 2140927 4387786 9138251 +-1 10 28 60 132 298 649 1322 2509 4466 7522 12088 18666 27858 40375 57046 78827 106810 142232 186484 241120 +6 27 61 112 191 321 554 1012 1964 3951 7971 15736 30013 55061 97176 165356 272098 434339 674553 1022016 1514251 +5 11 21 40 78 158 334 735 1663 3798 8618 19260 42300 91463 195382 413788 871066 1825142 3807280 7902029 16299351 +7 15 28 51 96 182 335 588 981 1561 2382 3505 4998 6936 9401 12482 16275 20883 26416 32991 40732 +10 11 15 22 32 45 61 80 102 127 155 186 220 257 297 340 386 435 487 542 600 +-5 -5 3 22 65 181 499 1303 3169 7226 15647 32543 65564 128815 248414 473649 900215 1719341 3321387 6511428 12949483 +5 30 70 125 195 280 380 495 625 770 930 1105 1295 1500 1720 1955 2205 2470 2750 3045 3355 +24 35 53 90 173 351 706 1383 2661 5088 9696 18300 33889 61200 107868 187329 326362 583481 1090347 2138398 4348945 +5 5 6 10 33 126 406 1109 2681 5936 12351 24670 48204 93619 182712 359857 713732 1417074 2797355 5459845 10499006 +14 32 53 76 99 119 132 133 116 74 -1 -118 -287 -519 -826 -1221 -1718 -2332 -3079 -3976 -5041 +12 28 56 102 166 237 284 243 0 -630 -1928 -4300 -8310 -14717 -24516 -38983 -59724 -88728 -128424 -181742 -252178 +3 7 26 76 190 438 958 1996 3946 7367 12943 21363 33156 48660 68612 96491 145117 252963 521992 1202266 2876170 +23 46 82 140 238 414 759 1491 3089 6505 13478 26994 51971 96288 172296 298900 504111 827532 1321422 2047596 3065240 +-4 -10 -12 0 42 149 400 970 2245 5066 11206 24236 51022 104251 206660 398100 747296 1371361 2468348 4372941 7656724 +29 57 107 186 309 509 849 1446 2526 4546 8450 16185 31719 63029 125967 251804 502181 999564 1991253 3987103 8058223 +11 18 27 48 105 244 543 1129 2223 4265 8223 16267 33095 68341 140688 284570 560732 1072692 1993334 3612576 6436382 +11 18 25 32 39 46 53 60 67 74 81 88 95 102 109 116 123 130 137 144 151 +-4 3 31 97 227 470 916 1722 3156 5683 10149 18187 33107 61810 118848 235039 475979 982426 2059026 4368096 9345286 +11 19 27 35 43 51 59 67 75 83 91 99 107 115 123 131 139 147 155 163 171 +4 11 21 34 55 94 166 291 494 805 1259 1896 2761 3904 5380 7249 9576 12431 15889 20030 24939 +12 29 54 87 128 177 234 299 372 453 542 639 744 857 978 1107 1244 1389 1542 1703 1872 +15 42 85 157 291 557 1101 2220 4502 9094 18218 36139 70904 137321 261836 490198 899081 1613162 2829539 4851817 8136697 +25 48 84 153 290 556 1075 2125 4338 9116 19471 41693 88616 185892 383718 778000 1547027 3012272 5734590 10659101 19322098 +12 18 37 86 205 483 1100 2385 4892 9499 17542 31026 53053 88854 148335 252029 444036 818256 1568387 3078278 6077909 +20 31 45 69 126 277 659 1543 3416 7089 13828 25507 44837 75953 126287 212153 373520 709107 1452715 3127705 6841532 +14 16 29 64 137 291 631 1367 2860 5671 10628 18957 32574 54712 91189 152912 260926 457042 826947 1550718 3011155 +8 29 61 114 223 461 952 1884 3522 6221 10439 16750 25857 38605 55994 79192 109548 148605 198113 260042 336595 +7 14 20 17 -7 -68 -186 -385 -693 -1142 -1768 -2611 -3715 -5128 -6902 -9093 -11761 -14970 -18788 -23287 -28543 +22 45 72 95 112 134 195 365 769 1626 3354 6871 14412 31560 71870 166602 383868 864183 1883288 3958539 8022548 +-8 -16 -32 -46 -33 48 256 671 1398 2572 4364 6988 10709 15852 22812 32065 44180 59832 79816 105062 136651 +0 -1 9 47 136 307 601 1071 1784 2823 4289 6303 9008 12571 17185 23071 30480 39695 51033 64847 81528 +22 44 76 119 182 296 531 1015 1950 3624 6453 11195 19739 37433 79038 182540 439019 1053941 2467956 5587523 12214099 +29 59 109 192 342 636 1232 2432 4793 9344 18047 34800 67566 132684 263152 523754 1037405 2029013 3895337 7311248 13383374 +17 21 25 39 92 261 718 1807 4183 9081 18854 38058 75621 149095 292790 572946 1115361 2154597 4119835 7781809 14499662 +2 -1 -4 -7 -10 -13 -16 -19 -22 -25 -28 -31 -34 -37 -40 -43 -46 -49 -52 -55 -58 +13 29 44 67 118 228 439 804 1387 2263 3518 5249 7564 10582 14433 19258 25209 32449 41152 51503 63698 +15 34 74 158 319 600 1054 1744 2743 4134 6010 8474 11639 15628 20574 26620 33919 42634 52938 65014 79055 +15 34 76 154 278 453 684 995 1471 2333 4056 7539 14334 26938 49148 86474 146599 239868 379780 583448 871982 +13 13 24 67 174 388 763 1364 2267 3559 5338 7713 10804 14742 19669 25738 33113 41969 52492 64879 79338 +22 48 83 127 188 299 551 1157 2579 5788 12815 27942 60259 128987 274062 576095 1191996 2415144 4771591 9165565 17087014 +15 31 54 95 187 390 805 1623 3245 6523 13211 26821 54322 109605 220511 442678 885759 1761011 3464240 6715071 12783041 +14 36 72 129 231 445 933 2058 4594 10121 21725 45182 90934 177487 337617 630374 1164978 2148270 3976778 7409539 13881037 +7 24 58 112 182 248 275 245 261 797 3214 10721 30032 74055 166047 345780 678387 1266694 2267994 3916382 6551946 +26 44 73 122 216 417 861 1822 3830 7899 15963 31673 61776 118378 222487 409339 736130 1292910 2217541 3715780 6087720 +11 12 22 65 175 396 782 1397 2315 3620 5406 7777 10847 14740 19590 25541 32747 41372 51590 63585 77551 +14 13 4 -17 -49 -75 -49 130 693 2197 5968 15013 35809 81738 179635 382289 792500 1609897 3222924 6390151 12595759 +7 10 30 77 161 290 474 738 1155 1936 3663 7828 17951 41698 94611 206301 430247 858694 1644556 3032711 5403629 +14 39 81 145 236 359 519 721 970 1271 1629 2049 2536 3095 3731 4449 5254 6151 7145 8241 9444 +2 10 31 65 112 172 245 331 430 542 667 805 956 1120 1297 1487 1690 1906 2135 2377 2632 +9 23 44 76 129 232 467 1040 2410 5494 11946 24466 47043 85019 144972 234798 365194 555156 846227 1333315 2224980 +-2 6 34 98 219 432 814 1558 3147 6736 14943 33402 73684 158626 331857 674576 1334700 2576722 4865440 9003642 16353401 +-1 -3 0 28 119 334 762 1525 2783 4739 7644 11802 17575 25388 35734 49179 66367 88025 114968 148104 188439 +3 0 7 42 134 330 702 1354 2429 4116 6657 10354 15576 22766 32448 45234 61831 83048 109803 143130 184186 +12 22 47 93 177 343 687 1392 2767 5270 9484 16033 25525 38892 59143 96855 184170 406346 967033 2314801 5375901 +4 19 47 91 146 191 175 0 -493 -1517 -3254 -5545 -7024 -2999 19337 91164 283114 747035 1795933 4051963 8711690 +4 9 9 -5 -45 -118 -201 -183 250 1824 6035 15736 36071 75946 150402 284731 522460 942603 1699397 3115225 5894303 +3 11 23 50 116 271 614 1324 2698 5193 9471 16476 27675 45841 77261 137247 262823 540569 1166109 2569012 5670808 +12 21 33 59 125 281 615 1285 2603 5240 10679 22154 46556 98338 207653 437419 918748 1922948 4004234 8276279 16939319 +18 42 83 158 300 572 1090 2068 3909 7381 13945 26353 49719 93397 174190 321677 586796 1055276 1868087 3251792 5562558 +-3 -8 -7 13 69 179 352 581 864 1308 2438 5973 16606 45839 119846 294950 687123 1526999 3261464 6741767 13576461 +-3 11 45 104 196 332 536 893 1685 3701 8859 21345 49559 109281 228687 456273 873593 1616323 2910037 5131954 8917794 +-1 3 22 64 131 221 338 528 983 2304 6114 16413 42456 104649 246197 555278 1205723 2529021 5137522 10128690 19414013 +8 29 66 127 238 465 938 1887 3730 7304 14415 29022 59590 123482 254751 517388 1027036 1985455 3733688 6832009 12177414 +-1 13 35 61 85 95 67 -43 -309 -847 -1829 -3499 -6191 -10349 -16549 -25523 -38185 -55659 -79309 -110771 -151987 +14 15 29 71 165 355 730 1472 2951 5933 12048 24797 51572 107433 221743 449218 887516 1704179 3176567 5749395 10115615 +17 28 49 95 183 335 590 1033 1859 3515 7023 14711 31805 69710 152388 328091 689901 1410150 2795933 5375687 10030299 +2 10 36 99 232 487 960 1865 3710 7662 16232 34465 71884 145511 284372 535987 975450 1717818 2934652 4875687 7896752 +15 14 8 -3 -19 -40 -66 -97 -133 -174 -220 -271 -327 -388 -454 -525 -601 -682 -768 -859 -955 +6 17 39 74 123 188 272 373 476 568 746 1581 5094 17094 52398 145870 374650 900819 2049401 4443992 9230445 +22 48 83 121 158 207 334 730 1845 4624 10906 24096 50349 100814 196143 375734 716424 1369100 2627653 5053775 9694456 +6 9 9 16 47 118 234 387 582 923 1805 4274 10635 25408 56754 118517 233054 435053 776569 1333540 2214079 +2 5 18 56 144 314 612 1141 2176 4396 9296 19885 41861 85597 169502 325732 610100 1120081 2029584 3659744 6626996 +8 11 32 86 185 335 534 771 1026 1271 1472 1592 1595 1451 1142 669 60 -621 -1264 -1702 -1699 +10 38 85 169 320 576 979 1582 2502 4100 7440 15276 33940 76658 169012 357507 722514 1397274 2595207 4648531 8062232 +16 25 42 80 157 315 663 1448 3165 6741 13878 27728 54215 104553 199940 380285 720650 1362753 2575814 4873364 9233341 +-1 5 22 68 183 446 995 2048 3930 7127 12409 21078 35388 59140 98387 162173 263529 422177 673868 1099548 1905173 +12 19 31 53 101 213 467 1007 2078 4071 7579 13465 22943 37673 59871 92435 139088 204539 294663 416701 579481 +13 29 50 82 137 237 425 787 1508 3032 6496 14803 35056 83692 196661 448540 986703 2089687 4262694 8387544 15948819 +21 33 39 47 87 230 628 1599 3800 8558 18477 38540 78138 154877 301776 580762 1107439 2095271 3931963 7307421 13421785 +16 30 45 61 93 186 436 1021 2244 4582 8715 15477 25648 39566 56874 77765 109753 190078 446865 1248962 3548318 +11 25 53 97 167 289 513 921 1635 2825 4717 7601 11839 17873 26233 37545 52539 72057 97061 128641 168023 +-2 1 5 7 4 -7 -29 -65 -118 -191 -287 -409 -560 -743 -961 -1217 -1514 -1855 -2243 -2681 -3172 +24 41 63 97 164 321 698 1562 3431 7272 14828 29130 55261 101450 180585 312245 525362 861635 1379829 2161103 3315522 +9 4 10 39 115 289 651 1337 2538 4540 7864 13631 24335 45238 86573 166670 316195 584520 1052270 1862275 3299943 +16 24 38 58 84 116 154 198 248 304 366 434 508 588 674 766 864 968 1078 1194 1316 +8 28 53 86 133 212 389 858 2088 5080 11830 26220 55845 115903 237543 485538 994812 2044030 4200687 8602828 17501137 +13 15 17 22 35 59 87 90 1 -305 -1035 -2506 -5177 -9685 -16885 -27894 -44139 -67409 -99911 -144330 -203893 +7 27 57 105 187 329 569 959 1567 2479 3801 5661 8211 11629 16121 21923 29303 38563 50041 64113 81195 +1 0 -3 1 42 180 505 1118 2088 3408 5044 7312 12063 25546 64402 167073 414051 961912 2098055 4325579 8490872 +15 29 59 111 193 322 545 990 1982 4292 9634 21586 47186 99543 201906 393751 739577 1341247 2354869 4013385 6656223 +11 24 37 52 78 141 313 770 1889 4394 9561 19492 37468 68391 119325 200146 324311 509756 779933 1164996 1703146 +12 26 45 62 75 102 213 596 1688 4420 10644 23834 50207 100575 193732 363513 674924 1262058 2415742 4778607 9760269 +25 37 59 102 175 278 401 549 832 1692 4389 11938 30789 73698 164497 345899 692119 1328915 2464391 4433846 7759599 +1 14 43 96 183 326 577 1044 1925 3550 6431 11320 19275 31734 50597 78316 117993 173486 249523 351824 487231 +7 8 10 21 65 188 476 1107 2464 5349 11383 23801 49149 101045 208504 433887 910153 1915006 4012484 8312925 16933245 +22 42 73 119 184 272 387 533 714 934 1197 1507 1868 2284 2759 3297 3902 4578 5329 6159 7072 +4 11 22 37 56 79 106 137 172 211 254 301 352 407 466 529 596 667 742 821 904 +13 24 47 103 230 487 955 1732 2919 4594 6771 9341 11992 14105 14623 11890 3457 -14148 -45689 -97533 -178006 +10 26 57 113 222 449 935 1974 4153 8595 17374 34217 65671 122990 225082 402940 706052 1211328 2035079 3348513 5397052 +14 22 53 130 289 580 1078 1926 3437 6282 11798 22489 42902 81290 152889 286313 535600 1001926 1871059 3475380 6392895 +2 2 5 31 115 310 690 1353 2424 4058 6443 9803 14401 20542 28576 38901 51966 68274 88385 112919 142559 +18 29 40 51 62 73 84 95 106 117 128 139 150 161 172 183 194 205 216 227 238 +21 42 89 181 340 590 960 1508 2391 4021 7381 14639 30310 63418 131494 267989 536089 1054480 2045057 3919949 7436984 +22 36 58 102 199 411 870 1872 4082 8951 19514 41844 87621 178621 354610 687509 1307570 2453326 4569534 8502370 15889679 +11 12 11 11 21 58 149 333 663 1208 2055 3311 5105 7590 10945 15377 21123 28452 37667 49107 63149 +14 36 72 131 230 405 737 1402 2756 5477 10827 21205 41407 81536 163617 336282 706592 1507404 3236768 6939897 14766722 +-3 8 35 93 216 475 1009 2084 4201 8270 15863 29593 53815 96234 171814 311851 583505 1128848 2238007 4478753 8915454 +5 4 -4 -12 -9 27 148 469 1219 2816 5974 11852 22257 39915 68826 114721 185641 292660 450776 679996 1006643 +21 36 51 66 81 96 111 126 141 156 171 186 201 216 231 246 261 276 291 306 321 +0 -2 8 54 188 504 1148 2322 4284 7364 12061 19371 31634 54392 100033 194371 387792 773194 1513678 2883820 5329384 +16 33 59 89 109 98 46 3 192 1248 4687 13770 35017 80759 173310 351618 681640 1272211 2298875 4039055 6923101 +13 27 45 75 136 270 562 1178 2440 4966 9912 19362 36921 68575 123891 217639 371927 618949 1004455 1592061 2468526 +16 31 51 76 106 141 181 226 276 331 391 456 526 601 681 766 856 951 1051 1156 1266 +3 0 -5 -4 16 82 268 769 2043 5072 11837 26172 55264 112206 220194 419193 776187 1400480 2465935 4242532 7140200 +11 20 29 38 47 56 65 74 83 92 101 110 119 128 137 146 155 164 173 182 191 +16 34 57 80 101 140 273 685 1750 4150 9049 18342 35003 63560 110729 186243 303916 482986 749785 1139788 1700097 +2 14 48 123 269 540 1041 1977 3746 7123 13626 26241 50859 99127 194065 380935 747714 1462444 2839116 5450095 10312017 diff --git a/day9/data/test_input b/day9/data/test_input new file mode 100644 index 0000000..539a763 --- /dev/null +++ b/day9/data/test_input @@ -0,0 +1,3 @@ +0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45 diff --git a/day9/run.py b/day9/run.py new file mode 100755 index 0000000..83c9b38 --- /dev/null +++ b/day9/run.py @@ -0,0 +1,55 @@ +#!/usr/bin/env pypy3.10 + +import sys +import argparse +from typing import List + + +def parse(filename: str): + with open(filename) as stream: + for line in stream.readlines(): + data = [int(x) for x in line.split(sep=None)] + yield data + return + + +def calc(num: int, seq: List[int]) -> List[int]: + res = [] + while True: + it = zip(seq[:-1], seq[1:]) + seq = [(b - a) for a, b in it] + if all(v == 0 for v in seq): + break + res.append(seq) + return res + + +def main(args=None): + parser = argparse.ArgumentParser(description="advent of code 2023 day 9") + parser.add_argument('filename') + parser.add_argument('--debug', action='store_true') + options = parser.parse_args(args) + + final1 = [] + final2 = [] + for num, seq in enumerate(parse(options.filename), 1): + res = calc(num, seq) + nextval = 0 + prevval = 0 + for lst in reversed(res): + nextval = lst[-1] + nextval + prevval = lst[0] - prevval + nextval = seq[-1] + nextval + prevval = seq[0] - prevval + final1.append(nextval) + final2.append(prevval) + if options.debug: + print(num, prevval, seq, nextval) + + print(f"part 1: {sum(final1)}") + print(f"part 2: {sum(final2)}") + return 0 + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:]))