Day 10
This commit is contained in:
87
src/Parse.hs
87
src/Parse.hs
@@ -13,6 +13,13 @@ import Text.Megaparsec.Char qualified as MC
|
||||
import Text.Megaparsec.Char.Lexer qualified as MCL
|
||||
import Util (both)
|
||||
|
||||
import Data.List (transpose)
|
||||
import Data.List.Extra (chunksOf)
|
||||
|
||||
import Data.Map (Map)
|
||||
import Data.Map qualified as M
|
||||
import Data.Maybe (fromMaybe)
|
||||
|
||||
type Parser = M.Parsec Void T.Text
|
||||
|
||||
someLines :: Parser a -> Parser [a]
|
||||
@@ -21,6 +28,9 @@ someLines p = p `M.sepEndBy1` MC.newline
|
||||
number :: Parser Int
|
||||
number = MCL.decimal
|
||||
|
||||
int :: Parser Int
|
||||
int = MCL.signed (pure ()) number
|
||||
|
||||
digit :: Parser Int
|
||||
digit = digitToInt <$> digitChar
|
||||
|
||||
@@ -36,3 +46,80 @@ parsecDay parser parts =
|
||||
Right parsedInput -> Right $ both (parsedInput &) parts
|
||||
)
|
||||
)
|
||||
|
||||
parseCRT :: [String] -> String
|
||||
parseCRT = map (\grid -> fromMaybe '?' (M.lookup grid gridToChar)) . slice
|
||||
where
|
||||
slice :: [String] -> [[String]]
|
||||
slice = transpose . map (chunksOf 5)
|
||||
|
||||
gridToChar :: Map [String] Char
|
||||
gridToChar =
|
||||
M.fromList
|
||||
[
|
||||
(
|
||||
[ ".##.."
|
||||
, "#..#."
|
||||
, "#..#."
|
||||
, "####."
|
||||
, "#..#."
|
||||
, "#..#."
|
||||
]
|
||||
, 'A'
|
||||
)
|
||||
,
|
||||
(
|
||||
[ "###.."
|
||||
, "#..#."
|
||||
, "###.."
|
||||
, "#..#."
|
||||
, "#..#."
|
||||
, "###.."
|
||||
]
|
||||
, 'B'
|
||||
)
|
||||
,
|
||||
(
|
||||
[ "#...."
|
||||
, "#...."
|
||||
, "#...."
|
||||
, "#...."
|
||||
, "#...."
|
||||
, "####."
|
||||
]
|
||||
, 'L'
|
||||
)
|
||||
,
|
||||
(
|
||||
[ "###.."
|
||||
, "#..#."
|
||||
, "#..#."
|
||||
, "###.."
|
||||
, "#...."
|
||||
, "#...."
|
||||
]
|
||||
, 'P'
|
||||
)
|
||||
,
|
||||
(
|
||||
[ "#..#."
|
||||
, "#..#."
|
||||
, "#..#."
|
||||
, "#..#."
|
||||
, "#..#."
|
||||
, ".##.."
|
||||
]
|
||||
, 'U'
|
||||
)
|
||||
,
|
||||
(
|
||||
[ "####."
|
||||
, "...#."
|
||||
, "..#.."
|
||||
, ".#..."
|
||||
, "#...."
|
||||
, "####."
|
||||
]
|
||||
, 'Z'
|
||||
)
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user