This commit is contained in:
2023-12-23 14:58:01 +01:00
parent ee37670cb3
commit c568ce2677
5 changed files with 152 additions and 0 deletions

32
day23/Commons.hs Normal file
View File

@@ -0,0 +1,32 @@
module Commons where
import GHC.IO.Handle (isEOF)
import Data.Array (Array, listArray, (!), Ix (inRange), bounds)
data Direction = North | South | West | East deriving (Eq, Ord, Show)
data Tile = Empty | Rock | Slope { direction :: Direction } deriving (Eq, Show)
type Trails = Array (Int, Int) Tile
parseLine :: String -> [Tile]
parseLine = map (\case
'.' -> Empty
'#' -> Rock
'>' -> Slope {direction = East}
'v' -> Slope {direction = South}
'<' -> Slope {direction = West}
'^' -> Slope {direction = North})
parseTrails :: IO [[Tile]]
parseTrails = do done <- isEOF
if done
then return []
else do line <- getLine
let trailsLine = parseLine line
trails <- parseTrails
return (trailsLine: trails)
parse :: IO Trails
parse = do trails <- parseTrails
return $ listArray ((1, 1), (length trails, length $ head trails)) $ concat trails