Compare commits

...

No commits in common. "88cbe81d089c6c85ebaf387009937b4dba2e1e8b" and "04636aacc56a7671aac689f7da228788e42e29c6" have entirely different histories.

66 changed files with 1473 additions and 21 deletions

2
.hspec Normal file
View file

@ -0,0 +1,2 @@
--rerun
--rerun-all-on-success

0
README.org Normal file
View file

View file

@ -14,11 +14,41 @@ license: MIT
build-type: Simple
extra-source-files:
README.org
data-dir: data
library
exposed-modules:
AoC
AoC.Internal
AoC.Day
AoC.Riddle
AoC.Util
AoC.Y2023
AoC.Y2023.D01
AoC.Y2023.D02
AoC.Y2023.D03
AoC.Y2023.D04
AoC.Y2023.D05
AoC.Y2023.D06
AoC.Y2023.D07
AoC.Y2023.D08
AoC.Y2023.D09
AoC.Y2023.D10
AoC.Y2023.D11
AoC.Y2023.D12
AoC.Y2023.D13
AoC.Y2023.D14
AoC.Y2023.D15
AoC.Y2023.D16
AoC.Y2023.D17
AoC.Y2023.D18
AoC.Y2023.D19
AoC.Y2023.D20
AoC.Y2023.D21
AoC.Y2023.D22
AoC.Y2023.D23
AoC.Y2023.D24
AoC.Y2023.D25
AoC.Year
other-modules:
Paths_aoc
autogen-modules:
@ -29,7 +59,8 @@ library
BlockArguments
OverloadedStrings
ImportQualifiedPost
ghc-options: -Weverything -Wno-implicit-prelude -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-safe-haskell-mode -Wno-missing-local-signatures -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -fdefer-typed-holes -Wno-unused-packages
DerivingStrategies
ghc-options: -Weverything -Wno-implicit-prelude -Wno-missing-import-lists -Wno-missing-kind-signatures -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-safe-haskell-mode -Wno-missing-local-signatures -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -fdefer-typed-holes -Wno-unused-packages
build-depends:
base
, containers
@ -38,7 +69,7 @@ library
, text
mixins:
base hiding (Prelude)
, relude (Relude as Prelude)
, relude (Relude as Prelude, Relude, Relude.Unsafe, Relude.Extra.Enum)
default-language: GHC2021
executable aoc
@ -53,7 +84,8 @@ executable aoc
BlockArguments
OverloadedStrings
ImportQualifiedPost
ghc-options: -Weverything -Wno-implicit-prelude -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-safe-haskell-mode -Wno-missing-local-signatures -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -fdefer-typed-holes -Wno-unused-packages
DerivingStrategies
ghc-options: -Weverything -Wno-implicit-prelude -Wno-missing-import-lists -Wno-missing-kind-signatures -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-safe-haskell-mode -Wno-missing-local-signatures -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -fdefer-typed-holes -Wno-unused-packages
build-depends:
aoc
, base
@ -63,7 +95,7 @@ executable aoc
, text
mixins:
base hiding (Prelude)
, relude (Relude as Prelude)
, relude (Relude as Prelude, Relude, Relude.Unsafe, Relude.Extra.Enum)
default-language: GHC2021
test-suite doctest
@ -79,7 +111,8 @@ test-suite doctest
BlockArguments
OverloadedStrings
ImportQualifiedPost
ghc-options: -Weverything -Wno-implicit-prelude -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-safe-haskell-mode -Wno-missing-local-signatures -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -fdefer-typed-holes -Wno-unused-packages
DerivingStrategies
ghc-options: -Weverything -Wno-implicit-prelude -Wno-missing-import-lists -Wno-missing-kind-signatures -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-safe-haskell-mode -Wno-missing-local-signatures -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -fdefer-typed-holes -Wno-unused-packages
build-tool-depends:
doctest:doctest
build-depends:
@ -91,14 +124,16 @@ test-suite doctest
, text
mixins:
base hiding (Prelude)
, relude (Relude as Prelude)
, relude (Relude as Prelude, Relude, Relude.Unsafe, Relude.Extra.Enum)
default-language: Haskell2010
test-suite spec
type: exitcode-stdio-1.0
main-is: Spec.hs
other-modules:
AoCSpec.InternalSpec
AoCSpec.UtilSpec
AoCSpec.Y2023Spec
SpecHook
Paths_aoc
autogen-modules:
Paths_aoc
@ -108,7 +143,8 @@ test-suite spec
BlockArguments
OverloadedStrings
ImportQualifiedPost
ghc-options: -Weverything -Wno-implicit-prelude -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-safe-haskell-mode -Wno-missing-local-signatures -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -fdefer-typed-holes -Wno-unused-packages
DerivingStrategies
ghc-options: -Weverything -Wno-implicit-prelude -Wno-missing-import-lists -Wno-missing-kind-signatures -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-safe-haskell-mode -Wno-missing-local-signatures -Wno-monomorphism-restriction -Wno-prepositive-qualified-module -fdefer-typed-holes -Wno-unused-packages
cpp-options: -DTEST
build-tool-depends:
hspec-discover:hspec-discover
@ -124,5 +160,5 @@ test-suite spec
, text
mixins:
base hiding (Prelude)
, relude (Relude as Prelude)
, relude (Relude as Prelude, Relude, Relude.Unsafe, Relude.Extra.Enum)
default-language: GHC2021

