This commit is contained in:
Michael Zhang 2020-12-04 19:01:41 -06:00
parent 70a8c18a27
commit ffb5f12540
Signed by: michael
GPG key ID: BDA47A31A3C8EE6B

9
4.hs
View file

@ -13,7 +13,7 @@ data Attr = Byr | Iyr | Eyr | Hgt | Hcl | Ecl | Pid | Cid
deriving (Show, Bounded, Enum, Eq, Ord)
intval :: Int -> Int -> Int -> Maybe Int
intval lo hi n = guard (n >= lo && n <= hi) $> n
intval lo hi n = guard (lo <= n && n <= hi) $> n
nDigits :: Int -> String -> Maybe String
nDigits n s = guard (length s == n && all isDigit s) $> s
@ -26,10 +26,8 @@ validEcl = flip elem ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"]
parseAttr :: String -> Maybe Attr
parseAttr s =
let parts = splitOn ":" s in
let key = parts !! 0 in
let value = parts !! 1 in
case key of
case splitOn ":" s of
[key, value] -> case key of
"byr" -> (readMaybe value >>= intval 1920 2002) $> Byr
"iyr" -> (readMaybe value >>= intval 2010 2020) $> Iyr
"eyr" -> (readMaybe value >>= intval 2020 2030) $> Eyr
@ -42,6 +40,7 @@ parseAttr s =
"pid" -> nDigits 9 value $> Pid
"cid" -> Just Cid
_ -> Nothing
_ -> Nothing
processLine :: String -> Maybe [Attr]
processLine = mapM parseAttr . splitOn " "