From 6f89912c0324f97da90601773d80484a36b45559 Mon Sep 17 00:00:00 2001 From: Jonatan Z Date: Thu, 1 Dec 2022 18:19:10 +0100 Subject: [PATCH] initial + day01 --- .gitignore | 2 + AOC22.cabal | 38 + LICENSE | 30 + README.md | 1 + data/day01.txt | 2270 +++++++++++++++++++++++++++++++++++++++++++++ package.yaml | 59 ++ src/AOCUtil.hs | 91 ++ src/Days/Day01.hs | 15 + src/Main.hs | 8 + stack.yaml | 66 ++ stack.yaml.lock | 12 + 11 files changed, 2592 insertions(+) create mode 100644 .gitignore create mode 100644 AOC22.cabal create mode 100644 LICENSE create mode 100644 README.md create mode 100644 data/day01.txt create mode 100644 package.yaml create mode 100644 src/AOCUtil.hs create mode 100644 src/Days/Day01.hs create mode 100644 src/Main.hs create mode 100644 stack.yaml create mode 100644 stack.yaml.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c368d45 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.stack-work/ +*~ \ No newline at end of file diff --git a/AOC22.cabal b/AOC22.cabal new file mode 100644 index 0000000..29eea3b --- /dev/null +++ b/AOC22.cabal @@ -0,0 +1,38 @@ +cabal-version: 1.12 + +-- This file has been generated from package.yaml by hpack version 0.34.2. +-- +-- see: https://github.com/sol/hpack + +name: AOC22 +version: 0.1.0.0 +description: Please see the README on GitHub at +homepage: https://github.com/githubuser/AOC22#readme +bug-reports: https://github.com/githubuser/AOC22/issues +author: Author name here +maintainer: example@example.com +copyright: 2022 Author name here +license: BSD3 +license-file: LICENSE +build-type: Simple +extra-source-files: + README.md + CHANGELOG.md + +source-repository head + type: git + location: https://github.com/githubuser/AOC22 + +executable AOC22-exe + main-is: Main.hs + other-modules: + AOCUtil + Days.Day01 + Paths_AOC22 + hs-source-dirs: + src + ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N + build-depends: + AOC22 + , base >=4.7 && <5 + default-language: Haskell2010 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..342c588 --- /dev/null +++ b/LICENSE @@ -0,0 +1,30 @@ +Copyright Author name here (c) 2022 + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Author name here nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..382f465 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# AOC22 diff --git a/data/day01.txt b/data/day01.txt new file mode 100644 index 0000000..2ae209c --- /dev/null +++ b/data/day01.txt @@ -0,0 +1,2270 @@ +9195 +5496 +2732 +8364 +3703 +3199 +7177 +1659 + +7307 +2177 +1011 +8678 +14080 + +6465 +6922 +3733 +8573 +6749 +1704 +6429 +8774 +1296 +2536 + +22456 + +11642 +10162 +10997 +6963 +3076 +5859 +1280 + +5285 +7498 +8540 +7360 +6822 +8042 +6798 +6398 +4495 +8043 + +60304 + +2947 +24880 +21239 + +8441 +1034 +2591 +8993 +10366 +1313 +10497 + +3404 +5018 +5377 +4783 +6441 +5110 +5688 +3371 +1220 +4949 +2945 +6041 +2852 +2379 + +15514 +13699 +10357 +9769 + +11464 +2001 +2847 +9933 +2706 +8621 +2064 + +5478 +2981 +6540 +2303 +4607 +5284 +4762 +3936 +3194 +4371 +2925 +3124 +4491 + +8542 +7605 +3773 +8575 +3405 +4720 +7857 +7427 +5182 +3977 + +9405 +16048 +4142 +9101 +16303 + +6102 +1795 +1053 +2091 +5774 +6053 +4997 +2109 +1019 +3830 +6057 +4772 +3344 + +11299 +16115 +11748 +14944 + +4477 +6292 +8257 +9583 +10416 +2730 +2153 +5887 + +4790 +1198 +2184 +3604 +4004 +1543 +5017 +5409 +3489 +4731 +3302 +3046 +1056 + +2260 +3028 +7305 +4516 +11415 +4855 +4297 + +1669 +4175 +6403 +4004 +1711 +8509 +4874 +3756 +6893 +8463 + +6333 +1576 +4576 +4288 +3764 + +1831 +1336 +1579 +3704 +3215 +4702 +5798 +2714 +2917 +1616 +5564 +5061 +3188 +4473 +3457 + +4140 +3428 +4274 +6158 +4641 +3009 +6576 +6065 +1912 +6539 +6603 +6519 +1765 + +9606 +4903 +3424 +8196 +5996 +8874 +3223 + +1220 +1823 +10789 + +1268 +9582 +18617 +9647 + +5024 +8920 +7746 +1641 +8120 + +2531 +6027 +2332 +1138 +1623 +5812 +5445 +3289 +5476 +4366 +2108 +1557 +3495 +6402 + +9408 +9279 +7150 +10907 +1672 + +5314 +4022 +1005 +2246 +2362 +6739 +2988 +3694 +3827 +7027 +6688 + +5328 +1002 +6230 +3178 +3214 +1388 +1377 +4036 +1138 +3142 +4432 +6435 +1004 +3330 + +7157 +4529 +6804 +2866 +8358 +5096 +6279 +2843 +4766 + +5901 +3567 +5658 +2691 +1274 +5522 +5166 +3121 +4019 +4943 +3075 +6363 +1481 +2265 + +3859 +2225 +8342 +5976 +5027 +8056 +2568 +9185 +4977 + +10439 +23445 +22928 + +19540 +2027 +13612 +11009 + +5729 +2779 +3998 +5445 +5873 +6582 +7603 +4737 +7269 +1552 +6875 + +1281 +14848 +9048 +11497 +5727 + +17791 +13209 +18978 + +5137 +4552 +1608 +2501 +2700 +5797 +5238 +1814 +5319 +2401 +4549 +5636 +3334 +1848 +3434 + +1844 +6371 +6522 +4006 +1587 +3280 +2227 +3655 +1463 +7113 +6222 +1535 + +4030 +7221 +2228 +8901 +3291 +5507 +9136 + +6160 +2512 +4825 +7461 +1360 +5137 +5950 +4281 +6156 +6455 +3709 +6824 + +4851 +3122 +8946 +8309 +2777 +8658 +2167 +4599 + +13020 +11487 +4852 +4141 +10771 + +7617 +1953 +2917 +1490 +11333 +8366 +3536 + +2129 +3570 +3584 +1128 +5877 +6076 +1131 +4300 +4587 +3900 +2032 +6108 +3500 +5816 +2367 + +2321 +9945 +7736 +15720 + +4709 +5471 +4445 +1162 +5062 +4576 +3316 +3568 +4556 +4169 +5592 +2290 +1301 +4286 + +6357 +2925 +3527 +6451 +4206 +3113 +3371 +5688 +5965 +5569 +2426 +3498 + +4785 +3391 +4721 +3860 +4591 +3316 +3906 +4096 +3114 +3084 +5587 +2387 +4083 +3156 +5375 + +18007 +13252 +8010 +11758 + +4133 +4727 +6565 +2361 +4219 +6926 +7563 +2415 +1503 +2280 + +2590 +4700 +6754 +3719 +1385 +6642 +5342 +6977 +6863 +5943 +5963 + +9743 +5874 +2287 +1349 +9400 + +1833 +3455 +4682 +5001 +1194 +4009 +6100 +2669 +2387 +3677 +5969 +5675 +5043 +2851 +1510 + +6344 +7947 +4455 +11855 +12264 + +7307 +5381 +2683 +5690 +3800 +7294 +6155 +3818 +2147 +6822 +1791 +6219 + +5720 +7820 +1697 +8666 +4561 +2786 + +5502 +3231 +2121 +6771 +5496 +4354 +2459 +5300 +1012 +4840 +2244 +2257 +5116 + +6483 +5654 +2132 +1533 +3053 +2037 +2813 +3266 +1113 +3421 +4371 +3298 +1083 +3178 + +5702 +5532 +3500 +10461 +1388 +10833 + +3275 +2980 +7734 +3164 +4787 +9609 +2479 +3653 +6775 + +32754 + +10713 +2913 +2073 +2390 +4035 +5313 + +2154 +2932 +3665 +2209 +4770 +5509 +4867 +1077 +1042 +5075 +1468 +2559 +5969 +4421 +3097 + +10940 + +1790 +3782 +5620 +3929 +8752 +3616 +4303 +5242 +4985 +3153 + +2056 +5738 +6082 +2290 +4491 +3540 +4606 +5400 +1950 +4392 +3358 +3965 +1015 +4747 +4146 + +6837 +1403 +7490 +9041 +1880 +7983 +7951 +3991 + +3812 +8432 +5534 +10149 +6927 +5737 +7757 +6755 + +24486 +17671 +3275 + +5835 +5716 +3114 +4794 +6131 +3155 +5121 +4263 +2172 +1250 +4699 +3474 +2422 +1112 + +2228 +3141 +8939 +2339 +1934 +5567 +4386 +4608 +4715 + +5667 +4951 +1903 +3770 +3604 +3358 +3431 +5347 +1549 +6035 +1213 +2966 +5881 +2159 +5931 + +1855 +2610 +3721 +1186 +1476 +5566 +5896 +5461 +2244 +6439 +2996 +4877 + +3605 +8024 +1015 +2396 +6499 +5491 +6897 +1527 +3023 +3733 +1569 + +4818 +5057 + +5425 +4529 +1806 +4492 +3824 +6389 +2425 +1938 +6364 +3319 +2590 +3288 +3213 +6375 + +19548 +2710 + +2339 +6807 +4818 +6364 +1582 +4337 +2672 +2010 +2158 +4945 +4497 +6038 +6384 + +6358 +24928 + +2269 +7157 +7539 +4229 +5439 +7720 +5840 +5121 + +1874 +4557 +1240 + +20698 +32960 + +6631 +6168 +7092 +3064 +1584 +4665 +7038 +5025 +4993 +4444 +3237 +6476 + +9475 +8971 +8493 +12321 +8494 +13681 + +5753 +3191 +3239 +2583 +1752 +6646 +2353 +9605 +9421 + +6201 +2996 +5305 +3353 +4674 +6344 +3090 +7267 +7553 +3036 + +4230 +1261 +4167 +7900 +7309 +1072 +2156 +7061 +1072 +3936 +5478 + +2149 +5822 +6544 +4842 +3460 +6259 +3309 +6826 +8189 + +5224 +9962 +8680 +8700 +5705 +9423 +9132 + +10634 +5810 +7278 +7563 +4692 +9359 +10970 + +2265 +5518 +4578 +2087 +5530 +2822 +3506 +5354 +3795 +6447 +7721 + +5983 +4123 +11142 +5380 +9873 + +6575 +3055 +1253 +3073 +3428 +5034 +5026 +2078 +2305 +1243 +1741 +1905 +3417 + +7507 +3916 +12542 +3336 +13205 +9414 + +2572 +3152 +4829 +4925 +2805 +2109 +2479 +5310 +2369 +3676 +3808 +2061 +2103 +3846 + +2228 +2731 +3042 +7005 +2663 +5092 +5604 +5128 +2481 +6335 +6596 +1590 + +17388 + +1907 +9742 +2574 +5867 +1944 +9382 +7215 +4615 + +7022 +17033 +18410 +9549 + +12399 +14254 +7540 +14639 + +6076 +1520 +5371 +6776 +3480 +2872 +2754 +3560 +4076 +7127 +4847 + +28413 +29243 + +6331 + +1295 +7963 +7819 +8935 +4932 +2119 +8965 + +4020 +1815 +4975 +4252 +3814 +3944 +4046 +5322 +4492 +6798 +7873 + +22718 +15596 +3783 + +2540 +1228 +6529 +8255 +8380 +7381 +5272 +4335 +9079 + +13674 + +4654 +14973 + +9742 +7320 +6104 +10643 +2218 +3849 +1554 +6240 + +5883 + +2947 +3960 +3137 +3545 +4086 +3281 +2125 +2187 +2672 +6083 +6348 +5979 + +3978 +13338 +6730 +11223 + +10774 +8045 +3517 +5539 + +3497 +3723 +5012 +2253 +6525 +6164 +5048 +3048 +3572 +4049 +4332 + +10141 +5326 +1095 +2973 +5927 +2007 +2050 + +3706 +2393 +7466 +6424 +3406 +6692 +6659 +5887 +2430 +1710 + +2477 +10590 +7756 +6758 +7119 +2697 +7582 +2818 + +7797 +3364 +12741 +13118 +8536 +11425 + +1233 +7736 +7864 +9042 +1637 +10294 + +24161 +9656 +18425 + +5990 +2101 +5653 +2884 +3039 +4797 +5843 +5247 +1273 +5886 +6625 +6674 + +6329 +18772 +2093 +17934 + +4887 +6312 +3128 +3886 +3463 +4255 +3756 +3983 +3426 +1431 +2698 +6393 +1005 +4468 + +5205 +33136 + +6347 +4976 +1837 +2668 +1958 +2844 +1832 +5159 +6743 +5235 +2063 +6345 +5435 + +8099 +7958 +1005 +6197 +5256 +5473 +5305 +6725 +8345 +7710 + +3872 +6145 +9624 +2956 +8435 +10422 + +3327 +8232 +3193 +10317 +8307 +3668 +1460 + +1846 + +8278 +3383 +2806 +8824 +2203 +7408 +8406 +9472 + +4239 +4975 +2739 +5971 +6296 +1441 +3258 +4039 +1250 +6148 +4268 +1029 +4749 + +13122 +16097 +24603 + +16731 + +9483 +5982 +1713 +3420 +8734 +3700 +7331 +6766 +8751 + +8615 +5515 +2095 +6447 +2271 +5116 +4192 +2466 +6024 +7381 + +5890 +1229 +5991 +6171 +1006 +8052 +1047 +2854 +6775 + +2707 +4168 +3672 +5598 +6167 +1829 +1057 +4637 +4838 +1436 +3420 + +11809 +3398 +5077 +7486 +8465 +13335 + +7603 +2418 +5080 +6220 +11293 +3620 +2269 + +3091 +1168 +6766 +1451 +5970 +6730 +4050 +4668 +1481 +5796 +1761 +2176 +6819 + +11912 +11768 +10317 +7266 +7893 +5171 +10226 + +3050 +16374 +8289 +10976 +5718 + +6761 +7838 +13450 +7109 +4241 + +5966 +10730 +10359 +1504 +7420 +5282 +8409 +3601 + +12221 +9545 +19251 + +8255 +13820 + +2603 +2664 +6910 +3057 +3028 +3978 +5942 +1761 +7094 +4810 +6613 +3734 + +1682 +6879 +4558 +5580 +7138 +1357 +6509 +1608 + +10454 +6353 +9343 +5446 +10576 +4785 +10603 +10093 + +4608 +5849 +5198 +6198 +6657 +4876 +4557 +4176 +4300 +2296 +6147 +5391 +2029 + +57604 + +9413 +8063 +7537 +6320 +1097 +6122 +1355 +4272 + +3874 +17796 +15560 +14745 + +2035 +7677 +3549 +7187 +5545 +8078 +7619 +1164 +4781 +1537 +1300 + +4958 +3527 +5457 +2429 +4177 +3722 +2678 +2858 +3860 +2757 +1652 +3601 +1271 +5064 +4825 + +1451 +5344 +9505 +3578 +5125 +3601 +7753 +9647 +5199 + +1023 +2994 +3314 +2984 +1823 +1049 +1451 +4002 +1982 +1991 +5607 +2280 +2637 + +10085 +1558 +4129 +16879 + +4014 +1850 +1953 +1210 +6063 +1152 +1155 +5688 +2564 +2601 +4987 +3243 +5028 +3031 +4566 + +5269 +3381 +6856 +3425 +4686 +7142 +3527 +5679 +1170 +1974 +5245 + +3188 +2577 +5091 +4836 +8051 +9506 +4796 +6060 +2312 + +1174 +2702 +2957 +2060 +2298 +3065 +4107 +5288 +8035 +1408 +1220 + +7531 +28620 + +5642 +9226 +4661 +8001 +3130 +2765 +8861 +5388 +8664 + +38986 + +5940 +1905 +2903 +4936 +1631 +3601 +3904 +5472 +4605 +4450 +1924 +5819 +5595 +2620 +4949 + +2678 +4645 +7836 +9040 +6883 +5728 + +30287 + +7177 +8034 +9715 +5392 +2758 +3528 +2237 +3861 + +3185 +4171 +2020 +4715 +7052 +2755 +1914 +7742 + +1707 +1676 +5745 +4143 +4923 +5895 +4430 +3479 +5577 +4055 +5398 +3686 +3102 + +2210 +7100 +7893 +18459 + +10383 +36815 + +5724 +7580 +5795 +2420 +6769 +2653 +11300 + +64590 + +1458 +2116 +2482 +1405 +5244 +2676 +3142 +5465 +1204 +3386 +2346 +5280 +4419 +5141 +1792 + +15148 +9248 +10159 +15310 +10409 + +6717 +8383 +3815 +4003 +3628 +1330 +3935 +7421 +8104 +6368 + +4427 +12621 +4678 + +8039 +2837 +3527 +7261 +1895 +1730 +2425 +9351 +4956 + +4754 +3919 +7834 +1825 +9221 +2448 +6332 +6027 + +2762 +8800 +2052 +6914 +4855 +5555 +5457 +7150 + +4929 +9391 +2475 +3274 +11392 +6243 +10749 + +9936 +2900 +11200 +8301 +8740 +1807 +9313 + +7654 +6957 +3503 +1388 +3461 +8003 +8540 +8588 +6578 +5105 + +2375 +2789 +4492 +9766 +6242 +8573 +7746 +2312 + +18293 +7456 +12739 +14503 + +4591 +5244 +2190 +1492 +3205 +4797 +4072 +5747 +2280 +3726 +2871 +2903 +3336 +2136 +4352 + +1198 +7124 +7138 +1289 +7137 +3365 +3758 +3462 +1829 +5959 +4767 +5007 + +61923 + +35790 +17566 + +61494 + +6184 +1939 +4155 +6792 +4221 +5606 +5012 +2653 +6955 +4262 +7482 + +8406 +8532 +17249 +14475 + +2836 +5515 +1600 +5230 +2379 +1581 +2792 +4921 +1706 +5905 +4341 +4541 +2423 +1089 +3865 + +10178 +7282 +4389 +1368 +6403 +4864 +9894 +1600 + +14638 +17362 +1290 +13364 + +9732 +4333 +6164 +3377 +10073 + +3421 +5867 +4088 +3939 +2340 +1172 +5329 +1353 +1760 +2609 +2241 +3184 +4067 +3187 + +1251 +10075 +5029 +11495 +16420 + +9941 +1159 +6581 +5359 +5091 +9709 +6879 +1480 + +8735 +7340 +7533 +7967 +3090 +4415 +8030 +2024 +7643 +1020 + +3683 +1827 +4572 +4920 +5321 +6344 +7409 +6644 +5261 +5461 +4746 +2427 + +1933 +3844 +4152 +7816 +4841 +9773 +8031 +4562 + +5859 +5820 +2404 +4008 +6263 +5126 +6608 +4376 +1742 +4257 +3698 +6355 +6830 + +12023 + +13405 +17282 +4233 + +1854 +3016 +5622 +4353 +4201 +1603 +6425 +5189 +5954 +4672 +4166 +6254 +2946 +5488 + +25849 + +5724 +1798 +4680 +3686 + +2487 + +4242 +6224 +5721 +4919 +6956 +2243 +2558 +5831 +4442 +5899 +5110 +3296 +3166 + +8097 +6087 +3812 +8427 +2519 +2596 +8032 +5217 +5404 +1761 + +1051 +8900 +3355 +8481 +10567 +9593 +9889 +1111 + +2421 +7635 +1078 +10224 +3394 +8259 +6023 + +1746 +3725 +5398 +1283 +6522 +5172 +2666 +4207 +3608 +4554 +3320 +3092 + +12151 +2380 +2379 +9460 +2103 +2719 + +4111 +4047 +5566 +1533 +3013 +1914 +6732 +3081 +3039 +2544 +1602 + +1944 +7139 +1270 +3971 +1754 +5539 +7134 +2383 +7875 +6814 +3154 + +6658 +6937 +5130 +12523 +2510 +13475 + +8220 +14140 +16575 +17834 + +30821 +27376 + +6988 +1239 +3428 +9314 +12372 +6311 + +1230 +7470 +5818 +2628 +2076 +4683 +6782 +6631 +5341 +3207 +2733 + +3007 +4564 +3184 +7193 +6232 +6808 +1125 +1167 +5083 +5500 +1501 + +12528 +6660 +5956 +4124 +15907 + +4341 +3095 +5140 +2053 +2632 +4026 +6882 +1575 +2699 +1134 +6729 +3741 +1965 + +40377 + +7974 +32804 + +6933 +17986 + +3950 +8994 +5969 +5927 +9676 +4722 +2511 +3924 + +8550 +5279 +4462 +1898 +4285 +8152 +7672 +6239 +7171 +6077 + +4648 +3574 +3766 +1602 +5875 +2697 +2112 +2269 +5661 +5173 +5412 +3064 +2152 +2421 +3606 + +19130 +24395 +6811 + +14914 +5386 +17927 + +57004 + +6847 +2293 +3144 +6966 +3591 +6579 +6282 +7983 +2019 +5166 + +25773 +21289 +3985 + +18580 +10900 +12012 + +20434 + +6523 +17040 +7830 + +15328 +3273 +17137 +14101 + +25430 + +5245 +1411 +3633 +1296 +4017 +4795 +3146 +6096 +3424 + +2996 + +3496 +12598 +7602 +6914 +2027 +1459 + +5307 +4932 +8654 +5673 +8580 +3054 +7353 +6379 + +5347 +5969 +8241 +8710 +1345 +5500 +2640 +1101 + +10640 +5177 +6497 +5013 +6210 +8109 +9250 +1643 + +23753 +1998 +16905 + +34219 +25863 + +5926 +8576 +4565 +2605 +11086 +10217 +3411 + +4970 +1205 +3186 +5837 +3119 +7356 +4392 +5270 +2521 +2452 +5271 +2905 + +4054 +8657 +9202 +6213 +4409 +4695 + +3198 +7002 +15731 +5099 +16321 + +14542 + +39972 + +10785 +17115 +22811 + +7214 +7178 +5198 +2157 +6985 +1686 +8037 +7559 +2410 +5211 +6477 + +1496 +3607 +2326 +5342 +5777 +6182 +5528 +6324 +2023 +2944 +2175 +5035 +1424 +2154 + +5224 +4172 +1295 +7929 +4386 +2421 +6034 +2895 +3881 +2464 diff --git a/package.yaml b/package.yaml new file mode 100644 index 0000000..6e64b41 --- /dev/null +++ b/package.yaml @@ -0,0 +1,59 @@ +name: AOC22 +version: 0.1.0.0 +github: "githubuser/AOC22" +license: BSD3 +author: "Author name here" +maintainer: "example@example.com" +copyright: "2022 Author name here" + +extra-source-files: +- README.md +- CHANGELOG.md + +# Metadata used when publishing your package +# synopsis: Short description of your package +# category: Web + +# To avoid duplicated efforts in documentation and dealing with the +# complications of embedding Haddock markup inside cabal files, it is +# common to point users to the README.md file. +description: Please see the README on GitHub at + +dependencies: +- base >= 4.7 && < 5 + +ghc-options: +- -Wall +- -Wcompat +- -Widentities +- -Wincomplete-record-updates +- -Wincomplete-uni-patterns +- -Wmissing-export-lists +- -Wmissing-home-modules +- -Wpartial-fields +- -Wredundant-constraints + +# library: + # source-dirs: src + +executables: + AOC22-exe: + main: Main.hs + source-dirs: src + ghc-options: + - -threaded + - -rtsopts + - -with-rtsopts=-N + dependencies: + - AOC22 + +# tests: +# AOC22-test: +# main: Spec.hs +# source-dirs: test +# ghc-options: +# - -threaded +# - -rtsopts +# - -with-rtsopts=-N +# dependencies: +# - AOC22 diff --git a/src/AOCUtil.hs b/src/AOCUtil.hs new file mode 100644 index 0000000..4cd40f9 --- /dev/null +++ b/src/AOCUtil.hs @@ -0,0 +1,91 @@ +module AOCUtil where +import Data.List +import Data.Ord + +interactF :: String -> (String -> String) -> IO () +interactF file fun = (putStrLn . fun) =<< readFile file + + +splitOn :: Eq a => a -> [a] -> [[a]] +splitOn p s = case dropWhile (p ==) s of + [] -> [] + s' -> w : splitOn p s'' where (w, s'') = break (== p) s' + + +impl :: Bool -> Bool -> Bool +impl a b = not a || b + +unDigits :: [Int] -> Int +unDigits [] = 0 +unDigits [i] = i +unDigits is = unDigits (init is) * 10 + last is + +middle :: [a] -> a +middle [] = error "called AOCUtil.middle on empty list." +middle ls = ls !! (length ls `div` 2) + + +-- mapFst :: (a->c) -> (a,b) -> (c,b) +-- mapFst f (a, b) = (f a, b) + +-- mapSnd :: (b->c) -> (a,b) -> (a,c) +-- mapSnd f (a, b) = (a, f b) + + +readBin :: String -> Int +readBin [] = 0 +readBin ls = readBin (init ls) * 2 + toBin (last ls) + where + toBin '0' = 0 + toBin '1' = 1 + + +first2 :: [a] -> (a, a) +first2 (a : b : _) = (a, b) + +first3 :: [a] -> (a, a, a) +first3 (a : b : c : _) = (a, b, c) + +asList2 :: (a, a) -> [a] +asList2 (a, b) = [a, b] + +asList3 :: (a, a, a) -> [a] +asList3 (a, b, c) = [a, b, c] + +in2 :: Eq a => a -> (a, a) -> Bool +in2 a = (a `elem`) . asList2 + +in3 :: Eq a => a -> (a, a, a) -> Bool +in3 a = (a `elem`) . asList3 + +mapT :: (a -> b) -> (a, a) -> (b, b) +mapT f (a1, a2) = (f a1, f a2) + +mapT3 :: (a -> b) -> (a, a, a) -> (b, b, b) +mapT3 f (a1, a2, a3) = (f a1, f a2, f a3) + +applyT :: (a -> b, a -> c) -> a -> (b, c) +applyT (f1, f2) a = (f1 a, f2 a) + + +mostCommon :: Ord a => [a] -> a +mostCommon = head . head . sortOn (Down . length) . group . sort + +without :: Int -> [a] -> [a] +without _ [] = [] +without 0 (a : as) = as +without i (a : as) = a : without (i - 1) as + +clamp :: Ord a => (a, a) -> a -> a +clamp (l, u) v = min u $ max l v + + +rotateR :: Int -> [a] -> [a] +rotateR 0 ls = ls +rotateR i ls | i < 0 = rotateL (-i) ls + | otherwise = rotateR (i - 1) (last ls : init ls) + +rotateL :: Int -> [a] -> [a] +rotateL 0 ls = ls +rotateL i ls | i < 0 = rotateR (-i) ls + | otherwise = rotateL (i - 1) (tail ls ++ [head ls]) diff --git a/src/Days/Day01.hs b/src/Days/Day01.hs new file mode 100644 index 0000000..f9fd34f --- /dev/null +++ b/src/Days/Day01.hs @@ -0,0 +1,15 @@ +module Days.Day01 where +import AOCUtil +import Data.List + +runA :: IO() +runA = interactF "data/day01.txt" (show. solve . lines) + +runB :: IO() +runB = interactF "data/day01.txt" (show. solveB . lines) + +solve :: [String]-> Int +solve = maximum . map (sum . (map read)) . splitOn "" + +solveB :: [String] -> Int +solveB = sum . take 3 .reverse. sort . map (sum . (map read)) . splitOn "" diff --git a/src/Main.hs b/src/Main.hs new file mode 100644 index 0000000..eb19646 --- /dev/null +++ b/src/Main.hs @@ -0,0 +1,8 @@ +module Main where + +import Days.Day01 + +main :: IO () +main = Days.Day01.runA + + diff --git a/stack.yaml b/stack.yaml new file mode 100644 index 0000000..73bd4d9 --- /dev/null +++ b/stack.yaml @@ -0,0 +1,66 @@ +# This file was automatically generated by 'stack init' +# +# Some commonly used options have been documented as comments in this file. +# For advanced use and comprehensive documentation of the format, please see: +# https://docs.haskellstack.org/en/stable/yaml_configuration/ + +# Resolver to choose a 'specific' stackage snapshot or a compiler version. +# A snapshot resolver dictates the compiler version and the set of packages +# to be used for project dependencies. For example: +# +# resolver: lts-3.5 +# resolver: nightly-2015-09-21 +# resolver: ghc-7.10.2 +# +# The location of a snapshot can be provided as a file or url. Stack assumes +# a snapshot provided as a file might change, whereas a url resource does not. +# +# resolver: ./custom-snapshot.yaml +# resolver: https://example.com/snapshots/2018-01-01.yaml +resolver: lts-20.2 + +# User packages to be built. +# Various formats can be used as shown in the example below. +# +# packages: +# - some-directory +# - https://example.com/foo/bar/baz-0.0.2.tar.gz +# subdirs: +# - auto-update +# - wai +packages: +- . +# Dependency packages to be pulled from upstream that are not in the resolver. +# These entries can reference officially published versions as well as +# forks / in-progress versions pinned to a git hash. For example: +# +# extra-deps: +# - acme-missiles-0.3 +# - git: https://github.com/commercialhaskell/stack.git +# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a +# +# extra-deps: [] + +# Override default flag values for local packages and extra-deps +# flags: {} + +# Extra package databases containing global packages +# extra-package-dbs: [] + +# Control whether we use the GHC we find on the path +# system-ghc: true +# +# Require a specific version of stack, using version ranges +# require-stack-version: -any # Default +# require-stack-version: ">=2.3" +# +# Override the architecture used by stack, especially useful on Windows +# arch: i386 +# arch: x86_64 +# +# Extra directories used by stack for building +# extra-include-dirs: [/path/to/dir] +# extra-lib-dirs: [/path/to/dir] +# +# Allow a newer minor version of GHC than the snapshot specifies +# compiler-check: newer-minor diff --git a/stack.yaml.lock b/stack.yaml.lock new file mode 100644 index 0000000..639d60a --- /dev/null +++ b/stack.yaml.lock @@ -0,0 +1,12 @@ +# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/lock_files + +packages: [] +snapshots: +- completed: + size: 648432 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/20/2.yaml + sha256: fc39d8afc97531d53d87b10abdef593bce503c0c1e46c2e9a84ebcbc78bf8470 + original: lts-20.2