Solve day 2 part 1

This commit is contained in:
George Thomas 2025-12-02 10:54:12 +00:00
parent 6e8b5dff01
commit d4ad05ba50
2 changed files with 27 additions and 0 deletions

View File

@ -1,9 +1,11 @@
module Main (main) where module Main (main) where
import Control.Monad
import Control.Monad.State import Control.Monad.State
import Data.Bifunctor import Data.Bifunctor
import Data.ByteString.Lazy qualified as BL import Data.ByteString.Lazy qualified as BL
import Data.Functor import Data.Functor
import Data.Maybe
import Data.Text (Text) import Data.Text (Text)
import Data.Text qualified as T import Data.Text qualified as T
import Data.Text.Encoding (encodeUtf8) import Data.Text.Encoding (encodeUtf8)
@ -23,6 +25,7 @@ main =
$ testGroup $ testGroup
"tests" "tests"
[ puzzleTest puzzle1 [ puzzleTest puzzle1
, puzzleTest puzzle2
] ]
puzzleTest :: Puzzle a -> TestTree puzzleTest :: Puzzle a -> TestTree
@ -103,3 +106,26 @@ step :: Inc -> Direction -> Pos -> (Count, Pos)
step (Inc i) d (Pos p) = bimap Count Pos case d of step (Inc i) d (Pos p) = bimap Count Pos case d of
L -> (p - i) `divMod` 100 L -> (p - i) `divMod` 100
R -> (p + i) `divMod` 100 R -> (p + i) `divMod` 100
puzzle2 :: Puzzle [(ID, ID)]
puzzle2 =
Puzzle
{ number = 2
, parser = (<* newline) $ flip sepBy (char ',') $ (,) <$> (Lex.decimal <* char '-') <*> Lex.decimal
, part1 =
Part
{ solve =
T.show
. sum
. concatMap
(mapMaybe (\n -> guard (isRepetition n) $> n) . uncurry enumFromTo)
, expected = "1227775554"
}
, part2 = error "part 2 incomplete"
}
newtype ID = ID Int
deriving newtype (Eq, Ord, Show, Num, Enum)
isRepetition :: ID -> Bool
isRepetition (T.show -> n) = uncurry (==) $ T.splitAt (T.length n `div` 2) n

1
outputs/real/2/1 Normal file
View File

@ -0,0 +1 @@
31210613313