1000
data/Y2023/D01/riddle Normal file

File diff suppressed because it is too large Load diff

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

39
gen.sh Executable file
View file

@ -0,0 +1,39 @@
#!/usr/bin/env bash
Y="$1"; shift
if [ -z "$Y" ]; then
Y="$(date +%Y)"
fi
fday="$1"; shift
tday="$1"; shift
if [ -z "$fday" ]; then
fday=1
tday=25
fi
if [ -z "$tday" ]; then
tday="${fday}"
fi
days=($(seq $fday $tday))
if ! grep -q "Y${Y}" src/AoC/Year.hs; then
sed -i -e "s/\(\(\s\+\)= Y0000\)/\1\n\2| Y${Y}/" src/AoC/Year.hs
fi
mkdir -p "src/AoC/Y${Y}"
if ! test -f "src/AoC/Y${Y}.hs"; then
sed -e "s/Y0000/Y${Y}/g" template/Y0000.hs > "src/AoC/Y${Y}.hs"
fi
for d in "${days[@]}"; do
d=$(printf "%02d" "$d")
mkdir -p "data/Y${Y}/D${d}"
touch "data/Y${Y}/D${d}/riddle"
touch "data/Y${Y}/D${d}/result"
if ! test -f "src/AoC/Y${Y}/D${d}.hs"; then
sed -e "s/Y0000/Y${Y}/g" -e "s/D00/D${d}/g" template/D00.hs > "src/AoC/Y${Y}/D${d}.hs"
fi
done

View file

@ -9,13 +9,15 @@ description: "Advent-Of-Code"
extra-source-files:
- README.org
data-dir: data
dependencies:
- name: base
mixin:
- hiding (Prelude)
- name: relude
mixin:
- (Relude as Prelude)
- (Relude as Prelude, Relude, Relude.Unsafe, Relude.Extra.Enum)
- containers
- text
- megaparsec
@ -24,6 +26,7 @@ ghc-options:
- -Weverything
- -Wno-implicit-prelude
- -Wno-missing-import-lists # Requires explicit imports of _every_ function (e.g. $); too strict
- -Wno-missing-kind-signatures
- -Wno-missed-specialisations # When GHC cant specialize a polymorphic function. No big deal and requires fixing underlying libraries to solve.
- -Wno-all-missed-specialisations # See missed-specialisations
- -Wno-unsafe # Dont use Safe Haskell warnings
@ -40,9 +43,11 @@ default-extensions:
- BlockArguments
- OverloadedStrings
- ImportQualifiedPost
- DerivingStrategies
library:
source-dirs: src
generated-other-modules: Paths_aoc
verbatim:
default-language: GHC2021

