Compare commits
No commits in common. "3f5e878958db7d5266b9ca517ffc104249191d85" and "d30ceb56f7b141ee558bbd86775d7322d4767ba7" have entirely different histories.
3f5e878958
...
d30ceb56f7
56 changed files with 1 additions and 1305 deletions
27
aoc.cabal
27
aoc.cabal
|
|
@ -49,32 +49,6 @@ library
|
||||||
AoC.Y2023.D23
|
AoC.Y2023.D23
|
||||||
AoC.Y2023.D24
|
AoC.Y2023.D24
|
||||||
AoC.Y2023.D25
|
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
|
AoC.Year
|
||||||
other-modules:
|
other-modules:
|
||||||
Paths_aoc
|
Paths_aoc
|
||||||
|
|
@ -163,7 +137,6 @@ test-suite spec
|
||||||
other-modules:
|
other-modules:
|
||||||
AoCSpec.UtilSpec
|
AoCSpec.UtilSpec
|
||||||
AoCSpec.Y2023Spec
|
AoCSpec.Y2023Spec
|
||||||
AoCSpec.Y2024Spec
|
|
||||||
SpecHook
|
SpecHook
|
||||||
Paths_aoc
|
Paths_aoc
|
||||||
autogen-modules:
|
autogen-modules:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
3 4
|
|
||||||
4 3
|
|
||||||
2 5
|
|
||||||
1 3
|
|
||||||
3 9
|
|
||||||
3 3
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -15,7 +15,6 @@ import System.IO (hPutStrLn)
|
||||||
import System.IO.Error qualified as IOError
|
import System.IO.Error qualified as IOError
|
||||||
|
|
||||||
import AoC.Y2023 qualified as Y2023
|
import AoC.Y2023 qualified as Y2023
|
||||||
import AoC.Y2024 qualified as Y2024
|
|
||||||
|
|
||||||
runAoC :: (MonadIO m) => Year -> Day -> m (Either Text Solution)
|
runAoC :: (MonadIO m) => Year -> Day -> m (Either Text Solution)
|
||||||
runAoC y d = do
|
runAoC y d = do
|
||||||
|
|
@ -29,7 +28,6 @@ runAoCExample y d = do
|
||||||
|
|
||||||
solve :: (MonadIO m) => Year -> Day -> Riddle -> m (Either Text Solution)
|
solve :: (MonadIO m) => Year -> Day -> Riddle -> m (Either Text Solution)
|
||||||
solve Y2023 = Y2023.solve
|
solve Y2023 = Y2023.solve
|
||||||
solve Y2024 = Y2024.solve
|
|
||||||
solve y = \_ _ -> pure $ Left $ show y <> ": not implementedi"
|
solve y = \_ _ -> pure $ Left $ show y <> ": not implementedi"
|
||||||
|
|
||||||
handleError :: IOError.IOError -> IO ()
|
handleError :: IOError.IOError -> IO ()
|
||||||
|
|
@ -41,4 +39,4 @@ printResult (Left e) = putTextLn e
|
||||||
printResult (Right s) = print s
|
printResult (Right s) = print s
|
||||||
|
|
||||||
defaultMain :: IO ()
|
defaultMain :: IO ()
|
||||||
defaultMain = Exception.catch (runAoC Y2024 D01 >>= printResult) handleError
|
defaultMain = Exception.catch (runAoC Y2023 D05 >>= printResult) handleError
|
||||||
|
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
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
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
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]
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D02 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D03 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D04 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D05 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D06 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D07 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D08 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D09 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D10 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D11 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D12 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D13 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D14 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D15 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D16 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D17 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D18 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D19 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D20 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D21 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D22 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D23 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D24 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
module AoC.Y2024.D25 (solve) where
|
|
||||||
|
|
||||||
import AoC.Riddle
|
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
|
||||||
solve _ = pure $ Left "not yet implemented"
|
|
||||||
|
|
@ -2,6 +2,5 @@ module AoC.Year (Year (..)) where
|
||||||
|
|
||||||
data Year
|
data Year
|
||||||
= Y0000
|
= Y0000
|
||||||
| Y2024
|
|
||||||
| Y2023
|
| Y2023
|
||||||
deriving stock (Read, Show, Eq, Ord, Enum)
|
deriving stock (Read, Show, Eq, Ord, Enum)
|
||||||
|
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
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