summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Smeding <tom.smeding@gmail.com>2020-12-04 10:36:23 +0100
committerTom Smeding <tom.smeding@gmail.com>2020-12-04 10:36:23 +0100
commit08993f477cd22ebc00e651def6cc6268b50d2e6a (patch)
tree26f46fb6b1d44fe8da5c673e57f6b9c055b40e13
parentcc94dd59fffc7905fbeba76ab9b8ad974a3e8838 (diff)
Day 4
-rw-r--r--2020/4.hs74
-rw-r--r--2020/4.in1133
2 files changed, 1207 insertions, 0 deletions
diff --git a/2020/4.hs b/2020/4.hs
new file mode 100644
index 0000000..fd4d475
--- /dev/null
+++ b/2020/4.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE ViewPatterns #-}
+module Main (main) where
+
+import Data.Char (isDigit, isSpace)
+import Data.List (isInfixOf)
+import qualified Data.Map.Strict as Map
+import Data.Map.Strict (Map)
+import Text.Parsec hiding (getInput, between)
+import Text.Read (readMaybe)
+
+import Input
+
+
+data Pass = Pass (Map String String)
+ deriving (Show)
+
+data Field = Field { fField :: (String, String), fSep :: Bool }
+ deriving (Show)
+
+parseFields :: String -> [Field]
+parseFields = either (error . show) id . parse pFields ""
+ where
+ pFields :: Parsec String () [Field]
+ pFields =
+ choice [try (spaces >> eof >> return [])
+ ,(:) <$> (Field <$> pField <*> pSep) <*> pFields]
+
+ pField :: Parsec String () (String, String)
+ pField = (,) <$> sequence (replicate 3 lower) <*> (char ':' >> many1 (satisfy (not . isSpace)))
+
+ pSep :: Parsec String () Bool
+ pSep = ("\n\n" `isInfixOf`) <$> many1 space
+
+parsePasses :: [Field] -> [Pass]
+parsePasses [] = []
+parsePasses fs = case break fSep fs of
+ (pre, p : post) ->
+ Pass (Map.fromList (map fField (pre ++ [p])))
+ : parsePasses post
+ (pre, []) ->
+ [Pass (Map.fromList (map fField pre))]
+
+validate :: [(String, String -> Bool)] -> Pass -> Bool
+validate vs (Pass fields) =
+ all (\(key, check) -> maybe False check (Map.lookup key fields)) vs
+
+numVor :: Int -> (Int -> Bool) -> String -> Bool
+numVor len f s
+ | length s == len, all isDigit s = f (read s)
+ | otherwise = False
+
+main :: IO ()
+main = do
+ let between l h x = l <= x && x <= h
+ isHexDigit = flip elem "0123456789abcdef"
+ validators =
+ [("byr", numVor 4 (between 1920 2002))
+ ,("iyr", numVor 4 (between 2010 2020))
+ ,("eyr", numVor 4 (between 2020 2030))
+ ,("hgt", \s -> case readMaybe @Int . reverse <$> splitAt 2 (reverse s) of
+ ("mc", Just n) -> between 150 193 n
+ ("ni", Just n) -> between 59 76 n
+ _ -> False)
+ ,("hcl", \case '#' : c | length c == 6, all isHexDigit c -> True
+ _ -> False)
+ ,("ecl", flip elem ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"])
+ ,("pid", numVor 9 (const True))]
+ validators' = fmap (const (const True)) <$> validators
+ input <- unlines <$> getInput 4
+ let passes = parsePasses (parseFields input)
+ print (sum [fromEnum (validate validators' p) | p <- passes])
+ print (sum [fromEnum (validate validators p) | p <- passes])
diff --git a/2020/4.in b/2020/4.in
new file mode 100644
index 0000000..cf0f89d
--- /dev/null
+++ b/2020/4.in
@@ -0,0 +1,1133 @@
+eyr:2029 pid:157374862
+byr:1991 ecl:amb hcl:#a97842 hgt:178cm
+
+byr:1962 pid:547578491 eyr:2028 ecl:hzl hgt:65in iyr:2013 hcl:#623a2f
+
+hgt:71in eyr:2037
+ecl:#8e276e hcl:z iyr:2019
+byr:2022 pid:157cm
+
+hcl:#733820 hgt:175 eyr:2028 iyr:2011
+pid:87786389
+ecl:hzl byr:1980
+
+hgt:163in hcl:z pid:8261494508 cid:136 ecl:grn eyr:1958
+byr:2030 iyr:1991
+
+iyr:2021
+hcl:6708a3
+ecl:zzz eyr:2034 byr:2010
+hgt:189cm
+pid:466438311
+
+iyr:2012 pid:9720867166 byr:2006 eyr:2022 hgt:72cm ecl:utc hcl:#c0946f
+
+ecl:#353bc9
+iyr:2020 pid:874363951 cid:113
+hcl:z eyr:2040 hgt:76in byr:1975
+
+eyr:1971
+byr:1955 pid:193cm hgt:189cm hcl:#ceb3a1 ecl:grn
+iyr:2023
+
+byr:2014
+iyr:2026 eyr:1978 hcl:z cid:312 pid:8294818417
+hgt:169in ecl:#82bb02
+
+ecl:amb
+byr:1936 hcl:#7d3b0c pid:429853734
+cid:342 iyr:2010 eyr:2025 hgt:160cm
+
+byr:2025 hgt:176in hcl:a490ac
+ecl:#956d3f iyr:2027
+eyr:2021 pid:9858101884
+
+hgt:142 pid:175cm
+eyr:1952 byr:2004 iyr:2007 ecl:#da035e hcl:#623a2f
+cid:194
+
+hgt:156cm
+pid:349122810 hcl:#b6652a eyr:2026 byr:1948 ecl:lzr iyr:2020
+
+byr:1997 ecl:blu
+hcl:#888785 pid:381094641 iyr:2014 hgt:192cm eyr:2027
+
+hcl:7b10a2 ecl:lzr byr:2022
+eyr:2035
+pid:#38b715 hgt:190in iyr:2029
+
+pid:188cm byr:2014
+cid:241 ecl:#dda9bd hcl:#8f6ebc
+hgt:188cm iyr:2014 eyr:2029
+
+hgt:76cm ecl:gmt hcl:z iyr:2024
+pid:3283057785
+byr:2019 eyr:2026
+
+iyr:2010 pid:284327216 hgt:191cm
+byr:1970
+hcl:#18171d
+ecl:grn
+eyr:2023
+
+byr:1929 eyr:2026 cid:194 ecl:oth hgt:156cm pid:224596482 hcl:#b6652a iyr:2013
+
+eyr:2030 byr:1958 hgt:190cm
+pid:162950579 iyr:2010
+ecl:brn
+cid:250 hcl:#fffffd
+
+ecl:xry iyr:2025 pid:#0155c1
+hcl:#341e13
+eyr:2027 hgt:163cm byr:2025
+
+hcl:#602927 pid:908859481 byr:1962 ecl:hzl
+iyr:2021 eyr:2028 hgt:180cm
+
+iyr:1966 eyr:1976 pid:#bbfe21 hcl:63454a cid:259
+ecl:blu
+byr:2024 hgt:69cm
+
+ecl:#644daf
+byr:2021 eyr:2040
+hcl:bc83fe
+iyr:1976 hgt:59in pid:60311335
+
+iyr:2018
+pid:121801570 hgt:182cm ecl:blu byr:1922 cid:265 eyr:2024 hcl:#888785
+
+byr:1933
+pid:232653422 ecl:gry hcl:#18171d
+hgt:171cm eyr:2035 iyr:2011
+
+ecl:oth iyr:2015 byr:1937
+pid:828621370 hcl:#602927
+eyr:2026
+hgt:193cm
+
+iyr:2010 ecl:grn eyr:2022
+hcl:af37d1 pid:761632482 hgt:65in cid:93
+byr:1993
+
+hgt:169cm cid:121
+iyr:2018
+hcl:#6b5442
+pid:059725560 ecl:oth
+byr:1972 eyr:2028
+
+eyr:2024 byr:2023 ecl:gry
+iyr:2017
+pid:778551716 cid:256 hcl:#733820 hgt:184cm
+
+hcl:#ceb3a1 pid:613277258 byr:1941 hgt:67cm eyr:2029
+ecl:hzl
+iyr:2017
+
+ecl:hzl iyr:2012 pid:498418959 eyr:2022
+byr:1929 hgt:164cm hcl:#a97842 cid:226
+
+hgt:157cm eyr:2029
+byr:1922 iyr:2014 ecl:grn cid:233 hcl:#888785 pid:802870003
+
+hgt:184cm
+ecl:oth hcl:#888785 iyr:2010 byr:1929 eyr:2030
+pid:063671905
+
+hcl:#888785 hgt:144 eyr:1961
+iyr:2005
+byr:2027
+cid:164 pid:41787324
+ecl:utc
+
+hcl:#7d3b0c
+pid:570743051 byr:2022 eyr:1975
+iyr:2018 ecl:utc hgt:188in
+
+eyr:2028 pid:970460968
+hgt:161cm
+iyr:2017 ecl:amb
+cid:318 byr:1967 hcl:#cfa07d
+
+hgt:183cm eyr:2036 hcl:070713 iyr:1959
+cid:242 byr:2011 pid:#0855a5 ecl:lzr
+
+hcl:#ceb3a1 eyr:2023 iyr:2016
+ecl:oth hgt:84
+pid:156cm byr:1949
+
+eyr:2025 ecl:brn hgt:172cm pid:487559063 iyr:2013
+hcl:#efcc98
+byr:1985
+
+eyr:2023 hcl:#6b5442 byr:2021 hgt:75cm iyr:1943
+pid:427375038 ecl:#70c167
+
+ecl:hzl
+eyr:2028 byr:1957 iyr:2010
+hcl:#602927
+hgt:151cm pid:755290924
+
+cid:184 hgt:172cm
+pid:7056500139 iyr:2016 byr:2016
+hcl:e40e08 ecl:#d21247
+
+ecl:oth
+eyr:2025
+iyr:2010 byr:1971 cid:128 pid:932834922
+hcl:#602927
+hgt:167cm
+
+ecl:brn hgt:61in iyr:2016 hcl:#341e13
+pid:918193693 byr:1972 eyr:2029 cid:56
+
+byr:1956 iyr:2020 eyr:2030 hgt:72in
+pid:179969841
+ecl:blu
+
+ecl:#09fd92 cid:209 hgt:69cm iyr:2014
+eyr:2028 pid:#2ad9c0 hcl:#b6652a
+byr:2012
+
+ecl:lzr byr:1980 cid:104
+iyr:1965 pid:57029893 hcl:z
+eyr:2030 hgt:64cm
+
+pid:496149551
+hcl:#6b5442 hgt:181cm byr:1978 iyr:2017
+eyr:2026
+cid:291 ecl:hzl
+
+iyr:2018 hcl:#ceb3a1
+eyr:2021 cid:183 pid:612653062
+ecl:oth
+byr:1982
+
+hgt:153cm pid:877597531 ecl:gry
+iyr:2014 hcl:#866857 cid:333
+byr:1953
+eyr:2022
+
+iyr:2015
+ecl:brn
+pid:823959694 byr:1998 hcl:#18171d
+eyr:2025 hgt:174cm
+
+iyr:2012 cid:93
+ecl:oth pid:142618419 byr:1955 hgt:193cm eyr:1977 hcl:#602927
+
+hcl:z ecl:dne iyr:1926 eyr:2026 pid:175cm hgt:150 byr:2023 cid:234
+
+hgt:61cm iyr:1965 byr:1956
+pid:224946350 cid:105
+eyr:1951 hcl:#733820 ecl:amb
+
+hcl:#866857
+byr:1970 pid:447859408
+eyr:2030
+hgt:65in iyr:2011 ecl:grn
+
+cid:184 eyr:1976 byr:2021 hgt:187cm
+pid:858786336 ecl:#0d63e1 hcl:z
+
+hgt:178cm iyr:1986 hcl:51ac0c ecl:dne eyr:2023 pid:180cm
+
+hcl:#cfa07d pid:002093179
+ecl:oth
+byr:1983 hgt:159cm iyr:2016 eyr:2025
+
+ecl:gry hcl:#c0946f
+byr:2009 pid:#e00fc8
+hgt:62in cid:150 iyr:2013 eyr:1957
+
+byr:1942 ecl:oth eyr:2020 pid:765036664 hcl:#6b5442 iyr:2015 cid:155
+
+ecl:hzl iyr:2014
+hcl:#efcc98 hgt:179cm eyr:2028
+byr:1921 pid:#666905
+
+ecl:utc eyr:2040 hcl:669f5b pid:981368190
+byr:2006 iyr:1949
+hgt:179in
+
+ecl:#062fcd eyr:2035 byr:1962 iyr:2026 hcl:z hgt:161cm pid:75591618
+
+hcl:#b25ef5 pid:434943296
+ecl:oth hgt:165cm
+iyr:2013 eyr:2020
+cid:78 byr:1924
+
+iyr:2018 ecl:oth byr:1972 eyr:2028 pid:035313920
+hgt:59in hcl:#fffffd
+
+hgt:185cm
+hcl:#6b5442
+cid:102 iyr:2020 byr:2001
+eyr:2028 pid:003365121 ecl:amb
+
+pid:90937712 hcl:z hgt:173in byr:2012 ecl:blu iyr:2009 eyr:2039
+
+pid:509460932 eyr:2026
+hgt:71in iyr:2010 cid:138 byr:1929 ecl:grn
+
+ecl:xry
+hgt:119
+pid:051834447 eyr:2033
+iyr:2030 hcl:z byr:2030
+
+pid:443984745 eyr:2026 ecl:oth
+byr:1948 hcl:#a97842 hgt:168cm
+iyr:2017
+
+hcl:#602927 iyr:2020 cid:161 pid:069708283 hgt:178cm byr:1960
+eyr:2022 ecl:hzl
+
+iyr:2026 hcl:766b30 eyr:2032 byr:2030 pid:40361792 hgt:158in ecl:#b300dc
+
+eyr:1998 pid:#5c21e4 iyr:2029 ecl:#bef182
+byr:1944 hgt:166in
+hcl:#b6652a cid:317
+
+ecl:amb
+eyr:2024
+hcl:#a97842
+pid:086765271 hgt:183cm iyr:2018 cid:314 byr:2001
+
+hgt:163in pid:491612094 iyr:2028
+cid:82 ecl:#8a052d
+hcl:#ceb3a1
+eyr:2018
+
+byr:1970 eyr:2039
+hgt:174in hcl:#623a2f
+iyr:2020 cid:154 ecl:grn pid:103138652
+
+pid:73895324 eyr:2026 byr:1952 ecl:brn hcl:#733820 hgt:159in iyr:2015
+
+hcl:#623a2f ecl:brn eyr:2026 hgt:185cm pid:791563822 iyr:2019 byr:1951
+
+hcl:#fffffd
+iyr:2014 hgt:83 cid:101 pid:724483094
+eyr:1995 byr:2015 ecl:lzr
+
+hcl:#ceb3a1
+iyr:2013
+eyr:2021 byr:1994 ecl:hzl
+pid:037849486 hgt:60in
+
+pid:63340670 iyr:1995 hcl:b54c2b hgt:71cm
+cid:184 byr:2004 ecl:dne eyr:2026
+
+hgt:169cm
+ecl:brn byr:1947 iyr:2014 cid:224 hcl:#7374df
+
+hcl:#623a2f
+pid:471948403 ecl:gry
+hgt:154cm
+eyr:2023 iyr:2016 byr:1925
+
+eyr:2024 hgt:180cm hcl:#efcc98 iyr:2020 ecl:gry byr:1961 pid:318184801
+
+ecl:blu iyr:2012 eyr:2020 hgt:190cm
+byr:1977
+pid:331654452 hcl:#cfa07d
+
+pid:812502106 byr:1938
+eyr:2020 hgt:169cm ecl:oth hcl:#341e13 iyr:2011
+
+cid:286 byr:1942 eyr:2034 hgt:116
+ecl:utc
+iyr:2023 hcl:#602927 pid:181cm
+
+ecl:amb iyr:2011 hcl:#cfa07d eyr:2029 byr:1975
+hgt:183cm pid:548900689
+
+ecl:utc pid:182cm
+hgt:60cm
+eyr:1989 iyr:1993 hcl:z
+
+iyr:1985 hgt:186 byr:2018
+eyr:2001 pid:9257131167
+hcl:261a65 ecl:lzr
+
+hgt:152
+byr:1922 pid:72992226
+iyr:1968
+ecl:dne eyr:2028 hcl:5c2950
+
+ecl:grn
+byr:1943 hgt:74in eyr:2022
+pid:135491924
+iyr:2011 hcl:#623a2f
+
+iyr:2026 pid:7955389103
+cid:311
+ecl:#b81171 hcl:z eyr:1935 byr:2024
+
+byr:1974 iyr:2010 hgt:165cm
+ecl:amb cid:343 eyr:2023
+pid:972786259 hcl:#6b5442
+
+iyr:2020 byr:1936
+ecl:gry hcl:#efcc98 hgt:170cm eyr:2021 pid:520354073
+
+hgt:185cm hcl:#ceb3a1
+pid:317012754 byr:1991
+cid:199 iyr:2011
+ecl:blu eyr:2028
+
+ecl:#e4e01f byr:2008
+cid:293 iyr:2013 hcl:z pid:#368f7a eyr:2036
+
+eyr:2022 pid:424388475 iyr:2008 hcl:z hgt:61cm
+ecl:zzz byr:1985
+
+hcl:#18171d iyr:2014
+cid:88
+byr:1951 eyr:2021 pid:812441789 hgt:181cm ecl:blu
+
+ecl:amb eyr:2029 hgt:70in pid:580245172
+iyr:2010 byr:1927
+hcl:#a97842
+cid:284
+
+hcl:#3b85ed
+ecl:gry eyr:2029 pid:417534919 byr:1960
+iyr:2010 hgt:71in
+
+hcl:#c0946f
+pid:824103775 hgt:157cm iyr:2018 ecl:brn eyr:2024 byr:1961
+
+pid:673501373
+eyr:2033
+ecl:#06523f hcl:z byr:2030 iyr:1978 hgt:153cm
+
+iyr:2019
+hcl:#a97842 byr:1951 hgt:183cm eyr:2024 ecl:blu
+pid:346079429
+
+eyr:1937 pid:964649406
+hgt:162
+cid:66
+ecl:#f89cc0
+hcl:#866857 byr:2024
+
+hgt:114 ecl:#e7ed3a
+byr:2029 cid:190
+eyr:2026 iyr:1986 hcl:z pid:185cm
+
+hcl:#cfa07d hgt:192cm
+pid:12494711 eyr:2028
+iyr:2020
+ecl:brn byr:2004
+
+pid:710015269
+byr:2011 eyr:2033 hgt:181cm
+ecl:#fb2702
+
+cid:259 pid:208799387
+eyr:2025 hcl:#623a2f byr:1947 ecl:oth hgt:164cm iyr:2014
+
+ecl:brn eyr:2025 pid:432178809 hcl:#341e13
+cid:50
+hgt:192cm iyr:2012
+byr:1994
+
+hgt:150in pid:4902585462 ecl:#7074ad cid:230 iyr:2019 eyr:1931 hcl:z byr:2007
+
+ecl:gry
+byr:1942
+hcl:#602927 cid:178 iyr:2014 hgt:193cm pid:349100081 eyr:2030
+
+byr:1923 hcl:#cfa07d eyr:2021 ecl:brn pid:591544598 hgt:157cm
+iyr:2016
+
+hcl:e15737
+iyr:2017 byr:2030
+eyr:1994 pid:470833249
+hgt:181cm cid:70 ecl:grn
+
+eyr:2030
+hcl:#866857 pid:569423049 byr:1948
+ecl:oth
+
+eyr:2026
+byr:2006
+hcl:#ceb3a1
+iyr:2010 pid:094156115 hgt:64cm ecl:oth
+
+byr:2002 cid:215 ecl:hzl
+hcl:#602927 iyr:2015 pid:53150410 hgt:168cm eyr:2028
+
+iyr:2016 hcl:#7d3b0c hgt:162cm
+byr:1937 eyr:2020 ecl:hzl pid:728906226
+
+byr:1921
+iyr:2018 hcl:#888785
+eyr:2026 hgt:185cm pid:164432370 ecl:brn
+
+ecl:gry iyr:2011
+eyr:2026 hgt:190cm
+hcl:#866857 pid:884570088 byr:1996
+
+ecl:blu
+cid:257
+iyr:2016 byr:1989
+eyr:2024 hgt:179cm hcl:#c0946f pid:418340261
+
+pid:9367990743 hcl:z hgt:182in ecl:utc
+byr:1988 eyr:2025
+
+ecl:hzl hgt:157cm
+iyr:2010 eyr:2027
+hcl:#fffffd byr:1956
+
+eyr:2024 pid:834302242 ecl:hzl
+iyr:2015 cid:97 hgt:188cm hcl:#888785 byr:1927
+
+ecl:brn eyr:2021 byr:1958
+hcl:#a97842 hgt:170cm pid:256795932 iyr:2017
+
+hcl:756c4a
+pid:812879747
+byr:2002
+eyr:2027 ecl:blu iyr:1952 hgt:66cm
+
+pid:#c5e14f
+iyr:2026 byr:2028 hgt:162 hcl:87ba57
+eyr:1952 ecl:lzr
+
+hcl:#341e13 hgt:81 eyr:2021 iyr:2029 cid:262 ecl:amb pid:61006868
+byr:2011
+
+pid:#e58702 cid:145 hcl:#866857
+ecl:grn iyr:2028 hgt:192in eyr:2025 byr:2017
+
+iyr:2026 byr:1969
+ecl:grn
+hgt:70cm cid:140 hcl:e0f231 eyr:2027
+pid:2832019
+
+cid:112 eyr:2028 iyr:2018 hcl:#7d3b0c pid:868808117 byr:1985 ecl:blu
+
+iyr:2017
+pid:350399038
+cid:72 hcl:#ceb3a1
+ecl:gry
+hgt:151cm byr:1946 eyr:2029
+
+eyr:2026 hgt:174cm iyr:2010 pid:534641153 hcl:#733820 byr:1965
+
+hgt:66cm
+byr:2010 ecl:gmt eyr:2039
+iyr:2024 hcl:z
+
+pid:626085326
+byr:1971 eyr:2024
+hcl:#cfa07d hgt:170cm
+ecl:hzl iyr:2019
+
+hgt:185cm pid:995661846 ecl:hzl iyr:2016 byr:1963 hcl:#a97842 eyr:2023
+
+ecl:grt iyr:1976 byr:2010
+pid:170cm
+cid:343 hcl:#7d3b0c hgt:171cm
+
+pid:732695396
+ecl:zzz hgt:151in byr:1955
+eyr:2035 iyr:2026 hcl:z
+
+hgt:187cm hcl:#341e13 iyr:2015 pid:556697270 eyr:2025 ecl:blu byr:1926
+
+ecl:oth
+pid:515980529
+hgt:168cm eyr:2023
+byr:1983 iyr:2012 hcl:#341e13
+
+byr:2010
+hgt:189cm iyr:2016
+hcl:#8ff71e
+eyr:2010
+ecl:blu
+pid:317940449
+
+iyr:2013 hgt:157cm hcl:#a97842 pid:967988435
+ecl:blu cid:214 eyr:2027 byr:1960
+
+pid:2666548509 cid:208 hgt:72cm hcl:#7d3b0c eyr:2040 byr:2008
+ecl:amb
+iyr:1926
+
+eyr:2039
+pid:203432895 hgt:154cm byr:1949
+iyr:2010
+hcl:z cid:144 ecl:xry
+
+pid:984689798 byr:2016 iyr:1999 ecl:utc
+eyr:2037 hgt:68cm hcl:z
+
+byr:1969 cid:230 hgt:72cm eyr:2032
+ecl:gry pid:849701444
+hcl:#c0946f
+iyr:2012
+
+eyr:2026
+pid:588870142
+hcl:#ae5619 hgt:173cm
+cid:189
+ecl:grn byr:1996 iyr:2013
+
+byr:1973
+hcl:#cfa07d ecl:blu
+hgt:193cm eyr:2028 cid:115 pid:786380485 iyr:2011
+
+hcl:#fffffd eyr:2028 hgt:155cm pid:499022582
+ecl:blu byr:1977 iyr:2014
+cid:212
+
+ecl:#92bb4b
+pid:815154669 byr:1923 eyr:2023
+hgt:183cm iyr:1929 hcl:#ceb3a1
+
+byr:1966 eyr:2021 iyr:2020 hcl:#6b5442 ecl:hzl
+pid:3508035599
+hgt:70in
+
+ecl:amb
+hcl:#18171d
+byr:1927
+hgt:177cm pid:555764540 iyr:2018 eyr:2025 cid:90
+
+hgt:139 ecl:#878a7d byr:2006 cid:275 iyr:1980 hcl:60fca6 eyr:1952 pid:001439727
+
+byr:1985
+hgt:174cm ecl:gry
+iyr:2018
+cid:204 hcl:#733820
+pid:141048398 eyr:2027
+
+ecl:gmt hcl:#6b5442 hgt:158cm
+iyr:2025
+byr:2030 pid:966397365 eyr:2029
+
+byr:1962 hgt:166cm pid:261989937 cid:320 eyr:2026
+iyr:2015 hcl:#c0946f
+ecl:hzl
+
+pid:852283506 iyr:2018 eyr:2020 byr:1981 hcl:#733820
+ecl:hzl
+hgt:162cm
+
+pid:3873488100 iyr:1982 ecl:grn
+hgt:63cm eyr:1936
+byr:2011 hcl:8d118a
+
+iyr:1937
+hcl:817646
+byr:2026 eyr:2031 pid:#47591d hgt:183in
+ecl:blu
+
+eyr:2025 hgt:153cm iyr:2015 pid:498382864
+cid:307
+byr:1943
+hcl:#f66fe1 ecl:oth
+
+iyr:2017 hgt:66in byr:1948 hcl:#b6652a eyr:2025
+pid:188366364
+ecl:amb
+
+ecl:lzr
+pid:453174702 iyr:2028 eyr:2032 cid:228 byr:2011 hcl:z
+hgt:172cm
+
+hgt:186cm eyr:2030 cid:316 hcl:z byr:1994
+iyr:2012 ecl:amb pid:993162839
+
+hgt:160cm
+ecl:grn pid:523473760 byr:1993
+iyr:2016 eyr:2025 hcl:#602927 cid:261
+
+iyr:2016 pid:520973843 ecl:gry
+eyr:2023 cid:232
+byr:1944 hgt:159cm hcl:#cfa07d
+
+byr:1969 hcl:#1d37de hgt:184cm eyr:2027 pid:088048141
+iyr:2016 cid:307 ecl:hzl
+
+eyr:2040 iyr:2012 pid:723592140
+hgt:61cm hcl:#18171d ecl:dne
+
+eyr:2025
+ecl:oth pid:4697392468
+hgt:183cm iyr:2017 hcl:b07d71
+byr:1996
+
+ecl:amb eyr:2022 cid:143 pid:806594272 hgt:158cm byr:1977 iyr:2014
+hcl:#866857
+
+ecl:blu
+eyr:2022 iyr:2018 byr:1983 hgt:167cm cid:321 hcl:#efcc98
+pid:344179526
+
+byr:1925 eyr:2021
+hgt:193cm iyr:2020 ecl:grn
+hcl:#888785
+
+iyr:2018
+cid:319 byr:1972 hgt:181cm hcl:#fffffd eyr:2023 pid:493780616
+
+eyr:2021
+hcl:#733820
+ecl:#e91c71
+iyr:2020 pid:451676066 hgt:166in
+byr:1993
+
+eyr:2026
+hcl:#b6652a ecl:blu byr:1999 iyr:2020
+hgt:163cm pid:955741810
+
+iyr:2016 hgt:179cm hcl:#602927
+pid:673271332 byr:1963 eyr:2027 ecl:amb
+
+byr:1927
+iyr:2015 hcl:#866857
+ecl:oth
+hgt:159cm
+pid:992992996 eyr:2030
+
+pid:283188332 hgt:168cm hcl:#6b5442
+eyr:2027 byr:2028 ecl:hzl iyr:2030
+
+byr:1944 pid:628012522 eyr:2020
+hcl:#866857
+iyr:2019 ecl:amb
+hgt:168cm
+
+cid:317 pid:333228098 hgt:158cm iyr:2014 byr:1958 eyr:2024 hcl:#a97842 ecl:oth
+
+hcl:#733820
+cid:314 ecl:oth byr:1938 eyr:2030 hgt:71in
+pid:790938694 iyr:2014
+
+iyr:2020 ecl:grt eyr:2018
+hgt:155cm
+pid:1034925815 hcl:#623a2f cid:304
+
+ecl:brn hgt:158cm hcl:#38fe6c eyr:2030 byr:1926 pid:0860404500 iyr:1993 cid:348
+
+byr:1998
+hgt:185cm
+ecl:brn eyr:2021 pid:567032567 hcl:#733820 cid:328 iyr:2017
+
+pid:491430863 cid:146 hgt:181cm eyr:2026 iyr:2015 ecl:amb byr:1950 hcl:#c0946f
+
+eyr:2033 cid:289
+pid:396679011 ecl:oth byr:1988
+hgt:156in
+hcl:#cfa07d iyr:2029
+
+ecl:grn iyr:2015
+byr:1986 hcl:#a97842 hgt:62in
+pid:403990108 eyr:2030
+
+pid:42635067 cid:301
+iyr:2027 hgt:173in
+byr:2004 hcl:z
+eyr:2034
+
+byr:2020 hcl:#fffffd
+hgt:180in eyr:2040 pid:304951921
+iyr:2030 ecl:#1aaf20
+
+iyr:2020 hcl:#888785 ecl:hzl hgt:181cm byr:1992 eyr:2021 pid:936006959
+
+hgt:172in ecl:#fd71a7
+hcl:787715 pid:363058480 byr:2020
+iyr:2022
+eyr:2034
+
+iyr:2018 ecl:blu eyr:2029 hcl:#cfa07d hgt:155cm byr:1937 pid:851148031
+
+byr:2014
+cid:222 ecl:zzz hgt:67cm eyr:2040 pid:#8ab0e2 hcl:z iyr:2027
+
+hgt:180cm hcl:#375883 eyr:2027 byr:1925 ecl:brn
+iyr:2011
+pid:158752719
+
+byr:1935 ecl:oth eyr:2027 pid:041108579
+hcl:#602927 iyr:2011 hgt:190cm
+
+hcl:#a97842 pid:131728607 ecl:blu iyr:2014 hgt:176cm eyr:2020
+byr:1921
+
+pid:11754457
+iyr:2018
+hgt:65cm eyr:2038
+ecl:dne hcl:z
+cid:293
+byr:1940
+
+eyr:2023
+iyr:2016
+byr:1930
+ecl:hzl
+cid:212
+hcl:#733820 hgt:59in
+pid:319501919
+
+cid:278
+eyr:1967 hcl:#ceb3a1 pid:#9f5254 hgt:177in byr:1977 iyr:2030
+
+hcl:#ceb3a1 byr:1998 hgt:72in cid:202 ecl:gry pid:463378493 iyr:2015
+eyr:2030
+
+hcl:#7d3b0c hgt:164cm ecl:hzl byr:1960 eyr:2023
+iyr:2017
+
+ecl:hzl hcl:#866857 byr:1986 iyr:2018 eyr:2027 hgt:176cm pid:928057092
+
+pid:431113230 hgt:186cm eyr:2025
+iyr:2018 ecl:amb byr:1973 hcl:#623a2f
+
+hcl:#cfa07d hgt:179cm iyr:2017 pid:760075190 ecl:amb eyr:2030
+
+hcl:#602927
+iyr:2012
+pid:571020910 ecl:#b6715d byr:1943 eyr:2028
+hgt:161cm
+
+hgt:176cm cid:121 pid:654127593 ecl:brn hcl:#160d38 iyr:2015
+eyr:2021 byr:1997
+
+eyr:2021 byr:1929
+pid:192025713
+hcl:#c0946f iyr:2012 ecl:oth hgt:179cm
+
+eyr:2024 ecl:gry
+hgt:158cm byr:1932 hcl:#ceb3a1
+iyr:2010
+pid:521188306
+
+eyr:2028 ecl:brn
+hcl:#efcc98
+hgt:157cm
+iyr:2012
+pid:212547203 byr:1970
+
+eyr:2029 pid:182693366 hcl:#623a2f hgt:130 byr:1972
+cid:310
+iyr:2010 ecl:amb
+
+byr:1944 iyr:2013
+ecl:brn cid:335
+hgt:163cm
+eyr:2025 hcl:#7d3b0c pid:405230824
+
+hcl:#ceb3a1 iyr:2015 pid:572001387 byr:1962
+ecl:amb hgt:151cm
+
+byr:1928
+eyr:2022
+iyr:2018 ecl:blu
+hcl:#602927 pid:767081131
+
+byr:1948 hgt:180in pid:188cm
+ecl:hzl
+eyr:2013 hcl:e0b9f3 iyr:1975
+
+hcl:#c0946f byr:1989
+eyr:1980 hgt:67cm pid:538025041
+iyr:2014 ecl:gry
+
+eyr:2028 pid:958756919 hcl:#733820 byr:1945 cid:158 ecl:blu
+hgt:168cm iyr:2018
+
+cid:200 hcl:#fffffd
+byr:2015 ecl:gry eyr:2031 hgt:59 pid:065027646
+iyr:1967
+
+byr:1999 ecl:hzl pid:813536928 iyr:2015 cid:296 hcl:#6b5442
+eyr:2025 hgt:186cm
+
+byr:2000 iyr:2012
+hcl:#fffffd
+cid:263 hgt:68in pid:105489529
+ecl:amb eyr:2024
+
+eyr:2026 hcl:#602927 hgt:181cm
+byr:1982
+pid:603871531 iyr:2018 ecl:blu
+
+cid:302 pid:387895477 eyr:2027
+hcl:#cfa07d hgt:191cm iyr:2015
+ecl:hzl byr:1940
+
+iyr:2018 cid:165
+ecl:blu hgt:181cm byr:1994 eyr:2026 pid:077013268
+
+eyr:2022 hgt:174in iyr:2010 byr:2023
+hcl:#733820 ecl:oth
+pid:311692961
+
+ecl:#10f2a9 pid:964417986
+eyr:2024 hcl:#0aeec7 byr:1965 iyr:1943 hgt:167cm
+
+hcl:#341e13 iyr:2020
+ecl:brn
+hgt:188cm eyr:2021 byr:1952
+pid:077471062
+
+byr:1950 cid:110 hgt:160cm eyr:2026
+hcl:#623a2f
+iyr:2013
+pid:972823574
+
+pid:553704996 hgt:171cm
+eyr:2028 iyr:2017
+hcl:#18171d byr:1954 ecl:blu
+
+hgt:180cm ecl:brn eyr:2029 pid:707999496 hcl:#cfa07d byr:1960
+
+pid:9325738036 iyr:1996 hgt:152in byr:2004 cid:292 hcl:14a56f
+eyr:2031
+ecl:#dbd99d
+
+byr:1957
+eyr:2021 pid:557648216 ecl:amb hcl:#7d3b0c hgt:186cm
+iyr:2020
+
+hcl:#602927 hgt:186cm pid:604175608
+iyr:2013 eyr:2026 ecl:oth byr:1991 cid:65
+
+ecl:gry
+iyr:2012 hgt:154cm
+pid:872898058 eyr:2030 hcl:#341e13 byr:1994
+
+pid:228236326
+iyr:2013 cid:347 byr:1942
+eyr:2021 ecl:brn
+hgt:165cm
+hcl:#fffffd
+
+pid:392777182 cid:189 hcl:#cfa07d eyr:2027 hgt:191cm ecl:blu byr:1978
+
+hgt:158in iyr:2028
+pid:5145408095 byr:2012 ecl:#94c57d hcl:z eyr:1996
+
+byr:1949 eyr:2021
+ecl:#5ffbeb iyr:1948 pid:42650064 hcl:z hgt:167cm
+
+iyr:2013 ecl:xry cid:100
+hgt:138 byr:2013
+eyr:1944 hcl:92b68c
+
+hgt:187cm
+ecl:grn hcl:#602927
+iyr:2010
+eyr:2022 byr:1949 cid:280 pid:251802347
+
+ecl:grn
+cid:219
+iyr:2018 hgt:165cm
+pid:703878503 eyr:2024 hcl:#b6652a
+byr:2002
+
+hcl:#18171d cid:341 ecl:amb byr:1941 eyr:2021 iyr:1990 pid:865132177 hgt:153cm
+
+byr:2008 pid:861480549
+cid:97 eyr:2028 hcl:#efcc98
+iyr:2015
+hgt:191cm ecl:#232b23
+
+hcl:#cfa07d
+eyr:2030 iyr:2013 cid:304
+ecl:gry pid:199056608 hgt:192cm
+byr:1926
+
+pid:355135528 hgt:153cm byr:1998 iyr:2019 eyr:2027
+ecl:amb hcl:#18171d
+
+eyr:2028 hcl:8eed9c ecl:grn
+iyr:2010 byr:2005 hgt:107
+pid:64892698
+
+pid:601671623 hgt:153cm iyr:2011 hcl:#b6652a byr:1975 ecl:grn eyr:2029
+
+ecl:grn hcl:#18171d hgt:157cm
+eyr:2023 pid:507932715 byr:1920 iyr:2020
+
+eyr:2022 byr:1933 hcl:#fffffd iyr:2016 hgt:181cm pid:826522507 ecl:blu
+
+byr:2002 hcl:#866857 hgt:177cm pid:240202426
+ecl:gry cid:127
+eyr:2022
+iyr:2014
+
+byr:1971
+iyr:2017
+pid:733985576 hcl:#c58c6c hgt:178cm
+ecl:blu
+eyr:2023
+
+ecl:blu iyr:2017 pid:558732458 hcl:#1b3ab5 eyr:2025 byr:1967 hgt:176cm
+
+eyr:2025 ecl:gry iyr:2020 byr:1988
+hcl:#733820
+hgt:189cm cid:151 pid:934827751
+
+ecl:gry eyr:1951
+iyr:1932
+pid:309366394 byr:1945 hcl:#623a2f hgt:179cm
+
+pid:462345884 ecl:hzl
+cid:206 eyr:2021 hcl:#733820
+byr:1982 hgt:180cm iyr:2010
+
+iyr:2020 hgt:155cm hcl:#341e13 pid:110467532 cid:92 ecl:hzl byr:1975 eyr:2028
+
+hcl:#18171d iyr:2010
+hgt:182cm byr:1930
+eyr:2024
+cid:226
+
+byr:1956 hcl:fb0c6f pid:181cm eyr:2012 iyr:2020
+ecl:#d38822
+hgt:69cm
+
+ecl:gry iyr:2018
+hgt:169cm byr:1981
+pid:534824014 cid:287 eyr:2021 hcl:#c0946f
+
+eyr:2039 hcl:#328e90 iyr:2015
+hgt:170cm pid:#9fa2a4 byr:1999
+ecl:#cd1fd7
+
+hgt:190cm hcl:#733820
+pid:302244363
+ecl:brn
+byr:1965 iyr:2013
+
+iyr:2012
+eyr:2021
+pid:579705743
+ecl:brn hgt:190in
+byr:1954 hcl:#888785
+
+eyr:2036 hgt:154cm
+pid:800720865 byr:2023 ecl:oth iyr:2010 hcl:z
+
+pid:#92f6a9 iyr:2028 eyr:1943
+hgt:191cm ecl:hzl hcl:z byr:2018
+
+hcl:#c0946f
+pid:419930442 hgt:167cm
+byr:1969
+eyr:2020 ecl:brn
+
+pid:137802946
+eyr:2020 byr:1947 ecl:grn hgt:192cm iyr:2016 hcl:#888785
+
+ecl:#f66cce eyr:1958 iyr:1954
+pid:833131572
+hcl:z
+cid:212
+hgt:109 byr:1924
+
+hgt:179cm ecl:gry pid:065881341 byr:1985
+hcl:#fffffd cid:204 eyr:2026
+
+hgt:167cm
+iyr:2017 pid:898571403 byr:1929
+ecl:blu hcl:#d506d0 eyr:2028 cid:100
+
+byr:1991 pid:2795214253 iyr:2011
+cid:152 eyr:2028
+hgt:170cm hcl:#a45065 ecl:lzr
+
+hgt:188cm eyr:2030 iyr:2010
+pid:297292695 byr:1955 hcl:#fffffd
+ecl:blu
+
+hgt:170cm eyr:2029 pid:913242036 byr:1993 cid:89 hcl:#888785
+iyr:2010
+ecl:blu
+
+iyr:2028 eyr:2025 hgt:150in ecl:grn
+byr:1995
+pid:974802728
+hcl:#cfa07d
+
+eyr:2021 byr:1989
+hcl:#18171d ecl:blu hgt:168cm
+pid:626530259
+iyr:2020
+
+hcl:#6b5442 hgt:158cm pid:798732187 byr:1922 eyr:2020 iyr:2011 ecl:gry
+
+hcl:#341e13 pid:092679330 byr:1997 ecl:oth hgt:159cm iyr:2010 eyr:2026
+
+hgt:185cm
+iyr:2020 byr:1947
+pid:105846744 ecl:gry cid:134 eyr:2027
+
+pid:252016128 hcl:9016ff cid:158 hgt:161 ecl:gry
+byr:1952 eyr:1955 iyr:2018
+
+iyr:2020 hgt:154in byr:1958
+eyr:2029 ecl:#2feb89 pid:99780178
+
+hcl:z
+eyr:2001 ecl:gmt
+byr:2022 hgt:73in iyr:2029
+pid:388744230
+
+hgt:186cm
+byr:1939 pid:622948608 ecl:oth eyr:2030
+hcl:#c0946f
+
+cid:272
+eyr:2025 byr:1979 ecl:brn hgt:180cm pid:456545466
+hcl:#fffffd iyr:2012
+
+pid:946657041 byr:1999
+iyr:2014 hcl:#ceb3a1 hgt:150cm
+ecl:grn
+
+byr:1957 pid:177cm ecl:blu eyr:2020 hcl:#cfa07d
+iyr:2010 hgt:183cm
+
+pid:161cm eyr:2025 hcl:#b6652a
+cid:213
+ecl:xry
+hgt:150cm
+iyr:2024 byr:2012
+
+hcl:ea1960
+ecl:grn
+pid:#7127b2 iyr:2012 eyr:2011 hgt:150
+
+pid:178699291
+hgt:66in eyr:2027
+byr:1985 iyr:2014 ecl:amb
+
+iyr:2017 ecl:blu
+eyr:2027 hgt:191cm byr:1990 hcl:#b6652a pid:074411798
+
+pid:528782860
+hgt:181cm hcl:#c0946f byr:1965 iyr:2012 ecl:grn eyr:2020
+
+pid:#ba10da hgt:176in byr:2006
+ecl:grt
+iyr:2030 eyr:1949 hcl:d3ca76
+
+hgt:66cm ecl:#898478 hcl:#e9f7a5 eyr:2030 iyr:2022
+byr:2025
+pid:159cm
+
+byr:1994 hcl:#ceb3a1
+pid:028071950 eyr:2022 ecl:gmt hgt:151in iyr:2016
+
+byr:2001 iyr:2011
+ecl:brn
+pid:487702556 hcl:#602927
+hgt:167cm eyr:2026