Compare commits
2 Commits
03759d2e79
...
07084c40cd
Author | SHA1 | Date |
---|---|---|
Gaël Depreeuw | 07084c40cd | 4 years ago |
Gaël Depreeuw | 5335e6fb8d | 4 years ago |
5 changed files with 1058 additions and 12 deletions
@ -1,16 +1,9 @@ |
|||||||
module Main where |
module Main where |
||||||
|
|
||||||
import qualified Day1 (fixExpenseReport) |
import Day1 (day1) |
||||||
|
import Day2 (day2) |
||||||
day1 :: IO () |
|
||||||
day1 = do |
|
||||||
r <- readFile "./input/day1" |
|
||||||
putStr "[Day 1-1] fix: " |
|
||||||
print . Day1.fixExpenseReport 2020 2 . fmap read . lines $ r |
|
||||||
putStr "[Day 1-2] fix: " |
|
||||||
print . Day1.fixExpenseReport 2020 3 . fmap read . lines $ r |
|
||||||
|
|
||||||
|
|
||||||
main :: IO () |
main :: IO () |
||||||
main = do |
main = do |
||||||
day1 |
day1 |
||||||
|
day2 |
||||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,43 @@ |
|||||||
|
{-# 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