aboutsummaryrefslogtreecommitdiff
path: root/execs/Day04.hs
diff options
context:
space:
mode:
Diffstat (limited to 'execs/Day04.hs')
-rw-r--r--execs/Day04.hs18
1 files changed, 9 insertions, 9 deletions
diff --git a/execs/Day04.hs b/execs/Day04.hs
index a95dfd0..1834250 100644
--- a/execs/Day04.hs
+++ b/execs/Day04.hs
@@ -1,12 +1,12 @@
1module Main where 1module Main where
2 2
3import Text.ParserCombinators.Parsec 3import Data.Char (isDigit, isHexDigit)
4import Data.Map.Strict (Map, (!)) 4import Data.Map.Strict (Map, (!))
5import qualified Data.Map.Strict as Map 5import qualified Data.Map.Strict as Map
6import Data.Char (isDigit, isHexDigit) 6import Text.ParserCombinators.Parsec
7import Utils 7import Utils
8 8
9requiredFields = [ "byr" , "iyr" , "eyr" , "hgt" , "hcl" , "ecl" , "pid" ] 9requiredFields = [ "byr" , "iyr" , "eyr" , "hgt" , "hcl" , "ecl" , "pid" ]
10eyeColors = ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"] 10eyeColors = ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"]
11 11
12block = cell `sepBy` oneOf " \n" 12block = cell `sepBy` oneOf " \n"
@@ -28,15 +28,15 @@ validEyr s = bet (read s :: Int) (2020, 2030)
28validEcl = flip elem eyeColors 28validEcl = flip elem eyeColors
29validPid s = length s == 9 && all isDigit s 29validPid s = length s == 9 && all isDigit s
30validHcl ('#':rest) = length rest == 6 && all isHexDigit rest 30validHcl ('#':rest) = length rest == 6 && all isHexDigit rest
31validHcl _ = False 31validHcl _ = False
32validHgt s = 32validHgt s =
33 let value = takeWhile isDigit s 33 let value = takeWhile isDigit s
34 unit = dropWhile isDigit s 34 unit = dropWhile isDigit s
35 height = (read value :: Int, unit) 35 height = (read value :: Int, unit)
36 in case height of 36 in case height of
37 (v, "cm") -> bet v (150, 193) 37 (v, "cm") -> bet v (150, 193)
38 (v, "in") -> bet v (59, 76) 38 (v, "in") -> bet v (59, 76)
39 _ -> False 39 _ -> False
40 40
41doValidate :: Map String String -> Bool 41doValidate :: Map String String -> Bool
42doValidate map = all ((== True) . (\(s, v) -> v $ map ! s)) ls 42doValidate map = all ((== True) . (\(s, v) -> v $ map ! s)) ls