X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=src%2Ftask1%2Ftask1.hs;h=e7a4f4bacf3770fe7192a9296eaa84dafa58b2a1;hb=0ada5a1833d263689d2f29eabf203a1eb163f84d;hp=200d538afd1fb1af0a401e81876003baf38fd865;hpb=2332d583ac8c5c998732c629cbb16f92b750ab1c;p=summerofcode2018soln.git diff --git a/src/task1/task1.hs b/src/task1/task1.hs index 200d538..e7a4f4b 100644 --- a/src/task1/task1.hs +++ b/src/task1/task1.hs @@ -1,18 +1,22 @@ import Data.List (foldl') -- import the strict fold -- number of steps -type Step = Int +type Distance = Int + +-- easting, northing type Position = (Int, Int) +-- the directions. See below for functions for turning data Direction = North | East | South | West deriving (Enum, Show, Bounded, Eq) --- direction, easting, northing +-- the currenct state of a Mowmaster 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 +39,6 @@ part2 instruction_text = finalDistance $ executeAll instructions executeAll = foldl' execute initialMowmaster - -- Is this line a comment? isComment :: String -> Bool isComment ('#':_) = True @@ -70,6 +73,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 +81,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