diff options
Diffstat (limited to 'execs/Day04.hs')
-rw-r--r-- | execs/Day04.hs | 18 |
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 @@ | |||
1 | module Main where | 1 | module Main where |
2 | 2 | ||
3 | import Text.ParserCombinators.Parsec | 3 | import Data.Char (isDigit, isHexDigit) |
4 | import Data.Map.Strict (Map, (!)) | 4 | import Data.Map.Strict (Map, (!)) |
5 | import qualified Data.Map.Strict as Map | 5 | import qualified Data.Map.Strict as Map |
6 | import Data.Char (isDigit, isHexDigit) | 6 | import Text.ParserCombinators.Parsec |
7 | import Utils | 7 | import Utils |
8 | 8 | ||
9 | requiredFields = [ "byr" , "iyr" , "eyr" , "hgt" , "hcl" , "ecl" , "pid" ] | 9 | requiredFields = [ "byr" , "iyr" , "eyr" , "hgt" , "hcl" , "ecl" , "pid" ] |
10 | eyeColors = ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"] | 10 | eyeColors = ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"] |
11 | 11 | ||
12 | block = cell `sepBy` oneOf " \n" | 12 | block = cell `sepBy` oneOf " \n" |
@@ -28,15 +28,15 @@ validEyr s = bet (read s :: Int) (2020, 2030) | |||
28 | validEcl = flip elem eyeColors | 28 | validEcl = flip elem eyeColors |
29 | validPid s = length s == 9 && all isDigit s | 29 | validPid s = length s == 9 && all isDigit s |
30 | validHcl ('#':rest) = length rest == 6 && all isHexDigit rest | 30 | validHcl ('#':rest) = length rest == 6 && all isHexDigit rest |
31 | validHcl _ = False | 31 | validHcl _ = False |
32 | validHgt s = | 32 | validHgt 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 | ||
41 | doValidate :: Map String String -> Bool | 41 | doValidate :: Map String String -> Bool |
42 | doValidate map = all ((== True) . (\(s, v) -> v $ map ! s)) ls | 42 | doValidate map = all ((== True) . (\(s, v) -> v $ map ! s)) ls |