Day 6
This commit is contained in:
29
src/Days/D06.hs
Normal file
29
src/Days/D06.hs
Normal file
@@ -0,0 +1,29 @@
|
||||
module Days.D06 (
|
||||
day,
|
||||
) where
|
||||
|
||||
import Common
|
||||
import Data.List (findIndex, nub, tails)
|
||||
|
||||
distinct :: (Eq a) => [a] -> Bool
|
||||
distinct l = length l == length (nub l)
|
||||
|
||||
windows :: Int -> [a] -> [[a]]
|
||||
windows n l
|
||||
| length l < n = []
|
||||
| otherwise = zipWith const (windowList l) [0 .. (length l - n)]
|
||||
where
|
||||
windowList :: [a] -> [[a]]
|
||||
windowList = map (take n) . tails
|
||||
|
||||
detector :: (Eq a) => Int -> [a] -> Maybe Int
|
||||
detector n = fmap (n +) . findIndex distinct . windows n
|
||||
|
||||
part1 :: String -> Maybe Int
|
||||
part1 = detector 4
|
||||
|
||||
part2 :: String -> Maybe Int
|
||||
part2 = detector 14
|
||||
|
||||
day :: Day
|
||||
day = StringDay (\s -> Right (Answer <$> part1 s, Answer <$> part2 s))
|
||||
@@ -16,6 +16,7 @@ import Days.D02 qualified as D02
|
||||
import Days.D03 qualified as D03
|
||||
import Days.D04 qualified as D04
|
||||
import Days.D05 qualified as D05
|
||||
import Days.D06 qualified as D06
|
||||
|
||||
import Data.Text.IO qualified as T
|
||||
|
||||
@@ -31,4 +32,5 @@ days =
|
||||
, [D03.day]
|
||||
, [D04.day]
|
||||
, [D05.day]
|
||||
, [D06.day]
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user