-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDay3.hs
44 lines (34 loc) · 1.01 KB
/
Day3.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{-# LANGUAGE DeriveFunctor #-}
module Day3 where
import Control.Applicative ((<|>), Alternative (many))
import Data.Char (isDigit, digitToInt)
import Data.Functor (($>))
import qualified Data.Text as T
import qualified Data.Text.IO as T
import qualified Data.Vector as V
import Parser
import qualified Witherable as W
program :: FilePath -> IO ()
program = (=<<) print . fmap logic . T.readFile
data Answer = Answer deriving (Eq, Show)
logic :: T.Text -> Answer
logic = const Answer
data GridElement
= Digit Int
| Blank
| Symbol Char
deriving (Eq, Show)
data Grid a = Grid
{ gridWidth :: Int
, gridHeight :: Int
, content :: V.Vector a
}
deriving (Eq, Show, Functor)
gridElementP :: Parser GridElement
gridElementP = digitP <|> blankP <|> symbolP
where
blankP = char '.' $> Blank
digitP = Digit . digitToInt <$> digit
symbolP = (fmap Symbol . W.filter (\c -> c /= '.' && c /= '\n' && (not . isDigit) c)) anyChar
gridElementsP :: Parser [[GridElement]]
gridElementsP = many gridElementP `sepBy` newline