Compare commits
No commits in common. "88cbe81d089c6c85ebaf387009937b4dba2e1e8b" and "04636aacc56a7671aac689f7da228788e42e29c6" have entirely different histories.
88cbe81d08
...
04636aacc5
66 changed files with 1473 additions and 21 deletions
2
.hspec
Normal file
2
.hspec
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
--rerun
|
||||
--rerun-all-on-success
|
||||
0
README.org
Normal file
0
README.org
Normal file
56
aoc.cabal
56
aoc.cabal
|
|
@ -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
1000
data/Y2023/D01/riddle
Normal file
File diff suppressed because it is too large
Load diff
0
data/Y2023/D02/riddle
Normal file
0
data/Y2023/D02/riddle
Normal file
0
data/Y2023/D03/riddle
Normal file
0
data/Y2023/D03/riddle
Normal file
0
data/Y2023/D04/riddle
Normal file
0
data/Y2023/D04/riddle
Normal file
0
data/Y2023/D05/riddle
Normal file
0
data/Y2023/D05/riddle
Normal file
0
data/Y2023/D06/riddle
Normal file
0
data/Y2023/D06/riddle
Normal file
0
data/Y2023/D07/riddle
Normal file
0
data/Y2023/D07/riddle
Normal file
0
data/Y2023/D08/riddle
Normal file
0
data/Y2023/D08/riddle
Normal file
0
data/Y2023/D09/riddle
Normal file
0
data/Y2023/D09/riddle
Normal file
0
data/Y2023/D10/riddle
Normal file
0
data/Y2023/D10/riddle
Normal file
0
data/Y2023/D11/riddle
Normal file
0
data/Y2023/D11/riddle
Normal file
0
data/Y2023/D12/riddle
Normal file
0
data/Y2023/D12/riddle
Normal file
0
data/Y2023/D13/riddle
Normal file
0
data/Y2023/D13/riddle
Normal file
0
data/Y2023/D14/riddle
Normal file
0
data/Y2023/D14/riddle
Normal file
0
data/Y2023/D15/riddle
Normal file
0
data/Y2023/D15/riddle
Normal file
0
data/Y2023/D16/riddle
Normal file
0
data/Y2023/D16/riddle
Normal file
0
data/Y2023/D17/riddle
Normal file
0
data/Y2023/D17/riddle
Normal file
0
data/Y2023/D18/riddle
Normal file
0
data/Y2023/D18/riddle
Normal file
0
data/Y2023/D19/riddle
Normal file
0
data/Y2023/D19/riddle
Normal file
0
data/Y2023/D20/riddle
Normal file
0
data/Y2023/D20/riddle
Normal file
0
data/Y2023/D21/riddle
Normal file
0
data/Y2023/D21/riddle
Normal file
0
data/Y2023/D22/riddle
Normal file
0
data/Y2023/D22/riddle
Normal file
0
data/Y2023/D23/riddle
Normal file
0
data/Y2023/D23/riddle
Normal file
0
data/Y2023/D24/riddle
Normal file
0
data/Y2023/D24/riddle
Normal file
0
data/Y2023/D25/riddle
Normal file
0
data/Y2023/D25/riddle
Normal file
39
gen.sh
Executable file
39
gen.sh
Executable 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
|
||||
|
|
@ -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 can’t specialize a polymorphic function. No big deal and requires fixing underlying libraries to solve.
|
||||
- -Wno-all-missed-specialisations # See missed-specialisations
|
||||
- -Wno-unsafe # Don’t 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
|
||||
|
||||
|
|
|
|||
25
src/AoC.hs
25
src/AoC.hs
|
|
@ -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
29
src/AoC/Day.hs
Normal 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
20
src/AoC/Riddle.hs
Normal 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"]
|
||||
|
|
@ -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
57
src/AoC/Y2023.hs
Normal 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
24
src/AoC/Y2023/D01.hs
Normal 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
6
src/AoC/Y2023/D02.hs
Normal 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
6
src/AoC/Y2023/D03.hs
Normal 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
6
src/AoC/Y2023/D04.hs
Normal 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
6
src/AoC/Y2023/D05.hs
Normal 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
6
src/AoC/Y2023/D06.hs
Normal 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
6
src/AoC/Y2023/D07.hs
Normal 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
6
src/AoC/Y2023/D08.hs
Normal 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
6
src/AoC/Y2023/D09.hs
Normal 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
6
src/AoC/Y2023/D10.hs
Normal 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
6
src/AoC/Y2023/D11.hs
Normal 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
6
src/AoC/Y2023/D12.hs
Normal 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
6
src/AoC/Y2023/D13.hs
Normal 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
6
src/AoC/Y2023/D14.hs
Normal 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
6
src/AoC/Y2023/D15.hs
Normal 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
6
src/AoC/Y2023/D16.hs
Normal 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
6
src/AoC/Y2023/D17.hs
Normal 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
6
src/AoC/Y2023/D18.hs
Normal 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
6
src/AoC/Y2023/D19.hs
Normal 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
6
src/AoC/Y2023/D20.hs
Normal 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
6
src/AoC/Y2023/D21.hs
Normal 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
6
src/AoC/Y2023/D22.hs
Normal 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
6
src/AoC/Y2023/D23.hs
Normal 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
6
src/AoC/Y2023/D24.hs
Normal 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
6
src/AoC/Y2023/D25.hs
Normal 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
6
src/AoC/Year.hs
Normal 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
6
template/D00.hs
Normal 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
57
template/Y0000.hs
Normal 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
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
module AoCSpec.InternalSpec (spec) where
|
||||
module AoCSpec.UtilSpec (spec) where
|
||||
|
||||
import AoC.Internal
|
||||
import AoC.Util
|
||||
|
||||
import Test.Hspec
|
||||
|
||||
10
test/spec/AoCSpec/Y2023Spec.hs
Normal file
10
test/spec/AoCSpec/Y2023Spec.hs
Normal 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
6
test/spec/SpecHook.hs
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
module SpecHook (hook) where
|
||||
|
||||
import Test.Hspec
|
||||
|
||||
hook :: Spec -> Spec
|
||||
hook = parallel
|
||||
Loading…
Add table
Add a link
Reference in a new issue