day3: add haskell solution
This commit is contained in:
parent
e76f855d05
commit
4ec5908454
1 changed files with 23 additions and 0 deletions
23
2020/day3/day3.hs
Normal file
23
2020/day3/day3.hs
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import Control.Applicative (empty)
|
||||||
|
import Control.Monad.Zip (mzip)
|
||||||
|
import Data.List (intercalate)
|
||||||
|
import Data.Maybe (catMaybes)
|
||||||
|
|
||||||
|
compose2 :: (a' -> b' -> c) -> (a -> a') -> (b -> b') -> a -> b -> c
|
||||||
|
compose2 f g h x y = f (g x) (h y)
|
||||||
|
|
||||||
|
(.:) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
|
||||||
|
f .: g = (f .) . g
|
||||||
|
infixl 8 .:
|
||||||
|
|
||||||
|
countHits :: (Int, Int) -> [[Bool]] -> Int
|
||||||
|
countHits = length . filter id . map (uncurry $ flip (!!)) . catMaybes .: compose2 (zipWith mzip) (uncurry . flip $ compose2 intercalate (flip replicate empty . pred) (fmap pure . map pure . enumFromThen 0)) (map pure)
|
||||||
|
|
||||||
|
treeCharToBool :: Char -> Bool
|
||||||
|
treeCharToBool = (== '#')
|
||||||
|
|
||||||
|
main = do
|
||||||
|
charLines <- lines <$> readFile "input.txt"
|
||||||
|
let boolLines = cycle <$> map treeCharToBool <$> charLines
|
||||||
|
print $ countHits (3, 1) boolLines
|
||||||
|
print $ product $ flip countHits boolLines <$> [(1,1), (3,1), (5,1), (7,1), (1,2)]
|
Loading…
Reference in a new issue