Haskell version using megaparsec
[summerofcode2018soln.git] / src / task1 / task1.hs
index 200d538afd1fb1af0a401e81876003baf38fd865..071fe68f3d1310f88b1f35e42c83cbee92e9ae41 100644 (file)
@@ -1,9 +1,10 @@
 import Data.List (foldl')        -- import the strict fold
 
 -- number of steps
-type Step = Int
+type Distance = Int
 type Position = (Int, Int)
 
+-- the directions. See below for functions for turning
 data Direction = North | East | South | West 
     deriving (Enum, Show, Bounded, Eq)
 
@@ -12,7 +13,8 @@ data Mowmaster = Mowmaster { direction :: Direction
                            , position :: Position
                            } deriving (Show, Eq)
 
-data Instruction =   Forward Step
+-- one instruction for the mowmaster
+data Instruction =   Forward Distance
                    | Clockwise 
                    | Anticlockwise
                    | Comment String
@@ -35,7 +37,6 @@ part2 instruction_text = finalDistance $ executeAll instructions
           executeAll = foldl' execute initialMowmaster
           
 
-
 -- Is this line a comment?
 isComment :: String -> Bool
 isComment ('#':_) = True
@@ -70,6 +71,7 @@ execute m  Clockwise     = m {direction = turnCW (direction m)}
 execute m  Anticlockwise = m {direction = turnACW (direction m)}
 execute m (Comment _)    = m
 
+
 -- Move in the current direction
 forward :: Int -> Direction -> Position -> Position
 forward s North (e, n) = (e, n+s)
@@ -77,7 +79,6 @@ forward s South (e, n) = (e, n-s)
 forward s West  (e, n) = (e-s, n)
 forward s East  (e, n) = (e+s, n)
 
-
 -- | a `succ` that wraps 
 turnCW :: (Bounded a, Enum a, Eq a) => a -> a 
 turnCW dir | dir == maxBound = minBound