19
									
								
								day6.hs
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								day6.hs
									
									
									
									
									
								
							@@ -4,18 +4,13 @@ main :: IO ()
 | 
				
			|||||||
main = do
 | 
					main = do
 | 
				
			||||||
  input <- readFile "day6.in"
 | 
					  input <- readFile "day6.in"
 | 
				
			||||||
  putStr "Q1: "
 | 
					  putStr "Q1: "
 | 
				
			||||||
  print $ q1 input
 | 
					  print $ parse 4 input
 | 
				
			||||||
  putStr "Q2: "
 | 
					  putStr "Q2: "
 | 
				
			||||||
  print $ q2 input
 | 
					  print $ parse 14 input
 | 
				
			||||||
 | 
					
 | 
				
			||||||
q1, q2 :: String -> Int
 | 
					group :: Int -> [Char] -> [[Char]]
 | 
				
			||||||
q1 = length . parse 4
 | 
					group _ [] = []
 | 
				
			||||||
q2 = length . parse 14
 | 
					group n xs = take n xs : group n (tail xs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
parse :: Int -> String -> String
 | 
					parse :: Int -> String -> Int
 | 
				
			||||||
parse n a = parse' n (splitAt n a)
 | 
					parse n = (+ n) . length . takeWhile ((< n) . length) . map nub . group n
 | 
				
			||||||
 | 
					 | 
				
			||||||
parse' :: Int -> (String, String) -> String
 | 
					 | 
				
			||||||
parse' n (a, b)
 | 
					 | 
				
			||||||
  | length (nub (drop (length a - n) a)) == n = a
 | 
					 | 
				
			||||||
  | otherwise = parse' n (a ++ [head b], tail b)
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user