Compare commits
	
		
			No commits in common. '07084c40cdd0b070799374b18d8e7a3f53dea3f0' and '03759d2e794b6bc82fa8acebb48188908b01819b' have entirely different histories. 
		
	
	
		
			07084c40cd
			...
			03759d2e79
		
	
		
	
				 5 changed files with 12 additions and 1058 deletions
			
			
		
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						| @ -1,43 +0,0 @@ | |||||||
| {-# LANGUAGE OverloadedStrings #-} |  | ||||||
| 
 |  | ||||||
| module Day2 (day2) where |  | ||||||
| 
 |  | ||||||
| import qualified Data.Text as T |  | ||||||
| import qualified Data.Attoparsec.Text as P |  | ||||||
| 
 |  | ||||||
| type Max = Integer |  | ||||||
| type Min = Integer |  | ||||||
| type Letter = Char |  | ||||||
| 
 |  | ||||||
| data Policy = Policy { lBound :: Min |  | ||||||
|                      , uBound :: Max |  | ||||||
|                      , letter :: Letter |  | ||||||
|                      } |  | ||||||
| 
 |  | ||||||
| parserPolicy :: P.Parser Policy |  | ||||||
| parserPolicy = do |  | ||||||
|     lB <- P.decimal |  | ||||||
|     _ <- P.char '-' |  | ||||||
|     uB <- P.decimal |  | ||||||
|     _ <- P.char ' ' |  | ||||||
|     le <- P.letter |  | ||||||
|     _ <- P.string ": " |  | ||||||
|     return $ Policy lB uB le |  | ||||||
| 
 |  | ||||||
| validatePolicy :: Policy -> String -> Bool |  | ||||||
| validatePolicy p s = |  | ||||||
|     let l = toInteger . length $ filter (== letter p) s in |  | ||||||
|     l >= lBound p && l <= uBound p |  | ||||||
| 
 |  | ||||||
| validateLine :: String -> Bool |  | ||||||
| validateLine s = |  | ||||||
|     case P.parse parserPolicy (T.pack s) of |  | ||||||
|         P.Fail {} -> error "day2 - parser error" |  | ||||||
|         P.Partial _ -> error "day2 - input error" |  | ||||||
|         P.Done i r -> validatePolicy r (T.unpack i) |  | ||||||
| 
 |  | ||||||
| day2 :: IO () |  | ||||||
| day2 = do |  | ||||||
|   r <- readFile "./input/day2" |  | ||||||
|   putStr "[Day 1-1] # valid passwords: " |  | ||||||
|   print . length . filter (==True) . fmap validateLine . lines $ r |  | ||||||
					Loading…
					
					
				
		Reference in new issue