diff --git a/aoc.cabal b/aoc.cabal index 3173d5d..d6b8d64 100644 --- a/aoc.cabal +++ b/aoc.cabal @@ -49,6 +49,32 @@ library AoC.Y2023.D23 AoC.Y2023.D24 AoC.Y2023.D25 + AoC.Y2024 + AoC.Y2024.D01 + AoC.Y2024.D02 + AoC.Y2024.D03 + AoC.Y2024.D04 + AoC.Y2024.D05 + AoC.Y2024.D06 + AoC.Y2024.D07 + AoC.Y2024.D08 + AoC.Y2024.D09 + AoC.Y2024.D10 + AoC.Y2024.D11 + AoC.Y2024.D12 + AoC.Y2024.D13 + AoC.Y2024.D14 + AoC.Y2024.D15 + AoC.Y2024.D16 + AoC.Y2024.D17 + AoC.Y2024.D18 + AoC.Y2024.D19 + AoC.Y2024.D20 + AoC.Y2024.D21 + AoC.Y2024.D22 + AoC.Y2024.D23 + AoC.Y2024.D24 + AoC.Y2024.D25 AoC.Year other-modules: Paths_aoc @@ -137,6 +163,7 @@ test-suite spec other-modules: AoCSpec.UtilSpec AoCSpec.Y2023Spec + AoCSpec.Y2024Spec SpecHook Paths_aoc autogen-modules: diff --git a/data/Y2024/D01/example b/data/Y2024/D01/example new file mode 100644 index 0000000..b8af9ad --- /dev/null +++ b/data/Y2024/D01/example @@ -0,0 +1,6 @@ +3 4 +4 3 +2 5 +1 3 +3 9 +3 3 diff --git a/data/Y2024/D01/riddle b/data/Y2024/D01/riddle new file mode 100644 index 0000000..60b222d --- /dev/null +++ b/data/Y2024/D01/riddle @@ -0,0 +1,1000 @@ +88450 63363 +58674 73195 +30431 97265 +79176 36224 +51071 64526 +78115 34829 +26281 65342 +99747 75563 +81068 41201 +81760 39590 +91539 66113 +51799 96883 +69353 19440 +64094 96883 +27283 88579 +52983 37831 +36638 37255 +68035 36007 +26604 96883 +43449 69865 +90472 75289 +20731 35412 +31769 42457 +37135 22483 +64018 44347 +49545 45637 +87888 11937 +89770 85917 +39164 26074 +34963 57264 +69433 87585 +89828 75289 +51940 30644 +76011 76423 +86044 69863 +42178 81634 +58537 84529 +68039 39015 +91534 80235 +95383 26816 +72575 20171 +63014 53853 +32766 84529 +21621 89301 +65716 94131 +74270 26729 +73720 99746 +22637 82429 +96044 16327 +93882 19601 +49123 36007 +59778 64129 +62853 55358 +72347 80203 +48833 47045 +64129 62494 +21955 96883 +92027 12818 +38750 29622 +16496 92138 +68900 26494 +13007 75255 +15450 75255 +82750 57264 +35089 36007 +60190 26729 +92533 72231 +95863 46766 +28192 34386 +36229 31291 +84353 84529 +85760 94567 +68643 63363 +47794 81334 +26171 63475 +14558 25238 +73997 72059 +56966 79382 +26572 86541 +15302 89301 +25557 89301 +52311 84529 +83219 10771 +47897 38681 +51489 33757 +10737 70282 +14395 57593 +75289 33474 +50622 53826 +33690 96463 +88570 36007 +88810 37995 +76440 71407 +96318 30287 +17056 63363 +90971 75246 +26526 85772 +64411 41201 +41386 10166 +16374 92034 +69742 91071 +71716 23782 +52237 32193 +63724 35412 +29598 55182 +58958 55182 +70562 56476 +99313 47299 +99705 70328 +38730 36007 +93620 29617 +64261 33757 +37597 26576 +86139 77794 +81816 20568 +25422 63744 +41188 26729 +91310 94596 +42798 61799 +12672 96315 +51173 45929 +23901 79382 +86756 95419 +72786 33757 +21624 90149 +81152 20260 +76279 75816 +86686 60299 +96883 79162 +52777 54244 +44760 69775 +48872 50008 +13502 66090 +39968 94596 +49634 17015 +90616 79382 +98097 94596 +94918 36224 +71745 76703 +63978 94596 +96485 96984 +34269 66751 +86448 64129 +40845 35412 +24852 28792 +49514 37277 +60306 41587 +19242 81203 +42110 55182 +88579 19310 +14788 36076 +22896 77018 +53083 89301 +21419 62087 +16682 40987 +45509 63363 +19280 80435 +35886 81329 +25186 22123 +72836 88497 +97528 96823 +72387 18771 +83455 86201 +33568 86544 +30442 94455 +83110 29374 +49301 88579 +34315 69117 +41298 86008 +55295 97010 +35412 88552 +52239 68865 +31395 26729 +26416 51263 +62441 69129 +43014 92675 +73780 55669 +59350 99109 +61061 22458 +41617 18191 +49483 35412 +58955 33400 +36007 37276 +10241 35159 +46681 33757 +89126 36224 +33265 38854 +95319 13101 +73018 20969 +60322 26729 +50982 88579 +12810 57845 +16293 33757 +74375 28399 +63806 18191 +66212 85298 +65902 32364 +88549 12193 +41289 15659 +68097 14208 +88017 30570 +73445 22551 +38360 15738 +39931 47827 +30391 46615 +46148 17015 +50563 33757 +55685 74778 +88469 69721 +22810 57264 +32215 74778 +59903 15150 +17397 57264 +10767 17015 +99371 18191 +90831 51790 +65156 94131 +97534 74778 +91168 84518 +26858 70445 +29539 87613 +30333 71407 +99445 73344 +16567 94131 +32900 69357 +27489 63148 +46422 63363 +91270 37691 +19540 53813 +65489 45632 +76210 98226 +29062 27996 +41201 74778 +45915 88579 +94945 81121 +54375 41217 +21536 17358 +75870 30864 +79743 89214 +20691 94596 +10352 83523 +83970 30864 +98914 18386 +58938 55182 +51275 11339 +86583 95003 +69981 47537 +27674 84373 +43824 47258 +87336 25451 +56054 20831 +33272 54103 +36755 63991 +73434 10847 +36649 82725 +80713 71407 +13544 74784 +27841 88579 +84003 22246 +48985 68185 +10176 71407 +58353 22559 +15647 74778 +68910 41553 +46401 31790 +80269 22871 +86290 47068 +95993 10051 +44568 41201 +44398 66153 +41393 84557 +30042 18191 +31917 38515 +13513 59458 +71906 89301 +75883 73018 +95352 64129 +14275 63363 +69876 35412 +16298 31473 +30864 79382 +19877 81988 +22165 16975 +62660 18191 +72656 13418 +81487 69274 +72705 79382 +22301 88579 +81495 94131 +88386 77944 +71675 21687 +34867 50027 +41331 74778 +53633 96823 +54664 42918 +29793 43797 +68537 94131 +46224 88579 +36246 75957 +68342 16975 +94273 33645 +97185 26729 +23728 63363 +68264 29231 +79652 26729 +89531 20323 +98937 94073 +91690 94596 +48648 67496 +32882 40888 +57264 71920 +13447 95151 +35448 64129 +75778 98592 +23234 27536 +49904 64383 +26513 17296 +91793 13262 +27874 74776 +66884 71407 +45213 64129 +40497 84529 +76273 23793 +39230 36224 +89266 29166 +35518 85657 +16168 94208 +20476 58668 +87694 93276 +45088 29626 +60101 92034 +33643 46999 +84013 36057 +45702 52055 +82641 36007 +20831 96883 +77611 96823 +82075 84749 +56470 18508 +19621 11287 +59631 21505 +64405 73018 +19772 36007 +86905 95374 +17583 26729 +53767 33757 +37207 40318 +94596 73018 +51890 38283 +52083 30246 +10991 37453 +33366 61295 +70856 40290 +84010 75289 +95694 77859 +57389 49009 +38239 36007 +92555 55182 +83182 98585 +66779 73018 +89448 30783 +82430 55798 +96968 63363 +93774 96883 +85440 59291 +94915 76935 +81147 25407 +71130 91090 +74977 84529 +74557 55182 +22159 75441 +31266 66927 +98350 20323 +13272 26729 +95602 91096 +88655 10128 +74822 68720 +11346 89301 +52663 28749 +20323 61116 +94621 75255 +27159 42996 +61249 44166 +22861 88579 +64142 83623 +29355 22533 +23153 94131 +28248 36007 +70448 60535 +53405 20323 +38065 92034 +37806 32005 +88000 43943 +72790 84856 +33687 34647 +11417 69129 +53871 63990 +45748 51721 +95328 16975 +59125 16975 +12587 96823 +94131 34262 +42511 38283 +52071 60452 +73868 33171 +38312 38283 +98418 56577 +85457 88579 +16464 89301 +76815 24744 +28900 88027 +49734 96738 +92985 57264 +86926 74778 +93208 57264 +41938 88579 +67527 93270 +49205 26792 +41165 20323 +40200 81976 +59357 20831 +75079 97383 +60169 63363 +92074 10369 +18585 96883 +43719 65952 +71503 61691 +20439 41201 +50067 42595 +89766 94596 +20035 79104 +29197 34472 +82716 92034 +15062 84529 +91337 41587 +23698 74778 +86500 64129 +52046 28042 +40868 67872 +96384 34853 +60434 73018 +56290 14749 +57746 40512 +18898 68267 +51209 38283 +67029 49628 +40530 26729 +63443 70371 +69441 72474 +73700 35412 +41594 24791 +51804 75289 +45731 16482 +36815 74778 +47389 36007 +34424 48448 +31341 35412 +69202 64129 +47466 45163 +13481 35412 +82208 62440 +52875 24907 +38932 57264 +10312 89301 +99845 66120 +26735 67913 +90820 80814 +64199 30409 +99821 35412 +80212 79866 +54094 23997 +94967 55182 +18831 76412 +69611 88579 +20794 42343 +18926 33757 +17242 60919 +78473 69441 +13515 33757 +84378 73018 +18489 67992 +12314 67269 +29089 69129 +68433 57264 +87740 17015 +78290 55182 +83596 83443 +16316 58265 +45777 36224 +50505 26729 +73351 49921 +23112 72074 +29172 74778 +11572 73018 +63218 98846 +10094 81881 +46797 75255 +27552 29062 +31740 42212 +52505 37612 +84303 79266 +18826 17378 +80340 36224 +69924 35412 +37554 25059 +57758 88579 +12994 75289 +28474 89301 +98133 96823 +59181 89301 +19715 20323 +57509 14174 +48026 73018 +10803 76950 +34768 17015 +73776 75743 +23928 29064 +20765 52954 +44968 17011 +47992 55182 +22902 87954 +42359 79382 +38908 65592 +94050 89301 +25874 89204 +10650 71407 +39759 24477 +17442 70977 +73455 63363 +43244 51733 +36224 63523 +24323 24865 +40462 80381 +77474 80809 +57622 13765 +47172 32125 +51053 71446 +38866 75255 +14536 81935 +18191 34338 +50783 94131 +32218 73018 +65928 98893 +33554 43527 +48966 94596 +68980 96823 +92199 17370 +47624 98708 +81484 96883 +36264 10166 +86887 41536 +56559 20799 +69481 15846 +95563 48609 +48042 94131 +89886 41856 +32235 91508 +75609 74778 +93104 49394 +78119 56999 +73185 31883 +66947 35412 +10279 82579 +74932 79382 +46673 94131 +16885 64129 +50651 42094 +79768 51705 +55122 69129 +75702 26729 +42522 92034 +81922 17576 +67535 92034 +56847 84529 +95298 36007 +79649 30220 +80679 88023 +39366 94131 +72233 72394 +45780 71407 +27048 34309 +72918 27570 +11115 79811 +18720 16379 +78049 89301 +25027 30864 +39170 73018 +72551 36224 +38283 63363 +71042 39139 +93626 65171 +97077 69322 +44993 88579 +99937 36007 +92127 79382 +89301 64129 +34485 96823 +70901 63363 +93765 64129 +22641 47498 +96940 94131 +69328 77254 +48593 33757 +62393 76585 +50116 55182 +31287 88361 +46213 35412 +86316 45354 +52095 63363 +73009 39645 +76994 36224 +52768 96883 +58014 91861 +38328 79382 +86656 28792 +24198 35412 +20644 96823 +80856 48773 +85514 69129 +78541 79504 +89198 69441 +66843 19369 +42847 80534 +10506 71407 +53734 50401 +56950 33757 +10097 42731 +11735 35718 +47055 15050 +62723 96459 +46747 45849 +85689 45896 +26070 33757 +24973 79382 +98067 40236 +10839 60254 +83064 71407 +11426 41587 +53675 88894 +42916 17015 +26729 56376 +85296 18191 +70877 88315 +59363 94131 +90177 91923 +65577 26729 +22974 84529 +82930 88579 +48640 69441 +77227 69768 +21808 71796 +12093 36292 +57834 26729 +85449 79076 +31321 58970 +29147 21478 +54452 96883 +36762 94179 +77729 30525 +38806 95982 +16975 12420 +59754 38283 +92634 96918 +75255 72045 +20579 94596 +10838 30864 +72028 33757 +34045 31285 +10166 54162 +39450 17015 +79156 64765 +99772 88914 +66119 58424 +84505 57996 +79335 23710 +22607 18562 +70069 69129 +56842 82046 +51924 26981 +53971 60458 +63946 36630 +58512 69441 +83844 84320 +73324 33757 +49874 14478 +96638 88579 +25651 92034 +35046 63158 +45863 50172 +33827 11916 +74271 71407 +92141 80677 +26165 94596 +29156 91383 +14258 65553 +99336 57264 +56949 19178 +29951 94131 +80133 26729 +69937 64129 +27282 35509 +37999 64333 +35714 32970 +74778 82464 +65706 63363 +28826 35412 +43880 57264 +65365 11878 +60998 53456 +23464 96883 +63996 71407 +47988 62639 +72134 68309 +43808 17923 +71794 64129 +55139 44545 +68486 70532 +88866 19086 +31014 73174 +25100 32701 +23168 77965 +86321 46763 +56564 97150 +66443 94876 +34574 26729 +18319 55182 +52080 63363 +34903 57264 +10503 73018 +73547 18191 +71407 36363 +14066 10066 +55291 38283 +49333 73182 +85590 31911 +31583 92034 +56885 94596 +10853 84529 +54330 26729 +60526 60376 +73313 37560 +64827 21896 +54707 41377 +78727 89301 +81267 42594 +97418 54093 +48561 90307 +27700 98842 +88852 25642 +27571 26729 +30253 18191 +96823 11966 +15510 28792 +34473 10074 +19128 92715 +66281 16359 +87566 55338 +73327 15839 +90546 73018 +10731 88579 +33757 35881 +53264 77702 +27559 14286 +76671 43247 +14652 56992 +66269 16975 +68360 35412 +47909 37394 +34184 27993 +56983 96823 +46159 47334 +17929 19802 +19939 33757 +54638 51325 +81041 71407 +82318 16975 +36922 87710 +37124 35412 +97802 99288 +44780 41201 +41587 29901 +79382 94596 +58560 24533 +49390 75255 +64184 64129 +63363 13174 +31139 94913 +41545 45809 +31298 79382 +27867 20831 +31915 89301 +57731 54824 +16568 39610 +37837 71407 +67097 36007 +66230 62450 +72316 10166 +93233 90637 +53568 38068 +30604 35412 +52867 72154 +94676 13310 +64541 64129 +75970 94040 +84132 63836 +23468 69030 +41002 63111 +25437 73018 +73367 89016 +61905 28740 +58157 57264 +40049 75255 +88306 88579 +41571 13741 +63613 86935 +81673 72916 +55528 60139 +27726 79382 +76018 20831 +93265 23625 +67182 26729 +21149 13330 +25611 84529 +84359 94134 +98940 88075 +91702 53729 +49126 92878 +67287 87543 +13917 96823 +38327 71407 +94612 12864 +55182 45518 +43277 74778 +31570 15210 +75076 69063 +80682 89301 +22072 69129 +12519 75255 +76313 64129 +67075 96823 +65234 57699 +43693 72346 +89876 29062 +17665 92034 +33737 36661 +91753 36730 +59183 43449 +14540 67538 +74552 79382 +12545 26729 +51062 30818 +96261 36224 +17961 86727 +41550 88380 +44693 18191 +56353 97146 +26427 68693 +10521 55270 +50199 78554 +55779 71477 +13694 71407 +84529 35412 +28117 94596 +28792 79382 +86182 23320 +72131 80477 +49826 74426 +34390 74778 +74094 16341 +69129 34543 +50073 92706 +37199 88579 +37972 32503 +88066 55182 +84391 31812 +33375 89622 +84125 64129 +68050 62191 +80017 35566 +89775 80938 +43499 69441 +93020 48741 +28839 69441 +65343 71722 +82862 46646 +35994 75255 +94975 88579 +66142 36828 +65082 26265 +85699 45338 +49094 65410 +89012 69332 +12731 32597 +12574 50774 +23300 79382 +59711 20831 +48379 19665 +26444 73931 +94298 55575 +64549 25462 +85255 33757 +18260 15074 +89345 39774 +47964 96883 +30500 75255 +40701 13580 +85115 63598 +56810 57264 +49698 74778 +60564 57264 +16225 71407 +89966 85122 +61233 14073 +31511 41588 +33945 73524 +98473 31768 +41456 64129 +85038 87448 +73588 96883 +25283 86498 +33280 13657 +49275 20323 +87664 77882 +47908 57264 +33245 58814 +42158 28925 +22933 72601 +60641 63363 +79702 44349 +78739 17205 +22561 96035 +43533 21008 +71914 12918 +14862 15368 +17015 89301 +73903 93498 +43166 85414 +90888 78097 +43451 33757 +99167 55182 +71516 86059 +51747 78573 +37581 94131 +12993 79382 +32228 96328 +69475 33757 +54981 23543 +81379 33567 +80367 35412 +58566 94131 +26053 35412 +77442 80466 +70340 17984 +83405 14607 +59197 85280 +98773 49233 +32734 94596 +53611 52671 +45926 94927 +53823 53295 +31731 20323 +97782 95936 +92678 43308 +98973 47522 +63484 89301 +29604 60237 +74422 93965 +80370 58449 +89621 75255 +27363 31734 +11198 90186 +88033 42157 +93444 24578 +35116 55182 +16393 73018 +33628 38645 +67211 57264 +24757 20323 +73181 35191 +24567 76180 +84081 15390 +34345 10519 +21185 17015 +33414 96823 +30310 72888 +24352 57264 +56004 14161 +14492 39140 +47871 75255 +42912 92034 +91823 36007 +46731 73158 +24112 74778 +92034 95808 +77157 89301 +29215 99938 +37580 89301 +73593 36007 +11075 96823 +49084 34885 diff --git a/data/Y2024/D02/riddle b/data/Y2024/D02/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D03/riddle b/data/Y2024/D03/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D04/riddle b/data/Y2024/D04/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D05/riddle b/data/Y2024/D05/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D06/riddle b/data/Y2024/D06/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D07/riddle b/data/Y2024/D07/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D08/riddle b/data/Y2024/D08/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D09/riddle b/data/Y2024/D09/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D10/riddle b/data/Y2024/D10/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D11/riddle b/data/Y2024/D11/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D12/riddle b/data/Y2024/D12/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D13/riddle b/data/Y2024/D13/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D14/riddle b/data/Y2024/D14/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D15/riddle b/data/Y2024/D15/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D16/riddle b/data/Y2024/D16/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D17/riddle b/data/Y2024/D17/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D18/riddle b/data/Y2024/D18/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D19/riddle b/data/Y2024/D19/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D20/riddle b/data/Y2024/D20/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D21/riddle b/data/Y2024/D21/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D22/riddle b/data/Y2024/D22/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D23/riddle b/data/Y2024/D23/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D24/riddle b/data/Y2024/D24/riddle new file mode 100644 index 0000000..e69de29 diff --git a/data/Y2024/D25/riddle b/data/Y2024/D25/riddle new file mode 100644 index 0000000..e69de29 diff --git a/src/AoC.hs b/src/AoC.hs index 28ae754..3fd4064 100644 --- a/src/AoC.hs +++ b/src/AoC.hs @@ -15,6 +15,7 @@ import System.IO (hPutStrLn) import System.IO.Error qualified as IOError import AoC.Y2023 qualified as Y2023 +import AoC.Y2024 qualified as Y2024 runAoC :: (MonadIO m) => Year -> Day -> m (Either Text Solution) runAoC y d = do @@ -28,6 +29,7 @@ runAoCExample y d = do solve :: (MonadIO m) => Year -> Day -> Riddle -> m (Either Text Solution) solve Y2023 = Y2023.solve +solve Y2024 = Y2024.solve solve y = \_ _ -> pure $ Left $ show y <> ": not implementedi" handleError :: IOError.IOError -> IO () @@ -39,4 +41,4 @@ printResult (Left e) = putTextLn e printResult (Right s) = print s defaultMain :: IO () -defaultMain = Exception.catch (runAoC Y2023 D05 >>= printResult) handleError +defaultMain = Exception.catch (runAoC Y2024 D01 >>= printResult) handleError diff --git a/src/AoC/Y2024.hs b/src/AoC/Y2024.hs new file mode 100644 index 0000000..87b2b00 --- /dev/null +++ b/src/AoC/Y2024.hs @@ -0,0 +1,57 @@ +module AoC.Y2024 (solve) where + +import AoC.Day +import AoC.Riddle + +import AoC.Y2024.D01 qualified as D01 +import AoC.Y2024.D02 qualified as D02 +import AoC.Y2024.D03 qualified as D03 +import AoC.Y2024.D04 qualified as D04 +import AoC.Y2024.D05 qualified as D05 +import AoC.Y2024.D06 qualified as D06 +import AoC.Y2024.D07 qualified as D07 +import AoC.Y2024.D08 qualified as D08 +import AoC.Y2024.D09 qualified as D09 +import AoC.Y2024.D10 qualified as D10 +import AoC.Y2024.D11 qualified as D11 +import AoC.Y2024.D12 qualified as D12 +import AoC.Y2024.D13 qualified as D13 +import AoC.Y2024.D14 qualified as D14 +import AoC.Y2024.D15 qualified as D15 +import AoC.Y2024.D16 qualified as D16 +import AoC.Y2024.D17 qualified as D17 +import AoC.Y2024.D18 qualified as D18 +import AoC.Y2024.D19 qualified as D19 +import AoC.Y2024.D20 qualified as D20 +import AoC.Y2024.D21 qualified as D21 +import AoC.Y2024.D22 qualified as D22 +import AoC.Y2024.D23 qualified as D23 +import AoC.Y2024.D24 qualified as D24 +import AoC.Y2024.D25 qualified as D25 + +solve :: (MonadIO m) => Day -> Text -> m (Either Error Solution) +solve D01 = D01.solve +solve D02 = D02.solve +solve D03 = D03.solve +solve D04 = D04.solve +solve D05 = D05.solve +solve D06 = D06.solve +solve D07 = D07.solve +solve D08 = D08.solve +solve D09 = D09.solve +solve D10 = D10.solve +solve D11 = D11.solve +solve D12 = D12.solve +solve D13 = D13.solve +solve D14 = D14.solve +solve D15 = D15.solve +solve D16 = D16.solve +solve D17 = D17.solve +solve D18 = D18.solve +solve D19 = D19.solve +solve D20 = D20.solve +solve D21 = D21.solve +solve D22 = D22.solve +solve D23 = D23.solve +solve D24 = D24.solve +solve D25 = D25.solve diff --git a/src/AoC/Y2024/D01.hs b/src/AoC/Y2024/D01.hs new file mode 100644 index 0000000..3a880d6 --- /dev/null +++ b/src/AoC/Y2024/D01.hs @@ -0,0 +1,39 @@ +module AoC.Y2024.D01 (solve) where + +import AoC.Riddle +import Data.IntMap qualified as M + +parse :: Text -> ([Int], [Int]) +parse riddle = + let + lists = transpose $ mapMaybe (readMaybe . toString) . words <$> lines riddle + in + case lists of + [as, bs] -> (as, bs) + _ -> ([], []) + +part1 :: Riddle -> Int +part1 riddle = + let + (as, bs) = parse riddle + as' = sort as + bs' = sort bs + distances = zipWith (\a b -> if a > b then a - b else b - a) as' bs' + in + sum distances + +mkOccurrences :: [Int] -> IntMap Int +mkOccurrences = M.unionsWith (+) . fmap (\i -> one (i, 1)) + +part2 :: Riddle -> Int +part2 riddle = + let + (as, bs) = parse riddle + occurrences = mkOccurrences bs + step a total = total + a * fromMaybe 0 (M.lookup a occurrences) + in + foldr step 0 as + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve riddle = do + pure $ Right [fromIntegral $ part1 riddle, fromIntegral $ part2 riddle] diff --git a/src/AoC/Y2024/D02.hs b/src/AoC/Y2024/D02.hs new file mode 100644 index 0000000..b4ca1ed --- /dev/null +++ b/src/AoC/Y2024/D02.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D02 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D03.hs b/src/AoC/Y2024/D03.hs new file mode 100644 index 0000000..0e41568 --- /dev/null +++ b/src/AoC/Y2024/D03.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D03 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D04.hs b/src/AoC/Y2024/D04.hs new file mode 100644 index 0000000..eaacb21 --- /dev/null +++ b/src/AoC/Y2024/D04.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D04 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D05.hs b/src/AoC/Y2024/D05.hs new file mode 100644 index 0000000..0ea5b81 --- /dev/null +++ b/src/AoC/Y2024/D05.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D05 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D06.hs b/src/AoC/Y2024/D06.hs new file mode 100644 index 0000000..92a5945 --- /dev/null +++ b/src/AoC/Y2024/D06.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D06 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D07.hs b/src/AoC/Y2024/D07.hs new file mode 100644 index 0000000..064c7b0 --- /dev/null +++ b/src/AoC/Y2024/D07.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D07 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D08.hs b/src/AoC/Y2024/D08.hs new file mode 100644 index 0000000..5da393e --- /dev/null +++ b/src/AoC/Y2024/D08.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D08 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D09.hs b/src/AoC/Y2024/D09.hs new file mode 100644 index 0000000..2e03abe --- /dev/null +++ b/src/AoC/Y2024/D09.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D09 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D10.hs b/src/AoC/Y2024/D10.hs new file mode 100644 index 0000000..cb666c3 --- /dev/null +++ b/src/AoC/Y2024/D10.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D10 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D11.hs b/src/AoC/Y2024/D11.hs new file mode 100644 index 0000000..44ccaab --- /dev/null +++ b/src/AoC/Y2024/D11.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D11 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D12.hs b/src/AoC/Y2024/D12.hs new file mode 100644 index 0000000..680e628 --- /dev/null +++ b/src/AoC/Y2024/D12.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D12 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D13.hs b/src/AoC/Y2024/D13.hs new file mode 100644 index 0000000..b69f0df --- /dev/null +++ b/src/AoC/Y2024/D13.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D13 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D14.hs b/src/AoC/Y2024/D14.hs new file mode 100644 index 0000000..29cbfd9 --- /dev/null +++ b/src/AoC/Y2024/D14.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D14 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D15.hs b/src/AoC/Y2024/D15.hs new file mode 100644 index 0000000..16f8f89 --- /dev/null +++ b/src/AoC/Y2024/D15.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D15 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D16.hs b/src/AoC/Y2024/D16.hs new file mode 100644 index 0000000..11f2ebf --- /dev/null +++ b/src/AoC/Y2024/D16.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D16 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D17.hs b/src/AoC/Y2024/D17.hs new file mode 100644 index 0000000..1346a16 --- /dev/null +++ b/src/AoC/Y2024/D17.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D17 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D18.hs b/src/AoC/Y2024/D18.hs new file mode 100644 index 0000000..67f8bb5 --- /dev/null +++ b/src/AoC/Y2024/D18.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D18 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D19.hs b/src/AoC/Y2024/D19.hs new file mode 100644 index 0000000..5956915 --- /dev/null +++ b/src/AoC/Y2024/D19.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D19 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D20.hs b/src/AoC/Y2024/D20.hs new file mode 100644 index 0000000..351b34e --- /dev/null +++ b/src/AoC/Y2024/D20.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D20 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D21.hs b/src/AoC/Y2024/D21.hs new file mode 100644 index 0000000..8f54fee --- /dev/null +++ b/src/AoC/Y2024/D21.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D21 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D22.hs b/src/AoC/Y2024/D22.hs new file mode 100644 index 0000000..4a05240 --- /dev/null +++ b/src/AoC/Y2024/D22.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D22 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D23.hs b/src/AoC/Y2024/D23.hs new file mode 100644 index 0000000..9ea1b5b --- /dev/null +++ b/src/AoC/Y2024/D23.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D23 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D24.hs b/src/AoC/Y2024/D24.hs new file mode 100644 index 0000000..35c22c8 --- /dev/null +++ b/src/AoC/Y2024/D24.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D24 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Y2024/D25.hs b/src/AoC/Y2024/D25.hs new file mode 100644 index 0000000..ac69aef --- /dev/null +++ b/src/AoC/Y2024/D25.hs @@ -0,0 +1,6 @@ +module AoC.Y2024.D25 (solve) where + +import AoC.Riddle + +solve :: (MonadIO m) => Text -> m (Either Text Solution) +solve _ = pure $ Left "not yet implemented" diff --git a/src/AoC/Year.hs b/src/AoC/Year.hs index 0576478..3a91d29 100644 --- a/src/AoC/Year.hs +++ b/src/AoC/Year.hs @@ -2,5 +2,6 @@ module AoC.Year (Year (..)) where data Year = Y0000 + | Y2024 | Y2023 deriving stock (Read, Show, Eq, Ord, Enum) diff --git a/test/spec/AoCSpec/Y2024Spec.hs b/test/spec/AoCSpec/Y2024Spec.hs new file mode 100644 index 0000000..3a08130 --- /dev/null +++ b/test/spec/AoCSpec/Y2024Spec.hs @@ -0,0 +1,28 @@ +module AoCSpec.Y2024Spec (spec) where + +import AoC +import Test.Hspec + +spec :: Spec +spec = do + describe "Day 1" do + it "calculates correctly" do + runAoC Y2024 D01 `shouldReturn` Right [2580760, 25358365] + +{- + describe "Day 2" do + it "calculates correctly" do + runAoC Y2024 D02 `shouldReturn` Right [2369, 66363] + + describe "Day 3" do + it "calculates correctly" do + runAoC Y2023 D03 `shouldReturn` Right [528799, 84907174] + + describe "Day 4" do + it "calculates correctly" do + runAoC Y2023 D04 `shouldReturn` Right [24542, 8736438] + + describe "Day 5" do + it "calculates the example correctly" do + runAoCExample Y2023 D05 `shouldReturn` Right [35] +-}