import Data.List (sort, group) allUniq :: Ord a => [a] -> Bool allUniq xs = length xs == length (group (sort xs)) findPacket :: Int -> String -> Int findPacket n s@(x:xs) | allUniq (take n s) = n | otherwise = 1 + findPacket n xs main :: IO () main = do x <- getContents putStr "part 1: " print $ findPacket 4 x putStr "part 2: " print $ findPacket 14 x