Day 11
This commit is contained in:
parent
a44830ae8d
commit
a5e12ca387
|
@ -0,0 +1,27 @@
|
|||
import Data.List.Split (splitOn)
|
||||
import Data.Foldable (fold)
|
||||
|
||||
data Coordinates = Coordinates Int Int Int deriving Show
|
||||
instance Monoid Coordinates where
|
||||
mempty = Coordinates 0 0 0
|
||||
Coordinates x y z `mappend` Coordinates x' y' z' = Coordinates (x + x') (y + y') (z + z')
|
||||
|
||||
getCoordinates :: String -> Coordinates
|
||||
getCoordinates direction = case direction of
|
||||
"n" -> Coordinates 1 0 0
|
||||
"ne" -> Coordinates 0 1 0
|
||||
"se" -> Coordinates 0 0 1
|
||||
"s" -> Coordinates (-1) 0 0
|
||||
"sw" -> Coordinates 0 (-1) 0
|
||||
"nw" -> Coordinates 0 0 (-1)
|
||||
|
||||
getDistance :: Coordinates -> Int
|
||||
getDistance (Coordinates x y z) =
|
||||
let absList = map abs [x, y, z]
|
||||
in sum absList - minimum absList
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
coordinates <- fmap (map getCoordinates . splitOn ",") $ readFile "11.txt"
|
||||
print $ getDistance $ fold coordinates
|
||||
print $ maximum . map getDistance $ scanl mappend mempty coordinates
|
Loading…
Reference in New Issue