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