{-# LANGUAGE ScopedTypeVariables #-} import Data.Char import Data.List.Split import Data.List import Data.Maybe import Data.Set main = do ls <- readFile "6.in" putStrLn . show . solveB . parse $ ls where parse = (!!0) . words solveA = solve 6 solveB = solve 13 solve :: Int -> String -> Maybe Int solve offset = fmap ((+offset) . fst ) . find (startingSequence . snd) . enumerate . suffixes where suffixes = ((fmap Prelude.drop [0..]) <*>) . pure enumerate = zip [1..] startingSequence = (==(offset+1)) . size . fromList . Prelude.take (offset+1)