|
- main :: IO ()
- main = do
- raw <- readFile "day3.txt"
- let ls = map parse $ lines raw
- ansA = solveSlope 3 1 ls
- ansB = foldr (*) 1 $
- [ (solveSlope 1 1 ls)
- , (solveSlope 3 1 ls)
- , (solveSlope 5 1 ls)
- , (solveSlope 7 1 ls)
- , (solveSlope 1 2 ls)
- ]
- in do
- putStrLn $ "day3a: " ++ (show ansA)
- putStrLn $ "day3b: " ++ (show ansB)
-
- parse :: String -> [Bool]
- parse = map (== '#')
-
- solveLine :: [Bool] -> Int -> Bool
- solveLine [] _ = error "empty list"
- solveLine bs i = bs !! index
- where
- index = i `mod` (length bs)
-
- solveSlope :: Int -> Int -> [[Bool]] -> Int
- solveSlope r d bs =
- length $ filter (== True) $ solveSlope' r d bs 0 []
-
- solveSlope' :: Int -> Int -> [[Bool]] -> Int -> [Bool] -> [Bool]
- solveSlope' _ _ [] _ as = as
- solveSlope' r d bs@(b:cs) i as =
- if ns == []
- then as
- else solveSlope' r d ns ni $ (solveLine (head ns) ni) : as
- where
- ni = (i + r) `mod` (length b)
- ns = if (length bs) <= d
- then []
- else (drop d bs)
|