1 import Data.List.Split (splitOn)
5 text <- readFile "data/advent11.txt"
10 part1 = distance . hexPath . splitOn ","
12 part2 :: String -> Int
13 part2 = maximum . map distance . hexPathB . splitOn ","
15 hexStep :: (Int, Int) -> String -> (Int, Int)
16 hexStep (n, ne) s = case s of
19 "nw" -> (n + 1, ne - 1)
21 "se" -> (n - 1, ne + 1)
25 hexPath :: [String] -> (Int, Int)
26 hexPath = foldl hexStep (0, 0)
28 hexPathB :: [String] -> [(Int, Int)]
29 hexPathB = scanl hexStep (0, 0)
31 distance :: (Int, Int) -> Int
32 distance (n, ne) = if n * ne > 0
33 then (abs n) + (abs ne)
34 else smallest + remainder
35 where smallest = min (abs n) (abs ne)
36 remainder = max ((abs n) - smallest) ((abs ne) - smallest)