Compare commits
2 commits
d30ceb56f7
...
3f5e878958
| Author | SHA1 | Date | |
|---|---|---|---|
| 3f5e878958 | |||
| d5d6949a95 |
56 changed files with 1305 additions and 1 deletions
27
aoc.cabal
27
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:
|
||||
|
|
|
|||
6
data/Y2024/D01/example
Normal file
6
data/Y2024/D01/example
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
3 4
|
||||
4 3
|
||||
2 5
|
||||
1 3
|
||||
3 9
|
||||
3 3
|
||||
1000
data/Y2024/D01/riddle
Normal file
1000
data/Y2024/D01/riddle
Normal file
File diff suppressed because it is too large
Load diff
0
data/Y2024/D02/riddle
Normal file
0
data/Y2024/D02/riddle
Normal file
0
data/Y2024/D03/riddle
Normal file
0
data/Y2024/D03/riddle
Normal file
0
data/Y2024/D04/riddle
Normal file
0
data/Y2024/D04/riddle
Normal file
0
data/Y2024/D05/riddle
Normal file
0
data/Y2024/D05/riddle
Normal file
0
data/Y2024/D06/riddle
Normal file
0
data/Y2024/D06/riddle
Normal file
0
data/Y2024/D07/riddle
Normal file
0
data/Y2024/D07/riddle
Normal file
0
data/Y2024/D08/riddle
Normal file
0
data/Y2024/D08/riddle
Normal file
0
data/Y2024/D09/riddle
Normal file
0
data/Y2024/D09/riddle
Normal file
0
data/Y2024/D10/riddle
Normal file
0
data/Y2024/D10/riddle
Normal file
0
data/Y2024/D11/riddle
Normal file
0
data/Y2024/D11/riddle
Normal file
0
data/Y2024/D12/riddle
Normal file
0
data/Y2024/D12/riddle
Normal file
0
data/Y2024/D13/riddle
Normal file
0
data/Y2024/D13/riddle
Normal file
0
data/Y2024/D14/riddle
Normal file
0
data/Y2024/D14/riddle
Normal file
0
data/Y2024/D15/riddle
Normal file
0
data/Y2024/D15/riddle
Normal file
0
data/Y2024/D16/riddle
Normal file
0
data/Y2024/D16/riddle
Normal file
0
data/Y2024/D17/riddle
Normal file
0
data/Y2024/D17/riddle
Normal file
0
data/Y2024/D18/riddle
Normal file
0
data/Y2024/D18/riddle
Normal file
0
data/Y2024/D19/riddle
Normal file
0
data/Y2024/D19/riddle
Normal file
0
data/Y2024/D20/riddle
Normal file
0
data/Y2024/D20/riddle
Normal file
0
data/Y2024/D21/riddle
Normal file
0
data/Y2024/D21/riddle
Normal file
0
data/Y2024/D22/riddle
Normal file
0
data/Y2024/D22/riddle
Normal file
0
data/Y2024/D23/riddle
Normal file
0
data/Y2024/D23/riddle
Normal file
0
data/Y2024/D24/riddle
Normal file
0
data/Y2024/D24/riddle
Normal file
0
data/Y2024/D25/riddle
Normal file
0
data/Y2024/D25/riddle
Normal file
|
|
@ -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
|
||||
|
|
|
|||
57
src/AoC/Y2024.hs
Normal file
57
src/AoC/Y2024.hs
Normal file
|
|
@ -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
|
||||
39
src/AoC/Y2024/D01.hs
Normal file
39
src/AoC/Y2024/D01.hs
Normal file
|
|
@ -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]
|
||||
6
src/AoC/Y2024/D02.hs
Normal file
6
src/AoC/Y2024/D02.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D03.hs
Normal file
6
src/AoC/Y2024/D03.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D04.hs
Normal file
6
src/AoC/Y2024/D04.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D05.hs
Normal file
6
src/AoC/Y2024/D05.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D06.hs
Normal file
6
src/AoC/Y2024/D06.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D07.hs
Normal file
6
src/AoC/Y2024/D07.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D08.hs
Normal file
6
src/AoC/Y2024/D08.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D09.hs
Normal file
6
src/AoC/Y2024/D09.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D10.hs
Normal file
6
src/AoC/Y2024/D10.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D11.hs
Normal file
6
src/AoC/Y2024/D11.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D12.hs
Normal file
6
src/AoC/Y2024/D12.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D13.hs
Normal file
6
src/AoC/Y2024/D13.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D14.hs
Normal file
6
src/AoC/Y2024/D14.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D15.hs
Normal file
6
src/AoC/Y2024/D15.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D16.hs
Normal file
6
src/AoC/Y2024/D16.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D17.hs
Normal file
6
src/AoC/Y2024/D17.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D18.hs
Normal file
6
src/AoC/Y2024/D18.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D19.hs
Normal file
6
src/AoC/Y2024/D19.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D20.hs
Normal file
6
src/AoC/Y2024/D20.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D21.hs
Normal file
6
src/AoC/Y2024/D21.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D22.hs
Normal file
6
src/AoC/Y2024/D22.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D23.hs
Normal file
6
src/AoC/Y2024/D23.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D24.hs
Normal file
6
src/AoC/Y2024/D24.hs
Normal file
|
|
@ -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"
|
||||
6
src/AoC/Y2024/D25.hs
Normal file
6
src/AoC/Y2024/D25.hs
Normal file
|
|
@ -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"
|
||||
|
|
@ -2,5 +2,6 @@ module AoC.Year (Year (..)) where
|
|||
|
||||
data Year
|
||||
= Y0000
|
||||
| Y2024
|
||||
| Y2023
|
||||
deriving stock (Read, Show, Eq, Ord, Enum)
|
||||
|
|
|
|||
28
test/spec/AoCSpec/Y2024Spec.hs
Normal file
28
test/spec/AoCSpec/Y2024Spec.hs
Normal file
|
|
@ -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]
|
||||
-}
|
||||
Loading…
Add table
Add a link
Reference in a new issue