Compare commits

...

2 commits

Author SHA1 Message Date
3f5e878958 Solve 2024-01 2024-12-02 21:54:33 +01:00
d5d6949a95 Add 2024 template 2024-12-02 21:53:15 +01:00
56 changed files with 1305 additions and 1 deletions

View file

@ -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
View file

@ -0,0 +1,6 @@
3 4
4 3
2 5
1 3
3 9
3 3

1000
data/Y2024/D01/riddle Normal file

File diff suppressed because it is too large Load diff

0
data/Y2024/D02/riddle Normal file
View file

0
data/Y2024/D03/riddle Normal file
View file

0
data/Y2024/D04/riddle Normal file
View file

0
data/Y2024/D05/riddle Normal file
View file

0
data/Y2024/D06/riddle Normal file
View file

0
data/Y2024/D07/riddle Normal file
View file

0
data/Y2024/D08/riddle Normal file
View file

0
data/Y2024/D09/riddle Normal file
View file

0
data/Y2024/D10/riddle Normal file
View file

0
data/Y2024/D11/riddle Normal file
View file

0
data/Y2024/D12/riddle Normal file
View file

0
data/Y2024/D13/riddle Normal file
View file

0
data/Y2024/D14/riddle Normal file
View file

0
data/Y2024/D15/riddle Normal file
View file

0
data/Y2024/D16/riddle Normal file
View file

0
data/Y2024/D17/riddle Normal file
View file

0
data/Y2024/D18/riddle Normal file
View file

0
data/Y2024/D19/riddle Normal file
View file

0
data/Y2024/D20/riddle Normal file
View file

0
data/Y2024/D21/riddle Normal file
View file

0
data/Y2024/D22/riddle Normal file
View file

0
data/Y2024/D23/riddle Normal file
View file

0
data/Y2024/D24/riddle Normal file
View file

0
data/Y2024/D25/riddle Normal file
View file

View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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"

View file

@ -2,5 +2,6 @@ module AoC.Year (Year (..)) where
data Year
= Y0000
| Y2024
| Y2023
deriving stock (Read, Show, Eq, Ord, Enum)

View 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]
-}