Solve 2023-05
This commit is contained in:
parent
a29eedb4ce
commit
0a5cf30889
5 changed files with 87 additions and 2 deletions
33
data/Y2023/D05/example
Normal file
33
data/Y2023/D05/example
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
seeds: 79 14 55 13
|
||||||
|
|
||||||
|
seed-to-soil map:
|
||||||
|
50 98 2
|
||||||
|
52 50 48
|
||||||
|
|
||||||
|
soil-to-fertilizer map:
|
||||||
|
0 15 37
|
||||||
|
37 52 2
|
||||||
|
39 0 15
|
||||||
|
|
||||||
|
fertilizer-to-water map:
|
||||||
|
49 53 8
|
||||||
|
0 11 42
|
||||||
|
42 0 7
|
||||||
|
57 7 4
|
||||||
|
|
||||||
|
water-to-light map:
|
||||||
|
88 18 7
|
||||||
|
18 25 70
|
||||||
|
|
||||||
|
light-to-temperature map:
|
||||||
|
45 77 23
|
||||||
|
81 45 19
|
||||||
|
68 64 13
|
||||||
|
|
||||||
|
temperature-to-humidity map:
|
||||||
|
0 69 1
|
||||||
|
1 0 69
|
||||||
|
|
||||||
|
humidity-to-location map:
|
||||||
|
60 56 37
|
||||||
|
56 93 4
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
module AoC (
|
module AoC (
|
||||||
defaultMain,
|
defaultMain,
|
||||||
runAoC,
|
runAoC,
|
||||||
|
runAoCExample,
|
||||||
module AoC.Day,
|
module AoC.Day,
|
||||||
module AoC.Year,
|
module AoC.Year,
|
||||||
) where
|
) where
|
||||||
|
|
@ -20,6 +21,11 @@ runAoC y d = do
|
||||||
riddle <- loadRiddle y d
|
riddle <- loadRiddle y d
|
||||||
solve y d riddle
|
solve y d riddle
|
||||||
|
|
||||||
|
runAoCExample :: (MonadIO m) => Year -> Day -> m (Either Text Solution)
|
||||||
|
runAoCExample y d = do
|
||||||
|
riddle <- loadExample y d
|
||||||
|
solve y d riddle
|
||||||
|
|
||||||
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 y = \_ _ -> pure $ Left $ show y <> ": not implementedi"
|
solve y = \_ _ -> pure $ Left $ show y <> ": not implementedi"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,46 @@
|
||||||
module AoC.Y2023.D05 (solve) where
|
module AoC.Y2023.D05 where
|
||||||
|
|
||||||
|
import AoC.Parser
|
||||||
import AoC.Riddle
|
import AoC.Riddle
|
||||||
|
import Text.Megaparsec (choice, sepBy1)
|
||||||
|
|
||||||
|
import Text.Megaparsec.Char (eol, space1, string)
|
||||||
|
import Text.Megaparsec.Char.Lexer qualified as L
|
||||||
|
|
||||||
|
newtype Seeds = Seeds [Int]
|
||||||
|
deriving newtype (Show)
|
||||||
|
|
||||||
|
-- | Parse a list of seeds
|
||||||
|
--
|
||||||
|
-- >>> parseText pSeeds "seeds: 79 14 55 13"
|
||||||
|
-- Right [79,14,55,13]
|
||||||
|
pSeeds :: Parser Seeds
|
||||||
|
pSeeds = Seeds <$> (string "seeds: " *> L.decimal `sepBy1` ws)
|
||||||
|
|
||||||
|
newtype Mapping = Mapping [((Int, Int), (Int, Int))]
|
||||||
|
|
||||||
|
pRanges :: Parser [((Int, Int), (Int, Int))]
|
||||||
|
pRanges = do
|
||||||
|
pRange `sepBy1` eol
|
||||||
|
where
|
||||||
|
pRange = do
|
||||||
|
x0 <- L.decimal <* space1
|
||||||
|
x1 <- L.decimal <* space1
|
||||||
|
n <- L.decimal
|
||||||
|
pure ((x0, x0 + n), (x1, x1 + n))
|
||||||
|
|
||||||
|
pMapping :: Parser Mapping
|
||||||
|
pMapping = do
|
||||||
|
_ <-
|
||||||
|
choice
|
||||||
|
[ string "soil-to-fertilizer map:"
|
||||||
|
, string "fertilizer-to-water map:"
|
||||||
|
, string "water-to-light map:"
|
||||||
|
, string "light-to-temperature map:"
|
||||||
|
, string "light-to-temperature map:"
|
||||||
|
]
|
||||||
|
<* eol
|
||||||
|
Mapping . fromList <$> pRanges `sepBy1` eol
|
||||||
|
|
||||||
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
solve :: (MonadIO m) => Text -> m (Either Text Solution)
|
||||||
solve _ = pure $ Left "not yet implemented"
|
solve _ = pure $ Left "not yet implemented"
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,9 @@ module Main (main) where
|
||||||
import System.Process (callProcess)
|
import System.Process (callProcess)
|
||||||
|
|
||||||
doctest :: IO ()
|
doctest :: IO ()
|
||||||
doctest = callProcess "cabal" ["repl", "--with-ghc=doctest"]
|
doctest = do
|
||||||
|
args <- ("--ghc-option=" ++) <<$>> getArgs
|
||||||
|
callProcess "cabal" $ ["repl", "--with-ghc=doctest"] <> args
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = doctest
|
main = doctest
|
||||||
|
|
|
||||||
|
|
@ -20,3 +20,7 @@ spec = do
|
||||||
describe "Day 4" do
|
describe "Day 4" do
|
||||||
it "calculates correctly" do
|
it "calculates correctly" do
|
||||||
runAoC Y2023 D04 `shouldReturn` Right [24542, 8736438]
|
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