diff --git a/AdventOfCode.InputFetcher/Program.cs b/AdventOfCode.InputFetcher/Program.cs index 4cb2467..931e136 100644 --- a/AdventOfCode.InputFetcher/Program.cs +++ b/AdventOfCode.InputFetcher/Program.cs @@ -17,8 +17,8 @@ namespace AdventOfCode.InputFetcher var sessionKey = Console.ReadLine(); Console.WriteLine("Please input the target directory for the input files! Default: Current working directory"); var targetDir = SanitizeInput(Console.ReadLine(), Directory.GetCurrentDirectory()); - Console.WriteLine("File Name Format? Default: \"{YEAR}_{TYPE}_Day_{DAY}{PART}.txt\" => 2022_Input_Day_1.txt or 2022_Answer_Day_1-PartB"); - var format = SanitizeInput(Console.ReadLine(), "{YEAR}_{TYPE}_Day_{DAY}{PART}.txt"); + Console.WriteLine("File Name Format? Default: \"{YEAR}_{TYPE}_Day_{DAY}{PART}.tst.data\" => 2022_Input_Day_1.tst.data or 2022_Answer_Day_1A.tst.data"); + var format = SanitizeInput(Console.ReadLine(), "{YEAR}_{TYPE}_Day_{DAY}{PART}.tst.data"); Console.WriteLine("Pull Answers? (Y/N) Default: Y"); var answer = SanitizeInput(Console.ReadLine(), "Y"); Console.WriteLine("Overwrite? (Y/N) Default: N"); @@ -44,7 +44,7 @@ namespace AdventOfCode.InputFetcher //Input data not available yet continue; } - + } diff --git a/AdventOfCode.Tests/AdventOfCode.Tests.csproj b/AdventOfCode.Tests/AdventOfCode.Tests.csproj index 1319c68..d2626b2 100644 --- a/AdventOfCode.Tests/AdventOfCode.Tests.csproj +++ b/AdventOfCode.Tests/AdventOfCode.Tests.csproj @@ -211,6 +211,57 @@ Always + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + PreserveNewest diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_1A.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_1A.tst.data new file mode 100644 index 0000000..1387933 --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Answer_Day_1A.tst.data @@ -0,0 +1 @@ +2375403 \ No newline at end of file diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_1B.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_1B.tst.data new file mode 100644 index 0000000..8e26170 --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Answer_Day_1B.tst.data @@ -0,0 +1 @@ +23082277 \ No newline at end of file diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_2A.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_2A.tst.data new file mode 100644 index 0000000..2d3d9c2 --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Answer_Day_2A.tst.data @@ -0,0 +1 @@ +472 \ No newline at end of file diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_2B.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_2B.tst.data new file mode 100644 index 0000000..e157b5b --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Answer_Day_2B.tst.data @@ -0,0 +1 @@ +520 \ No newline at end of file diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_3A.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_3A.tst.data new file mode 100644 index 0000000..93de78f --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Answer_Day_3A.tst.data @@ -0,0 +1 @@ +188741603 \ No newline at end of file diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_3B.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_3B.tst.data new file mode 100644 index 0000000..0e915bf --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Answer_Day_3B.tst.data @@ -0,0 +1 @@ +67269798 \ No newline at end of file diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_4A.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_4A.tst.data new file mode 100644 index 0000000..7feed5d --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Answer_Day_4A.tst.data @@ -0,0 +1 @@ +2462 \ No newline at end of file diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_4B.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_4B.tst.data new file mode 100644 index 0000000..0bc965d --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Answer_Day_4B.tst.data @@ -0,0 +1 @@ +1877 \ No newline at end of file diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_1.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_1.tst.data new file mode 100644 index 0000000..5e9ac53 --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Input_Day_1.tst.data @@ -0,0 +1,1000 @@ +46669 36559 +54117 62675 +25659 15179 +18867 82784 +94354 78485 +28985 76228 +42358 34206 +59950 58682 +97799 24655 +52935 64167 +59303 53728 +85106 71005 +50792 91433 +13407 14222 +67886 61779 +16895 63137 +30061 23324 +52760 28081 +58542 49063 +90229 61487 +13000 11872 +75051 16072 +95703 59610 +71514 95236 +38533 15786 +96889 17973 +50570 62950 +22045 76693 +57193 91433 +14748 85022 +10514 38767 +29334 47840 +88964 45642 +48941 39483 +70592 24655 +93664 22449 +96355 69515 +81294 74800 +48811 85577 +45071 85562 +92092 82630 +84197 76933 +97582 13139 +87792 86408 +54977 27338 +99783 29891 +69620 61216 +13987 77826 +99852 96463 +91433 60831 +78088 46665 +72987 42777 +42868 69997 +68892 46927 +34108 66123 +43478 18458 +19787 42868 +94776 47041 +79484 42868 +51651 87993 +24205 29529 +44859 90283 +20200 73827 +87459 73406 +56046 83755 +91769 22449 +67206 27695 +12181 17936 +60868 83249 +38752 22334 +99845 94472 +41505 61216 +60128 24655 +29568 78485 +22811 63720 +58897 73583 +72379 79339 +37663 41578 +79732 61216 +73155 46563 +81753 43279 +51621 51888 +93416 86408 +47921 59610 +80800 23324 +96164 73406 +11851 98656 +23151 90283 +38856 89669 +68276 82552 +98955 32695 +54728 30695 +29338 75446 +62950 59047 +65523 19589 +37775 59752 +44035 55601 +88679 53778 +51799 86633 +88184 62950 +91162 78485 +93338 54646 +88930 17554 +86160 77826 +11460 56897 +25918 45594 +72148 91433 +92158 37114 +93731 49360 +87043 44224 +33307 76228 +28611 70786 +13314 61216 +65566 40058 +20245 63137 +37773 33408 +78163 30754 +63537 76662 +64165 11339 +80838 23324 +51282 29108 +25277 59610 +59407 75468 +67162 32283 +29618 22449 +38169 77435 +74644 65347 +15925 76228 +64235 87695 +14313 31523 +65574 70278 +94576 46927 +28941 76693 +56933 75648 +90283 20996 +15912 76693 +37371 11483 +42928 61216 +20043 15456 +79060 50351 +95841 86342 +90503 22449 +34098 55194 +59349 27339 +52463 49245 +44382 59610 +86377 39994 +77346 51349 +32396 82630 +89974 40626 +56849 67629 +62875 86860 +56067 34945 +92962 49059 +62901 46892 +25886 77783 +21697 96304 +38147 17270 +14550 90283 +13342 70663 +70611 68152 +20481 21488 +28904 58215 +26634 39518 +52203 30752 +66212 78485 +90182 98936 +20740 15786 +66065 65617 +61202 45164 +26862 99261 +58796 40132 +78079 70988 +81851 93597 +71297 91433 +92854 65509 +80295 27424 +63299 44867 +15813 58215 +16650 76933 +53617 23324 +26984 16067 +18903 22496 +45338 10448 +78888 63137 +45642 41937 +33541 24655 +48364 44977 +45753 86408 +38974 87966 +74367 95952 +30987 24768 +69198 61027 +79165 23324 +36565 49245 +93880 23324 +58577 22449 +88572 11153 +23891 35210 +57919 56916 +68618 29125 +69689 24742 +63792 67434 +42378 91433 +30886 85562 +68874 73316 +47080 76228 +17364 50012 +26523 95236 +91160 12505 +82072 63137 +85218 88792 +21179 45280 +83540 22449 +62790 75446 +99201 76966 +24655 91601 +15468 59236 +69939 40216 +26652 51063 +72139 22449 +38765 15786 +37220 73406 +46720 15786 +23324 12724 +28463 22865 +74495 12866 +81338 47719 +48576 67579 +57908 85562 +96483 75446 +12243 46927 +18922 30274 +96066 50932 +32506 57089 +63137 18017 +80079 34565 +78238 57507 +29990 85562 +63341 77826 +53097 89535 +77250 67346 +18752 22230 +84225 91433 +23056 22728 +72203 44957 +12182 95236 +54287 57853 +78417 76693 +79546 61111 +97938 90283 +28464 91433 +43864 61216 +25327 45949 +76917 18588 +88304 61216 +16599 91970 +90372 38723 +78721 47963 +61712 73406 +40506 20355 +80458 13289 +50334 49245 +10066 99664 +33077 90921 +27603 87695 +51307 62936 +18791 49524 +90086 98799 +61487 76228 +80381 77826 +30353 75446 +46686 63367 +67471 50064 +22404 67635 +73240 47665 +38824 85562 +52873 78957 +89294 79544 +55505 36605 +21363 73406 +54456 90283 +26147 51518 +51044 98236 +27948 22449 +28048 76228 +52852 87695 +33020 76933 +66414 51084 +29109 75446 +10430 72012 +53057 63137 +99531 27252 +77723 76933 +87307 24655 +81886 50012 +97967 90283 +24057 64661 +23205 63137 +18662 76693 +89627 25871 +70743 50012 +27182 88872 +75446 50012 +88535 38500 +83093 69995 +67214 88991 +79553 33819 +61690 50012 +76228 98865 +50955 95236 +93037 19499 +24196 49526 +59691 67094 +35278 90283 +61597 23324 +56941 37523 +20120 97355 +87535 87032 +41203 63891 +16392 87787 +72594 75446 +95236 76693 +59675 65584 +68845 90283 +78485 33285 +44280 62583 +98434 19636 +86408 22449 +49172 15344 +33704 41932 +57434 72228 +72242 16591 +55017 75193 +57538 97837 +66108 35681 +22194 32467 +74204 41085 +75528 56270 +55070 13932 +12362 69548 +80880 46460 +92437 86408 +62756 37768 +61713 33991 +65166 15786 +66265 57948 +59605 81427 +95292 61216 +53322 61216 +92343 77826 +57881 43673 +25694 79166 +50803 62933 +12557 76228 +30235 63137 +60145 59610 +69385 54371 +67591 95236 +75778 57891 +32402 72023 +85763 79371 +77826 58215 +54653 52717 +43427 73406 +87693 78923 +42560 99999 +56662 98907 +34358 15149 +72062 87084 +87457 25270 +79098 46927 +96786 63137 +12893 90634 +72153 22959 +79455 13986 +94850 28046 +73433 11290 +18596 58215 +82630 78485 +33604 14849 +15222 74035 +61085 23906 +36243 10054 +61417 39396 +97586 61216 +38303 13532 +46927 78485 +97158 28915 +47223 24655 +71928 16050 +48850 10274 +63968 59834 +74998 51096 +12237 16089 +15340 68204 +28588 86420 +27774 27427 +87417 76693 +68167 20436 +82772 87695 +16746 41792 +49969 76228 +68165 28891 +87687 73914 +31995 73403 +51948 57812 +92704 73961 +44851 23324 +81688 48766 +92752 24655 +87448 42868 +14258 13555 +97152 95236 +16893 58215 +49941 72107 +92908 95236 +30101 75629 +83485 19453 +70442 95236 +90285 24655 +55498 23539 +38791 77826 +51701 84708 +30330 59334 +59586 61909 +69360 16800 +96194 66338 +26813 94571 +16730 60469 +20452 61216 +88869 62950 +36471 85562 +48094 11994 +53210 58215 +25883 55787 +67454 16997 +28364 91433 +29596 18200 +39653 42554 +78247 98641 +68869 10213 +37243 61575 +78248 91234 +86264 24655 +42101 22449 +81992 77493 +65269 73406 +79512 88490 +23050 68216 +71745 32372 +12275 22311 +72704 57374 +40391 37266 +93996 81448 +60235 71232 +23986 45642 +31562 61893 +76700 68049 +95646 70208 +19567 23324 +91012 93539 +29318 15559 +25010 11836 +35563 51368 +54704 76228 +49819 40935 +33230 61216 +79086 14268 +51170 18475 +66485 81497 +18849 62950 +64392 24655 +95125 54268 +57789 27894 +59448 86408 +47257 86384 +15786 91433 +61948 42868 +86728 58933 +99498 59808 +52830 35210 +70990 70735 +67116 15019 +63821 73107 +27729 77826 +61964 32077 +36375 88334 +25299 59610 +86368 55921 +86423 71213 +73061 88241 +98588 25835 +13938 21656 +99826 95236 +37553 68730 +64667 62007 +93565 82405 +42768 29866 +42731 76693 +20204 30794 +71882 28231 +93933 73406 +32525 84373 +89842 64081 +31297 45009 +27264 75446 +93838 64694 +60747 78485 +13328 22449 +40592 95236 +91398 20009 +11574 90283 +96548 35894 +34268 49890 +86325 39672 +63884 15842 +30812 23567 +69993 24655 +22994 85977 +36141 24655 +17881 23324 +87053 12341 +85897 11252 +64282 31676 +83859 82810 +37811 70856 +30617 65639 +12124 82075 +25279 61216 +50876 76933 +93773 75446 +11066 73504 +75494 22449 +10852 22449 +75214 75446 +17183 55952 +40332 91433 +29117 20899 +30888 45919 +73512 32221 +78708 26250 +13367 76228 +92813 97383 +51110 47725 +25552 95236 +31096 38747 +83451 76754 +22497 49245 +42453 76693 +91372 53487 +91733 61487 +71459 79153 +45515 95236 +25529 81102 +21597 73394 +43122 82630 +63641 64171 +77303 61216 +37944 58215 +11386 77826 +77018 79070 +82992 96114 +51119 77798 +73221 23324 +18732 34798 +42279 46927 +89508 73730 +27791 80194 +28523 95308 +27555 12881 +29648 54618 +13577 98443 +56947 76693 +36475 87505 +38270 71142 +84688 28274 +19271 76693 +23825 22945 +95718 51459 +91764 51788 +27386 42182 +18677 55015 +67612 76693 +11810 44178 +87498 75376 +74359 45642 +35714 56252 +86955 70950 +28543 86408 +21253 57179 +81283 73406 +54208 83349 +87550 37110 +88194 76693 +68969 49473 +94869 80272 +18066 64411 +31310 15786 +57043 78434 +55440 89060 +88510 61216 +69221 64444 +45336 23324 +39240 51320 +86973 61853 +78101 71772 +24917 38491 +30454 84950 +95917 89580 +96914 78485 +77197 50552 +67382 31174 +73864 88832 +68112 77826 +34762 15786 +53167 36945 +58539 32505 +67660 41818 +89709 35248 +87156 49245 +98670 84396 +12340 44671 +51671 87514 +47948 18060 +69823 76228 +35233 73406 +52807 24655 +94057 26388 +63741 59610 +82004 66606 +93513 60231 +75084 35371 +10372 88851 +89866 46927 +24553 79589 +20556 15786 +46412 22449 +78846 24491 +98088 76693 +31170 92173 +94801 52961 +51058 13445 +70594 50037 +35346 50338 +78257 23324 +73406 21744 +68359 46927 +41213 55805 +45250 42131 +43279 18812 +69199 15786 +53725 76497 +69398 37768 +11742 73406 +65219 58877 +31780 38597 +46113 90283 +30112 76693 +37748 60472 +12596 58428 +22346 98357 +43346 53539 +89142 78485 +14544 38869 +31577 55185 +55937 87695 +41189 35667 +25078 73406 +59330 94542 +84733 16627 +82488 73406 +82948 58215 +16789 91433 +53671 27376 +70549 50516 +97581 54013 +91708 61216 +64783 37768 +89911 46097 +74663 76228 +70646 60061 +23944 31181 +30697 93934 +27561 95236 +52655 68084 +90627 38964 +27641 35708 +14184 91433 +42968 17857 +72204 30261 +77368 35970 +17048 89985 +20782 18407 +64749 78485 +41007 26752 +11880 97776 +44202 24368 +97301 23407 +61077 74465 +38804 77826 +13897 48877 +14508 37578 +61383 53091 +16885 29289 +37225 52081 +64685 35992 +31682 95236 +63631 10368 +45781 24466 +24092 65388 +31728 76228 +45777 22113 +51779 60657 +33859 29358 +53484 78827 +61319 49899 +36093 48789 +40584 77905 +56381 54295 +22662 38614 +24641 22449 +88324 59610 +78924 95236 +74820 61487 +77398 60846 +99595 63137 +65832 49245 +89471 11285 +90188 76593 +97763 71720 +98824 77826 +14418 20513 +39862 73406 +55906 78485 +86059 29127 +20742 97241 +88269 91433 +17962 86920 +32602 49245 +95412 59994 +83267 70431 +36825 24655 +89562 43279 +16860 72596 +53577 96790 +46665 76574 +71813 67270 +35210 15445 +33400 76693 +96069 65213 +46322 39179 +95285 91433 +95767 86269 +15236 76933 +27778 49357 +16170 30140 +57870 63137 +80794 63137 +84281 57089 +91022 26553 +55848 49245 +13825 49245 +91230 87028 +54860 73406 +66596 53306 +61216 64519 +50012 76693 +36465 83257 +87188 75446 +73588 21801 +94757 20402 +28170 60768 +24891 38174 +91787 76693 +63785 43279 +14566 90752 +55392 90283 +39790 67787 +40079 80845 +33827 34045 +79864 78485 +82775 43279 +67159 10612 +53001 37768 +52173 58727 +28322 76933 +84518 33044 +76693 27243 +49225 44682 +22449 75446 +80658 49373 +43255 22449 +59058 73490 +44951 49402 +71201 28356 +55944 42868 +33202 83266 +86699 66983 +88453 85814 +77034 58838 +85850 76228 +41409 88724 +36649 11112 +88428 93089 +59610 66639 +48137 90283 +86400 90487 +28104 46927 +43317 59610 +85510 67445 +99532 78485 +70359 15786 +42034 88131 +80957 68660 +43032 95236 +33582 40382 +58215 94486 +19221 36076 +91307 77826 +64821 76693 +89517 63137 +53579 18009 +82987 91433 +94727 51659 +19906 91433 +80106 43532 +28240 71843 +29670 23324 +39700 87695 +47283 78485 +39801 76933 +25980 96028 +21945 71497 +78407 78485 +85640 45318 +51978 50012 +11601 76575 +83651 31125 +95958 95956 +77749 23336 +13537 84975 +88065 52971 +38210 98657 +40101 36035 +32397 75288 +96618 16256 +42989 19324 +72932 43609 +18771 34539 +58557 86408 +92319 79573 +38295 94964 +10485 63913 +31358 76228 +38846 75446 +72221 22449 +66323 76933 +57089 60456 +88674 50047 +75813 15508 +22055 60704 +69047 96120 +73862 15909 +83222 67849 +76393 80920 +76522 69689 +71666 76228 +63583 12283 +19328 28164 +39355 77826 +85096 76933 +42056 31488 +92747 13579 +84937 47182 +17024 82132 +56871 90283 +97790 46927 +22993 68190 +68482 55096 +79976 85107 +90940 52882 +65919 63137 +62007 49245 +13415 59610 +26893 24655 +44653 95236 +33612 99036 +46478 42868 +70970 80135 +60481 95236 +15301 59360 +17212 37414 +80899 75446 +67495 21742 +18319 14479 +34445 58215 +39486 42282 +36028 44519 +92208 46483 +88362 90245 +53764 48959 +85604 74027 +96035 95893 +29561 30742 +74152 61216 +49507 46274 +87695 76693 +18100 15786 +21313 73406 +62234 12938 +25025 49466 +60890 74332 +11565 33629 +84299 76228 +34861 90283 +21353 73528 +99978 66897 +46529 22449 +13104 25219 +68752 88910 +26478 76933 +87668 43279 +49777 25060 +86763 75446 +73023 45052 +72004 51554 +88141 23926 +33130 82630 +82472 22449 +64754 80502 +57842 62007 +93088 72374 +45727 93735 +53996 19768 +49245 46046 +85299 19540 +56446 63137 +92445 82605 +67790 75139 +16758 26579 +66664 89655 +32710 80610 +75707 49245 +65814 95623 +58220 87669 +16612 76228 +24698 16590 +23184 73406 +91238 15786 +11843 91433 +86625 85562 +41307 77826 +26670 69594 +64855 63137 +63544 83733 +56574 24108 +79163 67158 +99311 95420 +17640 85562 +66865 91397 +31429 37768 +85562 49245 +93263 76716 +81248 45189 +91852 47062 +58324 52943 +63446 36264 +96407 87488 +46436 57089 +12385 26581 +91195 25257 +88835 32326 +21315 77826 +24216 97211 +37075 50012 +46375 49245 +68824 88237 +24882 44857 +60941 75157 +61864 64400 +41858 97465 +83877 61487 +26722 85343 +52455 55804 +22568 74046 +93290 83623 +76933 73008 +61124 76228 +32025 67436 +26293 77826 +46658 78485 +12043 52527 +47464 24655 +56275 41945 +57840 33284 +60040 82705 +10256 95591 +49049 90283 +37768 43279 diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_2.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_2.tst.data new file mode 100644 index 0000000..f9a38d0 --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Input_Day_2.tst.data @@ -0,0 +1,1000 @@ +8 11 14 16 15 +23 25 27 30 30 +19 20 21 22 23 25 26 30 +16 19 22 25 26 28 35 +59 61 59 61 63 +23 25 22 23 22 +5 8 9 12 11 14 15 15 +87 90 91 92 89 91 95 +36 38 40 43 40 41 47 +37 40 40 42 45 48 49 52 +40 41 41 43 45 43 +32 34 36 36 38 40 40 +2 4 6 6 7 11 +1 2 5 5 7 12 +76 79 81 85 88 +34 37 38 40 42 46 43 +33 34 35 39 39 +66 67 70 74 77 81 +77 80 84 85 86 87 89 96 +29 31 34 40 42 45 47 48 +30 32 34 36 39 46 47 44 +37 39 42 49 50 50 +76 78 80 83 85 86 93 97 +56 57 58 65 68 75 +43 40 41 44 45 46 48 51 +35 33 34 37 38 36 +68 67 70 73 76 76 +87 86 87 89 92 96 +19 18 21 24 26 27 34 +80 78 79 81 78 81 +47 44 42 44 45 44 +27 26 28 31 28 28 +89 88 91 88 90 92 93 97 +64 63 66 63 66 68 74 +40 39 40 43 43 46 49 +43 41 41 44 42 +56 55 58 61 61 62 63 63 +48 45 45 48 50 53 57 +35 33 36 39 39 45 +67 65 68 72 75 76 78 79 +32 29 30 34 37 40 43 40 +66 64 68 71 72 72 +78 75 78 79 83 84 87 91 +11 8 12 13 20 +73 70 72 75 77 78 83 86 +59 56 61 63 61 +60 58 59 60 61 66 66 +76 75 80 82 86 +64 63 70 72 75 80 +2 2 4 5 7 9 +64 64 66 69 72 75 73 +45 45 47 48 49 51 51 +64 64 65 67 69 71 75 +77 77 79 81 84 91 +77 77 76 77 78 80 +43 43 45 46 43 44 47 46 +57 57 59 57 57 +9 9 12 9 11 14 18 +69 69 70 71 72 71 74 81 +50 50 53 54 54 57 +31 31 34 34 35 37 38 35 +10 10 12 15 16 19 19 19 +64 64 65 65 66 70 +49 49 51 51 58 +20 20 22 26 28 +75 75 79 80 81 84 83 +63 63 67 70 72 74 76 76 +86 86 87 90 94 98 +33 33 35 39 42 44 49 +70 70 73 79 80 +65 65 66 73 75 78 79 78 +85 85 90 91 94 94 +31 31 38 39 42 45 49 +22 22 25 32 34 35 40 +8 12 14 15 17 18 20 21 +33 37 38 39 38 +34 38 40 42 43 44 44 +49 53 54 57 61 +30 34 36 38 41 47 +79 83 84 81 83 +90 94 93 95 93 +88 92 94 95 94 94 +18 22 25 23 25 28 32 +71 75 74 75 82 +80 84 87 87 88 91 92 +45 49 51 51 52 50 +40 44 45 48 48 49 49 +21 25 27 29 29 33 +25 29 30 31 31 33 38 +49 53 57 58 61 +70 74 75 79 82 80 +64 68 72 73 74 76 76 +50 54 55 56 58 61 65 69 +59 63 64 66 68 72 73 80 +70 74 77 78 79 84 87 +12 16 23 25 26 24 +8 12 13 16 22 23 24 24 +11 15 18 19 21 23 29 33 +69 73 76 77 82 85 92 +10 16 17 20 23 +11 18 19 22 25 26 25 +45 51 54 55 55 +19 25 27 30 31 32 33 37 +20 27 30 31 33 35 38 43 +87 93 96 94 96 +79 84 87 88 89 87 86 +38 44 43 45 47 49 52 52 +25 30 31 29 33 +18 25 27 28 26 31 +25 30 30 33 34 +8 15 17 20 20 17 +24 29 31 31 31 +20 27 30 30 34 +55 62 63 66 66 72 +2 8 11 14 18 21 23 24 +33 39 43 46 48 50 51 48 +22 29 30 34 34 +79 84 88 90 93 95 99 +61 66 70 72 74 81 +34 40 41 44 45 46 52 54 +68 73 74 79 77 +21 28 35 37 40 40 +47 53 59 60 64 +57 62 63 66 71 78 +14 12 9 6 4 3 5 +46 44 43 42 40 37 37 +76 75 72 71 68 64 +54 53 52 51 45 +69 68 71 69 68 +64 63 64 63 60 58 56 58 +77 76 75 76 76 +17 16 17 16 13 11 7 +38 37 34 35 28 +60 58 58 55 52 +70 67 64 61 61 59 62 +95 93 91 90 89 89 89 +72 71 69 66 66 62 +81 80 80 77 74 73 72 67 +16 13 12 8 7 6 5 +25 24 21 19 17 15 11 14 +19 18 14 12 12 +66 65 64 63 59 55 +34 31 27 24 21 18 11 +99 96 94 87 84 +46 43 41 34 33 35 +14 11 9 2 2 +57 55 48 45 43 41 38 34 +69 66 64 61 55 53 46 +69 70 69 66 63 60 58 +61 62 60 59 58 55 54 57 +69 70 67 64 63 61 61 +29 31 30 27 26 25 22 18 +63 65 62 59 57 54 47 +31 33 32 33 31 29 +94 95 92 89 91 94 +45 46 45 42 40 41 41 +70 71 68 66 63 65 61 +94 95 94 96 93 92 90 84 +10 12 12 9 7 4 2 +33 35 35 32 29 30 +74 77 74 74 74 +32 34 34 32 28 +72 73 73 72 69 64 +59 60 58 57 53 50 47 +79 82 79 75 74 73 75 +38 41 39 38 37 36 32 32 +74 75 73 69 65 +43 44 40 39 33 +52 55 54 52 45 42 40 37 +28 29 24 21 20 21 +50 52 51 50 47 46 40 40 +15 17 10 9 7 3 +21 23 16 15 9 +39 39 36 35 32 +95 95 93 90 87 90 +49 49 46 43 42 42 +29 29 28 26 22 +31 31 30 27 25 22 15 +15 15 13 12 14 11 10 +77 77 76 79 77 75 78 +42 42 41 42 39 38 35 35 +7 7 8 6 2 +96 96 94 91 92 90 84 +73 73 73 72 71 +57 57 56 56 53 51 49 52 +87 87 84 82 81 81 79 79 +38 38 35 33 31 28 28 24 +62 62 62 60 55 +35 35 32 31 27 26 +78 78 75 72 71 67 66 69 +47 47 44 40 40 +72 72 71 69 67 63 61 57 +48 48 46 42 35 +65 65 60 58 56 55 54 +92 92 89 87 86 81 83 +66 66 64 61 58 52 52 +29 29 26 25 23 22 17 13 +47 47 42 40 33 +50 46 43 41 39 38 35 34 +39 35 34 32 30 27 28 +21 17 16 15 12 10 9 9 +71 67 66 65 61 +38 34 31 29 28 22 +87 83 80 81 78 +94 90 92 90 91 +83 79 78 75 78 75 75 +36 32 35 33 30 29 27 23 +87 83 84 82 76 +77 73 70 69 69 68 66 63 +94 90 89 87 87 85 86 +63 59 58 57 54 51 51 51 +32 28 28 27 23 +36 32 31 29 29 28 23 +42 38 34 31 29 28 +33 29 27 25 21 18 20 +29 25 24 21 17 16 13 13 +90 86 85 82 78 74 +68 64 62 58 56 51 +73 69 66 61 58 56 +93 89 87 85 82 75 72 74 +80 76 73 72 69 68 62 62 +40 36 34 32 30 25 24 20 +55 51 50 48 46 40 39 33 +25 20 19 18 17 14 +98 91 89 87 86 84 82 83 +58 52 51 49 49 +75 70 69 67 65 61 +91 84 83 82 80 78 76 69 +37 30 32 30 28 26 23 22 +48 42 40 42 41 39 40 +75 69 68 67 66 64 67 67 +90 85 86 85 83 82 79 75 +34 29 32 30 24 +93 87 86 84 83 83 82 +94 87 84 83 83 86 +19 14 14 13 12 12 +94 89 87 87 84 80 +60 53 50 47 44 44 37 +41 34 31 27 24 21 +31 25 23 19 20 +79 74 72 68 67 66 63 63 +28 23 21 20 19 17 13 9 +97 91 87 85 82 80 73 +96 91 88 86 81 78 75 72 +58 51 48 41 38 40 +35 28 25 22 16 13 13 +45 40 35 34 30 +38 33 30 23 21 14 +18 20 22 25 27 28 25 +78 80 82 83 86 89 90 90 +1 3 6 9 13 +21 24 25 28 30 31 33 39 +90 91 93 92 94 +47 49 52 50 51 54 56 54 +25 28 30 33 34 33 33 +20 21 24 25 26 27 25 29 +77 78 77 79 84 +64 67 68 71 72 72 75 +13 15 18 21 21 19 +33 35 37 37 38 38 +15 17 20 22 23 26 26 30 +56 57 58 58 64 +20 21 24 28 29 31 +41 43 47 50 49 +83 86 90 93 93 +8 11 15 18 20 24 +83 84 88 90 92 99 +54 55 58 59 65 68 +60 62 63 69 70 71 70 +57 58 65 67 70 70 +54 55 62 64 67 70 74 +17 18 19 21 24 30 32 38 +30 29 31 34 35 37 39 +27 24 25 26 27 30 29 +9 6 8 10 11 14 17 17 +32 31 32 35 37 41 +58 55 57 59 60 65 +25 22 25 26 25 27 30 32 +73 72 74 76 79 81 79 77 +5 2 5 8 10 12 10 10 +87 85 87 90 91 93 90 94 +38 37 38 40 41 42 39 45 +37 35 37 40 40 41 +14 11 11 14 16 18 16 +71 68 71 71 71 +29 26 26 29 30 33 37 +69 68 68 71 74 76 79 85 +43 40 44 46 47 48 50 +46 45 47 48 50 54 57 55 +23 22 26 29 29 +36 34 36 40 42 43 47 +13 10 12 16 18 19 25 +64 63 66 67 68 75 76 78 +72 70 75 77 79 80 77 +12 10 11 16 19 19 +64 62 64 69 70 73 75 79 +50 48 51 54 61 64 66 71 +12 12 14 16 18 +40 40 42 45 47 50 49 +62 62 65 67 67 +70 70 72 74 78 +10 10 11 12 13 14 15 20 +77 77 74 75 77 +40 40 38 39 38 +86 86 87 85 85 +48 48 49 46 50 +7 7 10 7 8 13 +19 19 20 20 21 24 +20 20 23 26 27 27 26 +40 40 42 45 46 46 46 +88 88 90 90 91 95 +65 65 65 67 69 76 +81 81 83 87 88 90 +48 48 49 51 55 57 54 +35 35 39 42 44 45 48 48 +70 70 73 75 78 79 83 87 +5 5 9 12 17 +10 10 11 12 15 21 22 +30 30 37 38 39 42 41 +77 77 82 84 87 90 93 93 +11 11 13 20 24 +59 59 61 66 71 +12 16 17 20 22 24 25 +52 56 57 59 61 62 64 61 +79 83 86 88 91 91 +16 20 21 23 27 +72 76 79 82 84 89 +85 89 86 87 89 +92 96 98 96 94 +32 36 37 34 35 37 38 38 +56 60 61 58 61 62 65 69 +78 82 80 81 87 +47 51 53 54 57 59 59 61 +53 57 57 59 60 62 60 +73 77 77 80 81 81 +83 87 88 89 90 90 94 +78 82 85 86 86 93 +37 41 42 43 46 48 52 53 +71 75 76 77 81 83 84 82 +78 82 86 88 91 91 +20 24 27 29 33 37 +54 58 59 61 64 65 69 76 +52 56 59 60 62 69 71 +8 12 14 19 18 +52 56 59 62 67 67 +69 73 74 79 83 +48 52 54 56 57 59 64 69 +84 91 92 93 95 +43 48 50 52 54 51 +76 81 83 85 88 90 90 +18 25 28 30 31 34 38 +49 55 58 61 63 68 +26 33 30 32 34 36 39 +10 17 14 17 15 +80 87 88 85 85 +81 88 91 89 90 93 97 +24 29 32 30 35 +41 47 50 51 54 54 57 58 +60 65 66 68 71 73 73 70 +33 40 40 41 43 45 47 47 +45 50 52 55 55 59 +1 7 10 11 12 12 19 +30 36 39 43 44 +51 58 61 65 63 +24 30 31 32 36 38 38 +46 53 57 59 63 +34 39 40 41 45 46 49 56 +33 38 39 40 41 46 49 +63 69 74 75 74 +74 81 88 91 93 95 95 +26 32 38 41 45 +67 72 79 81 83 86 93 +30 28 27 25 23 21 18 21 +43 40 38 36 33 30 30 +55 52 51 49 48 47 46 42 +21 20 17 16 10 +68 67 69 66 65 +38 35 33 31 33 31 29 32 +85 82 80 79 80 79 76 76 +64 63 66 64 61 57 +42 39 37 34 36 33 32 26 +42 40 37 37 34 31 30 +17 15 15 13 11 10 9 12 +75 73 72 72 72 +50 49 49 47 43 +53 50 47 45 45 38 +61 60 59 58 54 51 +37 36 32 29 30 +15 12 10 6 6 +44 43 42 38 34 +34 32 28 27 21 +24 22 19 18 15 9 8 +60 58 51 50 48 47 46 48 +91 90 88 85 78 76 76 +88 86 81 79 77 73 +89 88 86 84 78 72 +17 18 15 13 12 10 +77 80 78 77 75 78 +44 47 45 44 41 39 39 +14 17 16 13 10 8 4 +90 91 89 87 84 83 76 +51 52 49 52 49 46 45 +30 32 35 32 29 28 29 +15 16 15 16 16 +96 98 99 98 97 93 +83 84 82 81 79 78 81 76 +30 33 30 29 28 28 27 +41 44 42 42 39 36 33 36 +79 82 81 81 81 +48 50 47 47 43 +31 33 33 31 28 27 26 19 +49 50 47 46 42 40 39 +19 21 19 18 15 11 9 10 +52 53 51 49 48 44 42 42 +72 75 71 69 65 +25 27 25 23 22 18 15 9 +35 36 33 30 25 22 19 +76 78 75 73 68 65 68 +96 99 93 91 89 87 84 84 +80 83 82 79 76 69 65 +91 93 90 89 84 77 +78 78 77 74 71 +42 42 41 39 36 35 36 +81 81 80 77 75 74 71 71 +47 47 46 44 42 38 +71 71 68 66 64 61 55 +29 29 26 29 28 25 +76 76 77 74 71 74 +79 79 81 78 77 77 +79 79 76 79 76 75 74 70 +73 73 72 70 69 68 71 66 +59 59 58 55 53 52 52 50 +58 58 56 56 53 51 52 +80 80 79 77 76 76 73 73 +51 51 50 48 48 44 +41 41 41 38 37 36 35 29 +54 54 53 52 48 46 43 40 +25 25 23 19 20 +10 10 9 5 5 +63 63 59 57 55 52 48 +62 62 60 56 53 51 48 42 +40 40 39 37 35 30 29 +38 38 35 34 28 26 28 +90 90 85 84 84 +84 84 81 75 72 68 +76 76 73 68 67 64 59 +37 33 31 29 26 25 23 +88 84 83 80 77 80 +97 93 91 89 88 88 +82 78 77 74 73 70 67 63 +92 88 86 85 84 79 +20 16 14 16 15 +26 22 24 23 22 21 19 21 +57 53 55 54 53 51 51 +24 20 19 21 18 16 12 +56 52 50 49 48 49 46 40 +71 67 67 65 64 62 60 +40 36 36 33 31 29 31 +87 83 80 80 80 +25 21 19 19 17 14 10 +88 84 82 79 77 77 74 67 +23 19 15 14 11 10 +29 25 22 18 16 13 15 +43 39 36 32 32 +90 86 85 82 80 76 74 70 +58 54 50 47 40 +54 50 44 41 38 36 +98 94 88 85 88 +22 18 12 9 8 8 +49 45 38 36 33 29 +56 52 49 47 46 40 39 32 +53 48 47 45 42 41 38 +60 54 53 51 50 49 50 +90 83 82 81 81 +87 81 80 78 74 +25 19 18 16 13 6 +70 64 63 66 64 61 +36 29 26 29 30 +30 25 28 25 23 21 18 18 +81 76 78 76 74 73 69 +73 68 66 64 62 64 63 57 +51 46 46 44 41 +18 12 10 9 7 6 6 7 +38 31 30 30 28 26 24 24 +52 47 44 41 39 39 35 +74 68 65 64 61 58 58 53 +29 23 19 18 16 14 11 +56 50 49 48 44 41 40 41 +36 31 30 28 25 21 19 19 +53 47 46 42 38 +72 67 63 60 59 56 54 47 +35 30 28 26 20 18 +34 27 25 23 18 16 18 +46 39 32 29 26 24 24 +77 71 66 64 61 58 57 53 +77 71 70 63 60 54 +34 34 36 37 40 44 47 51 +55 59 61 62 60 +95 95 92 91 88 91 +92 95 92 89 89 88 89 +81 83 85 87 90 93 99 +30 24 22 15 12 +76 80 81 82 85 87 92 92 +82 83 81 80 80 +24 27 30 31 31 33 35 33 +32 26 28 27 28 +33 26 25 23 21 20 17 +74 70 67 61 60 58 58 +95 95 93 95 98 +50 50 51 49 47 45 47 +85 82 80 78 76 69 +34 27 27 24 21 20 18 13 +60 56 56 55 54 53 51 44 +47 47 53 54 53 +72 72 70 70 70 +9 7 10 11 14 16 15 14 +37 41 42 44 45 46 49 51 +42 36 36 33 33 +61 66 70 71 71 +77 72 70 66 60 +48 44 41 38 39 37 37 +46 43 45 43 41 41 +63 67 70 72 74 75 78 82 +2 3 6 6 9 11 11 +84 82 80 77 75 71 70 66 +94 90 89 92 89 82 +17 17 15 12 11 9 7 5 +72 75 73 73 73 +48 47 45 42 40 39 38 37 +3 4 6 7 9 +33 35 36 37 40 43 44 45 +49 51 52 53 54 +26 28 31 33 34 36 +55 52 50 47 44 +84 81 79 77 75 72 69 68 +90 91 93 94 95 98 +47 45 44 42 39 +22 23 26 28 29 30 32 35 +69 71 74 77 78 80 83 +53 56 57 58 61 64 66 +20 21 22 24 25 27 28 29 +37 34 33 32 31 28 +42 44 47 50 51 +94 91 89 86 83 81 +75 72 69 66 63 62 +50 47 45 42 39 37 +31 33 34 36 39 40 +30 33 35 36 38 40 +30 27 24 22 19 16 15 +20 21 22 25 28 31 33 +68 70 72 73 76 77 79 +13 14 16 19 22 +47 44 41 39 37 34 33 32 +73 75 77 79 81 84 +21 24 26 29 31 +79 81 84 85 88 +56 53 52 51 48 46 +71 74 75 76 77 +66 68 69 71 73 75 +37 35 33 30 28 26 23 20 +47 49 52 55 56 57 +95 93 91 89 86 85 82 +19 21 24 26 28 30 +71 74 76 79 80 82 84 85 +57 55 54 52 50 +75 77 80 81 83 86 +57 55 54 51 49 46 +99 98 97 94 93 91 +29 26 25 23 21 18 +61 60 57 54 51 49 47 +34 33 31 29 27 26 +79 77 74 73 72 +83 86 89 91 92 94 +41 39 36 34 33 +41 38 36 33 30 29 27 25 +16 18 21 22 25 26 +86 85 84 83 81 78 76 73 +28 29 31 34 36 37 +34 31 30 28 26 25 +82 79 77 74 73 72 71 +90 91 92 94 95 98 +47 46 43 41 38 36 34 +62 59 56 54 52 +45 42 40 38 36 34 32 +26 25 22 19 16 15 14 +37 38 40 43 45 46 +84 81 79 76 75 74 71 +77 80 82 85 87 90 92 95 +35 38 39 40 42 45 46 49 +30 33 36 39 41 44 +48 51 54 56 58 59 62 +28 29 30 32 34 35 36 39 +37 39 40 42 44 46 +21 23 24 26 27 28 31 33 +79 78 76 73 70 68 67 66 +38 37 34 32 30 28 27 +77 75 73 72 69 68 66 +13 14 15 18 20 21 +83 81 80 79 77 75 +33 36 38 40 43 44 46 49 +63 61 60 59 56 53 50 47 +23 24 25 26 27 29 30 +97 94 93 92 89 +61 62 63 64 66 69 +32 33 34 37 40 +72 71 68 67 64 62 59 +32 34 36 38 40 41 44 46 +55 52 51 50 48 47 46 45 +36 37 38 39 42 +56 57 59 60 61 63 66 +87 85 82 80 77 76 +8 9 12 14 16 +81 82 83 86 88 90 91 94 +57 58 59 62 65 +49 48 46 45 44 42 41 +75 74 73 71 69 +46 48 49 52 54 +90 89 86 83 82 79 78 +30 32 33 35 37 39 42 +49 48 46 45 44 42 +13 16 17 20 22 25 26 29 +67 64 62 61 59 +32 29 28 25 24 21 19 +57 58 59 60 63 64 +9 11 13 14 17 19 21 22 +43 44 45 48 51 53 +14 16 19 22 25 26 27 28 +77 75 73 71 68 66 64 61 +26 24 22 21 18 17 16 +80 79 78 77 74 72 71 +24 25 28 31 34 35 38 +50 52 55 58 59 62 +52 53 56 58 61 64 65 68 +21 19 16 13 11 10 7 6 +3 5 8 9 10 11 +38 37 36 33 30 27 24 +99 97 96 94 91 88 86 +54 51 48 46 45 43 42 +91 90 89 86 85 83 82 79 +34 37 39 40 43 46 47 +15 16 17 19 21 22 24 +42 41 38 35 33 31 29 27 +87 84 81 80 78 76 +80 82 83 86 89 +82 79 76 75 72 70 68 66 +45 47 50 51 52 55 56 +36 39 41 43 45 47 50 +57 55 54 53 52 51 +76 74 73 72 70 68 66 +67 66 65 62 60 +55 54 53 50 48 45 +80 81 84 85 86 88 91 +38 40 43 45 47 49 50 53 +82 84 87 88 90 +69 72 74 77 78 79 82 +51 53 55 58 60 +19 16 14 11 8 5 3 +42 41 40 38 36 +21 19 16 13 11 10 +29 28 27 25 23 +9 10 12 14 17 +88 89 92 95 96 +65 66 68 70 73 74 77 79 +18 15 14 11 10 +45 48 51 53 56 +84 82 81 79 78 77 +56 58 59 60 62 63 64 66 +67 64 63 60 58 56 54 53 +92 90 89 86 83 82 80 79 +54 56 57 60 62 64 67 69 +97 96 95 93 91 89 +65 64 62 59 57 56 55 53 +47 49 52 54 57 59 62 +78 81 84 86 88 91 92 93 +24 26 27 28 30 32 +49 52 54 55 58 61 +84 83 82 81 80 +29 30 31 34 36 39 40 +86 85 82 79 78 +31 32 34 35 36 +77 76 73 72 69 67 65 +60 59 58 55 53 51 48 46 +65 68 70 71 72 +56 54 52 51 48 45 +38 36 33 31 28 25 23 +38 40 42 43 44 +88 86 85 83 82 81 79 78 +13 11 10 9 8 +81 79 78 77 76 +81 82 85 86 89 +66 63 60 58 55 +3 4 6 9 12 15 17 19 +31 34 35 36 39 +26 27 29 32 35 36 39 42 +26 25 22 21 20 19 16 +84 82 80 78 75 +70 71 72 75 76 78 80 83 +63 60 58 55 52 +65 63 61 58 56 54 +60 61 62 63 65 +44 43 42 40 39 38 +2 5 6 7 9 10 13 +4 6 8 9 11 12 14 +61 58 57 56 55 +71 72 73 75 78 +60 63 65 67 70 71 73 +20 17 14 13 10 +64 66 69 72 74 75 76 78 +41 44 47 48 49 50 51 54 +48 47 44 41 39 36 +30 32 33 35 37 40 43 +10 12 15 17 20 21 22 25 +5 8 11 13 16 19 22 25 +36 37 40 41 42 +59 60 62 63 66 +62 59 58 55 53 50 49 +28 27 26 23 21 +26 29 31 32 34 36 +59 62 65 67 68 +77 80 81 83 84 86 88 90 +35 34 31 28 26 +40 43 44 47 50 52 +90 87 86 84 83 81 80 +45 44 42 39 36 +4 6 8 9 12 +27 24 22 20 19 16 14 11 +70 71 72 75 77 80 +54 56 58 59 61 63 66 +27 25 24 21 18 16 +73 75 78 80 83 85 87 +57 58 61 63 65 66 67 +74 72 71 69 66 65 62 +98 97 95 92 90 +14 11 10 9 8 5 +9 6 5 2 1 +29 32 33 36 38 39 +93 90 88 86 83 80 77 +38 41 43 44 45 47 50 53 +25 24 21 20 17 +18 17 14 11 8 6 4 1 +3 5 8 10 12 +87 88 90 93 96 +85 86 87 90 91 92 95 +29 28 25 24 22 19 +89 88 86 83 82 80 79 76 +70 69 67 65 64 61 +37 40 42 43 45 46 49 50 +1 2 4 5 8 10 +85 82 80 79 76 73 70 69 +95 92 91 88 85 84 81 80 +35 32 29 26 25 22 +26 24 23 22 21 19 18 17 +92 93 94 95 97 +37 35 32 30 27 +61 59 56 55 52 50 49 46 +32 35 36 38 41 43 +74 77 78 81 82 +88 86 83 82 80 +52 55 56 57 60 +61 64 65 66 68 70 72 73 +35 34 33 30 27 26 +21 24 25 26 28 31 32 35 +12 14 15 17 18 20 22 24 +28 31 34 35 37 +94 92 89 88 87 84 82 +43 42 39 38 36 34 31 29 +37 38 39 42 45 47 50 53 +82 85 87 90 93 96 99 +74 77 78 79 81 83 +86 83 80 77 76 73 +98 97 96 94 92 90 +25 23 21 19 18 15 +68 65 63 61 59 +34 37 38 41 44 45 +70 67 65 63 61 58 56 53 +34 32 30 27 25 +55 53 50 47 44 43 +44 47 50 51 53 +90 87 84 81 80 77 74 +18 19 22 24 27 +18 19 21 24 25 28 31 34 +43 42 40 38 37 35 34 +57 56 54 53 52 49 48 46 +16 18 21 22 25 +20 21 23 24 27 +79 80 83 86 87 90 +83 81 80 79 77 75 72 +37 40 41 44 45 47 49 +28 27 25 22 21 +20 18 15 14 13 10 9 +51 52 54 57 60 61 63 66 +71 73 74 77 80 81 83 85 +14 15 17 18 19 21 +73 75 76 77 79 82 +36 33 32 31 30 27 24 23 +69 71 73 75 76 77 80 81 +75 78 80 83 86 87 +11 14 17 20 23 +92 89 88 86 84 +68 67 64 62 60 59 57 56 +21 19 18 15 12 11 10 9 +42 40 39 38 37 +71 74 75 76 78 80 82 +7 8 9 12 15 18 +21 18 17 15 13 11 +70 68 65 62 61 58 57 +32 31 29 27 24 23 22 +4 7 9 11 14 +35 33 31 30 29 28 27 24 +30 33 36 39 42 45 47 +12 10 8 7 5 +47 48 50 53 56 57 59 +67 69 70 72 75 77 78 +27 24 22 19 16 15 13 11 +15 13 11 10 9 +43 40 38 35 34 31 +45 48 50 52 53 +76 77 79 81 82 85 +90 88 87 84 82 79 77 76 +28 29 32 35 38 41 43 46 +61 64 67 70 73 75 78 +55 52 51 48 46 43 42 +9 12 15 18 21 24 27 +85 87 89 91 92 94 95 97 +75 74 73 70 69 66 +35 36 39 40 43 +52 55 58 60 63 +59 62 65 66 68 70 73 +17 15 13 11 8 7 4 +37 40 42 44 46 +21 19 18 17 15 +27 28 29 32 33 36 +9 12 13 14 17 20 21 24 +88 91 94 96 99 +69 71 72 73 74 76 79 +60 59 58 56 53 50 +86 84 82 79 78 76 74 71 +98 95 94 91 89 +70 68 66 65 64 61 +16 15 12 11 8 6 5 +16 19 20 23 24 27 30 33 +47 49 50 51 53 55 58 +79 82 83 84 86 87 89 +93 91 88 87 86 84 +17 14 13 12 11 9 7 +83 81 79 78 76 75 +78 79 82 85 87 88 +38 40 43 44 45 48 49 +44 43 40 37 36 34 +94 92 91 89 88 +7 9 11 12 14 +94 91 90 89 86 +11 12 15 17 18 19 20 +32 30 27 24 21 18 +48 47 45 43 41 +51 54 55 57 59 61 64 +28 29 31 34 37 38 39 42 +85 84 83 82 81 78 75 +70 67 64 62 59 +52 50 47 44 42 +72 74 75 77 78 81 84 +7 8 11 14 15 17 19 +38 39 42 43 44 +66 68 70 73 74 75 78 79 +64 65 67 70 73 +58 56 55 53 50 49 +77 78 80 81 84 +32 34 35 37 39 +7 9 11 12 13 14 +38 41 43 46 48 49 52 +24 27 29 32 33 35 38 41 +77 74 73 70 69 68 66 +14 17 19 22 25 28 31 34 +41 40 38 36 34 31 30 +30 28 26 23 22 21 20 +50 47 46 44 43 42 +56 53 50 47 45 44 41 +70 73 76 78 80 82 +41 42 45 48 50 51 53 54 +45 42 41 39 37 34 31 29 +58 57 54 52 50 +17 20 21 24 27 +54 56 58 59 62 +73 76 78 80 81 +17 19 20 22 25 26 29 +47 48 50 52 55 58 +23 20 17 15 13 10 9 +72 71 70 68 65 62 60 59 +85 83 81 80 79 +80 79 77 76 73 70 68 +96 94 92 91 89 +36 38 40 41 42 44 +21 24 26 29 31 33 35 +62 64 66 69 71 +90 89 87 84 82 81 80 77 +19 20 21 23 25 27 +23 20 17 14 13 12 11 9 +67 69 70 72 73 75 78 80 +3 6 7 10 12 +60 63 66 67 70 73 76 78 +87 85 82 79 76 +6 9 12 14 17 18 19 +62 60 57 56 53 51 +54 52 50 49 48 +64 63 62 61 60 57 55 +75 76 78 81 82 84 +65 64 62 60 58 57 55 +62 63 66 68 71 73 +41 43 44 46 49 51 52 +15 13 10 8 6 +25 23 21 19 17 14 11 8 +56 58 60 61 62 64 66 69 +78 80 83 85 86 87 89 +35 37 40 42 44 47 48 +72 75 78 80 81 82 83 +30 32 34 35 37 +62 60 57 54 52 49 48 46 +96 93 90 87 85 84 83 +57 60 63 66 67 70 +77 75 72 70 67 +88 87 84 81 79 +22 25 26 29 31 32 34 +24 23 22 19 16 15 +57 56 53 50 49 +7 10 13 15 17 18 19 21 +19 22 24 27 29 +30 28 26 23 22 20 18 15 +5 6 8 9 12 +59 58 55 53 52 50 47 46 +35 34 32 30 27 24 22 +67 64 63 61 58 56 54 +71 74 77 78 79 +26 29 32 35 36 39 +90 88 87 86 84 +23 21 20 18 16 15 14 +11 14 17 19 20 21 23 +75 78 79 80 83 +45 48 51 54 57 58 59 62 +34 31 29 26 23 20 18 17 +17 15 12 9 7 5 +38 37 36 35 34 31 30 27 +56 55 54 53 52 51 50 49 +78 80 82 84 85 +46 45 43 42 40 38 35 +25 27 30 31 32 33 35 +27 30 32 34 37 38 +91 90 88 85 82 81 80 +27 25 23 22 20 17 16 +88 87 86 83 80 +96 93 92 89 87 84 81 +42 43 45 47 48 49 50 +21 20 19 18 15 12 9 +57 58 59 62 64 66 69 +52 49 46 44 42 +35 34 31 28 26 23 20 17 +79 76 75 73 72 71 70 68 +24 25 26 29 31 32 34 +75 77 80 82 84 85 87 90 +2 5 7 8 11 12 14 +27 26 23 20 17 14 12 +55 58 59 62 64 67 68 69 +33 34 37 40 41 42 +68 69 70 71 72 +18 17 15 13 11 8 5 4 +63 61 60 58 56 54 53 52 +22 20 19 16 15 14 +56 57 58 59 60 62 +84 85 88 90 93 96 +26 27 29 32 34 35 +88 85 84 81 78 75 73 70 +52 50 49 46 44 43 40 +41 40 37 34 32 29 26 23 +81 79 76 74 72 +51 53 55 56 58 61 62 +58 57 56 55 54 +47 44 43 41 40 +83 84 86 88 90 91 92 94 +84 83 82 81 79 78 +15 14 13 12 11 10 9 +31 28 25 24 21 18 +73 72 71 70 69 +44 46 48 49 51 54 55 58 +8 10 13 14 17 18 +78 77 74 73 70 +8 10 12 13 15 +47 46 43 42 40 +94 91 90 89 88 85 84 83 +41 43 45 46 48 +65 66 67 68 69 72 75 +97 95 94 92 91 89 +68 71 73 75 78 +35 37 40 42 44 +63 65 66 67 68 71 74 76 +85 88 90 92 95 98 +75 73 70 67 66 +91 89 87 85 82 79 77 74 +33 32 30 27 26 24 21 20 +88 85 82 79 76 74 73 71 +31 33 34 35 38 41 42 43 +10 11 12 15 17 20 21 diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_3.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_3.tst.data new file mode 100644 index 0000000..99dca0f --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Input_Day_3.tst.data @@ -0,0 +1,6 @@ +*how())@*mul(666,399)?mul(354,686)<%why()}#mul(449,25)<{@mul(298,550)'why()*select()mul(39,588)-:mul(255,532)when()from()&~from()-}~!mul(501,122)what()who()/@mul(792,556) >~'@<*$mul(389,684)/<'mul(941,352)<do();-:%*~mul(302,652)how()mul(827,262)>select()-#]what()who()~mul(636,791)*where()&^^'mul(267,79)'!#mul(153,490))>/!mul(429,93)where()?{where()/,mul(481,952)mul(498,420)'why()~;$how(11,770)+mul(40,723)<@do()mul(172,376)how()(%what()what()#do()who(458,15)*who()what(263,940)('mul(36,67)what()why()-do()how()/]what()mul(553,221);})what()mul(768,886)}mul(429,845)#'mul(130,55)mul(550,213)don't()+&'mul(549,688)from()-how(667,895)~>+ @[mul(242,556)~!from()-( mul(553,356)~)}@mul(776,253)?select()how()/?#}+who()mul(132,392)$](/^%from()-/mul(153,281)what()what()mul(413,677)mul(453,733)how()mul(670,617)-!~]* select()?'#mul(140,989)~? [^mul(189,660)$*>$,who()why()&mul(70,862)-^ &-*~why(),don't(){%#<+mul(830,572)$:mul(251,305)from()from()), /?;don't()}why();+from()&]when()mul(57,686)$why()!why()why()?don't()&(mul(541,775)}do();#}^?* @mul(248,215)}({select()mul(9,131)don't()-mul(222,367)?mul(541,161)({{why()@mul(613,749)don't()who()?/)&why()%%mul(970,606)*select()/)from()/}where()select()mul(623,855)//'#*:)>^mul(658,630) mul(692,468)why():when()$mul(791,491)!%~mul(274,776)%;(]'?when(225,182)@what(28,557)[mul(33,589)+'*,+:mul(581,732)select()}?*(~,,mul(221,532)&:>mul(406,25)select()don't() !who()when()@;what()mul(399,473)>how(943,174) ):)mul(30,985),when()/* when()mul(275,577)@$?,+:('@mul(624,769)'where()&(]??$~mul(747,57)-%%/%? }*}mul(562,665)^where();why()#$:,]mul(545,73){from()why()]mul(504,381)>what()why()$%from(53,115)%mul(582where()%[select()<why()>who()'mul(483,928)don't()mul(303,515)<&/mul(940,761)!(/~what(585,344)where()mul(741,802)how(),~[from()%;%mul+,}]])select()mul(653,959))mul(354,159)mul(608,836)when()''who()why()select()why()}mul(167,648)mul(585,942)%who()] (~don't()mul(27,685)^}!where()~<$,'who()mul(509,539)why(){^}from()when()who()+mul(463,984)who()$mul(579,325))?how()] who()-mul(679,71)who()^/,'[~do() )!]!mul(511,894)-+'how()~~;what()mul(845,706)#][^%^what()when()mul(968,989))[,mul(644,209)why()%;where()select()^mul(351,869)~%:]where()#mul(449,265)don't()@(^mul(569,652)why()!how()~<(mul(251,97)how()~*}#&{?;{mul(693,636)what()don't()why()how()when()who()when()'select(277,840)select()*don't()%+how()select()&?mul(232,345)! mul(45,51)*;,~&mul(831,663)$when()'how()do(){>!> when()mul(535,567) +who()@from(){%#where()how(){mul(413,321);[why()from() @;mul(647,475)(~}?+-where()what()what()when()/mul(403,367)when()*@{?]$$mul(883,974)~where():from())why()'-!when()mul;!mul(430,215)*what() '?^}{]what()mul(921,792)[from()when()}what(240,851)mul(792,640)<)^$from()#mul(574,846)$where():[;,mul(543,813)$?]select()mul&[why()mul(550,167)-{$don't()#@[when()mul(439,823),-where()how() [:':*mul(534,346),^mul(781,690)select();@who()'{mul(888,829){(mul(214,861)when(844,270)[from()select()&)&mul(537,154)how(223,646)from()]where(328,122)select()}%^;/]>?)mul(930,63)&,%select()-how()where()~?mul(215,755)*mul(219,137)]how()*select()?%mul(864,539)) #/:/-/mul(179,611)mul(391,430)-mul(913,30)'^ }&mulwhen()who() *mul(46,964)';{how();select()[when()do()[?mul(180,395)@select()select()who()what()don't()select()]'>$mul(290,671)~don't()}*where(14,468)};%what(316,924)?>mul(9,769)where()%,who()'^+&what()@mul(830,738)~!>~>{mul(748,185)]%mul(850,291)>,?+/mul(45,570)#[}who()] mul(164,320)-how():who():mul(46,296);?@-/#;,,don't()why()mul(785,395)?mul(398,117)@mul(340,94)$]select())!:;mul(6,206) *how()($where()+mul(920,649))>%?mul(166,255)where()where():from()mul(271,210)/what(){mul(564,224):mul(513,296)what(404,568)mul(483,797)!?(from()mul(225,16)why())$where()mul(609,630)}]when()(!who(882,295)[what()mul(703,292)mul(816,911)@@ who();mul(272,571)mul(144,283)$~$:;}!>:&mul(691,405)[don't()where()( what()':*]mul(769,350)[?/!select()(:)+mul(16,661)where()&:^what()select()!mul(724,965)mul(256,462)$>&@,>~what()how(626,774)when()mul(819,930)%!@#%&,$select()mul:select()what()@don't()who()%why()~$&)'?mul(899,128){what(){how()do()!(,):what(381,741)how()mul(626,231)how(941,70)]!why()>[who()^}do()!]~mul(145,559),/?from();/mul(52,260)~where()select()*why()!]who()mul(823,108)from();~}/[how()}[!mul(978,24)when())mul(645,292)}< mul(988,213)-%-who()/*%select()/mul(853,489)~: ):?$why()@mul(551,740): what()mul(388,60)when()~mul(862,379){when()where()%+who()>from(533,522),mul(922,276) +mul(759,151),> ;+&mul(583,470) ,:&mul(915,695)mul(464,234)[$>}how()mul(497,706)where()>(:/?^who()*(mul(613,813)^where()from()]mul(932,777) where()]where()how()mul(119,714)/+@+%mul(135,380)why())mul(427,667)[where()$from()*mul(255,4)how()!>-how() what()mul(967,813)*{'}+*-^,don't()'{mul(520,847)from()from(){select()),#mul(828,292)do() mul(866,185)(}from()from()^[mul(810,863)-'what()do()>(/-,$(mul(10,436)[mul(803,717)@?{[why() @]@^mul(982,590)/(%&$select(728,748)^how()^mul(47,419);mul(781,963)@}mul(67,556) *'~mul(242,786)}&?+why(31,93)>@mul(464,770)<{$$(!mul(814what())where()@who()why(408,863)~mul(160,674)when())mul(590,431)mul(781,931)->from()~[;'^'mul(496,694)>)what()-*why()#;-mul(921,65)@#]+/don't():mul(226,608)where()$!+how()#who()]?select()mul(730,950)@'$[)*$mul(563,45)})-where(){select()]what()don't()+mul(943,235)<}:{}/)mul(146,235));[/who()what()select()/([mul(803,289)[/)why(997,896)mul(816,273)+;/mul(547,981)]~!)[{@}{*mul(86,319)#>[ [why()mul(435,211*where())mul(709,58)>:when()what()mul(456,233)@from())mul(204,587)who()$^'$!mul(378,771)mul(714,865)what()((mul(877,397)select()(mul(731,34)what()<>)*from()^mul(380,614)+@why()/*,mul(475,898)mul(966,798)where()how()/,mul(726,964)when();[do()mul(871,365)[%why(); [why(876,114)don't()!what()@'!$when()[mul(831,147)mul(138,465)*select()/{when()~?from(),mul'where(157,142)what() (do()*&mul(365,834@!{[<%;&[what(886,735) mul(807,79)^@;what()mul(433,788){@:* [!:mul(108,43);*'-^~mul(789,645)+}-mulwhat(){ mul(128,276)*why():how()why()mul(133,271)*;(mul(618,659)~select()]{{}^*mul(638,330)who()$when(674,618)mul(908,588),?&~from()/#why()mul(552,454);*from(),mul(615,472)why()#~<~mul(594,691)-mul(23,914)mul(230,641)/where()mul(63,728)mul(810,461)?mul(569,651)$#mul(822,175)^how(677,189),{{?where():%)mul(213,296)(@why()mul(796select()(+$mul(465,480)from()?/ <%who()?{mul(471,797);{who(),~-mul(596,891)~/?(mul(900,127)[' mul(266,693)%%why(),mul(155,347)mul(2,759)from()%mul(523,244)how()what()>*@mul(277,553)'[]how(836,466)$mul(786,297)#why()^~:mul(205,507);?select()where()from())mul(123,841)how()-what()select()@#{#]'#!/usr/bin/perl(?^select()&#where()mul(387,218)how()why()select()what()&^>:<*mul(48,9) ^!!select()^}[mul(133,330)?how(571,913)?mul(163,966))?{mul(366,101)#$mulwhy(32,414)>%;?$^mul(721,586)mul&#*$what()[~ '&mul(375,533)mul(342,13)+!where()'mul(568,71)^]~mul(943,549)}?why(842,232)mul(922,154)select()>$don't()why(999,551)why()mul(781,791),%)select(832,592)]~when()+mul(324,528)$select()-:< ?:+mul(553,150),$<}:$-what()-+mul(932,810)%from(106,776)/ +];mul(83,53)-(,when()where()mul(115,873){&+mul(357,798){#@mul(876,690)why():mul(148,662)+!%@mul(512[how()];mul(122,41)*when()who()select()mul(452,727)]<:mul(336,312)&(}#^[mul(511*what()??~#(:(mul(97,35)(how()}+(+:mul(22,515)/:;#what(953,388)]mul(880,608)%why(64,210)-]!}from()?*mul(690}from()<~select()?><@ mul(444,747)[who()select():/@from()where()how()who()mul(680,790)*mul(208,716);*[-#from()why()from()]*mul(563,604)^-*mul(176,677)^;how()who()$([]mul(11,556)when(733,129)&//%when(129,614)(&mul(134,249)}{'('?select()select(453,909)mul(342how()'(mul(678,629) >'mul/what()/%mul(6,656)+^~(}how()where()['mul(636,232)'from()mul(409,258)@mul(758,574)mul(721,278)~mul(699,927)<^^?^<*[mul(446where()why()[!when():mul(946,616)@!mul(192select();~@;where(940,901)who()/mul(62,543)^who()!from()from()mul(78,502)-who()%{]&(mul(233,954)mul(163,156)!#]#:,}where()mul(403,223)$#'( ~&&~(mul(509,885)^why()*?:/select()#why()mul(826,143)>mul(804,695)what()from(770,634)why()%how()%&>mul(149,604)>do(),[{mul(441,285)?select()from()]mul(75,868)';mul(118,644)#:[:(*#mul(4,371)$mul(622,537)$&>&#(~/*^mul(857,96)(why();,$how()mul(29,888)){;^;from()*<)mul(741,192))$^ &what()~don't()why()+mul(299,631);[from()what()$/~/mul(540,656)(where(39,548)(what()what()@select(){{'mul(700,74)]when()>mul(382,924)>mul(426,551),mul(919,582) +<%>::mul#}@mul(294,775)^$,from()mul(331,246)&how()mul$&:+@mul(883,736)?from()select() (<^]$$mulwhere()?-;?mul(943,7)$mul(177,555)- mul(513,284)mul(660,648)^-mul(641,291)[%;why()mul(592,514) mul(66,46)how())how()/>what()'+/don't()} ~when()how(264,139),(mul(894,155)>[!what()-mul(901,591)@(mul(916,689) ^/$mul(75,541)how()where(404,116)*-+!mul(832,727)%)^^ #(&^do()](why()mul(740,164);$>*mul(89,249)!}mul(32,185)how()mul(28,824)},select()&>,mul(506,528)%who(){select()(when(763,794)-what()mul(665,939)how()/@[$@when())how()mul(114,937)];when()}#mul(655^]where()$from()mul(706,357)where(512,859)/%$ ?mul(13+}(+where();[->mul(476,267)what()how()when()why()from(321,201)~)!;what()mul(94,991)~[~;;'>(%mul(952,295)%[!>mul(120,25)mul(421,23)&>(,,&who(762,481)-^when()don't(),{mul(371,529)%how(913,59)%?+who() ':don't()mul(474*+*,where()from(116,228)mul(328,38)[*{;;mul(978,96<{}@how(983,94)%:mul(132,147)where(10,901)where() :~@mul(610,431)mul(888,304)select()' from()select()mul(256,81)how()when()why()mul(644,801){,?~<~!select()mul(46,359):]>:;)/,[what()mul(100,505)%$[mul(9,449)*~;,??,mul(522,361)$&}why()-from()>>mul(591,388),?*^select()from())don't()~[*/what()}mul(791,491)who()}]%]mul(249,418)^>+'&mul(352,614}{(;*,what()&what()+what()mul(260,957)when()-+mul(288,562)how()]-who()~]*>%do(){mul(375,414)^mul(251,565)+ (mul(991,687)(mul(352,56)(select()mul(337,520)%:@^-how()-mul(602 what()&who()when()!@<[mul(553,348)what(),mul(548,164)why()when()>[!*'[mul(942,713){why()}~-%@&-+mul(586,995)@,>'(mul(382,494)><$({select(4,131) '-mul(109,2)'<'mul(704,332)why()why()$when()>why()mul(540,890)how()#:(mul(769,655'>how() %/what()where()])mul(582,19)where()>who()mulselect()select()mul(131,795)(mul(232,91)!&-@mul(198,512)+-%don't()>/<]when() [mul(914<>}~<#>]?$mul(312,367)(how()why(){mul(617,443)*/? }&where()select()mul(616,699)mul(701,770)mul(825,157)]when()^mul(392,162)'#&don't():}select()@mul(693,146)#-mul(603,425)!}select()where()@why()-select() when()mul(933,229)@?'?+mul(884,557)what()]when()}why()mul(847,524)mul(90,328):}why()!mul(81,395)do()when()how())who()}who()when()mul(629,441)& !}); )~mul(692,721)how()#{^@':what(869,405)>mul(608*from()+mul(676,426) />mul(486,902)((/*>,%}what()mul(77,932)^* @%~ mul(488,898)mul(107,555)?select()who()who()when()where();?@;mul(337,733)@mul(480,439)who()how():[#+mul(794,629){%&why()@mul(82,847)+from()^^)!($mul&how()[;select()what()what()(mul(241,602)select(440,433)){/why()who()+^don't()%$ ^mul(859,377)]when()% do()?{}~?where()mul(720,748)#,'/mul(536,697)where()}}mul(713,265)mul(899,349)why()&who()when(828,656)&/mul(689,501),from()/[^++;'%select()do()*%%[ mul(621,611)mul(670,589)who()who()?@$-+what()%~mul(557,904) *:who()mul(820,300)how()>!@/-;:&why()mul(240,283)~>);'mul(444,495)what())mul(742,891)how()'?/from()']don't()%--&!{mul(649,766)<[]'@mul(335,976))&($&}?+how()>mul(989,639), {{$*?%,don't()how()mul(52,7)~[select():@who()mul(612,144)<^what()) what()mul(962,579)[%mul(516,604)mul(123,70)(;#mul:select()<},,#:what()mul(796,875)<-{}what()@select(),mul(55,775)]^+why()((mul(959,950);mul(364,829)/$<'&,}what()@mul(894,605)who()mul(892,921^why()(/>)why()*$mul(862,234),)$#who()mul(336,132)+how()&how()}-select()don't()>why()mul(759#mul(953,908) select()mulfrom(323,14)where()mul(901,400)when()who()':*why()select()?''mul(865,372)@[&~ why()[][mul(580,503)from()%^from()!//*#>#mul(274,231)what()when(770,166)from():& how() when())mul(216,599)when()who()&([mul(851,919)when(),%:($#?mul(649,177)#who(938,710),)mul(928,772)^]''!){<~mul(731,905)where()^what()[mul(310,145)why(250,443)/mul(807,828)mul(501,389)){[how()when()?[mul(637,203)?mul(966,499)&}@][@mul(24,625)~^mul(766,214)mul(836,146)&@ what(){;>)mul(466,455)''!>~'why()mul(253,978)mul(723,145)(@*]%{don't()/}([mul(858,196)[>{,^mul(418,456)how()who(){mul(779,669)/&,when()- how()/~mul(905,147)]#mul(499,880)mul(477,925)}>$[%%who()[,;mul(217,810)mul(344,973)-why()from()^mul(196,594)$mul(560,262)*,select())mul(324,357)what()when()mul(231,72)#from()mul(116,627)how()mul(659,509)+]mul(106,630)#~mul(481,665)?*&$-'mul(150,502)how(){${>#( mul(45,905)where()what()+!mul(701,728))@what()mul(930,711)%[[[mul(168,338)when()'mul(81,753)mul(977,451)!mul(515,907)why()who();-who(189,693)-!{mul(79,142)why()(mul(670,117)*> mul(301,392)@<{select(471,161){mul(181,97)what()from()^when()@mul(647,950)@mul(16,793)>why();when(375,63)]mul(726,704)$who()where()+select() mul(916,402)*who()<,[where()$:how()mul(499,261)where()+#%why()'%,mul(483,12)&[@(what();:)@@mul(657,770)'>()'@select()!when()mul(965,20)how() diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_4.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_4.tst.data new file mode 100644 index 0000000..567602b --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Input_Day_4.tst.data @@ -0,0 +1,140 @@ +AAMXMSMMMSMMSSMMXMASMAMXXMAMAMXXMASMXMXXMMMXMMXMAMXMXSMMMXMXSAMXSASXMAMXAMAMXSXSSSMXXMASAMMMMASXMAMXAMXAXMASXMASAMXSSMMSAMXAXXAMMXXXXSMAAMAM +SMSSMMMAAMAAAAAXMAXAMAMXASXSSMMSMMAXAXXASAXAAXSMMSAMMAAASXSASASAMXMMSAMXMMAMMMAMMAMAXMXXMMSAMMSASASASASAXMMXXMASXMASAAAMAMXXMAMXMMMXXAMXXMAA +MAAAAXSMSSMMSXMMXMSSSMMXMAXAXSAXASMXMMSMMASMSMXAASAMAMMMXAMASMMAMXMASASAASAMAMAMSAMSXSSMSXXAXAXAMASAMAAXMMAMXSAXMXMSMMMSSMAASMSMAXAASAMMSSMS +MMMSMMMAMAXAMXMSAMAMAMMSXMXMMMXMMMMAAMMXMMMXAMMSMSMMXSAMMAMAMASXMAMXSMMMMSAXXSSXXASXMXSMXASXMSMSMXMAMSMSMXAMMMAXMAAXAMAAAMSMAAAMAMSMMAAAMAMX +SXXXXXMAMSASAXMAXMASMMAMAXMXASMSMAMSMSMAXSASMMAAAMMMASAXSAMMSAMAXMXAXXMAMMAMXMMMSSMAMAMMMMMXAAAAMAMAMAAXMXASAMXASMSXAMMMSMAMMSMMXXXASMMXSAMX +XAMMMSSSSXAMMMSAMMXMMMAMMMAMSAAAMSXXAAXAMXMMXMSSSMAMXMMMSASAMASMMSMMSMSASMAMXAMMMAAAMAXSASAMXMSMSASASMSMMSASMSSMXAXXXMXXMXMMAMXMMASAMMAMSMSS +XXSAAXAMXMMMAASAMSXSASMSSXSXXMSMSMAMSMMXSSMXXXAMAMXXMAMXSAMXSAMMAXAMXAMAMMAMMXMAMXMMMXMSASXSXXXASMSXSAMXXAMMAAAXMMMXXSSXMASMMSAMAXAAXMAMXAAM +XASMSXXMSXMSMMSXMAXSAMXAMAXMSMMXMMAMXAXXXMASXMXSAMXSSMMMMAMAMXSMSSSMXMMSMMXSMMSSSMSSXXMMASASXAMXMAMAMAMXMASMXMXMAMXXMMMXSAMAASAMSSXMMSXSMMMS +SMXAXMAMSAMXMASMXSMMAMMAMXMASAMXMSAMSAMSAMXMAAXMASMXAMXXSMMMMMMXAAAAXXAMASAAAAAAAAAXSAXMXMAXMMXAMXMAMAMASXMXMMASASXXMAAMSAMMMMMMMAASAMXXAXAA +MXMXMSSXXAMXMASAAXMXSMSSXMMAMAMAXMAXMAMXAMSSMMMXMMXSXMMXSMMASAAMMSXMXMMSAMSSXMMSMMMSMXSAXMSMMMSMSAMXXAXXSMMAMSASASAMSMSXSAMMSXMAMSMMASMSMMMS +SSMMXAXAMSMSSSMMMSAXMMMXAAMSSXMXSMMMMSMXAMXSAMSASMXMMMSAMXSASXSXAMMMMMAMXXMXMAMXAMSMMASMAMAAAXAAAMSMSSSMSASAXMAMMMMMAXMXMAMSMXXAXXASAMMAXXXX +XAAXMMSMXXAMXMXAAMAMMASMMMXXAASXSXAAXMAXMAMXMMMAMXXMAXMAMMMMSMXMMSAAAMASMSASMSMSSMAAMAMSAMSSMSMSMXAAAAAASAMMSMXMXASMMSSMSMMAAMSSMMXMAXSAMMSM +SSMMSAAXAMAMMMXMAMXAXAMAAMXMSMSAMXSSSMAXXAXMSSMAMSMSSSXSSMAAXAMAASMSMSMXAMAMAAAAASXSMMMSXMAAAXXAXMMMMMMMMAMXAMMSMMSAMMXAAXMMXMAAAXSSSMSAMXXA +MMSAMMSMMSAMAMXMAMXSSMXSMMAAAXMMMAMAMMAMSMMAAXSXMXAAAXAAAMMMSXSMMSXMASAMSMSMSMMMMXMAMXAMMMXSMSSMMMXMXXMXMAXXASASAMXAMXMXMSXSXMSSMMMAXAMXXMAS +SAMXSAXAMAXSSMSAMXAAAAAXASXSAXMASAMAMMAMAMMMSXMMMMMMSMSMMAMASMXAAMAMXMAMMAMXMASMSMSSSMASMSXXAXAXASXSMXSASASXXMASMMSMMMXSAXAMXMMMMXMAMMMMAMAA +MAMSAMXAMXXAXASAMMMSMMMSAMMXMMSASASMSSXSAXXAXAMASAMXAAXXXXMAMMSMMSXMXSMMMAMAMSMMAAAAAMAAAAXMXMMSMSAAAASAMASXXMMSAAAAAAMAXMAMSXMASMMMXAXSSMMS +SSMSAMSAMXMAMMSSMAAAXMXMAMXXAAMAMAMXAAMSXMXXSSMMSASXMSMSXMMMSAAXMAAMASAASMSSXMASMSMSMMMSMMXMAAXMAMMMMMMAMAMXXMASMXSSMXAMXMXMSAMAXXAMMMMXMAMX +MMAMAMSSMMAAAXSAXMXMMXAMAMSSMMSSMMAMMSMSAMXMXAMMMMMAMMAXAXAAMMMSMMSMASXMSXAMASMMXXMXMAXAAXXSMSMMSMMXMAXAMAMXMMMSMAMMMMSXXASXSXMAMSXSAMXXXAMX +AMAMMMMXMASXSSXMMSSMSSMSASXAAAAAAMAXAXMXAMAAXMSSMSSSMMMMSXMASAXXAXXMXSXMMMXMASASAMXMSMXSXMMMAXMMMAMXMMSMSAMASAXMMMSAAXMXMASAMMMXXMASMMAMXSSM +MMASAAXMXMMAMMMSAAAAAAXSMMXSMMSSMMXMASMMXSMSMXAAXMAMMAMAMXMMMMXMAMXMAXAXMASMXSAMXSAAXMAXAXSMAMAAXMMAAMAAMXMMXASXXXMMMMXXMASXSAMMAMXMAMXSAAAA +XSASMSMMMAXMSAAMMSMMMMMMSMXXXAXAXXMASMMAAXAAAMSMMMMMSAMSXSAAAXXASMSMXSMMMSAMXMAMXMASMMASAMSMMSSMSSSXMAMMMSXMSAAMASXAXAMXMMSXSASMSXMSXMAMAXAS +XMASAXASXMMXAMMSAMMXAMAMMSSMMSMSMSSXMASMMMSMSMMXXAXXMXSMASXMXSMXXAAXXAASXMMSMSAMXMMMXMASMXMAXXAAXMASAMXSAAAMAMXMAMSMSSMASMXAMAMXMAXXAMASMSMX +XMAMXMAMMAMXMXAMAMXSXMASXAXMAXAAAMXMMAXXSXXSXAAAXSXSXMXMMMMSAAMAMMMMSSXSAMAAAAAMAXAMXMASMSSSMAMMMMMMSXAMXSXMMSSMAMAMXAMASMMXMAMASMMSXMAXAAMX +XSASXMAMSAMAMMMSAMXXASASMAMMAMMMMMAXMMXXSAXAXMMMMMAMMSSXMAAMMXMASAAXAAMMAMMMMMMXMXMXAMXMMAAMXSMSXSAAAMMMAAXSXMASXSMMSSMXXMAAMAXXXXXMASAMXAMS +MSASXSXMXASAXAASASAMXMASMMMSXSXXASMSMAMSMMMMXSAMSMAMAAXAMMSXXMAXSAMMASXXAMXSSMSXXSAASAMXMMSMXMAXAXMSSXAXSMAXASAMMAAAAAXMMMMXSAMSSMASAMAMXAMX +MMMMMMAMMMMMXMXSXXXAXMXMXSMSAMASMMMXMAXSASAXMSASMSMMMMSAMAXXXMXXMAMSXMASXMAMAAXAAMAMXASXMMAMAMXMSMAAMMXXASMSMMMSSXMMXSMAXSAMMXMAAMAMXMAMSSSM +MAMAXXAMASXMASMMMSASXMXMAMMMAMAXMSSSSXMXXMASAMXMXAXSAAXMSASMMMMMSAMXAXMASMASMMMMMSMMXAMMAXSSXSXAMXMAXAXSAMMAMAAMAMSSMXASAMASAAMSSMSAXMXXAMAA +SASMXMASASASXSAAAAMMASXMSSMSSMMSSMAAAMMSSMMXAXMSSSMSMASMMAXXAAAASMSSMMMAMXXMASXMAAAXMMMSSMAMAMMMMSMSMSAMXMSSSMSMAMAAAMSXMSAMMMMMXXMASXXMXSMX +SXSAASMMAMXMASXMSSXXAMAAAXMAXAAXAMMMMSAAAAMSSMAXAMAMXMXXMAMSMSSMMMXXXAMASXMASMSASMSMSAXAMMMMAMAMMMSMAMXAAXAAXMAMMSSMMMXAXMXSMMSSSXSXSAMSAAXS +MASMXXAMXMSMXSAMXXXMXSMMMSMMXSAXMMSAXMMXSMMAASMMSMMMSMASMSXMMAXAASMSSXXAMAXXMAXMMAAAXMMMSMXSMXAXASAMAMASMMSSMMAAXXAAMXMAMXAXAAMAMAMAMMAMASMA +MAMMMXSXSXAASMAMXMASXAAMMXMXAXMXSASMSMSAMAMSXMXAAAAAAMAMAXMAMMMMMMAMXMMSSMMXMAMXMXMSAMAAXMAMASMSMSASXSAXXAAMAMMSASXMMMSAMAMSMMSAMAMXMAXMMMXX +MASAMMMAMMMXAAAMXAASXXMMMAMMASXXMASASAMASAMXMXXSSSMMXMAMMMSMMXSAXMAMMXAXAXMXAAMXMXXMMSXSXMXSAXAAASAMXMXSMSAMSXXXMXAXXASXSXXXMASASXSXSXXSAMXS +MAXASAMAMAXXMSMSXMASAXSASAXXAMAMMXMMMAMASASAMSMMMMMSSMXSXAAAMAAMSXMSAMMXMAMSSMSXSAXMASMMMMMMXSSMMMAMAAMXXMAMXXAMXXMMMMSASASAMAMXMMXAXXMSASAM +MSMMMMXAMMSXMAAXXMAMAMMASMSMXSAMXSAXSXMASASASAAAAXXAXMAMMSXMMASXSAMXXAMASAMAAAAAXMMXMXXSAAXXMAXAXXAMSXXSASAMAMSXSASXMXSAMAMXMMSMXAMAMMXMXMAS +XMASAMSSSSMMSMMMXSXMSMMXMMAMXSASXSAMAXMASXMXMMXMSSMSXMASMMSMMAXAMXMAMXXASASMSMMMMSMSMSASXMSMAMSXMSSXMMASXMMXXAAASAAXAAMMMSMMMSAMXSAXSAMXMSXM +XSMMAXAASMAAXMSSXMAMAMXSASASASAMXMAMXSMXSASXSSSXAAAMSMXSAAASXAMXASMMSMMASAMAMMASXSMAAAXMASMXSXSAMAMAXMXMASMSSMMXMMMMMMSAAAAAXXASAASAMXMAXMMM +AMXSXMMXMMMMMAAMASMMSXXMASASXMASXSSMXXMAMXMAAAXMMMSMAXSXMXMXMXXMAXAAAASXMMMXMSAMMSMMSMMSXMAAXXSAMAMAMMMSAXAAMXXAAAXXMMXMMSMMSXSMMSMMSASXXAAS +SXASMMSMXMASMMASAMXMMAMMMMAMAMASMAASXAMAMXMMMMMAXXAMMMMASXXXSAMSSSMMSMMAAXXXMMXXAXAMXAXXXMMSSMSMMASASAAMMMMMMSSSMMSMASXMMXAMAXXAMXAXXAMSMSAS +AMMSAAMAXXAXXSASASAMSAAXSSMSMSMXMSMMSMSAMMSSXMXSSSXXSAMAMAMMXAXAAXXAMASMMMMMXASXSSXMASMMXMAMAAMASMSAMMMMAAAAXMAMMAAMAMAMASAMAMMAMSMSMSMAMXAX +MXSXMMSMMMMMXMASASAXSSXMAMAAAMXSMMAXAMXAMAAMASAMXMMAMAMMXXMSASMMSMMXSAMAMSASMXSAAAXSXASMAMASMMMMXAMAMSASMSSSMMAMMXMMMSSMAMXMAAMAMAAXAXMMMMSM +XMMMSASAMXAAMMAMMMMMXMSAMMSMSMASAMXMASXMMMASXMXMASXSSSMSSMXMAMXXXAMAMXSXMMAMMMMMMMXMMSASMSAXMMXXMXMAMMAMXAXMASMMMAXAAMXMASMSMSSSSMMMMMXXXAMX +MAAXMASMMSMSSSSXSAXXXMAMXXAXXMMMAMXMASXXASMSMMMSMMSXAMAASAAMSMSXSXMAXMMMSMSMAAXAAXAXMXASMMMSAMSAMMSASXSSMXMSASAASASMXXAMAAXAAMAAAXXASMMMMSSS +MXSSMAMAAAXAAAMASMXXXSASXSSSMSMSAMSMXSMSXSASXSASAMXMAMSMXSASAAMMMMSMXMAAXAMXSSMSXSMXAMMMAAXSAMAAXXAXMAMAMXXMASXMSMMAMSMXSASMSMMMSXXAXSASAMMM +SAMXMASMXSSMMMMXMMSMMMASAAXAAAASXMAMAMAMASAMXMMSAMXMAXMAMMMSMSMAAMXXAXMSMSMAXAAXASMSMXASMMMXMASMMAAMMSMMMMXMAMAXMASAMAAXMAMMAMSXMAMSMSXMASAS +MMSASMSAAXMMMXMXXAAAAMAMMMMMSMMMSXMSSSMMXMAMXMASXMAXMAMXMAAXXMMSMSAMXSAAAXMAMMMMAMAAMSMSMMMAMAMAXMMAXAXXAXSMXSXMAASASXSAMAMSSXXAMXMAASMSXMAS +XXMXMMMMXXAAMASMMSSSMMASXAXXAXXAMMXAAAMSSSSMSMASAMXMSASASMMSMSAMXMASAAXXMXMXXXAMAMMMMAXXAASAMAXMMXASMMXSMMAXAXMXMMSXMAMMMAXAMXSMSSSMXSAMXMAM +MSSMSXXMMSSMSAXAMMMXMSASXSSMMSMXSAMMMMMAAMAAMMMXAMAXMASAMSAAAMAXXXMMMSMMXMASMSMMXXASMSXSSMMXSSSMSXMMASMAMMMMMXAMXXXMASXSSSSSMMMAAASXASXSAMXX +AMAAXMXSAAMXMMSSMSAMXMASAXXAAXMAAMXXASMMSMMAMMMMMMXMMAMMMMMSSMSMSXMASAXXAAXAAAAXSXMSAAAXAMSAMAAASAXMAMXAMASMSMMSXMXMAMAAAAAAMXMAMSMMASAXASXX +SSMMMSAMMSMAAMAMXMASXMXMXMMMMXMSSMXMXMASAAXMAMMAXSMMMXSMSSXXXAAAMMXXSXXXXSAMXMMMSAMMMMMMAASAMMMMMXXMAMSMSMSAAAMSAMXMASMXMMSXMAMMXXAMAMAMSAXA +XAAMAMASAMXMMMASXSAMXSXSASMXSAMMAMMSMSSMXAMMXASXXXAAMMMAAXSAMSMSMSMAMMMSAMXSXAAAXAMXMSSMMMSAMMXSAAXSAMAAAXMXMXMSAMXMASXMXMAASAMMAMAMSMMMXAMM +SSMMXXMXXMASXMASXAXXMMAXAAAASAXMAMAAXXXAXSMMXMXMASXMSAMMMSMXMAAAAAMAMAXAASAMXSMSXMMXASXAXXSXMSAAMSXMASMXMSXAXSMXXMXMXXMAAMXXSXSMMMXMAAAAMMMM +MAAXSSSXASASAMASMMMSXMAMXMMMSAMSSMSSSMMMMMAMMXMMXMAASMSMXMAASMSMMXSXXSSSXMASAMXMAMXMSMSXMASMMMMSAXMSMMXSXSAMXAMAMSXMMSASMXSAMASASASXMSMSXMAS +SSMMSAMXMMXSAMASAXAXXMASMSMXMXMXMAXMXAAAAMAMSMSMSMMMMAAXSMXMMAXXXMMXAAXXXMSMMSAMAMXXMXAMXASMAAXMAMMXAASAAXXXXMASAMASASAAAAXAMMSAMMASXXAAMSMS +XAMXMMMSXAASXMAXXMSSXSAXAMXMASXMMSMSXSSXSSMMSAAAAXAAMXMXMAAMSMAXXAAMMSSSSXAAAMASMMMMMMMMMMSXSXSXSXSSSMMMSMMSSXMMSSXMAXXMMMSAMXMXMMAMMXMAMAAM +SXMXMXAXMMXSSMMSSMMXASASXSAMASAMMAMXAXAXMAMAMSMSMXSMSAMXMAMXAMMMMMMMXMXAMMMMMSAAAAAAAAAAAXMAMSAAMAMAAXMXAAXAMASAMXXMMMMAXMXMMMMMXMAMSAMXSMSM +XMMAMMXSMXXMASAAAAMMMSAMASMSASAMXSAMSMAMSAMMMAMAXMAAAXSAMXXXXSASAMXSXMMMMSMAXMASXSSMSSSSSMMAMXMXMAMAMMMSSSMMSAMMSAXSAAMAMXXSASASASXMXAMAMMAM +MSSMSAASMSMMAMMSXMMAXMAMXMASXSXMAMXSAMXMAXMAXASASMMMMSAMXSXMASASXMMAAMMMAAMMXAMXAAAAMAAMAASMMXMASXSASXXMXAMXMAXSXMMSXSXAXMASASASASMSSSMMMXAM +AXAXMMXSAMXMASAMAXSSMSAMXMMMMMMXAMMMMXAMXXXXSXMASAXXXXXXAXSAAMMMXMSSSMXMSSSXMSAMMMMMMAMMMMMASAXMAMMMAMXSMMMASXMAAXAMAMXMSMMSMMMMAMAXAAXAAXSX +SSMMXMXMMMXSXSASXMMXAMMMMMAAAASMMSASAASMMMMMAAXXMXMMMMMMMSMMMSMAAXXAAMSAAAXAAMASMAMAMSMMXXSXMAXAMMSSSMMSAXMXSAASXMMSAXAMXAAXAAXMAMMMXMMMSXMA +MAMXSASXXMXMMMMMAAAMXMAAXXSXSMSAMSASMXMAAAAXMSMXMXAAAAAASAXAAAMMSSMMMMSXMSMMMSAMXAMAXXMXSXAAMMSSMXAAASAMMMXMXMMMMMASMSMSSSMSSMSSSSSMSMSXMAMX +XAMXMAMMAMXMASASXMMSSSSSSXMAXXSAMMMMMASXMSXXAAAASXMSSXSXSASMMMSAMMASMASAMMASAMASMSSMMASXMASXXAAAMMMMMMMSXSAMMXAAXXMXAXAAAAMXAAAAAAXAAAXMMSMX +SMMAMAMXAXASXSASXASAMAAAXMMAMASXMMXXSAMAMAASMMSMSAMAXMXAMMMXAAMASMSAMASXMMAMXXAMAMAXSXMASXMMMMSSMAXSMSXAXSASXMMMMMMMSSMMSMMSMMMMMXMSMSMXXAXS +AAXXSXMSMMASAMXMXXMASMMMMMMASAMXSXAMXMSSMMMAAXXXSXMAXXMXMXAMXXSAMXMMMXSXSMMMSMMMAMXMAMSAMAMXAAMAXXSAAXAXASAMMSMXMAMAAAXAMXXXMXXMXSAXAAMXXMMA +MSSMMAXAMMSMXMXMAMSMMXMAASMMSAMASMMMAMAXAXXSSMAMMAMMMSXMMMSSMXMMMAMXSAMAMASAAAXXMSSSMMMXSAMXMSXMMSAMXMASMMAMAAAASAMMSSMXSMMMSMMSASMMSMSMAXAA +XAAASAMXSXMASXMSAXAXSXXMXSAASXMAMAASAMASXMMXAXMAMMMSAMXSAAAAXMAXSASAMASXSAMMSMSAAAAXXXMMSASMXMASXSMXXMASXSXSSMSMSASXMAAXMASAAASMASAMXXSMSMSX +MMSXMAAAMAMSMXAMMSXSMMSSXXXMMXMXXSASXSXXAASMMMSSMMAMAXAXMXXXMSAMXXMAXXMXMASMAAXMMMSMMMSXSAMXAMSMAXXMXMMSAAAAXXXASMMMSAMXSXSSMSMMXMMXXAMXMXXS +SXMASXMXMAMXMMSMMMMMMAAMAMSMSXMXMMASXSMSSMMAXMAXAMXXAMXSXSAMXMASMMSSMASAMXSMMSMMAXXASAMXMAXSMSMMMMXMAXMMXMXMXSMMMAAXXAXAXXXAXMMSASXSMAXXXAMX +AASAMMMXSASXMAXMASAMMSSMAMAAXAAMXSXSASAMXAXXMMASMMSXXSAAAXMAXSAMAXAAMAMASXSAMAASASXSMASMMMMAMXXAAXMSXSAMXMMMAMAMMSMXSSMMSSMSMMASXSAASAMSMSMX +MMMMXAAAMAMMMSXSAMXXAAAXSSMSMMSMMSAMXMAMMSXSSMAXAAAXAMMSMXMAMMMMXMMSMSXMMXSAMSMMAMXXMMMMASAASXMMMXMAMXMAMSAMASAMMMSAMXAXXMAMXMAMMMMMAXMSAAAM +XSASMMMXXAMAMMAMXSXMMXXMXMAMXAXAAMSMASMMAAXSXMSSMMSMXMAXXMMXSAMASXMMAMAMXMSAMXAMSMMMMSAMMMAMMMSSSXMXSAMXAMASXXAXAAMXXSAAMMAMAMAMAAXMXMXMMMSA +SMASXMASXMSASMAMSAXSSSSSSMSMMMSMMSMXAMAMMSSMAMXSXAXMASMSSXMAMAMXAAAMASAMXAXXMXXMXAMAAMAMXSAMXXAAXXAAMAXMMSXMAXSSMMMXAMMMSSXSXSASMSSSXMASAMAX +XMAMXMASAASASMMMXMMAAAAXMAMAAAAAXMXMASAMXXAMXMAXMAMMMXMAMAMASXMMMMXMXMAMSSMXXSSMSXMASXXMAMMAXMMSMMMASXMMMAMXMMAAXSSXSXAAMMMMMMMMAAXMASASASAS +XSAMXXAMMMMXMXMMMXSMMMMMSASXMMSMMXMAXSASXSMMXMMSMSSMAAMASMMMSAAAXXXXMSAMAASXSMAAXMSMMASXMMSSXXAAXMMMAMAMAMMSXXSXMXAAMMMMSAAXAAMMMXMSAMMSAMAS +MSAMSMSXMXSMMXXAMMASAMXAMXSASAMXSASXMMAMXAMXMMAAAAAASXMASAAASXMMMAMMMSAMMXAMAXMMMAAAXAMASAMAAXSASXAXXASAMSAXMXMMSMMMMASASXMSSXSASMMMMSAMAMAX +AMAMMAAXSAAASMSMSAMXXSMMSAMAMXSMSASXMSAMXSAAAMMSSSSMMAMASMMXSMMASAMAMMMSSMMSSMSSXSSSMMSXMASMXMMAXMSMMMXAXMASXAXSAAAXSAMAMXXXXASASAAAAMASMMMM +SSSMMSMSMSSMMAAAAMXMXMAXMASXMMMAMAMXMAMXAMMSXSAMXMAXSXMASAMMXMSAXASMSAAAAMXMXAAAMXMXMMAXXXMXASMSMAMAMXSAMXSXMMXSASMMMAMAMSMSMMMAMMMMSMMMAASA +MAMXAAXXAXMASMMSMSAAAXXMMMMAAXMAMAMMMAMMXMXMAAXSXSMMMAMXSAMSAMMSSXMAMMXSXMAMMMMSAMXMASASXSMSXSAAXMSSMXMSMXXAMMAXXMXXMAMAXSAMXASXMASAMASMSMMS +MAMMSSSMSMMASAAMASMSSSMAAASXMMMASXMASAMMAASMAMXMASAMMSMAMXMSASAAMAMMMSAMXSSSMSAMXSAAASAMXAAMMMXMMMAMXAAXXXMAMXXXMMXXXAMMMMSMMASMMXMASAMMAAAX +SMMMAXXAAAMAXMMMAMMAAAXMMMMAAXSXXXSMSXSMSXSASXSMAMAMAXMMXMMMAMMXXAMXAMASMSAAMSXMASASXMAMSMMMAMAMXMMSSMMMMMSAMXMSMSAMXSMSAAASMASASMMMMMMSSMMS +AMAMMSXSSSMSSSSSMMMMXMMSSXSMMXMSMASAXAAAMAMXMAXMAMSMASASAMMMSMSASXSMMSMXMMSMMMMMMSXXMSXMMXMSSSSMMSAMASAXAAXAMMMAMMXSAAASMSMXMASMMAMSAAXXMASA +MSXSAXMAXAMMXMAAASXSAAAAAAAXMXAAMAMMMMMMMAMSMXMMSAAMXMASASXMAAMAXXAXMAMMSXMSAAASXMXXASAMMAXMASXAAMASAMXSSXSXMAXAMXMAMMMMMXMMMASMMAMSSMSMSMMM +XXAMMSMSXMMSXSXSMMASXXMSMMMSAMXMSMSXXSAMXXSAMXXAMXAASMXSAMASMXMMMXSMSASAXAASMXXXAXAXMSAMSSSMMMSMMSAMASAXAMXXSMSMSMMAMXAAXAMXAMXASXMXAXXAAXAX +MMMMASXXASXSAMMXAMXMSMAXMAXXAMXMAAMAASMSMXMAXXMXSXMAAXXMASMMAXSASXMASMMXSMMMAMSSMMAMXSMMXMAMXMASAMXSAMMMMSAMXMAAAAMASXSSMMSAMXMMMMXSAMMSMSMS +MAAMXXASAMAMXMAMAMXAXMAMSXSXAXMSSSSMMXSAXXSSMSXMXMSMMXMMASAMXMXASAMMSXMAXAAMAMXAAXAAMMXXAMSMXSASMSMSMMMAXMXSAXSSSXSMMMXMAAAXSASXXSAAAMMAAXAX +SSSSSSXMMMAMAMMSSMMMMMXXXAMXXMMXMAXXXXMMMMAXMASMMMASXAAMASAMMSMXMXMAXAMMSMMSXSXXMSMXSASXSMASXMAMMAAXSAXSMMASAMXAMXSMMSAMSMMMMXSAAMASAMXMSMAM +XAAAXXAAXSSSXSAAAMMSAMMAMXMXMASAMAMXMXMAXMAMXMXXASMXSMSMMXAMAMMSMAMMXXMAAAXSAMXSXXMAMMSAASMMMSSXSMSMMMXMAMAMMMMAMAXAASAXMAAAXMMMMMXMMMMXMASM +XSMSMMMMMMAAAMMSXMASAMSAMASAMASXSAAMASMSXSASXSMAXMXXSXMASMSMXMAAAAAXMSMSSSMMXMAXXAMXSXMMMMXAXXAASAMAXMAMAMXSSMSMMMSMMSMMSSMXXAXSXSAMXAAXXXMA +AXXAAMMSASMMMXAMAMXSAMXASASASXSXMAMAXAAAASMXAAMSSMMMSASAMXAMMMSSSXSAAAAMAMAXMMASXSMSSXMMSXSMSMMMMASXMMSSSMMXAAXSMMMAAXAAXMSSMXSAMXAMXSSSMMSM +SSMSSMASASXSXMASAMAMMMSXMMSAMASXSMSXSMXMASAMSMMAAMXASXMMSMMSAMMAAAXMSMSMSMSAAXAMXXMMSAXASMMASAMXSAMXSAMXAXXSMXMAXXXMXMMMSAAXAMXMSSMMMXAMXAAX +XAAAMMMMXMMMMSAMAMASMMMMAMMXMAMMSASAAXXXXMXMAAMMXMMMSASASMASASMMMAMAMAMAXAAMSMMSMMAAXMMMSAMAMMSAMASXMMSXMMMMAMSMMMMMSMAMSXSMSAXAXXAAXMAMMXSS +AMMMSMMMSASAAMASASXSMAASAMXMMXXAMAMSMMMMMMAXXMMMSAXXSAMAMSMXXMXMAXMMMAMAMAMAAXMAMXMMSSSXXXMXSAMAXAMXMASAXAMMAMAAASMAASXMMAMAMMMSMSXSXMXXSAXM +MXMXAAAAXASMSSXMASXSXSMSXSXXXASMMXMXMMMAAXMMXSAAMXMAMXMXMSXSSMMSXXXXMXMMMSXSMXSAXSAMAAMMSMSAMXSSMSSSMASMMXXSSMMSXXMAMAMAMSMAMXAAASAMMSAAMMSS +MASXSSMSMMMAMMMSAMASAMMXMMMMXXMAAMXMMAMMSMSAAMMMSMMASAMAAMAXAAAAMSMSMXXAAAXAMXMAMSAMMSMAAAMASMXXAXAAMAMMAMXMMAMMMMXSAASMMXSSXMXMXMAMAMMSMSAM +MAXXAXXAMAAAAAAMASMMAMAAAAASXSMSSMAMSASXAAMMSMSXAASASASXSMSMSMMSSMAAAMSMMSSSXSAMXSAMXMMSXSXAMXMMSMSMMSXMASAASXMSAMXASXMAMXAXSMASAMAMMMAMMMMS +MSSMMMSMSSSSSMXXAMAMXMSXMSMSAAMAAMAMXAMMMMMXMASXMMMASASAXAMAMXXXAMSMSMAAXAMXMMMAXSAMXSAMMXMASXMAAXMASAASAMMMMMMSSSMMMMSSMMAMMXASASXMXXXXMAXX +AXAMMASXAXXAAMMXXXAMMXMSXMMMXMMSSMSSSSMSXASAMXMAMSMAMAMMMAMSSSSSMMMXXXSXMMSAMASMXMASMXAMAXAXAXMAMXXMMMMMAMSAXAMMMXMAXXAMXMMMSMMSAMXASMMMSMSM +XMAMMMMMXSXMASAAMXSMXAAMXMAXMXXMAXXMAAAXMASASASAMAMASXMMSSMMXAAXXXMASMMXSSXXXAMMASMMMSSMXSSMMXMAXMSMAXMMXMSAMSSSSSMSAMXSXMSAMAAMAMSMSAAXAAAX +SSSMAXSAMXMASMMMSAXSSMSMASAXSAMXMAXMMMMMMAXMMXSXSMSAMAMMAMAXMMMMMAMASAMASAMSMMSAMXMAMAXAMXAXXSMXMAASXXMMSXMSMAAAAAAXASMSAMMAMMMSSMXXXMSSMSMM +XAAMXMAMXAMXXAAXMXMAXAAMXMAAXAXSSSXMXSAXMMSSSXMASMMXSSMMASXMXAMMMSMMMAMXMMAXAASASMMMMASMSSMMXMAASMMMMMAAMXAAMMMMMMMMASASXMSSMSAMAAXMSMXXXMMS +MSMMMXSSSXSASMMSMMMMMSMSXMXMMMMMAXAMAXASMAMMAAMAMASAMXAMMMAASMSAAMASXSSSSXMMMMSAMAASMMXMXAAMAMAMAAAAMSAMXMAMXSAAXSMMAMMMAMAMASAMXSMXSAAMMMAA +AAXXMAMAMAMASMAAAAMXAAMMASAXMSSMMMAMMXSAMASXSMMAXXMASXSMASXMASXMMSAMAAAXMAXXXXSXMXMSASMASXMSSSMXSXMAXSASXSMSMSSMXAXMASASMMASXSSMSAMXMMMSAMXS +SAMSAMSAMMSMMMSSMMSMSMXSAXXMSAAXXSASXXMASXXAAAXMSSMXMAASAMMMXXMAXMAMMMMMSSMSMAMXSXAXAMMMSAMAAAMAMXMXXMAMAXXAAMASMMMXMSASXSAMMMXSAMMXXAAMASAM +MAAMAMXAXXAAXAXAXSMXMSAMASMMMMMSAMXSAMSXMMMSMMXMAXMMMMMMMSMSASMMMSXMXAAAAXAAMXMAMMSMMMAXMAMMSMMASXMXSMMMAMSSSMAMMMXSAMXMASXMASMMMXMSMMMSAMMA +MAMMMMXSSSSSMXSAMXMASMMMSAXXAXAMASAMAAMMMXAMAMXMAMSMSMXAAAXMASMSAXASXMMMSSSSSSMXSAMXMXXSXXMAMXMASAXAMASMSXMAAMXSXAASAMMMMMMSXMAMXMSMXAAMXMAS +MAMAMMXAAAAMMAMAMASMSAXMMAMSMMMSXMASMSMAMMXSAMSXSAXAAXSMSSSMSMAMXSAMXMAMAMAMAAMSMMMASMAMXAMXMAMASMMMSAMAMAMSMMXMMMMSAMXMMAMXAXSASMAMMMSXMAMX +XAXASMMMSMMMMAMASXXXXAMXMAMAAXXAAXAXMAMXXAAMASXAMMMSMMAMAMAXXMXMASAMMSXSSMAMSMMMAMSASXASAMXMSAMXSXAMXXMASAMAAMMSMXMXAMAMXMSMXMMASMMSAMXAMSMS +SXSASXXMMMSXSSSXSMSSMASASMSMMSSSSMMSSSMSMMSMXMMMMXAMMSSMASXMSMSMASAMXAASASXXAMXMAMSXMMXXAMXAXXSSXXXSAMSASASMSMASXMMSMMASAAXMSMMMMAXSASMMMAAM +AAMAMMMMMAXAAAXXXAAAXASMSXAXMAAXMASAXAAXMAXMMMXMAMXXAXXSASAAAAXMASXSMMSMAMSAMAXMAXXAMSSMXSXMXSMXAXXMAMMMSXMAMMASAMXAXSAXMSMXAXAMMXMSMMAASMSM +MMMAMAAAMMMMMMMMMMSSMAXMSXMMMMSMSSMAMMMMMAMAASASXMSMMSXMXSMSMMMXXMASMXAMAMSSMMSMSXSMMAASAMAXXMASXMXMMXSAMAMAMMXSAMSMMMMSAMASMSSSMXMXMSSMSAXX +SXMXXXSXSAAAAMXXAAXXMMSSMASXXXXMXAMMMSSXMASMMSMSAAAAASXSAXMAXAXXAMXMXXXSXMMAMSXAXAMAMSSMXSAMXMAMXAXSMAXAXXMAXXAMXMAXAAAMAMMSAAAAMAMXMAMAMMMS +AAXSMMMASXMMXSASMSXXAAMASAMASXMMSSMAAXAXMXAAMSXSMMMMMSAMMSMMSAMSSMMMMSAMMSSMMMMMMXMAXMAXXAMXSXAXXMAMMMSMSSSSSMSSSSMSMSMSAMXMMMMMMMXMSMMMMAAA +MSMSASMAMAMXMMMAAMMSMXSMMMSAMAAAAXSMSSMSMMSSMMAXXXXXSMMMAAAXMAXAAAMAAMAMAAXXAASASMSMSAMSMSMASXSMMSSMAXXMAAAXAAAXAAXXXXASAXMMMSASASAAAXSASMSS +SXAXAAMSMXMAAAXMXMASAASXMAMASMMMSMMMAAXAAMMXAMXMSASMSAMXSSSXSMMSSMMMSSSMMMSSSXSASAMXMAXMAXMXMAMXAAMMMSXMMSMMMMMMSAMXAMMMMXAAAMAMAXMSMSXAXAAX +XMMMMMMXMASXSMXXMMAMMMXAMMSAMAXXXMAMSSSSSMAXMMSASAMASXMXMAMXAAAMAXSMMXMASMAMMMMXMMMAMAMMMMMSMMMMMXSAMXMXMAXXXSXAXAMXSXXAMMSMSMSMAMXAMXMXMMMM +MXAAAXSAMXMAAAMSMMXXAMXMMXMASMSSMSSXXMAXXMSMSASMMAMAMAMAMXMSSSMSAMXAXXMASMSMSASMMSSSSXSAMAAXAAAMAASXSXAASASXAAXMXMXAMMMMSAXAAAXMSMMAAAAAMASX +AXSSXSASAMSSMMMSAAMSMSAMXXSAMXAAMAMSMMMMXMXXMAMAMXMMSAMAMAMXXAAMMMSMMSMMXAMAMAXXAAAXAASASXSSSMSMMXSASASXSXMMMMMMSXMMXXAAMMSXMSMAMASMMMSMSAMA +SMAAXXMASAAXAAAXMMMAAXAXSAMXXMSMMASAXAAMSAMSMSMSMSMAXXXAXAMXXMSMSMXMAXAAMMMAMXMMMSSMMMMAMMAAXSAMXXMXMAXAMXXAAXAMXAXAASMSSXAXMXMSMAMMAMAXMAMX +MAMAMXXAASMSSMSXSASMSMAXSXSASMMXSXSMSSXSAMXAAXAAAAMMMSSMXSSMMXAAAAXMASMMSASXSSMXAAAASAMXMSMXMMMXSAMXMXMXMASMSSSMXMMSMSAMMMSSMAXMASASAMSMSAXM +SSSMASMMMMXAAAAASASAMMMMXMAXMAAASXMXAAXSAMXMXMSMSMXSAMAMAXAAAAMSMSMMMSAASMSMMAXMSSSMMXMAMAMSXSAAAAXASAMXMAXXXAMXXXAXMMXMAAAAXAMMXAAMXXAMXXXX +XAAAXMASAXMSMMMMMAMXMASXSSMAMMMMSAMMMSMSASAXXMMMXXAMASAMXSAMSMXXAAMAMSMMMAMMSAMMAAXAXMAMXAXAAMMSSMMMSXSAMXSMMMMXMAMMMMASMMXSMMSXMMSSSMMSMMMX +MSMMSSXMAXXXXXMAMXMSSMSAAAXMASMXSAMXMXAMAXXXMXAXMMXSAMXAXAXMMXAMXMSMXXXMASMAMMXMASMSMSASMSSMSMMAAAXXMASASXXAASASXSAAASASMSAAAAAAXXAAAAXAAAXX +MXMAXMMMMSSMMMXXSMMXAASMSMMXAAAASAMXSMMMSMMXMAXSAMAMASXMMMXXAMXAAXXMASMMAMMXSMXSAXAMASMXAXXXXAMSSMMASXMASXSSMSAMAMXXMMXSAMSSMMSMMXMSMMSSSMSM +XAMMXMAXAAAAAMSMXASXMMMXXASXMASXSXMXMASAMAXASAXXAMASAMASAXMMXMMXMSAMXMAMMSASXMASAMAMAMAMAMSMMXMAMASAMAMMMAAAXMAMSMMSSMSMMMXXMXMXSSMXAXAAAAAA +SSMSASXMMSSMMAAAMAMAXMXASAMXMAXAMASXSMMASXSMMSMSMMXMMSAMXMSAMXSMXAAMASAMXSXMAXXXMXMMXSMAAAXSMXSASXMASXSAMXMAMXMMXAAAAXMASXSASAMAMAASXMMXMMMX +SAASASXAXXXMMSSSXASMMSAMMMMSMXSAMAMMAAMAMAMMAMMASXAAMMMSMMMAXAXAMMMXXMAXAXAMSMMMMSXMASXSXSAMXAMXXXSMMXMXSAMASXMASMMXMMMAMASAMMMASMMMMASMSSSS +MMAMMMMSMSMSAAAAMXMXASXXAAMASMSMMXMSSMMAMAMMASMMMXMXMAXXAASXMASMSXSXMSMMSMSMAAXAAAAMAXAASMXAMSSSMXMASAMAMAMAXAMXSSSMMAXAMXMSMASAMXXAXMAAAAAX +SMMMXAXAAXAMMMMXSMMMXMASXMXAMXMMMAMXMXSAMAMMAXAXSXSASXMSSMSXMMAAAASMMAXXXAAXMXMMSMSMMMSMMSXXXXAAAAXAMAMSXSMSXMMSMAMASXSSSSMMXXMMSMSXSXMMMMMM +XAMMSSSMSMMMSAXXMAXSAMMMMSMSSXMSSSSXSASMSSSMSSSXMASASAMXAAXXXAMXMAMASXXMMSMMMXMMXXXAXXXAAAXSMMSMMXMSSSMMAXAXMAMASMSXMAAMMAAXXMAXAAXAXMSXMSSM +SSMAMXAAXAAAXMSMSSMSXSAMXXAAAAAAAMAMMAXAAAMAXSXAMAMXMAMXMMMMSMXAMXSXMMXSAMMSAASAMXMXMAXMMMXAAMMMXMXMAMXMAMAMSXSASXSMMSMASMMMXMASMSMXMASAAAAM +SMMASXMMMXMSXXAAAMXMXSMMMMMMXMMMSMXMMSMMMSMSXMSXMSMSSSMXMXAAAXAMXXSAAAXMASAMSSMASMMSAMXSMSSSSMMXMAAMSMMMAMSMAMMMMXMXAMAMSAMXSXAXAXXXAXMMMSSM +SASASXSXSAXAMSMSMSSMAMXASXMASXAXXXXMAMAMAXXMAXXMAMAMAXXAMXSSMXSAMASXMMXSAMMMXXMMXAAAXXMXAAMAAMXAXSAXAAMMMSAMXMAMSSMMMSSXSAMASAMSSSMMSSXMXMAM +XMMAMXSASMSXAXAMXAXMASXMSAMXAMXXMSXMASAMASASXMMMAMAMXMMMSAMAMMMAMMMAMXXMXMXAMXAAMXAMXSASMXXSXMMSXMMSSSMMSXMAMMAMAMAXAAAAMXMAMMMAAAXAAMAXMMXA +MSMSMAMAMXSASMSMMSSMASAASAMXSMSMXMASASASASAMMMAMXSXMAMXAMXMAMAXXXAXAMXAASMSASXMAXSAXAXMMMSMMASAMAAAAAMAXMAXXSASMMSMMMSMMSMMMSMMXSMMMSSSMMSSM +MAAXMXMAMXXAMAMAMXXMAMMMMMMMMAAASXMMMSAMAMAMASXSXMXXASMASMSMSMSMSMSAXAMXMASASXMAMSXMXXXSAAASAXASMMMSSSMMSXMASAMXXAAXXXXAAAAXAAXAMXXAAMMAMAAX +SMSMXAMAXXMMMMMSSMXMMMSXXAXAMSMSAMSAMMAMAXAXXXAXMAMXMSAMAXXAAAAXAMSAMSMSMAMAMXMSMMMSSXAMSSMMMXMMAXAMXAAAXAAMMXXXSXSMMXMXSMMMSSMSAAMMMMXAMSSM +XMAASASAMSMSXXMAAAMSSXMASMSMXMMAAASXMSXMMSMSMMMSMAMASMMMMMMSMSMMXMMXMMAAMAMMMXMXAAAAMMXMAXMASAMXAMSSSSMMSXMXMXMASAXMASXAMXSAAMMMMMXMXMXMMAMX +MSMMXMXAXSAMXSAMXSAAMMSAMXAXAXXSMMXAXSAMXAMAXAMXMSSMAAAMASXMAAXAMMMMMMXMSMSMSMMSSMMSSSSMAXXASASXSSMAMAXXXAMXSAAAMAMASAMXSAMXXXAAASXSASASMMSS +AAMMAMSXMMAMAMAXSMMMSXSASAMSXSAMASMMMSAMSXSASMSAMXAXMSMSASAMXMSSMMAAAAAXXMXMAAMAAXMMMMAMAMMMSAMXMAMMMSMMMSMASMSAMMMMMMMAMAMMMSSSMSASASMSASAM +SXSSXMAAXSAMXSAMXASXSAMXMAXAMAAMAMAAASMMMXMASXMASMSMAXAMASAMXXSAASMSSSSSXXASXSMSSMSAASAMAXSAXAMXSAMXAXAXAAMXSMMXAAAAAAMASAMAMAAXMXAMAMMSXMAS +XAXMASXSMXXXXAMXSAMXMXMASXMAMSAMXSSMMXSXMASMSMSMMXMASMXMXMXAMXSSMMMXAAXXXSMSAXAMMASXMSXSAXMASMAASXMMASXMSSSMXMASXSSSSMSASMSMSMSMMMAMXMXMASAM diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_5.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_5.tst.data new file mode 100644 index 0000000..4790cb4 --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Input_Day_5.tst.data @@ -0,0 +1,1374 @@ +95|51 +92|45 +92|39 +55|51 +55|91 +55|43 +46|93 +46|69 +46|84 +46|99 +11|43 +11|99 +11|63 +11|39 +11|88 +66|86 +66|96 +66|68 +66|24 +66|76 +66|81 +19|95 +19|45 +19|66 +19|44 +19|64 +19|55 +19|86 +45|88 +45|69 +45|57 +45|44 +45|86 +45|54 +45|51 +45|58 +84|37 +84|55 +84|18 +84|28 +84|76 +84|66 +84|86 +84|68 +84|71 +67|69 +67|66 +67|71 +67|37 +67|61 +67|26 +67|55 +67|52 +67|45 +67|19 +63|88 +63|73 +63|97 +63|37 +63|84 +63|42 +63|52 +63|95 +63|19 +63|64 +63|45 +91|38 +91|84 +91|26 +91|43 +91|77 +91|82 +91|39 +91|97 +91|99 +91|35 +91|92 +91|73 +69|88 +69|86 +69|61 +69|51 +69|57 +69|18 +69|58 +69|24 +69|68 +69|38 +69|81 +69|62 +69|32 +97|44 +97|19 +97|55 +97|81 +97|24 +97|68 +97|69 +97|58 +97|96 +97|71 +97|64 +97|14 +97|76 +97|18 +28|54 +28|62 +28|86 +28|91 +28|81 +28|23 +28|61 +28|52 +28|76 +28|64 +28|57 +28|95 +28|18 +28|88 +28|96 +42|96 +42|95 +42|26 +42|35 +42|68 +42|84 +42|69 +42|55 +42|97 +42|88 +42|28 +42|81 +42|67 +42|86 +42|71 +42|66 +35|37 +35|95 +35|76 +35|96 +35|52 +35|97 +35|69 +35|24 +35|88 +35|61 +35|81 +35|68 +35|86 +35|18 +35|19 +35|44 +35|14 +73|86 +73|77 +73|26 +73|96 +73|67 +73|66 +73|52 +73|35 +73|45 +73|84 +73|69 +73|24 +73|18 +73|19 +73|37 +73|55 +73|64 +73|97 +61|93 +61|91 +61|57 +61|92 +61|44 +61|63 +61|42 +61|51 +61|65 +61|54 +61|38 +61|62 +61|73 +61|58 +61|46 +61|39 +61|77 +61|23 +61|43 +93|67 +93|95 +93|97 +93|18 +93|52 +93|81 +93|35 +93|96 +93|45 +93|71 +93|19 +93|73 +93|77 +93|69 +93|86 +93|64 +93|28 +93|37 +93|66 +93|88 +65|35 +65|28 +65|39 +65|99 +65|84 +65|67 +65|19 +65|45 +65|37 +65|71 +65|93 +65|97 +65|63 +65|42 +65|77 +65|32 +65|73 +65|43 +65|92 +65|26 +65|46 +23|84 +23|77 +23|38 +23|65 +23|93 +23|26 +23|73 +23|11 +23|43 +23|46 +23|62 +23|39 +23|67 +23|92 +23|63 +23|99 +23|82 +23|35 +23|54 +23|42 +23|51 +23|91 +58|62 +58|92 +58|82 +58|43 +58|93 +58|99 +58|77 +58|23 +58|65 +58|39 +58|54 +58|51 +58|63 +58|46 +58|73 +58|26 +58|38 +58|91 +58|11 +58|84 +58|35 +58|32 +58|42 +52|32 +52|57 +52|11 +52|14 +52|23 +52|68 +52|44 +52|55 +52|43 +52|91 +52|76 +52|54 +52|18 +52|51 +52|61 +52|65 +52|82 +52|58 +52|46 +52|62 +52|39 +52|38 +52|92 +52|86 +76|99 +76|62 +76|82 +76|73 +76|46 +76|42 +76|61 +76|32 +76|54 +76|44 +76|93 +76|63 +76|38 +76|57 +76|51 +76|43 +76|91 +76|14 +76|65 +76|58 +76|39 +76|23 +76|92 +76|11 +38|77 +38|99 +38|84 +38|35 +38|66 +38|65 +38|43 +38|28 +38|46 +38|92 +38|67 +38|97 +38|82 +38|32 +38|42 +38|39 +38|19 +38|26 +38|63 +38|37 +38|93 +38|11 +38|71 +38|73 +44|57 +44|32 +44|63 +44|77 +44|51 +44|67 +44|65 +44|58 +44|23 +44|84 +44|93 +44|73 +44|82 +44|11 +44|92 +44|42 +44|39 +44|62 +44|99 +44|43 +44|54 +44|46 +44|38 +44|91 +62|77 +62|42 +62|73 +62|84 +62|43 +62|11 +62|32 +62|35 +62|67 +62|26 +62|92 +62|54 +62|63 +62|65 +62|38 +62|91 +62|99 +62|97 +62|19 +62|46 +62|39 +62|51 +62|93 +62|82 +54|11 +54|71 +54|99 +54|51 +54|42 +54|35 +54|39 +54|67 +54|65 +54|43 +54|93 +54|46 +54|77 +54|73 +54|26 +54|84 +54|38 +54|82 +54|92 +54|19 +54|32 +54|63 +54|97 +54|66 +43|66 +43|45 +43|37 +43|99 +43|69 +43|67 +43|93 +43|26 +43|28 +43|19 +43|97 +43|71 +43|24 +43|35 +43|63 +43|42 +43|88 +43|95 +43|64 +43|96 +43|77 +43|81 +43|73 +43|84 +24|39 +24|38 +24|11 +24|14 +24|55 +24|91 +24|51 +24|58 +24|86 +24|62 +24|61 +24|65 +24|76 +24|82 +24|44 +24|32 +24|23 +24|46 +24|68 +24|54 +24|57 +24|52 +24|18 +24|92 +37|44 +37|86 +37|64 +37|69 +37|96 +37|24 +37|14 +37|91 +37|57 +37|76 +37|52 +37|88 +37|68 +37|55 +37|54 +37|45 +37|62 +37|58 +37|95 +37|61 +37|81 +37|51 +37|18 +37|23 +39|69 +39|97 +39|88 +39|26 +39|45 +39|96 +39|35 +39|71 +39|19 +39|77 +39|64 +39|67 +39|28 +39|63 +39|73 +39|99 +39|84 +39|93 +39|37 +39|66 +39|42 +39|95 +39|81 +39|43 +82|77 +82|73 +82|67 +82|96 +82|93 +82|26 +82|37 +82|43 +82|19 +82|99 +82|39 +82|11 +82|95 +82|28 +82|97 +82|42 +82|69 +82|71 +82|64 +82|84 +82|35 +82|66 +82|63 +82|45 +81|38 +81|51 +81|18 +81|55 +81|52 +81|76 +81|44 +81|92 +81|68 +81|14 +81|86 +81|32 +81|24 +81|61 +81|62 +81|57 +81|91 +81|23 +81|46 +81|58 +81|54 +81|82 +81|65 +81|11 +71|86 +71|55 +71|62 +71|66 +71|57 +71|45 +71|76 +71|69 +71|96 +71|23 +71|64 +71|44 +71|28 +71|95 +71|24 +71|37 +71|18 +71|61 +71|68 +71|88 +71|58 +71|52 +71|14 +71|81 +99|19 +99|52 +99|66 +99|84 +99|88 +99|42 +99|95 +99|28 +99|69 +99|64 +99|35 +99|45 +99|24 +99|93 +99|97 +99|96 +99|81 +99|73 +99|71 +99|26 +99|67 +99|77 +99|37 +99|86 +32|37 +32|71 +32|46 +32|11 +32|39 +32|96 +32|45 +32|66 +32|28 +32|43 +32|63 +32|35 +32|19 +32|92 +32|73 +32|93 +32|26 +32|84 +32|67 +32|99 +32|77 +32|82 +32|42 +32|97 +26|64 +26|37 +26|69 +26|55 +26|44 +26|86 +26|61 +26|76 +26|24 +26|81 +26|45 +26|19 +26|14 +26|95 +26|97 +26|88 +26|71 +26|66 +26|35 +26|28 +26|96 +26|52 +26|68 +26|18 +14|99 +14|43 +14|44 +14|46 +14|54 +14|32 +14|65 +14|84 +14|82 +14|93 +14|23 +14|57 +14|39 +14|42 +14|63 +14|73 +14|62 +14|38 +14|11 +14|92 +14|77 +14|58 +14|91 +14|51 +57|91 +57|93 +57|54 +57|99 +57|58 +57|42 +57|23 +57|67 +57|26 +57|77 +57|82 +57|11 +57|92 +57|38 +57|65 +57|39 +57|63 +57|73 +57|43 +57|32 +57|51 +57|84 +57|46 +57|62 +18|23 +18|99 +18|91 +18|44 +18|61 +18|62 +18|82 +18|58 +18|63 +18|43 +18|55 +18|38 +18|51 +18|46 +18|76 +18|57 +18|32 +18|68 +18|39 +18|11 +18|65 +18|54 +18|14 +18|92 +96|65 +96|23 +96|51 +96|52 +96|38 +96|88 +96|44 +96|76 +96|61 +96|86 +96|64 +96|62 +96|55 +96|18 +96|14 +96|95 +96|57 +96|24 +96|54 +96|91 +96|69 +96|58 +96|68 +96|81 +68|44 +68|61 +68|82 +68|63 +68|46 +68|92 +68|62 +68|23 +68|91 +68|32 +68|76 +68|43 +68|38 +68|65 +68|99 +68|73 +68|11 +68|14 +68|39 +68|57 +68|93 +68|51 +68|54 +68|58 +77|66 +77|28 +77|86 +77|64 +77|19 +77|45 +77|84 +77|71 +77|68 +77|67 +77|35 +77|69 +77|52 +77|96 +77|55 +77|18 +77|76 +77|24 +77|26 +77|37 +77|95 +77|81 +77|88 +77|97 +88|18 +88|86 +88|52 +88|65 +88|32 +88|61 +88|92 +88|81 +88|76 +88|38 +88|23 +88|24 +88|58 +88|68 +88|44 +88|62 +88|82 +88|14 +88|51 +88|46 +88|55 +88|54 +88|91 +88|57 +51|39 +51|42 +51|93 +51|99 +51|71 +51|97 +51|38 +51|84 +51|67 +51|28 +51|65 +51|73 +51|82 +51|11 +51|32 +51|26 +51|77 +51|66 +51|19 +51|43 +51|63 +51|35 +51|46 +51|92 +86|58 +86|62 +86|46 +86|32 +86|55 +86|92 +86|38 +86|39 +86|43 +86|44 +86|23 +86|91 +86|76 +86|54 +86|18 +86|63 +86|57 +86|68 +86|65 +86|61 +86|14 +86|11 +86|51 +86|82 +64|95 +64|81 +64|23 +64|54 +64|18 +64|51 +64|55 +64|61 +64|86 +64|88 +64|62 +64|52 +64|91 +64|14 +64|57 +64|32 +64|92 +64|58 +64|44 +64|65 +64|68 +64|38 +64|76 +64|24 +95|57 +95|68 +95|76 +95|23 +95|92 +95|81 +95|24 +95|55 +95|54 +95|58 +95|46 +95|86 +95|14 +95|32 +95|62 +95|38 +95|18 +95|91 +95|65 +95|44 +95|52 +95|88 +95|61 +92|77 +92|67 +92|42 +92|97 +92|96 +92|73 +92|71 +92|37 +92|82 +92|84 +92|63 +92|26 +92|35 +92|28 +92|46 +92|99 +92|69 +92|43 +92|19 +92|93 +92|66 +92|11 +55|44 +55|11 +55|23 +55|92 +55|57 +55|65 +55|54 +55|68 +55|76 +55|32 +55|61 +55|58 +55|38 +55|82 +55|63 +55|93 +55|46 +55|14 +55|99 +55|39 +55|62 +46|19 +46|42 +46|39 +46|97 +46|63 +46|77 +46|67 +46|28 +46|73 +46|66 +46|37 +46|43 +46|82 +46|11 +46|26 +46|71 +46|45 +46|96 +46|35 +46|64 +11|73 +11|93 +11|69 +11|19 +11|95 +11|84 +11|71 +11|96 +11|77 +11|64 +11|45 +11|67 +11|26 +11|66 +11|37 +11|42 +11|35 +11|97 +11|28 +66|88 +66|55 +66|44 +66|91 +66|95 +66|52 +66|23 +66|61 +66|18 +66|45 +66|37 +66|62 +66|69 +66|58 +66|64 +66|14 +66|57 +66|28 +19|69 +19|52 +19|96 +19|28 +19|24 +19|37 +19|68 +19|14 +19|76 +19|57 +19|61 +19|71 +19|58 +19|81 +19|23 +19|18 +19|88 +45|62 +45|55 +45|64 +45|52 +45|24 +45|14 +45|18 +45|81 +45|38 +45|95 +45|96 +45|76 +45|61 +45|23 +45|91 +45|68 +84|69 +84|61 +84|81 +84|88 +84|97 +84|35 +84|95 +84|64 +84|19 +84|24 +84|52 +84|45 +84|26 +84|96 +84|67 +67|64 +67|14 +67|96 +67|18 +67|24 +67|81 +67|35 +67|28 +67|68 +67|86 +67|76 +67|88 +67|97 +67|95 +63|66 +63|77 +63|67 +63|81 +63|71 +63|24 +63|96 +63|93 +63|69 +63|35 +63|99 +63|28 +63|26 +91|63 +91|54 +91|46 +91|67 +91|19 +91|71 +91|65 +91|51 +91|42 +91|93 +91|32 +91|11 +69|55 +69|14 +69|52 +69|54 +69|95 +69|23 +69|91 +69|44 +69|76 +69|65 +69|64 +97|57 +97|61 +97|86 +97|52 +97|28 +97|66 +97|45 +97|37 +97|88 +97|95 +28|58 +28|24 +28|69 +28|45 +28|14 +28|55 +28|68 +28|37 +28|44 +42|19 +42|77 +42|64 +42|24 +42|45 +42|18 +42|52 +42|37 +35|64 +35|55 +35|66 +35|71 +35|57 +35|45 +35|28 +73|95 +73|42 +73|81 +73|88 +73|28 +73|71 +61|32 +61|14 +61|11 +61|99 +61|82 +93|84 +93|24 +93|42 +93|26 +65|82 +65|11 +65|66 +23|97 +23|32 +58|67 + +37,45,96,69,95,88,81,24,52,86,18,55,68,76,61,57,58,23,62,91,54 +97,71,66,28,95,86,18,76,61,14,57 +11,58,62,65,82,76,43 +35,93,66,42,86,45,88,67,96,26,73,71,95,81,24 +64,95,88,81,24,52,86,18,55,68,76,61,14,44,57,58,23,62,91,51,38,65,32 +69,88,81,24,86,18,55,68,76,61,14,44,57,58,23,62,91,54,51,38,65 +54,65,32,92,82,39,43,99,93,73,42,84,26,97,19 +92,46,82,39,43,73,84,67,19,71,96 +65,32,67,99,77,57,39,93,11,51,42,63,91,58,62,38,73 +92,26,93,66,51,39,42 +73,63,35,77,37,19,43,93,26,95,28,66,71,45,67,42,84 +99,93,73,42,84,26,97,71,66,28,37,45,64,24,52 +97,71,66,28,45,96,69,64,95,88,81,24,52,86,18,55,68,14,57 +39,54,92,91,51,11,46,84,77,43,23,73,63,58,62,99,32 +37,95,55,76,58,91,54 +11,44,54,46,62 +26,99,11,97,39,62,32,46,92 +14,44,58,23,54,38,92,39,43,63,77 +99,93,42,84,26,35,97,71,66,37,69,64,95 +61,44,57,23,62,91,51,38,32,92,82,11,39,43,63,93,42 +51,63,93,73,42,84,67,26,97,71,66 +88,81,86,14,23 +18,55,68,76,61,44,57,58,62,91,54,38,65,92,46,82,11,43,63 +93,63,11,23,51,68,76 +38,43,82,77,91,23,14 +42,84,37,45,88,52,55 +44,61,54,62,76,82,92,23,63,57,99,38,32,14,65,93,11 +97,64,96,66,88,86,68,76,28,61,24,37,18,19,69,14,44,71,45,52,35,55,81 +91,38,65,32,92,46,11,39,43,63,99,93,73,77,84,67,19 +91,38,65,46,63,99,84,97,19 +73,63,43,51,99,92,38,82,26,65,84,46,97,93,11,77,42,54,35,19,71 +84,26,64,95,24,86,18 +28,37,44,19,58,76,52,14,96 +55,68,76,61,14,44,57,58,23,91,54,51,65,32,92,82,11,39,43,63,99 +46,82,11,39,43,63,99,93,73,42,77,84,67,26,35,97,71,66,28,37,45,96,69 +35,37,96,64,52,55,44 +37,63,66,84,64,45,26,67,35,88,69,71,28,81,77,42,93,95,99,97,24,96,19 +24,81,19,88,18,37,26,95,45,84,67,28,97,52,66,73,69,86,35 +14,76,95,57,68,86,92,55,51,91,52,61,81,54,65,24,18,58,44,32,23 +65,73,19,43,99,26,92,71,11,67,39,66,84,28,46,93,97,35,32 +45,96,86,76,61,44,58,54,51 +32,92,46,82,11,39,63,99,93,73,42,77,84,67,26,35,97,19,71,66,28,37,45 +69,61,44,62,91,54,65 +91,54,32,99,57,92,65,14,39,46,63,42,43,58,44,82,61,51,93 +92,82,11,63,93,73,42,77,97,19,71,66,37,45,96 +42,26,71,37,45,64,24,52,86,18,55 +82,18,61,62,57,14,46,58,54,24,91,11,86,68,52,92,65,76,23 +39,43,38,71,46,84,99,73,67,77,51,19,35,92,11,97,66,63,65,82,93,32,26 +37,82,42,43,39,64,28 +68,69,71,64,14,96,86,52,28,44,57,95,19,55,18,76,61,88,37,97,66 +54,58,18,52,44,11,39,82,92,76,51,86,14,55,57 +37,45,96,69,95,81,24,52,86,18,68,61,14,44,58,62,91 +84,67,26,35,19,71,66,28,37,45,96,69,64,95,88,81,24,52,86,18,55,68,76 +71,66,28,37,45,69,64,88,81,24,52,86,18,68,76,61,14,44,57,58,23 +77,73,35,28,96,71,43,39,66,95,69,37,84,26,93,19,99 +71,96,66,11,73,37,35,28,97,84,69,39,93,77,43,45,99,63,46 +91,54,51,38,65,32,92,46,82,39,43,99,93,73,42,77,84,67,26,97,19 +68,38,86,32,61,54,44 +92,46,82,11,43,63,99,93,73,42,77,84,67,26,35,97,19,71,66,28,37,45,96 +86,95,96,28,52,26,88,97,69,19,35,55,66,24,45,67,37,76,71 +65,46,82,39,63,42,67,26,35,19,71,66,37 +68,76,14,44,57,58,62,91,54,51,32,92,46,82,43,99,93 +45,64,95,81,52,86,18,55,68,61,23 +69,64,86,55,68,61,44,58,62,38,65 +14,62,91,51,65,46,82,11,77 +39,91,63,46,11,84,82,65,35 +69,64,95,88,81,24,52,86,18,55,68,76,61,14,44,57,58,23,62,54,51,38,65 +92,82,39,93,73,42,77,84,67,97,19,71,66,28,37,45,96 +19,71,66,28,37,45,96,69,64,88,81,24,52,86,18,55,68,76,61,14,44,57,58 +67,19,42,96,18,24,55 +84,67,26,35,97,19,71,66,45,69,24 +32,92,46,82,11,43,99,93,42,84,67,35,19,71,66,28,37 +39,43,99,73,42,77,84,26,97,19,66,28,37,96,64,95,88 +84,91,32,97,73,93,46,19,11,99,39 +93,67,91,39,54 +24,65,86,32,57,55,44 +38,65,46,11,39,42,77,84,28 +11,43,63,99,93,73,77,84,67,35,97,19,71,28,45,96,95 +91,57,39,65,76,46,38,55,58,54,18,44,62,51,86,68,92,14,52,32,82 +81,24,52,68,76,61,14,57,58,23,62,54,38,92,82 +66,63,82,99,97,42,64,11,45,67,37,69,35,71,84,26,93,43,73,96,28 +67,38,46,19,11,99,82,54,63,92,32,91,65,51,73 +96,28,24,26,45,84,88,99,97,67,77,93,69,42,19,64,95 +32,45,39,26,73,37,35 +14,57,58,62,91,54,92,39,43,99,93 +67,26,35,97,19,71,28,45,95,88,81,24,18,55,68 +11,97,66,26,63,93,77,42,39,96,82,69,46 +55,76,61,14,57,58,23,62,54,51,38,65,32,92,46,82,11,39,43,63,99 +35,37,45,19,73,93,63,24,77,88,67,42,66,28,71 +62,32,57,43,63,11,51,82,42,38,61 +73,42,77,84,67,26,35,97,19,71,66,28,37,45,96,64,95,88,81,24,52,86,18 +45,96,77,37,66,84,73,63,99,97,67,39,95 +23,62,82,11,93,67,35 +93,42,51,11,58,54,82 +51,24,14,65,55,44,86,88,57,58,46 +18,55,68,61,14,44,57,23,62,91,54,51,38,65,32,46,82,11,39,43,63 +43,99,93,73,42,35,19,71,66,28,96,64,95,88,81 +43,73,58,65,99,63,38,51,32,67,39,26,42 +61,14,23,46,11,43,99,93,42 +46,82,39,63,99,73,42,77,84,67,26,35,19,71,66,28,45,96,69 +81,24,52,86,55,68,76,61,14,44,57,58,23,62,54,51,38,32,92,46,82 +97,19,71,66,45,88,52,68,57 +69,14,88,24,97,52,96,86,76,45,26,81,35,66,37 +91,69,57,14,88,38,96,23,76,68,64,61,95,58,81,54,55,18,52,86,51 +65,42,39,46,43,77,91,57,58,67,23,38,51 +68,77,19,67,69,37,66 +38,51,76,44,46,68,65,92,32,91,14,61,39,43,55,54,63,82,18,62,57,23,11 +26,35,97,71,28,37,45,69,64,95,88,81,52,86,18,55,68,76,14 +95,81,24,52,86,18,68,76,14,44,57,58,23,62,91,54,51,38,65,32,92 +14,44,51,32,92,46,77 +82,77,84,67,35,28,64 +77,84,45,81,24,18,68 +62,54,51,38,65,32,46,39,43,63,93,84,67,35,97 +95,81,52,55,44,38,92 +88,71,55,28,37,95,97,18,64,35,44 +91,58,61,38,11,32,92,39,65,23,68,76,14,43,82 +91,54,51,38,32,92,46,82,11,63,99,77,84,67,26,35,19 +18,68,14,44,57,23,62,51,65,32,46,82,43 +91,55,69,96,86,62,81,58,44,28,88 +57,81,24,66,96,76,68,97,45,37,55 +96,69,95,24,86,68,76,61,44,57,23,62,91,54,51 +18,86,95,69,52,97,96,28,19,67,81,76,35,45,64 +81,54,46,65,24,76,52,51,55,91,86,68,44,57,18,23,82,38,58,62,92,32,14 +61,14,95,55,37,69,96,81,71,68,18,26,76,88,66,97,52 +84,67,71,66,28,37,45,64,88,68,76 +38,32,19,46,54,63,67,65,26,51,97,39,77,84,42,99,43,82,71,11,35,93,73 +92,46,82,11,39,63,99,73,77,67,35,66,28 +66,28,61,37,58,44,14,71,52,88,68,64,55,18,23,45,95,86,96,57,81 +67,97,91,65,46,54,26,35,62 +32,92,46,99,73,77,26,35,97,19,71,28,45 +86,95,19,77,71,24,66,18,55,68,88,45,67,64,28,37,97 +69,64,95,88,81,24,52,86,18,55,68,76,61,14,44,57,58,23,62,91,54,38,65 +55,61,86,92,46,14,76,39,51,32,44 +88,24,55,52,28,68,45,71,35,64,97,14,26,18,37,76,61 +26,73,63,84,58,32,39,92,54,93,38,42,82,77,67 +37,45,69,64,95,81,24,52,86,18,68,76,61,14,58,23,62,91,54 +44,73,51,93,62,57,38,63,99,54,92,76,58,23,14,32,91 +88,81,18,68,61,44,58,23,62,91,54,51,32,92,46 +76,73,57,99,63,61,91,14,32,93,23,58,65 +84,66,28,64,81,55,76 +44,82,39,93,42 +92,82,39,63,93,42,66 +38,32,82,11,73,77,66 +73,42,84,67,97,64,95,24,18 +73,92,84,91,57,42,39,77,99,58,54,46,23,65,67 +96,64,95,88,81,24,52,86,18,55,68,76,61,14,44,57,58,23,62,91,54,51,38 +99,73,35,71,66,28,37,69,52 +65,92,46,82,39,63,99,93,42,84,19,71,37 +76,71,26,64,86,66,18,95,69,35,28,96,24,37,88,55,81 +11,39,43,63,93,73,42,77,84,26,97,19,71,66,37,45,96,69,95 +55,62,95,96,66,86,61,28,45,58,81 +64,88,18,44,54,65,32 +38,43,77,26,97,71,28 +46,43,93,73,42,19,28,45,69 +18,61,58,54,51,38,65,32,46,82,11 +14,92,82,68,51,76,44,18,32,86,46,55,65,62,52,54,57,39,23,91,58,61,38 +99,93,73,42,77,84,67,26,97,66,28,37,45,69,64,95,24 +26,92,42,67,19,99,43,46,28,66,84,73,71,93,82,35,97,11,63,45,39,77,96 +81,55,44,92,62,52,88,91,24,54,18,58,46,65,61 +84,43,51,39,91,42,99,32,38,23,82,65,11,77,62,73,46 +39,43,63,99,93,73,42,77,67,35,97,19,71,66,28,37,45,96,69,95,88 +42,97,67,52,96,84,35,45,55,77,81,66,86,71,95,37,24,64,69 +38,92,46,82,11,39,63,99,42,97,19 +26,35,71,19,77,92,11,65,42,99,51,43,67,63,73,66,93 +67,26,35,19,66,37,88,81,52,86,55,68,61 +86,68,76,65,92,39,43 +81,24,52,61,18,44,76,96,28,64,37,58,14,57,88,68,45,95,86,91,62,69,23 +52,18,55,68,57,23,65,82,39 +52,91,69,62,51,88,14,24,68,38,55,86,65,64,61,54,18,95,57,81,58 +18,14,64,24,68 +97,37,96,69,76 +26,95,35,77,67,84,71,42,55 +58,43,54,65,18,62,38,39,44,14,68,32,86,76,46,91,11,92,51 +55,14,91,54,11,39,99 +81,45,18,52,37,61,64,95,19,66,58 +82,73,54,92,58,44,43,46,61,57,42 +35,69,88,24,76,14,44 +62,91,54,51,38,65,32,92,46,82,11,39,43,63,93,73,42,77,84,67,26,35,97 +88,76,45,96,28,24,95,18,68,55,61,52,19,67,71,86,37,26,69 +62,54,51,46,82,11,43,63,99,93,73,77,84,67,26 +42,77,84,67,26,35,45,96,52 +23,51,38,65,46,82,11,43,99,93,84,26,35 +64,44,81,58,66,55,61 +84,19,97,26,64,81,28,35,63,99,73,67,93,69,43,88,37,71,95,77,45,66,42 +81,24,52,86,55,68,76,61,14,44,57,58,23,62,91,51,38,32,92,46,82 +24,18,68,44,57,23,62,91,54,51,38,65,92,82,11 +66,28,45,96,69,64,95,88,81,52,86,18,76,14,62 +95,86,88,57,71,61,37,18,66,96,24,81,97 +65,23,42,91,11,82,43,39,62,57,63 +26,24,19,35,81,86,55 +46,28,84,73,11,32,82,63,26,99,43,67,66,38,39,97,42,65,35 +37,96,88,61,14,44,62 +77,84,26,35,97,19,71,66,28,37,45,96,69,64,95,88,81,24,52,86,18,55,68 +81,68,57,23,91,54,82 +18,55,68,44,57,23,62,91,54,51,38,65,32,43,63 +99,93,73,77,26,97,19,71,66,28,37,45,96,64,95,88,81,24,52 +95,73,93,99,19,43,64 diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_6.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_6.tst.data new file mode 100644 index 0000000..13453bc --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Input_Day_6.tst.data @@ -0,0 +1,130 @@ +.........................#...........#.#...#...............#..............##.....................#...........#..#.........#....... +.....................#.................#.......#.........................#...........#.#.......#.................................. +.........#...........#........#.........#.........#...........#........................................#.........................# +.......#.........................#...........................#.............#...................................................... +..................#................##...............#.#.....................##............#....................................... +......#...#................#..................................................................#....#.#............................ +.......##................#........#..#.......#......................................#........#............#......###..........#... +.....................#....................................................#...........#..#...#..........................#......... +...........#....#...........................#.#...............#..#....................................#..............#......#..... +.....#........##...............#.......#..#..............................................#..........................#............. +.#.........#.#...........................#..........................#......................#...........#........#................. +.................................................................#..#.#.......#..#................................................ +...............................................#.......#...................#....................#................................. +.......#......#......#......................#...............................#.....##........#...........#......#.................. +........................................................................................................#.....#.#................. +..#...............................#.#..................................#.............#............................................ +..............#..........................................#.....#.....#..........................#....#.........#.................. +...................................#........................................#................#...........##.....#....#............ +.#.....................................#.......#........................#...................##............#....................... +.#..................#...........#...........................................................................................#..... +........................#...................................................##.................................#..#..........##... +........#............................#.......#...........................#.#...#...................................#.....#........ +...............................#............#.....#......................#.......#...#........................#................... +.........#.............#.................................................#.......................................#....#........... +...................................................................#...#.................................#...................#.... +...#.....................#...#...............#..................................................#...#...#......................... +...................#........#....#....#..#..#...................#.........#..................#..#....#.......#.#.................# +..............................#........................................#......#.....#..............##................#............ +............#..#.............#.......#........................................................##........#.....#................... +.....#.............................................................#...#.#.#.............................#..#.#...........#....... +.......#....#............................................#.................................#...................................#.. +..#.................#.......#..........................#........................................#...............#..............#.. +....#.#...................#............................#..#....................................................................... +.......................#...............#..............#......#......................#.....................#..............#........ +.#..........#.......................................................................#....................................#........ +.#.......#..................................................................#..................................................... +..................................................#.............#.............................................#................#.# +.......................#......#....#................#......................................................#.......#.........#.... +..........................#.#........................................................#......#................................#.... +....................................................................#...............................#............................. +..#...........#..............................#..#....#............................#...............##..............#...#...#...#..# +...................................#................................................................#....#...................#.... +..#....#........#..##....#........................#...#...................................#....................................... +...................#................................................................................................#............. +.......#........#................#...#.......................................................................#.................... +..............#....................#..........................##.........#.....................................#.................. +.........................................................................#.................#........................#............. +.............................#..........#.......................................................#......................#.......... +............###....................................................................#.......................#...................... +........#........#...........#.............................#....................#..........#.........................#.#.....#.... +.........................................................................................................#..#..................... +#.#.....#..........................................................#.....................#........................................ +........##..........#....................................................#..#........#.......#........#................#.......... +.............................................#..........................#.........#........................#...................... +...........................##.............#........................#.#........................#..#................#.....#........# +#...#..............................................#........#...................................................#................. +.............#................#............................#............#......................................................... +#..........................#............#.....................#.....#.................#......#...##...#.............#.#........... +.....................#...#..#....#...................................#....................#..............#........#............... +.......................#.................#...........#....#.......#...........................................#..#................ +.........#...........#.#.........#.........................#.....#................................................................ +....................#........#...................................................................#............#..#.#.#............ +..........#.......................#.......................#....................................................................... +......................................#......#............................#..............................................#........ +.....................#...#.................#.............................#....#................................................... +..............##...................................................................#......................................##...... +.....#....#...............................................#.......#.##........#.#.............#...............#................... +....................................#......................#........#.......................................................#..... +.....#.........................................#.....................#.............#.................#..................#......... +................................#.........#..#............................................#.........................#............. +....#.#.....................#......#...................................#..........................................#..#.....#...#.. +.........##.......................#..........................................#.........................#...##..................... +...............................................................#................................................................#. +............#.........................................##.......................................#.................................. +.............................#..............................#..................#.........#.....#.................................. +..........................................................#...#.....#..................#................................#......... +......#...................#.........................................................................................#............. +#...............................#...........................#..................................................................... +.......#........#.................................................#.......................................................#....... +.#......................................................#..............#..................................#...........#........... +.............#..#.#.......................#..........#......#.##.........................................................#..#..... +.......#...............#........#......................................................................#..#...........#........... +............#.........................................#................................................#...................#...... +............#...........................................#.#.......#....................................#.......................... +...........................................#.........................................................#..............#............. +..................#..#....................................................#..................#.................................... +..#........................#........#............................................................................................. +.............#........#......................#.......................................#...#....#............................#...... +............#.......#.............#...#...........#.#.................................#.................##........................ +.....................................................................................#.........#.......................#.....#.... +.................#................................#..#....#......#..........................................#.....#............... +..#...............................#........................................................#.......#...#............#............. +#.........#..#..#.....................................#....................................#................#.................#... +.......................#..#...#............................................................................#..#.....#.......##.... +..........#............#.......................#.........................^......#.#...................................#........... +...##........................##..........#..........#.................#...............#...........#.....##........................ +..............#............#..........................#....#...........#......#......#......................#..................... +......#.....#....................................................#............#.#......................................#.......... +......#.............................#......................#...............................#........#............................. +.#..........#.............................................#.............................................#......................... +...............................##................................................................................................. +.....................#................................................#...............#............#...............#.....#.....#.. +..................#...........................................................................#...........#...................#... +##..............................#.#...#.#...............................#...........#.#...................#....................... +......................#.........#...................................#.................#........................................... +.......................#............................................................................#.........##...........#...... +.....................................................................#.......#.....#.......................................#...... +#....................................#........#.#.................................................................##.....#........ +..............#..............................#......#..........###.........#................#..............#..................#... +..................................#..............................#.................##.............................#...#........... +...............#......#........................#....#........#............#.........#..........#..............#......#............ +...#...........#........#...#...........................#.............#.....................................#..................... +..............###............#...........................................................#.............#.........##..#............ +............#................................................#.......#..................#....#.................................... +.........#.#...#.....#...........................#.....##......#.....................#..#........#......#......................... +.#....#.......#.......................#.................................................................#.......#..............#.. +...................#................................................................#.............#...#...........#.........#..... +.......#.#.......#.......................#....#.....#...............#...#.....#...........................................#....... +.......#........#...........................................#...........#.........................#....#.......#.................. +..................................#.#.................#.#............................................#...........#....#........... +....##......#.............#...................................#...#.........#...........................#......#.................. +.........................#......#....#...#........................................................................................ +...#...............#............................................................................#...........................#..... +....##.#..............................................#............#................#................................#......#..... +.........#...........................................#...#.......##..............................#................................ +..................#..........#......#.......#......................................#........#...............#......#...........##. +........................................#......#..........#......................................................................# +..............#...#...................#.....#..........................................................#..............#......#.... +...#........#........................#...#................#........#.............................##..........................#.... +............#............................#.#........................#.................................#..........................# diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_7.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_7.tst.data new file mode 100644 index 0000000..eb344f0 --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Input_Day_7.tst.data @@ -0,0 +1,850 @@ +31084: 8 67 8 735 38 +40541461584: 5 81 9 4 32 43 283 228 +6208: 915 6 2 539 148 29 +306501986: 6 3 630 45 536 64 6 +21276000: 8 5 5 91 6 5 8 6 8 985 2 8 +1432991: 3 403 4 821 591 2 236 +17115994: 69 321 254 764 3 99 +19961295: 5 311 84 6 63 +22953531: 22 95 35 2 8 +18894343830: 90 5 3 2 65 7 159 2 91 1 +4312695565: 158 8 716 615 95 59 +391: 1 326 64 +25202: 8 5 62 1 401 +5324514: 6 8 466 59 169 +658234: 3 83 592 97 57 4 +26804472776473: 7 61 1 447 29 496 71 9 +1503368: 653 23 18 824 625 +24803314445: 5 2 4 4 417 1 987 4 447 +1021069871: 7 3 2 7 9 37 2 2 8 5 58 +1614: 63 645 4 3 31 868 +4258805: 68 532 78 91 5 +4495130022: 583 78 275 37 77 +45111648: 47 98 45 855 998 46 6 +2964501691711: 9 672 76 9 754 7 4 65 +90685578359: 906 855 782 33 126 +13608006: 3 5 7 7 3 602 7 4 7 720 6 +4645623: 66 863 5 615 8 +2569495: 443 74 7 71 5 +134484: 68 55 4 77 9 2 327 4 +1143450000: 24 750 35 264 5 1 +5449: 4 2 907 7 +23061783: 854 9 5 6 1 1 7 3 2 76 5 +2930: 18 6 7 555 5 +2115475: 9 194 8 54 42 5 31 +19449: 6 1 9 4 4 769 8 1 79 905 +4595553: 298 3 4 257 5 3 345 45 +208314087: 7 3 877 815 9 9 3 2 6 51 +2905504: 46 58 514 626 763 +963368: 48 425 484 6 370 +9980664: 1 98 80 5 98 68 +652568: 7 197 871 290 68 +45827: 15 3 665 9 154 +722: 2 21 337 5 357 +27652464029930: 7 829 9 700 7 9 3 7 4 1 8 +6868809: 45 2 9 848 9 +1175: 7 5 98 +2133: 17 2 5 36 5 +528: 55 1 5 8 9 31 +8206806: 1 4 9 4 99 6 24 97 2 5 6 5 +37530658373: 1 2 8 5 8 4 5 7 3 946 373 +65484738025: 47 5 4 43 8 6 43 7 7 26 5 +2157: 8 2 1 93 8 568 +23082508: 7 5 3 3 2 5 8 477 2 3 1 1 +29090880: 45 28 37 8 78 +1262763: 1 1 27 729 93 16 2 75 +1409848204234: 7 87 622 84 820 42 34 +3304: 6 55 4 +1196013120: 8 340 179 35 192 +124278235: 4 4 69 225 78 235 +2735190615: 273 2 3 1 906 1 5 +52192: 104 89 6 45 10 72 +573777850: 680 31 807 8 50 +35694425: 82 38 921 61 871 84 2 +658877085778: 7 86 55 156 10 977 8 +20860682976: 546 3 7 930 7 954 42 6 +224616: 441 46 8 36 73 8 3 45 7 +358087: 7 236 9 45 2 9 3 9 6 4 2 5 +6354432: 55 792 7 153 639 7 +1923524: 177 175 9 3 3 528 21 +117340: 9 82 159 +1234059: 64 357 9 45 6 +2651349895: 8 526 4 7 9 1 6 42 9 89 5 +3884759: 737 251 3 5 7 +633925731: 346 4 3 5 472 9 7 9 4 8 9 +43555: 37 4 60 25 53 77 +4230519: 2 2 12 8 9 9 91 41 2 5 2 3 +5489: 69 8 9 515 6 +82630872: 33 1 2 19 81 9 4 5 6 6 33 +203340489: 181 55 1 4 112 9 +72068: 7 197 4 5 9 +168389664: 1 683 84 5 667 +30367442: 2 657 6 4 384 5 673 49 +2846739576: 4 8 743 9 3 9 829 719 6 +78401: 77 4 9 93 5 +627886555182: 1 61 78 8 65 4 57 94 82 +53361: 85 3 592 1 63 +154268: 48 43 3 892 4 8 3 8 1 +525075263: 656 34 4 8 6 6 +248294606: 6 896 24 1 83 9 4 1 7 75 +9082152: 182 66 9 8 6 7 7 2 195 2 +1657909631: 8 5 76 7 5 95 2 9 22 544 +484430: 2 5 64 7 49 961 83 3 +11192683920: 6 26 7 8 5 8 6 3 8 372 1 1 +52887178: 4 863 61 118 60 +896861: 88 9 7 671 4 187 +721710054179: 135 891 60 541 81 +12403134: 92 6 34 58 6 5 7 9 6 6 +33615296: 312 44 55 9 3 1 572 +183192: 35 8 5 5 612 28 71 3 4 8 +1244794661146: 6 4 9 6 1 6 4 57 7 685 8 6 +362827266: 86 643 395 8 738 813 +1477891785: 86 6 2 8 13 2 91 7 1 8 8 +5983: 3 888 5 291 2 57 6 +73739569: 668 6 687 89 6 69 +902757501: 855 24 627 1 63 26 9 +177442819: 6 9 401 2 4 52 256 4 3 +87403263: 95 920 3 191 7 65 +223398085: 57 3 1 8 11 50 45 8 9 85 +76471: 81 472 2 1 6 +102739: 1 284 1 8 9 1 +98723250300: 79 119 1 1 2 143 5 7 21 +37813543: 28 4 5 813 540 +21449386021: 185 4 9 9 3 6 4 46 7 1 3 8 +355140846: 39 4 6 90 845 +25511824797: 3 7 4 746 48 55 3 15 +11681963: 5 76 9 67 1 35 3 8 50 3 2 +10812636790: 3 778 3 954 790 +144: 90 14 40 +2954988: 6 3 3 16 4 95 2 1 7 3 9 3 +1666626: 282 573 74 39 1 46 +380854191760: 2 7 24 5 54 177 5 5 664 +20485976: 47 155 643 323 3 8 +562264400: 8 1 3 1 5 74 3 67 309 88 +5054: 67 3 55 599 604 +5790: 8 6 4 3 7 43 1 9 8 4 17 6 +1423: 232 6 23 2 6 +2214885600: 1 5 2 1 3 50 183 41 82 3 +586061: 507 69 31 975 3 +68594249: 2 9 373 9 50 340 3 32 6 +380980: 95 4 980 +7510: 5 4 825 4 71 9 +451918: 90 50 18 11 106 +16294: 29 134 8 65 4 1 455 3 +10536237: 6 6 3 9 1 1 4 724 4 5 1 97 +24566372: 1 34 8 3 90 592 85 87 +284990: 5 5 5 91 7 5 88 5 +1108832032: 80 93 29 3 727 88 +215422984: 63 82 417 8 70 1 +37636247: 3 875 3 39 615 6 73 5 2 +511718662: 3 505 3 718 23 42 9 +172674894: 6 76 9 6 7 5 6 6 7 7 22 2 +2494298: 21 8 468 606 6 +1164891: 12 97 891 +1303421387: 8 604 17 5 6 48 95 87 +113169: 242 889 55 7 6 +28083319654: 7 1 6 2 780 4 8 9 9 3 8 7 +689769: 2 479 72 6 +664006: 603 60 997 9 +383810: 312 123 4 7 +278838736: 254 851 15 86 76 +35266920: 4 8 65 481 94 +2342060: 5 55 2 43 99 710 +61499384: 760 4 83 423 2 4 +1337677: 769 562 5 67 3 9 13 +20708670: 1 7 8 1 9 9 6 70 6 1 3 57 +22607703347: 23 6 7 6 7 67 80 39 44 +422584: 1 6 185 2 95 23 1 878 +16961283369: 7 614 720 9 609 1 9 +7743900: 12 80 8 38 33 75 525 +5198: 5 14 5 5 3 +7706: 5 765 6 +60799047884: 9 6 5 331 7 2 2 6 3 3 5 87 +373279812855: 74 65 5 946 16 571 5 +273426612: 519 24 87 2 656 3 958 +449: 250 94 8 9 88 +69949442: 8 92 4 1 15 33 8 3 1 2 2 +2540247614: 578 3 346 73 29 5 5 9 2 +72710790952: 99 4 87 255 85 7 4 +43727113667: 3 1 333 66 106 71 2 4 7 +74125836117: 4 5 52 6 25 35 9 3 521 +527906: 54 9 9 931 29 +139782: 11 33 6 526 918 +19218: 704 402 9 522 284 8 +8668810: 40 8 6 3 6 2 84 2 2 75 7 3 +1487663526: 9 9 517 70 2 6 2 5 94 8 4 +20610: 1 152 3 2 45 +359112: 323 5 47 54 7 6 3 8 4 2 4 +3198: 1 7 8 8 24 7 1 4 41 7 27 +41189: 13 9 3 624 5 +4720776758223: 47 20 776 758 222 +195264: 4 2 339 36 2 +16012371600: 6 9 6 3 6 3 95 3 76 4 185 +3864074: 3 4 426 84 73 +45674415: 42 4 9 7 82 410 5 +1175718380: 6 340 5 911 746 +51156: 3 4 4 540 87 +4831584: 2 43 8 2 55 5 7 5 69 96 +874516400: 874 5 16 368 32 +220190: 7 974 32 38 1 7 4 172 4 +429894584: 1 9 5 7 5 98 94 9 6 9 58 4 +114640: 3 7 31 52 7 6 1 772 299 +10759: 23 1 6 12 7 2 1 4 81 28 7 +360390945715: 2 431 696 27 213 20 5 +3140056: 783 9 5 1 43 9 8 864 +15606936: 96 6 40 639 172 +1134226: 9 824 46 152 2 +640: 5 32 2 2 +46339061240: 7 20 9 987 5 715 618 +35646030: 42 1 885 137 7 +271367519: 7 45 964 127 96 893 +495104: 1 960 8 56 64 +3480: 7 1 12 3 1 40 +2608290: 91 95 46 3 3 30 +55890251: 1 65 7 9 4 81 454 3 582 +541872: 774 7 46 2 27 +309960637: 8 43 4 90 640 +14270: 44 8 875 1 9 6 1 8 3 5 5 +2461824: 1 4 1 9 7 12 61 71 1 4 1 8 +53575: 6 73 9 7 118 3 +3128658: 93 9 2 2 20 8 94 331 7 +223592: 5 43 381 5 9 4 5 884 8 +12112807054: 870 119 7 61 15 274 4 +27775914: 6 1 781 1 9 18 4 3 5 889 +279477744: 33 3 9 411 87 763 +9896932013: 647 3 331 353 343 46 +8127207475: 8 1 2 720 3 4 29 9 4 91 3 +3683665: 981 751 5 5 8 +7203976: 3 51 7 5 629 3 5 9 9 8 5 4 +12182439609: 5 57 9 9 9 7 9 8 4 320 3 3 +6547981: 9 727 2 47 84 +269451007: 9 262 62 4 992 +1760418: 99 34 1 5 99 96 4 27 6 +4881246: 5 3 46 2 4 67 57 8 +104401: 68 69 8 72 1 +57612060: 6 270 53 61 11 +65336211: 92 71 912 169 540 1 +1056886344323: 8 990 3 9 1 6 18 695 64 +431112: 3 19 108 92 69 +1497953467: 1 640 5 8 6 9 38 65 +20122455: 24 76 903 9 +112719469: 32 80 7 13 6 456 4 6 +1178483161: 18 8 6 29 75 754 4 3 4 +119908723232: 48 39 7 5 3 73 8 64 30 +21106565: 350 1 37 4 966 2 1 7 2 2 +70193: 4 53 9 2 7 701 59 746 4 +3034: 21 45 68 816 3 +3005: 2 89 24 92 7 58 +81430304: 124 4 989 2 83 +22260548: 7 15 212 54 7 +494808: 87 6 665 6 8 +6723: 4 81 13 457 13 +463069864051: 995 8 4 91 7 465 10 +913887: 3 6 7 2 752 9 5 1 36 5 2 1 +824408862: 82 43 9 86 8 94 6 5 +3431928092169: 5 3 67 76 755 15 362 6 +502132176: 9 109 624 964 702 +83412526: 1 4 7 2 27 405 3 1 721 8 +407094: 27 7 60 433 7 5 +701412: 2 5 84 648 97 836 8 +25707842242: 311 3 2 3 711 8 8 2 2 42 +505119: 1 44 41 7 40 +295936440: 9 27 963 89 272 4 38 +59813: 595 97 657 457 984 +297534: 348 61 1 1 2 7 296 46 +143500: 618 32 8 31 19 1 82 7 +138312966147: 5 29 5 3 2 2 7 50 4 8 96 2 +311740: 5 76 5 37 1 1 597 3 20 +4908292: 9 785 31 59 5 +6141663: 204 7 25 3 5 1 7 2 9 6 2 2 +746258: 1 3 61 6 48 21 4 11 81 5 +310680: 6 7 59 782 9 45 8 +170615594: 447 3 7 74 35 7 7 6 6 6 2 +160656040: 75 78 105 603 7 +5577322182: 47 49 942 2 24 5 7 1 2 7 +48328: 3 7 4 7 9 149 9 456 7 3 7 +155259452737: 56 746 874 2 8 342 +35341: 5 76 93 1 +22236341: 3 381 88 641 5 1 +44989863673: 96 6 5 6 71 2 3 381 7 3 3 +606: 4 80 50 4 70 +12733: 65 9 2 86 5 +22463298: 24 88 3 5 80 1 4 89 8 +377019478: 6 748 5 1 3 4 1 9 7 2 3 8 +19642752: 696 5 7 544 51 +702511961: 887 792 1 7 961 +6024648: 8 86 75 47 168 +104509650: 5 1 482 62 72 597 7 70 +1135227: 2 218 25 27 45 5 5 +224: 2 4 6 2 86 100 +173902: 99 277 462 89 4 99 +823929: 9 9 8 5 929 +25781529: 60 9 8 4 7 65 9 2 4 213 9 +15984006: 38 6 5 9 727 7 6 4 96 1 5 +911: 7 6 1 868 1 +1319338035: 7 6 1 7 6 438 1 448 5 87 +281978: 561 4 9 5 5 56 1 4 1 9 5 3 +26739745316256: 3 772 8 21 75 45 5 75 5 +804636: 50 6 26 542 927 +4368: 9 87 1 8 42 +1339970241787: 2 6 8 17 4 82 9 29 4 95 2 +27896197888: 8 8 849 619 66 521 +1624907806241: 9 270 3 9 649 18 9 44 1 +804053256: 531 30 7 9 25 91 6 +19887: 394 48 682 27 264 +576579196: 34 7 5 75 6 8 1 5 5 5 91 9 +4075638918: 886 5 23 97 1 5 4 7 48 +1242184922: 7 4 5 7 88 9 393 4 925 +816: 5 2 5 6 45 6 +16640: 34 60 177 +55047199922: 5 674 9 97 58 8 985 7 1 +202: 1 57 3 8 1 4 28 2 +128584480: 34 6 835 650 94 8 +14447: 166 3 28 420 83 +302594: 5 6 2 511 83 +100153: 4 389 35 70 60 43 450 +2185551: 38 3 43 19 3 +6746: 4 6 583 93 784 39 +3486469538: 8 47 3 40 786 7 9 1 19 +2105210: 7 4 8 2 6 9 8 31 7 56 3 2 +47524069: 6 4 610 811 106 4 85 8 +24206: 25 599 13 2 19 +83444222: 309 3 9 96 1 8 38 21 +1157600: 383 930 42 92 800 +135424: 274 494 29 6 33 +41759168088: 63 4 91 3 77 2 33 9 94 +912: 6 1 9 58 1 838 +1483426560: 4 6 1 69 801 406 692 6 +1291767304: 41 475 889 4 88 65 8 +4740630: 941 32 56 2 87 +145255683: 6 928 2 270 96 3 3 +2804256: 2 563 36 41 6 91 8 +3662: 592 6 91 11 8 +2070609492: 9 460 7 1 66 352 9 8 5 +58896: 73 2 5 17 5 15 8 +161664199: 5 9 8 9 746 32 2 1 9 8 +28767133: 6 69 10 43 37 96 +321150750: 6 3 33 7 6 191 1 74 355 +32221373185: 931 4 3 78 56 33 8 +125188150: 1 84 8 299 7 6 3 623 38 +529: 1 2 63 54 350 +371329981: 53 730 8 78 760 4 57 1 +8636010413: 34 6 1 516 8 4 4 82 1 1 1 +16436: 8 8 36 7 70 +2610384: 6 74 93 329 8 42 +2511598: 21 497 80 7 10 12 5 +2051303: 68 6 53 523 6 91 +3583491: 58 3 3 8 852 79 4 5 5 46 +2567: 5 3 32 4 3 +37412197: 63 94 238 46 197 +660996: 61 61 7 43 18 +772595115: 1 7 2 25 4 2 314 72 5 8 6 +1125072: 6 82 64 2 3 7 444 2 3 48 +40030036: 9 68 7 66 646 +26483808: 5 6 9 862 16 33 96 +89503594: 2 91 80 112 72 61 +34849136: 7 14 6 1 9 857 68 88 +1052469452651: 5 94 9 5 5 5 9 870 8 8 3 8 +2333026: 2 9 1 8 36 9 5 5 75 1 7 9 +2142047: 55 2 6 1 60 3 9 40 6 5 +18329059: 1 7 398 2 523 11 1 +1515: 1 5 216 3 1 214 +636751072: 65 7 58 3 967 7 759 9 4 +65121: 3 648 21 +1203384: 855 2 9 12 7 +1231: 567 1 29 21 1 612 +5830477499: 416 2 925 357 7 +39904736: 2 2 987 58 51 2 1 8 +7192: 4 881 3 11 8 +984797352: 86 84 99 3 1 459 +4330380: 444 3 8 3 797 7 6 9 1 5 6 +174675: 8 41 206 75 824 530 +644000: 2 4 89 4 17 7 92 14 1 4 +275310: 6 11 31 58 888 4 2 9 2 +2980025: 29 72 7 96 4 61 +1100140: 3 8 9 91 3 9 466 5 6 8 3 9 +26416153: 5 3 64 9 4 764 7 7 5 4 6 7 +392307: 644 22 589 2 30 +1703108: 23 789 9 532 7 8 +84496967641: 9 8 7 71 696 158 605 9 +4926: 5 47 3 5 2 6 60 +1238: 7 20 5 8 75 +4166368: 4 8 393 74 22 7 +264286: 5 5 2 6 11 26 80 115 8 6 +5390070: 38 5 77 813 35 3 54 8 6 +7109213251: 798 2 5 88 89 50 +11479038526: 245 1 5 7 333 456 3 7 9 +35577532: 71 155 500 25 5 +516: 7 4 6 4 1 70 9 66 1 5 39 2 +12159: 9 6 1 225 9 +593081: 1 92 6 4 343 2 6 8 3 41 +52698: 89 592 7 +36739952992513: 9 4 779 4 627 92 4 8 3 7 +2006: 22 8 90 75 5 8 +83601: 68 30 8 5 1 56 3 1 3 7 +478266: 1 4 8 6 3 724 612 8 286 +297000: 49 50 820 9 90 6 88 +1229910807: 262 102 46 6 600 807 +185356128: 44 5 401 7 82 115 48 +246521: 787 6 4 6 307 +86285202: 25 96 42 856 402 +23586: 70 1 3 52 9 5 +18086584: 46 6 144 8 27 534 7 +33690: 4 69 4 56 89 +46311716: 12 3 41 18 619 6 +214023: 5 793 66 7 53 9 +6755: 270 2 799 12 5 +14223284: 9 9 7 5 7 8 2 111 1 45 4 8 +2291081: 3 2 632 725 81 +284789717303: 605 3 9 3 960 30 47 49 +17262: 105 4 3 1 3 9 3 240 2 7 1 +157051: 9 7 6 181 6 9 3 3 451 81 +1349805670: 59 4 874 26 71 +2361910101: 5 623 7 3 38 6 8 1 3 1 8 2 +45459840: 8 42 71 1 3 8 4 9 8 9 384 +644841302: 7 658 2 70 62 68 2 +196349: 69 6 192 81 2 4 +25233495: 14 6 1 3 34 83 14 +2502364627: 9 73 7 1 76 4 7 95 8 5 27 +891841251: 79 62 560 2 63 6 51 +526: 95 9 4 1 417 +46610701: 46 605 5 697 4 +101160: 5 5 6 5 9 4 873 8 4 3 3 63 +74700: 86 2 765 47 83 +487499: 9 52 6 6 85 502 +12930315: 4 77 3 9 48 9 1 5 +818480: 3 4 8 966 10 3 7 1 4 5 4 1 +8956575: 6 8 827 5 676 864 35 +6467920693: 5 8 5 48 652 1 8 8 1 3 8 5 +877: 71 10 689 32 75 +53325209060: 554 965 941 2 53 +23291024284082: 9 42 193 47 6 9 515 48 +929424926: 3 6 29 42 492 5 +17829266: 6 56 4 53 63 +12276: 2 5 55 3 66 +181712606: 595 74 75 412 6 +8831966: 2 56 30 2 2 39 65 2 9 8 7 +661454663997: 231 3 453 350 8 10 78 +237094: 3 3 311 50 646 12 +5707220457: 71 82 86 966 4 920 55 +152255376595: 76 17 40 820 65 163 +1347305: 9 4 8 65 664 3 4 3 701 9 +70155: 91 2 88 257 706 58 1 +60468016: 640 1 23 5 27 726 812 +408075824: 40 74 6 758 22 +149767280436: 1 221 860 788 436 +1581985302: 83 9 258 3 8 38 72 3 6 +157694208: 94 8 52 3 5 15 56 1 3 8 +3814512: 5 6 4 8 8 5 6 5 5 37 9 +4548610: 66 9 3 3 7 57 50 1 9 +21119484: 38 822 28 29 876 +5946398: 661 589 67 71 91 57 +151648362: 894 75 5 9 93 54 317 +10321152: 99 807 712 2 8 +114489: 6 5 4 8 31 84 37 9 +145909: 75 70 909 +106820010: 722 269 10 2 55 +1480075: 44 2 198 9 3 71 691 6 7 +28827: 19 1 5 7 6 9 78 1 8 849 3 +7566: 7 244 8 141 62 23 5 83 +5508361: 495 4 214 13 1 +4988516: 5 33 55 12 568 66 2 97 +184373: 1 9 7 9 5 1 1 33 9 11 20 +199283931852: 3 5 8 4 158 6 3 539 855 +1666857472580: 77 654 23 180 331 +14487733: 557 891 68 9 9 5 828 +1198391800: 231 965 8 84 2 93 1 4 2 +126143604: 86 2 6 463 88 55 5 3 +153392452209: 6 482 7 3 939 11 5 4 9 7 +12681: 5 7 2 9 4 7 44 2 5 65 4 9 +989: 1 9 99 +93840: 98 38 46 15 +217780: 419 3 516 23 5 +33264: 447 87 973 5 22 +7178025: 995 9 5 2 87 7 527 20 5 +9028: 3 83 7 5 3 +12935: 711 5 6 3 47 +3659499181: 365 925 6 229 9 5 181 +701521: 9 4 3 64 7 61 8 26 67 53 +340704429: 52 78 84 319 7 7 99 +62241150: 7 176 842 8 77 6 +112424: 5 1 8 936 82 8 183 92 +723672: 347 67 1 2 874 +3066: 51 5 8 8 8 898 +1274880: 23 52 542 9 87 +2517506958: 37 68 780 726 9 59 +110283391: 3 52 3 53 8 3 8 6 3 903 1 +4536: 83 5 81 9 747 2 +87466: 19 46 6 3 +605783111392: 404 91 601 37 741 4 +58853775: 4 485 79 4 384 399 +47889063: 516 64 89 984 999 29 +23241016: 7 3 5 5 6 1 3 819 27 9 9 1 +27260572330: 9 9 7 9 28 57 2 3 8 2 5 5 +233756964: 61 958 6 5 1 5 26 8 314 +781268: 376 6 743 4 692 1 +69945120: 7 4 539 5 113 5 6 4 7 73 +267715242: 92 8 663 9 4 3 632 3 1 2 +1896465174: 976 920 1 4 651 72 +2800123: 203 8 17 9 384 23 +206464: 3 7 3 186 1 +127766017: 74 12 9 35 714 1 24 1 +24: 7 5 1 9 3 +10510918116: 59 46 109 181 15 +3621981: 2 248 954 2 1 3 9 78 +7258534: 70 96 523 840 898 +12932425: 928 6 43 57 8 54 1 3 9 7 +40426441: 6 8 7 7 3 8 1 2 1 18 509 9 +258400: 70 120 34 40 +895: 81 303 38 2 51 +80809920: 932 69 727 47 995 +21779938: 9 411 92 64 226 +1613: 4 401 4 7 +43158803498: 36 222 9 7 26 39 6 9 9 1 +4366703135: 57 7 93 7 2 70 982 8 6 +167694750: 9 89 350 76 598 +1913663802: 64 299 63 6 2 10 2 +1444191: 556 9 11 4 6 5 1 41 83 7 +1003880435: 19 82 746 977 863 +4155: 72 810 13 4 575 +96614034: 15 6 361 72 6 2 3 6 59 +1688: 5 9 1 5 3 8 8 +41338714328: 41 338 639 75 328 +9197318140: 2 59 6 1 690 8 1 5 227 4 +46479360: 61 7 4 2 9 7 39 272 6 5 8 +404048233: 951 7 8 576 2 4 235 +11494468882: 3 187 5 9 1 3 24 2 6 7 5 7 +1922: 6 233 457 6 61 +6955: 9 7 8 4 5 7 4 2 4 5 202 5 +31285182: 23 136 506 7 63 52 +8117862: 437 1 6 921 2 381 46 6 +47589: 9 94 374 39 7 +2256037: 60 376 39 +2527024499: 4 3 1 7 8 10 3 1 6 51 91 +37690: 3 720 52 6 1 88 1 +4175256007: 4 8 5 39 20 2 34 2 23 +380247474471: 2 4 2 45 497 88 5 7 2 7 1 +21474: 9 9 9 1 17 4 784 8 4 39 9 +3277745: 18 2 5 4 414 89 271 +20611117618: 3 3 2 4 8 1 4 9 39 76 19 +6706090709: 799 2 3 1 8 9 8 4 7 872 +5792: 618 29 68 8 3 69 +410827821: 4 927 73 453 16 409 +233173828: 3 74 634 6 896 3 4 7 5 6 +187959: 119 32 2 556 23 +486043544: 3 230 57 52 54 74 62 7 +2347696: 4 1 35 40 19 769 8 +4278588041013: 44 7 29 4 7 456 7 4 684 +5637600: 58 9 54 25 8 +4977330: 9 7 6 79 3 9 8 838 3 4 7 6 +22497: 82 79 983 1 1 3 9 102 +35382699154: 77 617 2 14 2 46 554 +16502056: 8 6 58 319 488 5 819 +756793: 88 3 3 944 192 3 1 72 +4214: 6 697 1 5 27 +12450094: 2 2 2 6 3 629 9 857 5 9 4 +1618088: 76 4 6 1 7 7 62 90 5 1 8 +1060491: 3 361 14 906 66 1 +266689086: 3 2 17 83 5 6 8 42 6 5 3 3 +68560832: 3 1 82 6 8 5 3 308 2 1 2 +1326: 423 846 4 1 8 44 +68085: 674 6 78 7 +1840707: 85 9 62 6 804 4 3 +13403416: 2 1 3 5 4 65 7 8 7 3 933 +2093: 56 6 868 26 614 9 8 +12213922: 73 703 14 1 17 +224283: 640 7 4 5 8 4 +97770: 1 214 7 27 1 8 378 +25990: 6 5 5 87 2 7 767 6 92 4 +299184551: 325 2 92 544 7 +63062194: 70 9 605 7 46 123 825 +68322843482: 28 244 28 434 82 +37380255: 80 1 935 87 493 4 5 +305472677: 509 6 7 267 7 +46: 1 45 2 +2250: 29 1 75 6 69 +191773: 19 176 5 8 +91083792: 4 7 236 878 7 5 6 4 3 1 1 +335524376: 8 53 51 68 668 158 +29640281671: 7 8 4 6 3 5 7 44 7 8 8 90 +497340: 9 3 762 7 3 6 3 5 6 +279527: 402 67 149 4 1 3 +279694: 1 935 96 765 97 +224785469: 2 1 9 5 68 10 2 3 9 3 7 23 +10732502: 15 5 477 5 60 +7497250: 8 936 1 9 249 +56971: 4 76 9 79 91 +41393070: 2 53 5 781 70 +12168228431496: 64 3 8 2 161 9 7 831 3 +117142318737: 3 6 6 9 2 60 436 3 9 6 9 3 +158260: 9 45 5 4 78 +2363212870: 2 363 212 4 52 420 +447325: 463 2 795 355 25 +4751: 11 48 9 +841: 81 9 97 2 13 +3346211520: 3 9 858 11 522 +697352492: 67 1 4 4 18 3 455 69 9 5 +7319280640: 61 45 7 709 7 656 80 +27260: 7 9 344 79 5 +10737320581: 7 8 5 5 55 7 8 6 294 70 +17943: 9 839 921 18 6 9 4 +35412: 6 724 1 9 8 580 +6453: 161 1 475 81 9 +840798: 975 287 52 3 647 517 +17854: 3 32 69 42 7 655 +1735468803: 3 86 8 5 9 91 68 3 26 80 +1955340326: 54 8 292 2 54 5 327 +7614444: 86 7 718 824 7 88 7 19 +108369902185: 3 9 115 814 7 9 5 7 1 8 6 +139223: 8 3 53 2 77 38 6 3 2 7 4 +2142640: 49 43 35 566 72 +266228026: 3 80 51 8 597 5 62 24 +68870224: 6 62 870 22 4 +393281: 5 4 109 9 32 77 2 22 9 +22257035: 29 25 685 5 6 3 597 3 5 +1480: 679 67 130 537 9 58 +11720991: 1 8 23 7 364 5 5 5 59 7 +156699: 663 9 301 5 5 +1292069: 17 760 21 42 6 +83229203: 100 1 4 7 1 808 321 9 2 +15899250: 986 375 43 +80808: 40 4 521 212 104 +10465625002: 9 77 71 47 50 1 425 2 +819408192: 31 68 991 7 3 87 +667: 8 8 2 7 +26860: 200 45 23 56 4 +49480468: 43 29 90 127 +5186813940000: 504 967 5 825 5 86 2 3 +19174057: 6 7 652 7 51 7 +72691616664: 991 7 733 662 6 38 +18573243: 343 360 489 9 900 6 +3883810560: 6 88 2 8 4 438 8 980 6 +19738: 5 2 508 38 54 +703764: 13 8 48 495 20 77 23 6 +273920: 7 629 987 89 8 20 +911: 7 5 9 4 592 +33029: 50 644 822 7 +524702: 7 153 24 79 7 3 95 17 +109342: 84 130 3 3 2 2 80 +35742400: 8 1 706 7 51 174 6 6 9 7 +1483641: 2 64 70 737 153 +7397: 364 5 8 4 85 +10622451329: 5 80 3 7 1 4 7 879 3 1 2 +1513454743: 69 31 8 732 963 91 +87816030: 47 1 7 80 3 8 1 6 417 1 +2957777379: 30 265 7 777 379 +279602: 759 1 23 4 4 274 9 7 +2793723: 2 10 66 1 6 24 2 723 +13426560: 36 37 180 8 7 +72281484: 8 25 758 6 17 9 36 +15157818475: 26 124 1 5 7 818 475 +1726473: 857 5 41 9 819 2 +69102877793: 9 997 2 91 7 17 711 7 5 +1182849: 2 249 31 38 4 129 8 +81125766: 7 2 670 17 308 3 789 +20198: 8 6 3 396 2 +130416799: 10 27 483 6 7 9 6 4 +29969: 7 62 38 7 91 5 4 907 +4071: 3 10 4 7 23 +3447616557: 858 111 362 9 54 +31720: 38 59 43 63 4 2 +10386966: 1 3 8 612 2 96 5 7 8 4 6 3 +2515969: 2 768 9 906 8 +2085272: 18 65 114 297 25 +245966149: 96 3 146 5 6 4 2 2 3 731 +936628: 57 38 19 887 90 88 +434515299: 905 64 9 8 56 99 +7751781085279: 8 7 900 819 9 389 11 +6523: 4 61 26 151 28 +507242778: 6 822 69 44 4 459 1 6 7 +4557: 2 48 3 9 169 3 +6172533: 37 9 207 43 7 9 7 7 12 9 +4528512: 7 27 871 689 5 6 63 +35178: 1 682 81 46 80 +40198: 67 4 25 6 +12418780: 54 7 6 8 351 6 164 11 +37440: 24 9 8 12 870 247 32 +7303307255: 35 695 324 6 64 8 52 +42929: 9 124 38 5 516 +101311: 2 99 31 1 3 +3786723: 1 685 92 6 3 3 +757762: 76 997 1 3 38 +728: 567 6 23 42 90 +19126995: 593 1 70 65 59 58 458 +83647: 8 828 47 +1250549: 24 939 1 71 50 +9778: 9 173 39 15 5 3 39 262 +18714: 89 265 5 13 4 43 1 3 +10446534727248: 61 465 74 62 990 8 6 +4136: 12 289 668 +986: 919 65 2 +382284584: 655 1 7 1 144 578 7 1 +2087668: 521 7 75 94 48 4 +13551: 62 69 8 36 9 +54736659: 504 52 8 38 17 261 +46609728: 5 9 6 5 78 8 818 9 3 1 5 6 +8001: 55 7 6 9 7 3 +2164: 20 62 3 7 8 8 76 +34288954: 174 227 512 141 854 +149143039: 568 157 839 4 4 8 745 +858002: 715 600 1 2 2 +355275: 3 550 5 22 6 +1161901609: 9 3 7 1 9 5 8 2 99 9 492 4 +14265505: 7 4 77 237 684 +93906: 1 23 457 4 78 +280258704: 396 16 217 528 81 +2447: 237 9 217 9 88 +21103892: 688 2 139 4 3 64 55 7 +572320: 571 889 7 8 7 +22940: 74 1 31 10 +453933144: 884 1 7 2 8 75 164 94 9 +9387402762: 447 7 134 3 70 3 57 2 +628: 2 96 5 6 10 +58729373: 53 4 53 29 373 +16162243: 2 3 90 75 92 139 927 +1806271: 4 319 283 5 13 718 +1908: 72 26 16 8 9 +87108518916: 8 349 61 129 729 4 +1120226562: 81 8 1 54 7 89 8 5 2 32 +5619463232: 7 860 2 3 9 3 24 29 +28275666: 4 35 65 440 227 +57418552: 8 96 4 18 9 6 4 142 +337848089754: 893 778 54 82 7 9 5 +101244761: 2 8 4 1 222 8 1 631 6 4 5 +31091: 2 94 6 323 9 4 4 53 8 3 +9551142: 2 7 4 4 92 9 87 2 54 +431798: 2 827 32 904 554 96 +368064: 62 5 31 10 568 6 +641856: 80 23 1 2 8 +356332: 848 13 8 38 853 4 +1530148: 107 13 11 13 33 +10595: 4 93 3 71 524 +13825: 37 88 128 73 4 +485809: 9 597 19 6 996 5 +6598799: 541 2 674 617 6 5 3 1 1 +15595884486: 6 36 560 69 8 961 +655845: 5 5 2 512 8 298 7 115 +167578404: 716 3 162 9 916 19 +539849: 3 7 1 594 25 +3430232: 9 15 29 9 2 700 7 56 4 8 +4196: 951 77 9 8 4 4 +24625387: 9 6 8 6 9 37 846 38 3 8 8 +4318272002: 10 7 2 3 80 6 5 2 7 306 2 +49392736: 80 63 4 72 34 2 944 2 +97244751876: 3 45 6 3 7 293 8 5 9 2 3 1 +2827209446: 384 6 35 4 9 6 7 3 441 5 +773376516: 7 73 37 651 5 +466781: 21 76 5 364 782 +314242938: 77 30 223 22 610 218 +654638167: 14 95 6 631 7 169 +11952: 76 23 69 7 50 439 18 +7579925: 860 37 435 47 5 +1618: 80 4 7 711 59 +33287: 1 822 40 354 48 2 3 +126232779: 6 3 841 9 5 4 77 8 34 9 3 +155627: 1 6 99 989 54 95 13 99 +713339897: 9 7 5 8 9 30 430 +131670050047: 231 19 75 12 5 1 4 8 +7727322: 2 795 9 753 513 +349733: 615 8 637 271 4 6 28 +2481710424: 1 58 9 49 1 3 96 5 9 3 8 3 +261963659: 9 7 4 7 2 308 655 650 9 +51571974: 7 5 579 7 848 1 1 3 +20290: 3 85 3 467 36 1 1 6 196 +2626: 2 6 96 545 2 +22878: 2 2 80 275 4 21 3 9 +575535: 54 4 14 18 10 8 73 6 3 +477517: 43 3 4 5 8 46 7 50 +1384703: 4 401 6 7 738 51 +891003337: 86 6 12 4 825 3 3 39 +90028742465: 608 3 1 37 4 3 4 2 4 6 2 1 +231588050: 35 3 1 586 1 2 8 1 3 65 5 +1072: 7 9 995 9 5 +11381395: 73 4 974 2 36 2 435 7 +3841: 847 4 87 358 8 +88734868: 3 6 9 8 9 2 7 5 4 838 725 +280240227: 2 981 23 1 48 94 +343965: 6 35 67 885 23 +14417393: 9 4 7 2 63 6 38 35 90 +227912: 8 183 31 19 3 72 9 8 1 +2511501082: 1 946 88 2 430 3 7 6 2 4 +9770975: 2 207 7 58 9 4 36 33 5 +181098129983: 36 3 6 1 3 399 7 9 8 1 8 6 +5511886: 749 92 63 2 9 4 104 94 +11912: 3 167 581 43 15 +54194003: 24 5 7 50 632 +40135618285: 5 5 5 4 8 7 7 38 182 8 3 5 +8817032: 460 2 2 6 4 4 7 2 57 728 +236071: 566 414 610 196 941 +1699: 874 26 799 +9082: 59 85 7 9 10 +14399715: 7 6 5 84 32 1 9 9 8 756 7 +957922: 5 76 282 265 853 +519850: 854 1 1 608 8 +494598: 8 8 8 9 1 2 4 1 3 4 17 78 +717301: 769 92 138 844 1 +79732051: 8 1 7 80 45 5 221 629 8 +193315: 5 329 577 536 60 +443120: 71 7 62 5 764 4 +799531202: 320 693 332 72 50 2 +25055194: 241 48 900 7 194 +148742749564: 341 93 73 435 240 65 +2975722: 802 811 6 919 2 +69614316: 3 9 65 34 9 9 6 3 1 96 59 +9211672: 92 116 51 20 +1384: 5 687 2 +2227754259: 312 1 75 78 952 +1980: 6 46 5 70 6 +1051: 74 41 921 7 8 +7224: 69 9 6 405 7 +100058717: 58 44 628 7 145 31 9 8 +13325842: 86 4 981 7 534 49 5 9 +135606016: 86 1 1 7 2 4 8 877 96 8 +188416: 4 8 735 32 8 +13081748: 306 58 2 737 +3408461: 654 396 4 34 348 94 9 +19518: 2 1 8 9 1 54 9 25 9 616 2 +31719: 65 6 9 78 597 +246572: 26 98 9 4 393 9 81 2 8 +127805458: 40 71 9 1 5 457 +7811: 198 16 5 7 31 1 4 794 6 +1168319105: 5 2 1 2 4 44 8 93 9 12 8 8 +7211685: 411 5 7 562 8 554 93 5 +4028985022: 77 86 48 505 604 +127755655140: 73 70 5 3 8 31 5 140 +208269903: 3 75 267 990 3 +956027222: 455 20 5 10 4 3 5 7 +332644: 63 1 8 660 4 +739903: 8 744 1 67 3 630 9 1 5 +449841: 8 6 3 1 9 9 4 9 608 73 88 +3162: 88 4 6 9 7 3 53 7 9 17 +123780: 961 528 514 51 9 60 +397: 88 299 1 1 9 +20327221321: 10 40 83 98 1 460 7 6 +22759444: 366 7 6 3 241 6 +1397068088398: 419 2 5 161 5 6 4 414 1 +5172: 6 431 2 +7637: 251 9 85 746 7 +1812: 908 35 789 3 77 +1120: 7 9 1 68 9 2 4 +770138283: 11 6 57 1 3 8 947 9 1 3 3 +163644: 610 32 344 63 156 +6168: 137 5 9 +507: 41 9 2 76 60 +593693: 77 77 16 765 9 +1214074355: 9 4 5 3 9 73 5 7 8 4 855 8 +607244471: 6 3 7 3 1 83 2 510 2 4 6 8 +275: 26 2 9 2 2 +250040507: 24 9 455 585 504 +5137920095731: 44 7 438 78 3 23 573 2 +282926819: 6 4 827 26 812 42 3 32 +80952: 37 2 6 948 2 +8890436: 635 2 7 43 8 +10600: 2 1 8 8 6 6 8 3 91 541 6 5 +23840: 5 86 1 9 4 1 7 511 57 5 +283368: 3 8 8 322 8 +1123947090: 49 3 877 8 1 323 9 342 +25775616: 8 8 6 97 692 +243687944: 650 5 815 32 92 +2855764: 2 1 912 730 1 +2736185924: 835 66 2 53 8 3 31 3 2 2 diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_8.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_8.tst.data new file mode 100644 index 0000000..1e7f2b1 --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Input_Day_8.tst.data @@ -0,0 +1,50 @@ +.........................p........................ +......................h....C............M......... +..............................p....U.............. +..5..................p............................ +..6z...........................................C.. +...............c...........zV..................... +...5.....c........................................ +.Z.............h........S...z....9................ +.O............................9...z........M..C... +..O....5..............................F..M..C..... +..Z.........5.c...............M....V.............. +........ZO................q....................... +s...O................h..Uq.....7V...........4..... +.q.g..............c.............p.......4......... +............hZ.............................4G..... +6s...........................U.Q.....3............ +.......6.................9.......Q.............3.. +....s..D.........................6................ +.............................................FL... +.................................................. +..g...D.........q.....f.......Q...F....L......7... +...............2.........f.............V.L...4.... +...................2.s...................f3......G +....g...........................v......7P......... +..2..g.............d.....v...........P.......1.... +..............u.........f.............L........G.. +.........l.D....u...............d........o..P..... +..................8...............9..1......o...7. +............l..................................... +...................l...S...........F.......o..U... +.......................u...S...................... +..........l....u...............m...........P....G. +......................................1.8.......o. +.................................................. +..................v.......S................0...... +.............v........d.....1..................... +.................................................. +..........D....................................0.. +...................m.............H..........0..... +...................................d......0....... +.................................................. +....Q............................................. +................................H................. +........................H....................8.... +.................................................. +.................................................. +.........................................8........ +.......................H3......................... +............................m..................... +................................m................. diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_9.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_9.tst.data new file mode 100644 index 0000000..6340581 --- /dev/null +++ b/AdventOfCode.Tests/Data/2024_Input_Day_9.tst.data @@ -0,0 +1 @@ +1567695880152629268190373935669834441122671164843435594685946137627357126992283375559839157113543530837781319468827960988554885696657851949953694013735690136546564590543324339165657131135848759180857910695696794024746086944091842992435077111272177045608647487870389810156269564478281782746683234358619191467074125025634536412575186842522519144218583987837276807945569973705265225640162514281710658861563191265641937069322652721852488172492082478591548826669212696148622380411143559067681619945837154481535223329242254269292162897363185232101447557276823335318377106960677073128910388064829684559151545828269720244827964284853979732858274183198757286526887065427445535346102242214018913495285895792733497062779373646513478816371584779496951116998760422134488790326625909072902419106771414296366633568871447412579192513822296612397044478132673036608092781844101950935927373844479484764349673771237643161867121747989082642570249422345381114465343484303217723359266841223356548877415757165440795558854772893855439472757118262837832127777592507388173370918638801368833115852818267595191034432478589486177273482474129795588137931153386727879879425222402211928644988486632067709744851363953077678980838818647539614484279112974373107923631558733898924620591613617657969080112893367682322330295596566214443428993865321959318825794720422492226250634137894049613627575129413554945392137958646166179549136843553743156516207475542923833287845424643685448177351651856826107695987587988962613396813478746446838972697742858147924323544324615987601330399937647950367952513289357222527354898569724815706187912642162057805463559671619143527568361516417275655999292146542496644996543731304463412223791081445784155575468749585650868536965596362045496075654328772696149179149453891999827074505919925584454788576797867553276980228056335088248399667998567036347212767888478670421390579973946898546486392043225254739283381471899612539231139870929887608026119988765023283720134910855883104266585125445465121171152078927772864445195490501987563572218598518271981425621314457064958714846286916329763859596732259351793246209714737648618756965962693475655545961771161335408265321471369764386848364270793215825073139536509042602125579794811378463824782610433366773036759576821775109649912511383327195948814071583867759131913626447221455786547488513012442782588249349939361382397231401675627681937828186226281552544595547865541851341090604097608247547763662592429660746856365087502414339972579114934667953533678260923418845324502031548131949138135451508754222431126559231577976413891866837069956456144585101289762044352188675878851437356675492797646026495699283239165267205684167394499217256345964084633920585242859642322016401211132312871656241189946049824346406750575187627063427482566983115111513861596677264264992446797264119824982177651984881038999753295657611246148346876169396448149048507236388055779852622636101561635340203288915832647128752662561276193377912186558646139230888067326635806583935827872719701290999135942374838481976992737944104982627140587293133391901732259073471810817538894842908266963147941022691062486988162457787527413581451444736031543259317385391985115123442244338151939850102829471799696386947558355916806231378468411981366971574421958318101514783319317489694235669112619836894021274362819452149881801364742715462615111925536820844653806632228240486771975829797841874838668048253065634849589799736218817249322922241324297513679268711010273340449065603995179667626166209762428891385092358898319328944530595311788582699719305762429619365864612590653742671129286675283086293928805631865477561667149124674177262828419668175916667290874378781069744434403550186432811139372844133570583151746492218554447836665858864923366173205236371254673318246896892532348029123098264789391921319195841363463955529819179870633347785029109562943989846994231244787440712791164289204980287836861458368224442930537545954150922425353280822122641154341396596270566438917993824612994723205926148971534733809166503429347191189125997887387592742567673439925532661631601991225465288467926644224867421565943515626555421883581159254412182691311839834482184940782753965868374544446917128627168365894564308991128188159680476259149597641074127072443767718824101031327310888594608344392087819537507954394748828658284973381667178017162225656834709987138331785311556122711419433565971040684630534322839298308573265587417018366729161241138869631432523844128447946555501493595711969963527143754378203050397845857963174890934589108777838880826312614182459275568898613349921267837992427471938270616814294663754337831427144522986954897286298380516994105475349072558932381171917181126029336182847884294738814243359199999057242575343672508941978952726210883378125835892738233574212086567483533374555918819428699958301756862729521775338886988742708570582730555991364241658824733687196887461852925658701781472271848537585888176313742511114411804981417997795894535428999422852099329355359712315261565345819736956757119167872134176724597453555895728557389292729585317599937723655245576930145518179832546563632917928563454249707442197881541780519091787116323825272937639574531861967799632715797597333657681929975328772465967243771478434523279749153571577421171246296128679667743913562082911244492979591487978279711744896254678563112640532827829446713432504727856353455418657027338925412158437813954027501577186810194824309069773556454962335017835359691363272547334498596897944718533982925370879140129929828472512235774850341186535375555694119816739184524255955217992057122746386333361229311341587368848845928982714169191064625165145692736864201747158469252999772691141577942924109463972484807325108167652438744185697933154714167522698126125865799745631698696288347875855499822294332249975744544569332679648178119562152145784849835488924159722651687464584354351666863384385856353619935087373959332397547823791456875317209043591340799788213360745719887376433933771246572667444891111852618083636536412015567465409736247938839589355489866747929562482426684354745133273118799630304139838672211849933833659729843723125818653341498128837313832938539487534788612958827030912859556369852211237549906935167069173814896184114476436760149152435013952679233121554654439662754939549173283970706495795482746741287631764173706758436393798522734063566391288447791392508979823557922735548833998357784694541921326765243933875414647475368921104022355688403086322630854185427775954466742533238446292188543450904770525110561689312134982252554882605528747967225530147191494433639433976047494737853726688357343776789478279465456354543665255684944042757117409245101885586953523899581741892790823968601036805823427529284946394930754480114026171721937691342731659714905718615295295388813414115610613164661570175986681336627294901163673046292862741477869174721269429354644176848560938642619016636968967729431516295810476641491955585675897693444499486645602545103370724418396061618428659863582640386488559365653358868924437198714236511270994173846223938716865212135310722289421138496819504862305824738625938798715484929935371615176425186769243965892247524919433195496830292425765081492043274626311861401967591068821962945581672498961698786561827213694047696987203091736825768518377782394798844935579816467215144873342439748826834387626074577561484317821118876091668415308677752995598518375230745658975545152095614190972650459359818834555659588211256678794725465427207527256496899291913459644012729648794038792015166775797550749020576999163156701031496630391320631220234073836484488835747149101137572357125775771793328440238366483589567314698386515386902638434024838711516773126910723640764242331940673762434287792998328040112619206812862499357429626253242863465075902964535968664986884086526551637967143810475156553358288850643111198573547195258085707529599231671185182420652552874921761170983888375670372517177761942675876624804138102747341247154590904260221740936654298096469126538412367341144732381654877435292216998899299142682315826148265596461132345220408069452756671649142444174112734540555538486814634088613197988145597866391567454610495930704962486887346637318421269242376123409316242119985130361331688076979921558197819922464712472760957890449476738299228326873139156655449287524736889319759268629617918985445463674569671466823967554557849980701884952379839435423121873455982316845999352934246613777451933893183222709334103275966858164742851838336934352236365790325535254490415886427953926342481929539781852574196397892159794833849436714423992590444821919585263424512080672845862657305958156330939030529379452245865753428980198177758361558038236729457294782879495141971036372621111558174912318762315359641530201141403586316273259310938376556889439324696015799628108080859344152866537836152910979464682575852392311867693268689462686638202677357653567714964476809981979860132567607165972625279256651028842226787893699740195877836368698571909198852273761582657473754863522253374034869335584625433614182833148798656511324137104660677789759025706172268181528617454353742991174354353274695616901844371286945468935324972443755832172697946654769511464342142521697239553173153598718563811416145792423358234945363773154496421615963775584284695720208959319219658892351978118491192579398838666289266089662243208355955824817830654938569911141638981849997538371117979220187351578228991126635094117199991946955182512610641790336151188417255756579956104340224446974917551580915115868814758721379271889130322061664068156616572514621840524789128930205610384455412536955965326637271033755832215220617485531478178516702886754457817240796374961751957513883375259699286945176374146121635561878841617432637937745737243996712366528369491865821928444156982949517799948529586085726382643244464617123912579435874162281865757547949974739261223452961088402711978929823137331732904149156233718458395767498275256376899374244561829230339067486772376068775549865956335969762221213487876093549881913338605395199185931714321624242777261647455618222276634823188473432970351770302692833815645870359392146616611499835449727349714865617964529188299614543726544870145389843443829032297569936481373096229060621546633159284881172817588378756495434812204080342081385014693119116649901820609024332485218720927474743321787486568628716141949611767414168887843652785226114633106315156036466060821667759136562612684741598892715878765995713986397165585847131922379753453779601154547458794886273623602469165910206621771821443241936542741145993671521464966142801187682036326878153264181213409174352462803561544595711243195497929654724043741223969481837682603083388414751855731827144519139177967711248272291376121926508037435451848741965916763966703945575751366426624395903258543142331957841162514299313524508060136447817017617377661330272526235692197518718746554090451379903060668060796334774463347436676010983318683144837796192119328124812840902431625158442666582449788486453332384663193562668079718840124016507145847646509199602043509495378631205950951019846134277041268862802477795521196862766547326682311564473131976682876983318880477655983613767590812787305230661167918857729494668361749177758186745160165767843360845918103294113223392179275551585671226638235214944764949235437967129456917497259134275488652322381965975863556958215363703715259367978622636737206321671728446485673467465993434128645882491466203760535334663835553294865541571822836163714523428963239183501160785710184575711499925822645740828841875368666257954517856456562385596626905110699137365861589516466350616220772236428245708161959332408283441157284057726267798691481074916262598867616167547575932361844811856118254841926324181531658526568646683664408070616026507116807494273593934572814282403439328211101497252440204171345164896559277574212010646163822777499370587447602910886188668923408116517955978178135590706118173071803564233718487529356836718711933820518811556731894197701348661357622365641953128632185190961798239611218134768191135070947030275712565950156170996257779452564448953284992467136118812116364869644763577027551923315061476994353963871982841564126137347979931353428454432045822896122467593160235194534587112615315287925870681010491091483993215544776695807486101448263390776529286393111574734836918226845117281660377623636324331689743524142567808271661060709439468643344050475547264937706756996219772418574053152890825798376846274381151084613886351226769784664964998946595277224631557763142425898775284436389779417444465050652748172995291152193420198732909828909257485465826452269392293075325782412468391384678167421013602387238962591694193786544248613026593667596713362071433656872213729051197433483844352780229326264964796710167075168096969475253667759314201432461973931997691637643875395462532621333653935527192363766843223561878144456434431680779175809318648634755967175839136230222872348457598343412847773193147718184780741446922316104286705492166020428515227518968053981730247984657676993550938759988546172071372681255310424961135822552592609196818785303847715922336550435111947235943013268110531077972891711472815684531491669391833826517555451796836515247374634240231367279195231689987448492972315546745978524132619640246957201053972440667384979031241454419952282132548471271510358125958955235554948320472757621715299632271412405011496179318534495530491643568465746469641726136872375251165368775044614196745240847161541681415917191428635579997649188056189798313926478212568618147346433829613399893647441010928896126390734553129938398013971178346060724333926367582386977368263450999837627825127777662515745633958633855148851531378980567788226943874760527959471870196297704636471874887863955582644342976988511880933165384727213137109241284278807831108238916258859038908775191614336554526446875014252016776697953819942069687919259053963861775989988674794438126497502581717934293045162896572912438011993358108427676459836949568681477850884730755510156034773733779073974255718160578086286929826463203028499364144917477728836320307527165963258572465167888156326320578694841231225017525469688476573984119226682843735143581384978124264732455413356978173190551573699677707871467280781178259417811479466298645418729194488682524898464720719240573168494543608623294835843757424831142694288481927057804154235115834349351537251769237393677967177567437949929326176418978821457668298110402223818056738964506870875199504753537444791297705673305769652649907214537572141631311038649723217285196078552478902232446528114448923169351250897760635299348381214422361685456661284341497887638481947453401324899413832521885755176561764269732259428917239919218373677640606959417489702533297485937796208745952669403125299258765191649886298878437030965145583111385873691995526280184285564065656938132496828292198119341013811472796771802455411759836552255934639996894024372864387765526740586489887089958343501241932217772989159842946278737792224553251930629018701570835449755355395877753660686926872945467911839411966316963676784679776394916771873460268796623431373371477073112564654938188738332952541523929969297223187412745567163670848530192458502387703011276078829148977498814333661188807554109672304343936831982418918231418245695464478739794961362937111473797051565390348856951648181590782551337656181418171414389868249032354580869442666757192823923769787076181839846092598936384812175467205477946559692927594667207747952881727097663483446222866454558442421071679391774134315828476399672055737052361991472333798892299140876366668992963533647659635138699433493223963397398390183964355848692287382686404149625048772257995989375612845734838511938651626265376360154690244780844138967417349685538944308413162995206341208158711358612336329015515644525989845239452124846132228782502626191661714742655632452034177310202192687415575222414085596865598657742599669412305177868790108793172175855246766778506583837418737388607014695014189262785232298498835640249470795516212422365093938126228138887576564690622734476368277027506975247799661316966639495426626519655547931285521126737152599057819023252690508232998571563946211076112860846966461722246313566364405660795945832394469039729398388465504712812532352662978519875270119793542573181982564541806534366833964224297857569168675499476712875959649081505134123233581598834761974441482517207593175887364854348091646820887284763954412999881558635337921494873349666429451465252088235494829844195935959372303236434877431824209523287557912240319513367734124321716313226011443974189437926964386689337459107013259566684466665196998438826667973128442963822194496667834765548658239321523166268211649963971675863632318540704415566538395119931731382641928210189286747566273150808749926572337225627880734159244969791546191119778222749078889497672961767724136116713218119126335170727058995841458243704623643141713235311653176360389246486385497578136482706589162526368929156893975578314494466717452848543658752926352059935564867769467118288285885844426145455695965188315375379511596075779154714991153940695039807291442064154056133950238235128738933174316284747568799585403123956611461657831615928749439393727439278534943085545111654816606098878994455751277751333132795543645124436938462156874978672430696031506799771420997893602410501617463072446140871521362070819911823494384319887736145421976985468875646531368080809146793873405126999471379785338144455945877144891540706011138978374631264333716239163663468537635583613329525624645288105293774868163668986948444476382073795027149592307452648688585791548868453121626129412077471534939814214380714414274556282960638224965842566067473270793957337757261676767078473180247866779763138667448256962266173764667778246965676432939385433388763423461656864225372162359562837028581696238290373844796790475538808910845562755941588830831772578467839256957841554081539611512248659057439723709640199523604127626629945966435056406127876284866811508889735153604453357641567383507028637599287537971917656477357116208179421350755587678141623474834845437843595513251548526635309262579766558163276144418224839013664568796445392460669628188233174467401133166215722835638296208556421137677293598481741975449889758861515149845293667418629196564934508888351663549575701238394516295434417173235089783056251759462821524564667431807521804762631297498511237252276888535776278271148452154144213681697372391615552961883456734250406846696754809876123820643634284873466281444564537699818592249514643313581711762544333590169756454934776336175098957681487799702484801346573241531285423294992044663833866916105561815038652522123570607886561120939381404284666321792873917293653923329041669985946742495840206614566963509980139117117279882373563745207266327161646150758213349557402990524798648479873938839442421862805468826898282015122450816016995563947910724590926914112272883721189070925219274934326696758980454744738321281197736933507458923345577530216059656172398464305269629738157829173066919169782785115952346464292053345957505623486933479670863610603693205426165180377654617420908082202772807386353756404544287313349943464215969022459887581784714169398550978315858387203829845440381328185755633148126883609073275064143471439445879457966622373772332531552666577794173640987615283441295693806688912646879781596496989045373573496298877732913794381879523180255468474488777539617026934641858078402292207174383747477663947691617778554457375438785332505154173434724858804317818712796361378245136151353967282511519383296582129939453853513199508780323677202117607721266270378958909245205662128536835033869979322394979417175654675437504213584492492345638324478090961451921676436744446594328678536991883610474427234738646643523513496264427724808078422494108156798066227239642834356848581629859163203628932384312191731025647111588079716516407760261562367062291382841125663383525281724436191960902924832598412543405297791528197220151086376247628917351031436787303696395383918363818070621841483361663321385987769499993817832780644578304088759251711086387510315383488425406194779188891624158374529251192631982494906165355887144836484427674187425751728961303577959141974142434512969887479761609095468733359288956218865852746 diff --git a/AdventOfCode/Common/AOCExtensions.cs b/AdventOfCode/Common/AOCExtensions.cs index 4b24299..d59e5ec 100644 --- a/AdventOfCode/Common/AOCExtensions.cs +++ b/AdventOfCode/Common/AOCExtensions.cs @@ -34,19 +34,7 @@ namespace AdventOfCode.Common } } - public static void PrintSquareArray(this int[,] arr) - { - for (int x = 0; x < arr.GetLength(0); x++) - { - for (int y = 0; y < arr.GetLength(1); y++) - { - Console.Write(arr[x,y] + " "); - } - Console.WriteLine(); - } - } - - public static void PrintSquareArray(this char[,] arr) + public static void PrintSquareArray(this T[,] arr) { for (int x = 0; x < arr.GetLength(0); x++) { @@ -58,16 +46,12 @@ namespace AdventOfCode.Common } } - public static void PrintSquareArray(this string[,] arr) + public static bool IsWithinBoard(this T[,] board, int newX, int newY) { - for (int x = 0; x < arr.GetLength(0); x++) - { - for (int y = 0; y < arr.GetLength(1); y++) - { - Console.Write(arr[x, y] + " "); - } - Console.WriteLine(); - } + if (newX < 0 || newY < 0 + || newX >= board.GetLength(0) || newY >= board.GetLength(1)) + return false; + return true; } } } diff --git a/AdventOfCode/Models/AOCDay.cs b/AdventOfCode/Models/AOCDay.cs index 2a99352..3f15585 100644 --- a/AdventOfCode/Models/AOCDay.cs +++ b/AdventOfCode/Models/AOCDay.cs @@ -62,11 +62,6 @@ namespace AdventOfCode.Models return this._request.Input.Trim().Replace("\r", "").Split("\n"); } - protected string[] GetSplitRowInput() - { - return this._request.Input.Trim().Replace("\r", "").Split("\n"); - } - protected List SplitInputOnEmptyLine() { var rows = GetSplitInput(); diff --git a/AdventOfCode/_2024/Day1.cs b/AdventOfCode/_2024/Day1.cs new file mode 100644 index 0000000..e6ea8de --- /dev/null +++ b/AdventOfCode/_2024/Day1.cs @@ -0,0 +1,44 @@ +using AdventOfCode.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace AdventOfCode._2024 +{ + public class Day1 : AOCDay + { + protected override AOCResponse ExecutePartA() + { + var leftList = this.GetSplitInput().Select(x => int.Parse(x.Split(" ")[0])).OrderBy(x => x).ToArray(); + var rightList = this.GetSplitInput().Select(x => int.Parse(x.Split(" ")[1])).OrderBy(x => x).ToArray(); + + var totalDistance = 0; + for (int i = 0; i < leftList.Length; i++) + { + totalDistance += Math.Abs(leftList[i]-rightList[i]); + } + Answer = totalDistance; + return this._response; + } + + protected override AOCResponse ExecutePartB() + { + var leftList = this.GetSplitInput().Select(x => int.Parse(x.Split(" ")[0])).GroupBy(x => x) + .ToDictionary(group => group.Key, group => group.Count()); + var rightList = this.GetSplitInput().Select(x => int.Parse(x.Split(" ")[1])).GroupBy(x => x) + .ToDictionary(group => group.Key, group => group.Count()); + + var similarityScore = 0; + foreach (var input in leftList) + { + var targetOccurence = 0; + _ =rightList.TryGetValue(input.Key, out targetOccurence); + var score = targetOccurence * input.Key; //To generate the similarity score + similarityScore += score * input.Value; //Score * num of occurence in source lust + } + Answer = similarityScore; + return this._response; + } + } +} diff --git a/AdventOfCode/_2024/Day2.cs b/AdventOfCode/_2024/Day2.cs new file mode 100644 index 0000000..95bf5dd --- /dev/null +++ b/AdventOfCode/_2024/Day2.cs @@ -0,0 +1,79 @@ +using AdventOfCode.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace AdventOfCode._2024 +{ + public class Day2 : AOCDay + { + protected override AOCResponse ExecutePartA() + { + var numSafeReports = 0; + foreach (var level in this.GetSplitInput()) + { + if (IsValidLevel(level.Split(" ").Select(x => int.Parse(x)).ToArray())) + { + numSafeReports++; + } + } + Answer = numSafeReports; + return this._response; + } + + protected override AOCResponse ExecutePartB() + { + var numSafeReports = 0; + foreach (var level in this.GetSplitInput()) + { + var pLevel = level.Split(" ").Select(x => int.Parse(x)).ToArray(); + if (IsValidLevel(pLevel)) //If initially safe, increase the count + { + numSafeReports++; + } + else + { + for (int i = 0; i < pLevel.Length; i++) + { + //Remove a single value of each array and test again, if it ever works then consider valid + var tempLevel = pLevel.Where((_, index) => index != i).ToArray(); + if (IsValidLevel(tempLevel)) + { + numSafeReports++; + break; + } + } + } + } + Answer = numSafeReports; + return this._response; + } + + private bool IsValidLevel(int[] levels) + { + char dir = 'U'; + for (int i = 0; i < levels.Length-1; i++) + { + var delta = Math.Abs(levels[i] - levels[i + 1]); + if (delta < 1 || delta > 3) + return false; + switch (dir) + { + case 'U': + dir = levels[i] < levels[i + 1] ? 'I' : 'D'; + break; + case 'I': //Record should be increasing + if (levels[i] >= levels[i + 1]) + return false; + break; + case 'D': // Record should be decreasing + if (levels[i] <= levels[i + 1]) + return false; + break; + } + } + return true; + } + } +} diff --git a/AdventOfCode/_2024/Day3.cs b/AdventOfCode/_2024/Day3.cs new file mode 100644 index 0000000..dfef47d --- /dev/null +++ b/AdventOfCode/_2024/Day3.cs @@ -0,0 +1,80 @@ +using AdventOfCode.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace AdventOfCode._2024 +{ + public class Day3 : AOCDay + { + private static string Operation = "mul("; + protected override AOCResponse ExecutePartA() + { + var totalSum = 0; + var row = string.Join("", this.GetSplitInput()); + foreach (var mulIndex in IndexesOfValue(row, Operation)) + { + if (this._request.Version == AOCVersion.B //We only check enablement for Part B + && !IsEnabledAtIndex(row, mulIndex)) continue; + var commaSplit = row.IndexOf(",", mulIndex + 1); + if (commaSplit == -1) continue; //Means nothing was found + var firstOperand = row.Substring(mulIndex, (commaSplit-mulIndex)).Replace(Operation, ""); //Remove 1 to get rid of the comma + var endBracket = row.IndexOf(")", commaSplit + 1); + if (endBracket == -1) continue; //Means nothing was found + var secondOperand = row.Substring(commaSplit + 1, (endBracket - commaSplit) - 1); + if (IsValidOperand(firstOperand) && IsValidOperand(secondOperand)) + { + Log($"{firstOperand} * {secondOperand}"); + totalSum += int.Parse(firstOperand) * int.Parse(secondOperand); + } + } + Answer = totalSum; + return this._response; + } + + protected override AOCResponse ExecutePartB() + { + return ExecutePartA(); + } + + private bool IsValidOperand(string operand) + { + if (operand.Length > 3) return false; + if (!operand.Replace(" ", "").Equals(operand)) return false; + if (!int.TryParse(operand, out _)) return false; + + return true; + } + + private bool IsEnabledAtIndex(string row, int index) + { + //Get the indexes of the entries, then take the higher index one indicating more recent status + var enabledIndex = IndexesOfValue(row.Substring(0, index), "do()"); + var disabledIndex = IndexesOfValue(row.Substring(0, index), "don't()"); + + if (!enabledIndex.Any()) + { + return !disabledIndex.Any(); + } + if (!disabledIndex.Any()) + { + return true; //We assume that it is enabled if not set to disabled + } + return enabledIndex.Last() > disabledIndex.Last(); + } + + private List IndexesOfValue(string row, string value) + { + var indexes = new List(); + int index = row.IndexOf(value); + + while (index != -1) + { + indexes.Add(index); // Store the index + index = row.IndexOf(value, index + 1); // Search from the next position + } + return indexes; + } + } +} diff --git a/AdventOfCode/_2024/Day4.cs b/AdventOfCode/_2024/Day4.cs new file mode 100644 index 0000000..4093e1a --- /dev/null +++ b/AdventOfCode/_2024/Day4.cs @@ -0,0 +1,132 @@ +using AdventOfCode.Common; +using AdventOfCode.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace AdventOfCode._2024 +{ + public class Day4 : AOCDay + { + private int[,] AllDirections = { + {-1, 0}, //Up + { 1, 0}, //Down + { 0, -1}, //Left + { 0, 1}, //Right + {-1, -1}, //Diagonal up-left + {-1, 1}, //Diagonal up-right + { 1, -1}, //Diagonal down-left + { 1, 1} //Diagonal down-right + }; + protected override AOCResponse ExecutePartA() + { + var input = this.GetSplitInput(); + + //Create our grid + var rows = input.Length; + var columns = input.First().Length; + var board = new char[rows, columns]; + for (int y = 0; y < rows; y++) + { + for (int x = 0; x < columns; x++) + { + board[x, y] = input[x][y]; + } + } + + //Parse our grid in all directions + var numOfXmasWords = 0; + for (int x = 0; x < board.GetLength(0); x++) + { + for (int y = 0; y < board.GetLength(1); y++) + { + for (int d = 0; d < AllDirections.GetLength(0); d++) + { + int newRow = x; + int newCol = y; + string path = $"{board[x, y]}"; + + bool valid = true; + for (int step = 1; step < 4; step++) + { + newRow += AllDirections[d, 0]; + newCol += AllDirections[d, 1]; + if (newRow < 0 || newRow >= rows || newCol < 0 || newCol >= columns) + { + valid = false; + break; + } + path += board[newRow, newCol]; + } + + if (valid && path.Equals("XMAS")) + { + numOfXmasWords++; + } + } + } + } + Answer = numOfXmasWords; + return this._response; + } + + protected override AOCResponse ExecutePartB() + { + { + var input = this.GetSplitInput(); + + //Create our grid + var rows = input.Length; + var columns = input.First().Length; + var board = new char[rows, columns]; + for (int y = 0; y < rows; y++) + { + for (int x = 0; x < columns; x++) + { + board[x, y] = input[x][y]; + } + } + + //Parse our grid in all directions + var numOfXmasWords = 0; + for (int x = 0; x < board.GetLength(0); x++) + { + for (int y = 0; y < board.GetLength(1); y++) + { + if (!board[x, y].Equals('A')) continue; + int[,] CrossedDirections = { + {-1, -1}, //Diagonal up-left + { 1, 1}, //Diagonal down-right + {-1, 1}, //Diagonal up-right + { 1, -1} //Diagonal down-left + }; + + var leftDiag = string.Empty; + var rightDiag = string.Empty; + for (int i = 0; i < CrossedDirections.GetLength(0); i++) + { + int newX = x + CrossedDirections[i, 0]; + int newY = y + CrossedDirections[i, 1]; + + if (newX >= 0 && newX < rows && newY >= 0 && newY < columns) + { + if (i < 2) + leftDiag += board[newX, newY]; + else + rightDiag += board[newX, newY]; + } + } + if (leftDiag.Contains("M") && leftDiag.Contains("S") && + rightDiag.Contains("M") && rightDiag.Contains("S")) + { + numOfXmasWords++; + } + } + } + Answer = numOfXmasWords; + return this._response; + } + } + } +} diff --git a/AdventOfCode/_2024/Day5.cs b/AdventOfCode/_2024/Day5.cs new file mode 100644 index 0000000..012e1dc --- /dev/null +++ b/AdventOfCode/_2024/Day5.cs @@ -0,0 +1,118 @@ +using AdventOfCode.Common; +using AdventOfCode.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Intrinsics.Arm; +using System.Threading.Tasks; + +namespace AdventOfCode._2024 +{ + public class Day5 : AOCDay + { + protected override AOCResponse ExecutePartA() + { + var input = this.SplitInputOnEmptyLine(); + var orderingRules = input[0].Select(x => new OrderingRule(x)).ToList(); + + var validUpdates = new List(); + foreach (var update in input[1]) + { + var updateOrder = update.Split(",").Select(x => int.Parse(x)).ToArray(); + var applicableRules = orderingRules.Where(x => updateOrder.Contains(x.Min)); + var violation = false; + foreach (var applicableRule in applicableRules) + { + if (applicableRule.DoesViolateOrder(updateOrder)) + { + violation = true; + break; + } + } + if (!violation) + { + validUpdates.Add(updateOrder); + } + } + + var finalSum = 0; + foreach (var validUpdate in validUpdates) + { + finalSum += validUpdate[validUpdate.Length / 2]; + } + Answer = finalSum; + return this._response; + } + + protected override AOCResponse ExecutePartB() + { + var input = this.SplitInputOnEmptyLine(); + var orderingRules = input[0].Select(x => new OrderingRule(x)).ToList(); + + var invalidUpdates = new List(); + foreach (var update in input[1]) + { + var updateOrder = update.Split(",").Select(x => int.Parse(x)).ToArray(); + var applicableRules = orderingRules.Where(x => updateOrder.Contains(x.Min)); + var violation = false; + foreach (var applicableRule in applicableRules) + { + if (applicableRule.DoesViolateOrder(updateOrder)) + { + violation = true; + break; + } + } + if (violation) + { + invalidUpdates.Add(updateOrder); + } + } + + var finalSum = 0; + foreach (var invalidUpdate in invalidUpdates) + { + var applicableRules = orderingRules.Where(x => invalidUpdate.Contains(x.Min) && invalidUpdate.Contains(x.Max)); + do + { + foreach (var applicableRule in applicableRules) + { + if (applicableRule.DoesViolateOrder(invalidUpdate)) + { + var first = Array.IndexOf(invalidUpdate, applicableRule.Min); + var second = Array.IndexOf(invalidUpdate, applicableRule.Max); + var swap = invalidUpdate[first]; + invalidUpdate[first] = invalidUpdate[second]; + invalidUpdate[second] = swap; + } + } + } while (applicableRules.Any(x => x.DoesViolateOrder(invalidUpdate))); + finalSum += invalidUpdate[invalidUpdate.Length / 2]; + Log(string.Join(",",invalidUpdate)); + } + Answer = finalSum; + return this._response; + } + } + + class OrderingRule + { + public int Min { get; set; } + public int Max { get; set; } + public OrderingRule(string rule) + { + var split = rule.Split('|'); + Min = int.Parse(split[0]); + Max = int.Parse(split[1]); + } + + public bool DoesViolateOrder(int[] pageOrdering) + { + var indexOfMin = Array.IndexOf(pageOrdering, Min); + var indexOfMax = Array.IndexOf(pageOrdering, Max); + if (indexOfMin == -1 || indexOfMax == -1) + return false; //Means no page found in rule, should skip + return indexOfMin > indexOfMax; + } + } +} diff --git a/AdventOfCode/_2024/Day6.cs b/AdventOfCode/_2024/Day6.cs new file mode 100644 index 0000000..ba615c1 --- /dev/null +++ b/AdventOfCode/_2024/Day6.cs @@ -0,0 +1,174 @@ +using AdventOfCode._2022.Day9; +using AdventOfCode.Common; +using AdventOfCode.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Intrinsics.Arm; +using System.Threading.Tasks; + +namespace AdventOfCode._2024 +{ + public class Day6 : AOCDay + { + protected override AOCResponse ExecutePartA() + { + var input = this.GetSplitInput(); + //Create our grid + var rows = input.Length; + var columns = input.First().Length; + var board = new char[rows, columns]; + Guard guard = null; + for (int y = 0; y < rows; y++) + { + for (int x = 0; x < columns; x++) + { + board[x, y] = input[x][y]; + if (input[x][y] == '^') + { + guard = new Guard(x, y); + } + } + } + + while (guard.IsWithinBoard) + { + guard.Move(board); + } + Answer = guard.VisitedLocations.Count; + return this._response; + } + + protected override AOCResponse ExecutePartB() + { + return this._response; + } + } + class Guard + { + public bool IsWithinBoard { get; set; } + public HashSet VisitedLocations; + public Direction Direction { get; set; } + public int X { get; set; } + public int Y { get; set; } + public Guard(int x, int y) + { + IsWithinBoard = true; + Direction = Direction.U; + X = x; + Y = y; + VisitedLocations = new HashSet(); + MarkLocationAsVisited(); //Initial starting point + } + + public void Move(char[,] board) + { + int newX = GetNewX(); + int newY = GetNewY(); + if (!board.IsWithinBoard(newX, newY)) + { + IsWithinBoard = false; + return; + } + else + { + while (board[newX, newY] == '#') + { + Rotate(); + newX = GetNewX(); + newY = GetNewY(); + if (!board.IsWithinBoard(newX, newY)) + { + IsWithinBoard = false; + return; + } + } + } + + //if (newX < 0 || newY < 0 + // || newX > board.GetLength(0) || newY > board.GetLength(1)) + //{ + // IsWithinBoard = false; + // return; + //} + + //do + //{ + // newX = GetNewX(); + // newY = GetNewY(); + // if (newX < 0 || newY < 0 + // || newX > board.GetLength(0) || newY > board.GetLength(1)) + // { + // IsWithinBoard = false; + // return; + // } + + //} while (board[newX, newY] == '#'); + + board[X, Y] = 'X'; + X = newX; + Y = newY; + board[X, Y] = GetDirectionChar(); + MarkLocationAsVisited(); //Track each visited hex + //TODO Check if it exceeds the board + } + + private void MarkLocationAsVisited() + { + VisitedLocations.Add($"{X}-{Y}"); + } + + private int GetNewX() + { + if (Direction == Direction.U) + return X - 1; + if (Direction == Direction.D) + return X + 1; + return X; + } + + private int GetNewY() + { + if (Direction == Direction.L) + return Y - 1; + if (Direction == Direction.R) + return Y + 1; + return Y; + } + + private void Rotate() + { + if (Direction == Direction.U) + { + Direction = Direction.R; + }else if (Direction == Direction.D) + { + Direction = Direction.L; + } + else if (Direction == Direction.L) + { + Direction = Direction.U; + } + else if (Direction == Direction.R) + { + Direction = Direction.D; + } + } + + private char GetDirectionChar() + { + switch (Direction) + { + case Direction.R: + return '>'; + case Direction.L: + return '<'; + case Direction.U: + return '^'; + case Direction.D: + return 'v'; + } + throw new ArgumentException("Invalid direction"); + } + } +} diff --git a/AdventOfCode/_2024/Day7.cs b/AdventOfCode/_2024/Day7.cs new file mode 100644 index 0000000..d51e5e6 --- /dev/null +++ b/AdventOfCode/_2024/Day7.cs @@ -0,0 +1,120 @@ +using AdventOfCode._2022.Day9; +using AdventOfCode.Common; +using AdventOfCode.Models; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Intrinsics.Arm; +using System.Threading.Tasks; + +namespace AdventOfCode._2024 +{ + public class Day7 : AOCDay + { + protected override AOCResponse ExecutePartA() + { + var sum = 0l; + foreach (var line in this.GetSplitInput()) + { + var to = new TestEquation(line, this._request.Version == AOCVersion.B); + if (to.Evaluate()) + { + sum += to.Result; + } + } + Answer = sum; + return this._response; + } + + protected override AOCResponse ExecutePartB() + { + return ExecutePartA(); + } + } + + class TestEquation + { + private char[] ValidOperators = new char[] { '+', '*' }; + public long Result { get; set; } + private long[] Operands; + public TestEquation(string input, bool isPartB) + { + var split = input.Split(':'); + Result = long.Parse(split[0]); + var operands = split[1].Trim().Split(" "); + Operands = operands.Select(x => long.Parse(x)).ToArray(); + if (isPartB) + { + ValidOperators = new char[] { '+', '*', '|' }; + } + } + + public bool Evaluate() + { + var combinations = GenerateCombinations(Operands.Length - 1); + foreach (var combination in combinations) + { + var equation = new List(); + int operatorPos = 0; + for (int i = 0; i < Operands.Length; i++) + { + equation.Add(Operands[i].ToString()); + if (operatorPos < combination.Length) + equation.Add(combination[operatorPos++].ToString()); + } + var result = Compute(equation); + if (result == Result) + { + return true; + } + } + return false; + } + + private long Compute(List equation) + { + var result = long.Parse(equation.First()); + for (int i = 1; i < equation.Count; i++) + { + if (equation[i] == "+") + { + result += long.Parse(equation[++i]); + } + else if (equation[i] == "*") + { + result *= long.Parse(equation[++i]); + }else if (equation[i] == "|") + { + result = long.Parse(result.ToString() + equation[++i]); + } + } + return result; + } + + private List GenerateCombinations(int n) + { + var results = new List(); + GenerateCombinationsRecursive(n, "", results); + return results; + } + + void GenerateCombinationsRecursive(int n, string current, List results) + { + if (current.Length == n) + { + results.Add(current); + return; + } + + foreach (var option in ValidOperators) + { + GenerateCombinationsRecursive(n, current + option, results); + } + } + + + + } +} diff --git a/AdventOfCode/_2024/Day8.cs b/AdventOfCode/_2024/Day8.cs new file mode 100644 index 0000000..442dc31 --- /dev/null +++ b/AdventOfCode/_2024/Day8.cs @@ -0,0 +1,36 @@ +using AdventOfCode._2022.Day9; +using AdventOfCode.Common; +using AdventOfCode.Models; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Intrinsics.Arm; +using System.Threading.Tasks; + +namespace AdventOfCode._2024 +{ + public class Day8 : AOCDay + { + protected override AOCResponse ExecutePartA() + { + + return this._response; + } + + protected override AOCResponse ExecutePartB() + { + return ExecutePartA(); + } + } + + class FileSegment + { + public int FileId { get; set; } + public FileSegment(int filled, int empty) + { + + } + } +}