View file

@ -1,21 +1,32 @@
{-# LANGUAGE OverloadedStrings #-}
module AoC (
defaultMain,
runAoC,
module AoC.Day,
module AoC.Year,
) where
import AoC.Day
import AoC.Riddle
import AoC.Year
import Control.Exception qualified as Exception
import System.IO (hPutStrLn)
import System.IO.Error qualified as IOError
runAoC :: [String] -> IO ()
runAoC _args = putStrLn "Hello"
import AoC.Y2023 qualified as Y2023
runAoC :: (MonadIO m) => Year -> Day -> m (Either Text Solution)
runAoC y d = do
riddle <- loadRiddle y d
solve y d riddle
solve :: (MonadIO m) => Year -> Day -> Riddle -> m (Either Text Solution)
solve Y2023 = Y2023.solve
solve y = \_ _ -> pure $ Left $ show y <> ": not implementedi"
handleError :: IOError.IOError -> IO ()
handleError e = do
hPutStrLn stderr $ "I ran into an issue: " <> show e
defaultMain :: IO ()
defaultMain = do
args <- getArgs
Exception.catch (runAoC args) handleError
defaultMain = Exception.catch (runAoC Y2023 D01 >>= print) handleError

29
src/AoC/Day.hs Normal file
View file

@ -0,0 +1,29 @@
module AoC.Day (Day (..)) where
data Day
= D01
| D02
| D03
| D04
| D05
| D06
| D07
| D08
| D09
| D10
| D11
| D12
| D13
| D14
| D15
| D16
| D17
| D18
| D19
| D20
| D21
| D22
| D23
| D24
| D25
deriving stock (Read, Show, Eq, Ord, Enum)

20
src/AoC/Riddle.hs Normal file
View file

@ -0,0 +1,20 @@
module AoC.Riddle (
Riddle (..),
Error (..),
Solution (..),
loadRiddle,
) where
import AoC.Util (readFileUtf8)
import AoC.Day
import AoC.Year
type Riddle = Text
type Error = Text
type Solution = [Integer]
loadRiddle :: (MonadIO m) => Year -> Day -> m Riddle
loadRiddle y d = readFileUtf8 inputFile
where
inputFile = intercalate "/" ["data", show y, show d, "riddle"]

View file

@ -1,5 +1,5 @@
-- | Internal module in order to facilitate testability.
module AoC.Internal (solveRiddle, readFileUtf8) where
module AoC.Util (solveRiddle, readFileUtf8) where
readFileUtf8 :: (MonadIO m) => FilePath -> m Text
readFileUtf8 = fmap (decodeUtf8With lenientDecode) . readFileBS

57
src/AoC/Y2023.hs Normal file
View file

@ -0,0 +1,57 @@
module AoC.Y2023 (solve) where
import AoC.Day
import AoC.Riddle
import AoC.Y2023.D01 qualified as D01
import AoC.Y2023.D02 qualified as D02
import AoC.Y2023.D03 qualified as D03
import AoC.Y2023.D04 qualified as D04
import AoC.Y2023.D05 qualified as D05
import AoC.Y2023.D06 qualified as D06
import AoC.Y2023.D07 qualified as D07
import AoC.Y2023.D08 qualified as D08
import AoC.Y2023.D09 qualified as D09
import AoC.Y2023.D10 qualified as D10
import AoC.Y2023.D11 qualified as D11
import AoC.Y2023.D12 qualified as D12
import AoC.Y2023.D13 qualified as D13
import AoC.Y2023.D14 qualified as D14
import AoC.Y2023.D15 qualified as D15
import AoC.Y2023.D16 qualified as D16
import AoC.Y2023.D17 qualified as D17
import AoC.Y2023.D18 qualified as D18
import AoC.Y2023.D19 qualified as D19
import AoC.Y2023.D20 qualified as D20
import AoC.Y2023.D21 qualified as D21
import AoC.Y2023.D22 qualified as D22
import AoC.Y2023.D23 qualified as D23
import AoC.Y2023.D24 qualified as D24
import AoC.Y2023.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

24
src/AoC/Y2023/D01.hs Normal file
View file

@ -0,0 +1,24 @@
module AoC.Y2023.D01 (solve) where
import AoC.Riddle
import Data.Char (digitToInt, isDigit)
import Relude.Unsafe (fromJust)
digits :: String -> [Int]
digits = fmap digitToInt . filter isDigit
digits' :: String -> NonEmpty Int
digits' = fromJust . nonEmpty . digits
calibrationValue :: String -> Int
calibrationValue s = firstDigit * 10 + lastDigit
where
ds = digits' s
firstDigit = head ds
lastDigit = last ds
solvePart1 :: Text -> Integer
solvePart1 = fromIntegral . sum . fmap (calibrationValue . toString) . lines
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve input = pure $ Right [solvePart1 input]

6
src/AoC/Y2023/D02.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D02 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D03.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D03 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D04.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D04 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D05.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D05 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D06.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D06 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D07.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D07 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D08.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D08 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D09.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D09 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D10.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D10 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D11.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D11 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D12.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D12 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D13.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D13 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D14.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D14 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D15.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D15 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D16.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D16 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D17.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D17 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D18.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D18 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D19.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D19 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D20.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D20 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D21.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D21 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D22.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D22 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D23.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D23 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D24.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D24 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Y2023/D25.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y2023.D25 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

6
src/AoC/Year.hs Normal file
View file

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

6
template/D00.hs Normal file
View file

@ -0,0 +1,6 @@
module AoC.Y0000.D00 (solve) where
import AoC.Riddle
solve :: (MonadIO m) => Text -> m (Either Text Solution)
solve _ = pure $ Left "not yet implemented"

57
template/Y0000.hs Normal file
View file

@ -0,0 +1,57 @@
module AoC.Y0000 (solve) where
import AoC.Day
import AoC.Riddle
import AoC.Y0000.D01 qualified as D01
import AoC.Y0000.D02 qualified as D02
import AoC.Y0000.D03 qualified as D03
import AoC.Y0000.D04 qualified as D04
import AoC.Y0000.D05 qualified as D05
import AoC.Y0000.D06 qualified as D06
import AoC.Y0000.D07 qualified as D07
import AoC.Y0000.D08 qualified as D08
import AoC.Y0000.D09 qualified as D09
import AoC.Y0000.D10 qualified as D10
import AoC.Y0000.D11 qualified as D11
import AoC.Y0000.D12 qualified as D12
import AoC.Y0000.D13 qualified as D13
import AoC.Y0000.D14 qualified as D14
import AoC.Y0000.D15 qualified as D15
import AoC.Y0000.D16 qualified as D16
import AoC.Y0000.D17 qualified as D17
import AoC.Y0000.D18 qualified as D18
import AoC.Y0000.D19 qualified as D19
import AoC.Y0000.D20 qualified as D20
import AoC.Y0000.D21 qualified as D21
import AoC.Y0000.D22 qualified as D22
import AoC.Y0000.D23 qualified as D23
import AoC.Y0000.D24 qualified as D24
import AoC.Y0000.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

View file

@ -1,6 +1,6 @@
module AoCSpec.InternalSpec (spec) where
module AoCSpec.UtilSpec (spec) where
import AoC.Internal
import AoC.Util
import Test.Hspec

View file

@ -0,0 +1,10 @@
module AoCSpec.Y2023Spec (spec) where
import AoC
import Test.Hspec
spec :: Spec
spec = do
describe "Day 1" do
it "calculates correctly" do
runAoC Y2023 D01 `shouldReturn` Right [54331]

6
test/spec/SpecHook.hs Normal file
View file

@ -0,0 +1,6 @@
module SpecHook (hook) where
import Test.Hspec
hook :: Spec -> Spec
hook = parallel