diff options
author | Cody Hiar <cody@hiar.ca> | 2021-01-25 12:34:50 -0700 |
---|---|---|
committer | Cody Hiar <cody@hiar.ca> | 2021-01-25 12:34:50 -0700 |
commit | 34f71edd66e22b7d1e1b262d92d80e1bf335aa57 (patch) | |
tree | ab37eb9345f859b1de50aba7869ea39e35b700a1 /day4 |
Initial commit
Diffstat (limited to 'day4')
-rw-r--r-- | day4/day4.py | 104 | ||||
-rw-r--r-- | day4/input | 1121 |
2 files changed, 1225 insertions, 0 deletions
diff --git a/day4/day4.py b/day4/day4.py new file mode 100644 index 0000000..f64356c --- /dev/null +++ b/day4/day4.py @@ -0,0 +1,104 @@ +"""Day 4 code.""" +import re +from itertools import chain, groupby + +REQUIRED_FIELDS = set(["byr", "ecl", "eyr", "hcl", "hgt", "iyr", "pid"]) +EYE_COLORS = ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"] +HCL_PATTERN = r"^#([a-fA-F0-9]{6})$" +PID_PATTERN = "^([0-9]{9})$" + + +def passport_str_to_list(passport_str): + """Convert string of passport data into list of key, values. + + The reqason we use tuple is so that when we eventually get a full list that + presents all of key values of passport we can convert it into a dict easier. + """ + pairs = passport_str.split(" ") + return [tuple(x.split(":")) for x in pairs] + + +def passport_parser(itr): + """Parse passport data into individual passports. + + Groupby allows us to generate a new group every time we encounter an empty + line which signifies the boundary of each passport's data. + """ + for k, groups in groupby(data, lambda x: x == ""): + if k is False: + yield chain.from_iterable(passport_str_to_list(x) for x in groups) + + +def passport_has_required_fields(passport): + """Check if passport is valid.""" + return REQUIRED_FIELDS.issubset(set(passport.keys())) + + +data = map(str.strip, open("input")) +passports = [dict(x) for x in passport_parser(data)] + +print("Part 1:", sum(map(passport_has_required_fields, passports))) + + +def byr_is_valid(passport): + """Check birthyear is valid.""" + return 1920 <= int(passport["byr"]) <= 2002 + + +def iyr_is_valid(passport): + """Check issue year is valid.""" + return 2010 <= int(passport["iyr"]) <= 2020 + + +def eyr_is_valid(passport): + """Check expiration year is valid.""" + return 2020 <= int(passport["eyr"]) <= 2030 + + +def hgt_is_valid(passport): + """Check the hieght is valid.""" + hgt = passport["hgt"] + if "cm" in hgt: + val = int(hgt[: hgt.find("cm")]) + if 150 <= val <= 193: + return True + elif "in" in hgt: + val = int(hgt[: hgt.find("in")]) + if 59 <= val <= 76: + return True + return False + + +def hcl_is_valid(passport): + """Check hair color is valid.""" + return re.match(HCL_PATTERN, passport["hcl"]) + + +def ecl_is_valid(passport): + """Check if eye color is valid.""" + return passport["ecl"] in EYE_COLORS + + +def pid_is_valid(passport): + """Check passport id is valid.""" + return re.match(PID_PATTERN, passport["pid"]) + + +VALIDATION_TESTS = [ + byr_is_valid, + iyr_is_valid, + eyr_is_valid, + hgt_is_valid, + hcl_is_valid, + ecl_is_valid, + pid_is_valid, +] + + +def passport_is_valid(passport): + """Check if a passport is valid.""" + return all(func(passport) for func in VALIDATION_TESTS) + + +passports_with_required_fields = filter(passport_has_required_fields, passports) +print("Answer 2", sum(map(passport_is_valid, passports_with_required_fields))) diff --git a/day4/input b/day4/input new file mode 100644 index 0000000..127dae0 --- /dev/null +++ b/day4/input @@ -0,0 +1,1121 @@ +eyr:2024 pid:662406624 hcl:#cfa07d byr:1947 iyr:2015 ecl:amb hgt:150cm + +iyr:2013 byr:1997 hgt:182cm hcl:#ceb3a1 +eyr:2027 +ecl:gry cid:102 pid:018128535 + +hgt:61in iyr:2014 pid:916315544 hcl:#733820 ecl:oth + +hcl:#a97842 +eyr:2026 byr:1980 ecl:grn pid:726519569 hgt:184cm cid:132 iyr:2011 + +ecl:grn hcl:#6b5442 pid:619743219 cid:69 hgt:176cm eyr:2027 iyr:2012 +byr:1980 + +ecl:brn byr:1969 iyr:2014 +hgt:164cm eyr:2020 pid:982796633 hcl:#602927 + +ecl:gmt +iyr:1987 eyr:2039 pid:15115163 byr:2006 +hcl:bfab0d + +cid:117 +hcl:#efcc98 +iyr:2010 pid:322719183 +hgt:176cm +eyr:2020 +byr:1957 +ecl:brn + +byr:1954 hgt:178cm hcl:#38f7fd pid:838813262 ecl:blu +eyr:2029 iyr:2019 + +eyr:2023 ecl:amb iyr:2020 byr:1927 pid:242570886 hcl:#18171d hgt:192cm + +iyr:1990 cid:295 hgt:131 pid:187cm byr:2014 +ecl:xry hcl:z +eyr:1928 + +ecl:hzl +byr:1953 +eyr:2023 hcl:#866857 +hgt:181cm iyr:2010 pid:568185567 + +byr:2030 hcl:#fffffd ecl:#a4a596 hgt:168cm +iyr:1936 eyr:2020 cid:296 pid:168786676 + +byr:2030 iyr:2026 eyr:1974 hcl:7fcaa5 ecl:utc +pid:190cm +hgt:67cm + +byr:2023 eyr:2037 hgt:59cm +ecl:lzr hcl:z iyr:2026 pid:#ea9083 + +byr:2003 hcl:z hgt:91 iyr:1990 eyr:2024 ecl:#123d73 +pid:48494230 + +byr:2022 eyr:2020 iyr:2030 ecl:gmt +hgt:191cm pid:3509331253 hcl:#888785 + +iyr:1994 +ecl:#c3d564 byr:2009 +hgt:162cm hcl:336498 pid:#e99d09 +cid:288 +eyr:1921 + +byr:1924 cid:290 iyr:2010 ecl:amb eyr:2020 +hgt:156cm hcl:#7d3b0c pid:795497164 + +cid:301 iyr:2017 hgt:67cm +hcl:#888785 ecl:#0405b9 byr:1964 pid:707857518 eyr:1976 + +ecl:gry pid:474303066 +iyr:2011 hcl:#18171d hgt:165cm byr:1921 eyr:2024 + +hcl:#6b5442 ecl:amb iyr:2020 hgt:191cm +byr:1949 cid:301 +pid:075846582 eyr:2029 + +hcl:#a97842 cid:186 iyr:2014 +ecl:gry +hgt:191cm eyr:2023 pid:645548969 +byr:1956 + +pid:154cm hcl:z ecl:gmt iyr:1989 hgt:69in cid:53 byr:2010 + +hgt:72cm byr:2023 +eyr:2034 hcl:z ecl:#f5249e iyr:1997 pid:#79af7a + +eyr:2038 byr:2015 +hgt:70cm ecl:grt hcl:9d58a1 iyr:1926 pid:6290928420 + +pid:620857794 eyr:2022 +byr:1950 +hgt:159cm +hcl:#ceb3a1 ecl:amb iyr:2015 + +eyr:1954 ecl:#ab2ce4 pid:#14eedd +iyr:2009 +hcl:29e484 +byr:2022 hgt:73cm + +hgt:59cm byr:2026 cid:245 iyr:2020 +eyr:2029 pid:073943129 ecl:hzl +hcl:#b6652a + +iyr:2014 byr:2015 hcl:#a97842 eyr:2029 +pid:#132098 +hgt:150 ecl:oth + +hgt:151in ecl:#967d49 eyr:2026 hcl:#18171d +pid:384230726 byr:1934 +iyr:2018 + +iyr:2020 eyr:2021 byr:1937 pid:735047371 cid:159 ecl:blu hgt:177cm hcl:#22b774 + +ecl:brn hcl:#6b5442 pid:117807698 cid:105 iyr:2016 byr:1977 hgt:183cm + +ecl:hzl hcl:#6b5442 byr:1933 +iyr:2019 pid:348486702 +eyr:2020 hgt:193cm + +byr:1928 +ecl:gry +eyr:2028 hcl:#fffffd pid:571149069 +iyr:2012 hgt:175cm + +pid:359108298 +eyr:2027 hgt:158cm ecl:amb iyr:2016 +hcl:#602927 + +iyr:2027 byr:2015 +hgt:191in pid:102033301 ecl:xry +eyr:2031 hcl:#602927 + +ecl:oth cid:163 hcl:z iyr:2014 +byr:1944 hgt:173cm +eyr:2027 pid:#0524c1 + +ecl:brn +byr:2030 hgt:71cm eyr:1931 cid:165 iyr:2010 hcl:#cfa07d +pid:509642098 + +hgt:166 iyr:2020 cid:308 +eyr:2022 pid:950463527 +byr:2017 +hcl:z + +ecl:amb +eyr:2023 byr:1924 +pid:901038027 hgt:70in +iyr:2010 hcl:z + +byr:1972 +iyr:2013 +hcl:d669ad hgt:64cm cid:247 ecl:#19aa26 eyr:2023 + +hgt:71 hcl:#fffffd +byr:1976 cid:108 eyr:2038 +ecl:grt iyr:2018 pid:190cm + +iyr:2017 +byr:1963 ecl:grn hgt:175cm +pid:160915270 eyr:2028 hcl:#cfa07d + +pid:569740130 hgt:171cm hcl:#733820 +ecl:gry eyr:2024 iyr:2020 byr:1973 + +byr:1937 +iyr:2016 ecl:gry hgt:181cm pid:521705827 hcl:#b6652a eyr:2027 cid:295 + +hgt:156cm ecl:blu iyr:2019 hcl:#866857 +pid:662418718 byr:2000 eyr:2024 + +byr:1971 pid:693616099 +hcl:#efcc98 +hgt:175cm iyr:2016 ecl:gry +eyr:2023 + +iyr:2013 +eyr:2024 +ecl:gry +pid:414295491 byr:1986 +hgt:188cm hcl:#b6652a + +eyr:2022 byr:1975 iyr:2020 +ecl:grn cid:68 hcl:#a97842 +hgt:151cm pid:229803943 + +cid:258 iyr:2012 +ecl:hzl +byr:2001 +eyr:2021 +hcl:#866857 pid:990590217 hgt:172cm + +cid:339 byr:1957 hcl:#866857 pid:343480061 eyr:2039 +hgt:191cm +iyr:2021 +ecl:utc + +cid:281 hcl:z ecl:blu +byr:2020 pid:132694306 eyr:2020 iyr:1953 + +hcl:#602927 +byr:1933 eyr:2028 +hgt:165cm ecl:gry iyr:2018 pid:658484617 + +ecl:oth +hgt:188cm cid:110 pid:056975690 iyr:2016 byr:1950 eyr:2023 hcl:#cfa07d + +cid:342 hcl:#fffffd eyr:2024 +pid:153555359 byr:1974 +ecl:gry hgt:191cm iyr:2020 + +byr:2019 ecl:#160ed3 eyr:1999 hcl:z +cid:146 pid:195693972 hgt:159cm + +iyr:2015 eyr:2030 hgt:191cm byr:1979 +ecl:#ec4873 pid:994113786 hcl:#cfa07d + +pid:552331609 +ecl:grn +hgt:171cm eyr:2022 hcl:#b6652a +iyr:2020 byr:1931 + +hgt:177cm iyr:2010 pid:934058099 +eyr:2020 +ecl:blu +byr:1967 +cid:112 hcl:#7d3b0c + +iyr:2028 +hgt:138 +cid:180 hcl:z +eyr:2022 pid:3286566621 byr:2002 + +eyr:2020 +iyr:2019 +hcl:#a97842 pid:149148750 ecl:brn hgt:159cm +byr:1981 cid:339 + +cid:344 +eyr:2021 byr:1968 pid:777786047 +ecl:grn hgt:192cm hcl:#888785 +iyr:2015 + +hgt:173cm +eyr:2030 +hcl:#733820 pid:610226642 byr:1954 cid:80 +iyr:2013 ecl:blu + +byr:1999 eyr:2023 +ecl:amb pid:912145128 +hgt:181cm +iyr:2015 hcl:#a97842 + +eyr:2027 hgt:188cm +pid:080715145 hcl:#341e13 iyr:2013 +ecl:oth +byr:1965 + +hgt:170cm byr:1950 iyr:2013 +pid:010541784 +eyr:2027 ecl:zzz +hcl:a3bae8 + +hgt:190cm eyr:2024 ecl:#6dcedc pid:909319684 +iyr:2011 byr:1959 hcl:z cid:182 + +eyr:2028 +iyr:2016 hcl:#623a2f pid:208417572 byr:1929 cid:137 ecl:hzl +hgt:167cm + +hcl:#6b5442 +ecl:grn +byr:1938 +eyr:2023 cid:307 +hgt:59in iyr:2014 pid:205268145 + +pid:047489285 eyr:2026 +hcl:#b6652a byr:1920 +iyr:2015 +hgt:183cm ecl:gry + +ecl:blu hcl:#508e8b iyr:2016 eyr:1954 hgt:151cm pid:086752750 byr:1920 + +iyr:2011 byr:1981 hgt:186cm +cid:117 hcl:#6b5442 ecl:amb +pid:756830713 eyr:2026 + +eyr:2037 pid:364464758 hcl:z ecl:grn +hgt:112 iyr:2013 byr:2022 + +ecl:hzl +cid:65 pid:679487194 +byr:1986 hgt:169cm hcl:#cfa07d eyr:2025 iyr:2013 + +cid:192 +byr:1921 pid:#5fe831 ecl:#fbb2b9 hgt:62cm eyr:1971 iyr:2024 +hcl:z + +hcl:#cfa07d eyr:2026 +hgt:74in +iyr:2019 +ecl:xry +pid:622690982 byr:1982 + +eyr:2026 pid:523515724 iyr:2013 byr:1973 hgt:167cm +ecl:grn hcl:#866857 + +byr:2009 +eyr:1985 pid:484497014 ecl:#0bfcf2 iyr:1992 cid:131 hcl:39d6b0 hgt:177in + +eyr:2020 iyr:2016 ecl:brn hcl:#ceb3a1 byr:1966 pid:696621560 cid:62 +hgt:59in + +hgt:166cm hcl:#7d3b0c +iyr:2016 +ecl:brn pid:190cm +eyr:2020 +byr:2001 + +eyr:2021 +iyr:2012 hcl:#6b5442 +ecl:amb hgt:169cm +pid:969150085 +byr:1925 + +ecl:brn hgt:175cm byr:1992 iyr:2016 pid:415209726 eyr:2027 +cid:72 hcl:#866857 + +iyr:2017 +hcl:#733820 byr:1938 eyr:2020 pid:274486958 hgt:163cm + +hcl:4f5dd1 cid:336 ecl:grn iyr:1931 pid:6212280197 +byr:2016 eyr:2037 +hgt:187in + +iyr:2017 byr:1940 eyr:2025 pid:115098205 hgt:151cm +ecl:grn +cid:122 +hcl:#6b5442 + +hcl:#efcc98 +iyr:2020 pid:709548547 hgt:179cm +eyr:2030 ecl:gry byr:1975 + +cid:217 hcl:#888785 eyr:2029 +ecl:hzl iyr:2013 pid:160053490 +hgt:166cm byr:1992 + +eyr:2024 cid:188 iyr:2016 hcl:ff3a59 ecl:xry pid:296357512 byr:2026 + +hgt:154cm iyr:2010 +ecl:blu pid:717041634 byr:1928 cid:123 +eyr:2027 +hcl:#a97842 + +pid:391011205 ecl:hzl hgt:191cm iyr:2016 eyr:2028 cid:281 byr:1934 + +byr:1937 hgt:65in +pid:667975382 ecl:gry cid:270 eyr:2024 +iyr:2012 + +hgt:179cm pid:065528723 +hcl:#888785 byr:1937 eyr:2028 +iyr:2013 ecl:hzl + +iyr:2027 cid:261 eyr:2037 ecl:#ced7d5 pid:157cm +hcl:3a80c1 byr:2029 hgt:187in + +eyr:2028 +hgt:157cm hcl:#733820 +iyr:2012 ecl:blu byr:1952 pid:915063263 cid:335 + +eyr:2023 hcl:#efcc98 pid:490625944 byr:1961 ecl:grn hgt:155cm iyr:2018 + +cid:247 pid:2807544665 eyr:2021 +ecl:oth +hgt:191cm +byr:1928 +iyr:2013 hcl:#623a2f + +eyr:2015 +byr:2021 +hcl:40d2fc hgt:69cm pid:159cm ecl:gmt + +hgt:175cm eyr:1992 cid:328 pid:263110997 ecl:#e53989 byr:2014 hcl:#a97842 iyr:2026 + +pid:491396731 eyr:2027 hgt:172cm hcl:#623a2f cid:92 iyr:2017 byr:1983 ecl:grn + +hcl:#fffffd +iyr:2018 byr:1983 pid:714591144 ecl:grn eyr:2021 +hgt:160cm + +eyr:2027 +hgt:63in ecl:blu byr:1987 pid:397963077 iyr:2018 hcl:#ceb3a1 + +eyr:2027 +hgt:184cm +hcl:#6b5442 iyr:2012 byr:1984 ecl:blu pid:196287205 + +iyr:1998 +ecl:hzl +pid:7872103596 byr:1991 +cid:275 eyr:2039 +hgt:174cm hcl:0d2ad6 + +iyr:2010 hcl:#efcc98 +byr:1992 hgt:65cm eyr:2038 pid:383236012 cid:68 ecl:lzr + +hgt:190in cid:127 +byr:1947 pid:515728209 hcl:#733820 iyr:2014 ecl:amb eyr:2020 + +iyr:2017 eyr:2028 +hcl:#623a2f +byr:1964 ecl:grn pid:198467794 hgt:169cm + +ecl:utc +hgt:59cm byr:2007 iyr:2030 +hcl:7ac4db eyr:2038 pid:#7206c6 + +iyr:2010 +hcl:z eyr:2021 ecl:brn +hgt:173 cid:86 +pid:194240791 byr:1975 + +pid:9347286034 +hgt:63cm +iyr:1992 eyr:2034 hcl:66031b ecl:grt byr:1929 + +pid:593398904 byr:1939 iyr:2019 hcl:#b6652a ecl:gry eyr:2023 +hgt:70cm + +byr:1991 +iyr:2019 hgt:164cm pid:282852411 cid:340 ecl:amb +hcl:#341e13 eyr:2027 + +eyr:2020 +iyr:2014 ecl:grn hcl:#866857 hgt:158cm +byr:1931 pid:321748597 + +cid:98 byr:2023 iyr:2019 pid:#48f79f +hcl:73c882 eyr:1973 hgt:151in +ecl:utc + +iyr:2023 +hcl:#18171d +pid:52221892 eyr:2039 +byr:2008 hgt:72cm ecl:#db8d14 + +iyr:1966 cid:274 +eyr:2034 pid:12256322 +byr:2006 ecl:dne +hcl:985c2d + +hcl:#fd033b +eyr:2026 ecl:blu +iyr:2016 +byr:1953 hgt:157cm +pid:502619036 + +byr:2015 pid:159cm iyr:2025 +hgt:158cm eyr:1943 hcl:z ecl:grn + +ecl:blu iyr:2016 +pid:842400950 +hcl:#733820 +cid:266 +eyr:2027 byr:1931 +hgt:161cm + +iyr:2017 hgt:190cm byr:1994 pid:706570967 +ecl:hzl hcl:#18171d +cid:180 + +cid:197 pid:204952666 ecl:amb +hgt:70in iyr:2016 byr:1936 hcl:#98cbe3 eyr:2025 + +pid:555499128 +byr:1971 hgt:71in +cid:83 ecl:blu +hcl:#cfa07d eyr:2027 + +ecl:hzl iyr:2014 +pid:30428184 cid:237 +hgt:171cm byr:1942 hcl:#888785 eyr:1986 + +eyr:2025 +pid:579385370 hgt:193cm +hcl:#c0946f byr:1979 iyr:2016 +ecl:amb cid:284 + +eyr:2029 byr:1946 pid:278271295 +ecl:grn +hcl:#cfa07d cid:271 +hgt:172cm +iyr:2020 + +pid:731752614 eyr:2020 byr:1983 +cid:248 ecl:oth hgt:179cm +iyr:2017 hcl:#fffffd + +hcl:z +cid:203 eyr:2032 ecl:#3f9d3d hgt:65cm pid:4042846885 byr:2019 +iyr:1946 + +hgt:171cm ecl:gry eyr:2027 +iyr:2013 +hcl:#7d3b0c pid:92288579 +byr:1955 + +ecl:brn hgt:164cm byr:1969 hcl:#cbf9c9 pid:022724981 eyr:2030 iyr:2013 cid:244 + +hgt:162cm byr:1974 iyr:2015 pid:927525094 hcl:#3d3011 ecl:blu +eyr:2023 + +hgt:157cm +eyr:2020 +pid:221286943 hcl:#fffffd ecl:amb iyr:2018 byr:1945 + +iyr:2019 +eyr:2025 byr:1997 pid:341544323 hgt:174cm cid:113 +ecl:hzl + +pid:138492032 hcl:e35302 ecl:#caaede +eyr:1931 +byr:2001 hgt:156 iyr:1998 + +pid:912182030 cid:189 hgt:162 hcl:#277b39 +iyr:2013 eyr:2023 byr:2023 ecl:blu + +eyr:2027 hcl:#fffffd +ecl:brn +cid:304 iyr:2016 byr:1969 +pid:866607511 hgt:192cm + +hgt:64in +ecl:amb +byr:1958 +pid:720439412 +iyr:2015 eyr:2022 hcl:#ceb3a1 + +eyr:2024 hgt:159cm +pid:187867283 iyr:2016 +ecl:oth hcl:#fffffd +byr:1988 + +ecl:#910bf2 byr:1969 iyr:2011 hcl:z eyr:2024 pid:579502502 +cid:103 hgt:174cm + +pid:718692455 +eyr:2028 +iyr:2016 +hcl:#602927 +ecl:blu byr:1954 +cid:251 hgt:182cm + +eyr:2021 hcl:#341e13 ecl:amb +byr:1933 hgt:179cm iyr:2011 pid:083172316 + +iyr:1998 hcl:z eyr:1944 +byr:2006 pid:453368738 +hgt:160 ecl:#9da5f1 cid:261 + +hcl:#7d3b0c +iyr:2018 +hgt:164cm eyr:2020 byr:1940 ecl:blu + +pid:993701676 eyr:2028 ecl:gry +byr:1951 hcl:#888785 cid:116 +iyr:2020 +hgt:192cm + +hcl:z eyr:2033 +ecl:lzr iyr:2029 cid:326 hgt:68cm byr:2026 +pid:96742419 + +hcl:#a97842 ecl:brn +byr:1920 +hgt:173cm iyr:2015 +eyr:2024 pid:176967666 + +byr:1930 eyr:2025 pid:792694131 +hgt:179cm ecl:brn +hcl:#a97842 +iyr:2015 + +hgt:167cm byr:1960 eyr:2022 hcl:#efcc98 +cid:87 ecl:blu iyr:2012 +pid:431515059 + +hcl:#cfa07d +eyr:2023 +hgt:188cm ecl:grn pid:081575957 byr:1938 iyr:2012 + +iyr:2010 byr:1973 +cid:108 +eyr:2026 +pid:880191154 hcl:#888785 hgt:181cm +ecl:brn + +eyr:2021 iyr:2010 byr:1942 hcl:#7d3b0c ecl:hzl pid:886241926 hgt:171cm + +cid:53 byr:1993 +pid:150cm eyr:2035 +hcl:#888785 hgt:153cm ecl:#128262 iyr:2021 + +ecl:gry +pid:555911148 +hcl:#733820 eyr:2022 hgt:154cm iyr:2012 +byr:1935 cid:338 + +hcl:#b6652a +pid:833873846 iyr:2012 +hgt:167cm eyr:2023 byr:1984 + +eyr:2024 +ecl:blu byr:1955 +hcl:#b6652a pid:517975316 iyr:2010 hgt:166cm + +pid:133785752 +ecl:blu +eyr:2024 +byr:1973 +iyr:2019 hcl:#fffffd +cid:236 hgt:173cm + +cid:222 +byr:2013 hcl:z eyr:2036 pid:7443967478 ecl:brn +iyr:2030 hgt:62cm + +hgt:193cm cid:259 +hcl:#18171d +ecl:grn +byr:1995 pid:727880050 eyr:2030 iyr:2010 + +hcl:#c0946f cid:275 eyr:1954 pid:772184635 ecl:#76add7 byr:2009 iyr:2018 hgt:151cm + +ecl:#52ed0f eyr:2033 hcl:#18171d pid:475397948 +byr:1946 iyr:2028 hgt:178cm + +iyr:2012 hgt:152cm +eyr:2027 byr:1923 ecl:brn +hcl:#18171d pid:513722888 cid:171 + +iyr:2029 +hgt:111 hcl:z ecl:#33e3bc eyr:1930 +byr:1934 pid:94036732 + +hgt:154cm eyr:2024 hcl:#6b5442 iyr:2017 +byr:1974 +ecl:amb pid:470968353 cid:345 + +hgt:184cm hcl:#617375 eyr:2028 +byr:1975 ecl:oth +iyr:2018 pid:735589126 + +cid:261 +hcl:#cfa07d pid:213013397 +hgt:187cm +ecl:gry iyr:2016 + +hcl:#623a2f +ecl:#34964b eyr:2009 pid:169cm byr:2028 hgt:169cm +iyr:2028 + +eyr:2029 iyr:2016 +byr:1985 +hgt:192cm hcl:#602927 cid:167 +ecl:blu pid:620818510 + +eyr:2029 +byr:1968 +ecl:blu +hgt:183cm iyr:2011 pid:952376140 hcl:#efcc98 + +iyr:2020 +byr:1981 pid:850136149 eyr:2028 hgt:159cm hcl:#7d3b0c +ecl:brn + +ecl:brn pid:480452858 hgt:65in cid:340 eyr:2022 +byr:1946 +hcl:#602927 iyr:2015 + +hgt:172 hcl:z eyr:1958 iyr:1941 byr:2019 pid:389995951 ecl:dne + +byr:2025 hcl:4c8dcd +hgt:177in +ecl:#55d635 +cid:197 pid:91192572 +iyr:1921 eyr:2038 + +iyr:2027 pid:154cm +hgt:185in byr:2012 +eyr:2036 hcl:efd47d +ecl:#64f98d +cid:86 + +eyr:2029 pid:837224515 ecl:grn cid:231 hcl:#733820 iyr:2019 +hgt:159cm +byr:1977 + +pid:974518338 byr:1964 hcl:#cfa07d ecl:grn eyr:2030 +hgt:61in +iyr:2019 + +iyr:2019 +hgt:192in cid:94 +eyr:1922 +byr:1925 hcl:z ecl:utc pid:#081266 + +eyr:2027 iyr:2019 cid:328 byr:1961 hcl:#6b5442 ecl:blu hgt:177cm pid:235426720 + +byr:1959 +eyr:2025 +pid:890034625 ecl:oth +hgt:62in cid:348 hcl:#733820 + +hgt:161cm iyr:2018 pid:916160791 ecl:grn +byr:1951 hcl:#44d03a eyr:2025 + +hgt:158cm byr:1942 iyr:2012 hcl:#602927 +eyr:2026 ecl:gry pid:651231060 + +ecl:hzl cid:340 pid:086942161 byr:1986 hcl:#a97842 iyr:2018 +eyr:2028 +hgt:181cm + +ecl:blu +pid:278922687 cid:238 iyr:2018 hgt:153cm eyr:2027 +byr:1965 +hcl:#733820 + +eyr:2023 cid:208 hgt:178cm hcl:#341e13 byr:1937 pid:290981079 iyr:2010 ecl:grn + +hcl:#888785 +ecl:amb +byr:1943 pid:559804716 eyr:2026 hgt:166cm +iyr:2019 + +pid:947831563 +ecl:gry +byr:1960 hcl:#341e13 +iyr:2016 hgt:173cm eyr:2029 + +ecl:blu iyr:2016 pid:724632073 hcl:#623a2f +eyr:2028 hgt:192cm byr:1958 + +byr:2021 +eyr:2016 hcl:z iyr:1988 pid:65353943 +ecl:#bb553b +hgt:125 + +hcl:#efcc98 byr:1963 pid:290433211 eyr:2023 ecl:hzl +hgt:172cm iyr:2013 + +iyr:2015 ecl:brn +byr:2023 hcl:#18171d +pid:325330679 +hgt:190in eyr:2023 + +pid:745674970 hgt:160cm eyr:2021 byr:1925 ecl:gry hcl:#341e13 iyr:2015 +cid:297 + +eyr:2021 +pid:596411633 +byr:1947 ecl:blu cid:191 hcl:#341e13 hgt:168cm iyr:2019 + +eyr:2030 pid:#902a6b iyr:1997 hcl:11f396 hgt:188cm byr:2025 +ecl:dne + +eyr:2025 +byr:2006 +hcl:#888785 ecl:hzl hgt:187cm +iyr:2012 pid:017702828 + +byr:1988 hcl:#18171d iyr:2019 +pid:110591871 +ecl:hzl +hgt:160cm +eyr:2029 + +ecl:brn +hcl:#c0946f iyr:2030 pid:264404022 byr:1984 hgt:59cm eyr:2040 + +pid:5973803069 +hcl:#cfa07d ecl:grt +hgt:153cm eyr:2039 byr:1970 +iyr:2025 + +hcl:#fffffd +iyr:2022 byr:2026 +hgt:180 pid:82035145 eyr:2034 cid:118 ecl:utc + +hgt:186cm eyr:2026 +ecl:brn +iyr:2013 hcl:#8f4c9b pid:010260339 byr:1948 + +ecl:amb hcl:#18171d iyr:2020 pid:259501214 byr:1978 hgt:193cm +cid:263 eyr:2022 + +hgt:161cm iyr:2015 byr:2014 eyr:2003 +pid:708958872 ecl:grt +hcl:f4a430 + +hgt:170cm eyr:2021 pid:911638274 cid:110 byr:1963 ecl:blu +iyr:2015 hcl:1eda64 + +ecl:oth byr:1949 hgt:174cm hcl:#18171d eyr:2022 iyr:2019 +pid:305857230 + +ecl:gry hcl:#a97842 pid:971971076 byr:2002 iyr:2019 +hgt:188cm +eyr:2022 cid:238 + +eyr:2027 pid:221315043 iyr:2010 hgt:159cm ecl:blu byr:1998 hcl:#6b5442 + +hcl:#888785 +byr:1926 eyr:2022 pid:433807814 ecl:grn +iyr:2010 +hgt:181cm + +ecl:grn hgt:164cm byr:1951 hcl:#18171d cid:75 pid:845508281 eyr:2021 iyr:2017 + +pid:#f59bc7 +eyr:1987 hgt:191cm hcl:z byr:2024 +iyr:1985 + +hcl:#623a2f pid:497429747 +hgt:189cm +byr:1987 +eyr:2027 iyr:2012 cid:95 ecl:hzl + +byr:2000 +hgt:165cm +iyr:2017 pid:519443292 eyr:2029 cid:240 hcl:#a97842 +ecl:blu + +cid:67 pid:038299774 +eyr:2023 iyr:2015 hgt:179cm byr:1941 hcl:#18171d ecl:amb + +byr:2000 +eyr:2025 ecl:oth iyr:2017 +pid:334154607 +hcl:#fffffd hgt:173cm + +hcl:#888785 ecl:amb +cid:131 iyr:2018 byr:1996 eyr:2026 +hgt:180cm pid:709543988 + +iyr:1988 +pid:263277424 +hcl:ee8912 byr:1942 ecl:gry eyr:2040 hgt:161cm + +eyr:2020 byr:1966 iyr:2020 hgt:169cm pid:611918000 +hcl:#7d3b0c ecl:hzl + +hgt:164cm ecl:brn +iyr:2015 pid:192054454 hcl:#6b5442 byr:1987 eyr:2022 + +byr:1952 +ecl:zzz +pid:215953654 +eyr:2021 hcl:#efcc98 hgt:153cm iyr:2026 + +hgt:167cm +hcl:#b6652a pid:847614726 +eyr:2022 ecl:gry byr:1990 iyr:2015 + +hgt:185cm ecl:oth iyr:2012 +byr:1933 +cid:250 +pid:038674023 +hcl:#c0946f + +pid:613273980 hcl:#a97842 +ecl:oth byr:1924 hgt:179cm +eyr:2027 iyr:1950 + +hcl:#cfa07d byr:2018 hgt:190cm pid:64530329 +ecl:brn +iyr:2024 + +hcl:z hgt:70cm pid:18807747 +cid:284 byr:2023 +eyr:2035 ecl:#4a1501 +iyr:1954 + +iyr:2016 hgt:152cm pid:886247173 byr:1940 hcl:#c0946f eyr:2027 ecl:oth cid:150 + +hgt:152cm hcl:#48cfdf eyr:2025 cid:277 +ecl:oth pid:246230621 byr:1932 +iyr:2020 + +ecl:amb pid:871180042 +cid:117 hcl:#602927 iyr:2011 hgt:152cm +eyr:2030 byr:1999 + +eyr:2024 ecl:hzl hgt:171cm +byr:1934 pid:356408125 iyr:2019 hcl:#b6652a +cid:169 + +eyr:2023 +hcl:#7d3b0c +byr:1934 hgt:67in ecl:oth pid:191785527 +cid:117 iyr:2016 + +iyr:2029 +hcl:#602927 eyr:2022 byr:1931 ecl:oth hgt:192cm +pid:231475143 + +ecl:grn iyr:2014 cid:250 hcl:#b6652a byr:1970 pid:675238417 hgt:162cm +eyr:2026 + +ecl:brn +hcl:#623a2f eyr:2021 pid:293293433 hgt:158 byr:1977 iyr:2019 + +ecl:oth hcl:#ceb3a1 pid:013111996 eyr:2023 hgt:180cm byr:1976 cid:224 + +hgt:61cm +eyr:2027 ecl:amb pid:181cm iyr:1932 +byr:1974 +hcl:#18171d + +byr:1968 hgt:167cm +hcl:#a97842 eyr:2022 iyr:2018 ecl:hzl pid:940968694 + +iyr:1943 +hgt:96 +cid:229 +hcl:z eyr:1990 byr:2007 pid:#25aa73 +ecl:#74592e + +hgt:182cm iyr:2018 ecl:hzl eyr:2029 byr:1946 pid:602345030 +hcl:#ceb3a1 + +pid:750306036 eyr:2020 hgt:181in ecl:xry +iyr:2011 hcl:z byr:1971 cid:71 + +pid:183825747 iyr:2019 hcl:#6b5442 +byr:1974 +hgt:180cm eyr:2028 +ecl:amb + +ecl:brn cid:200 pid:576495225 +byr:1924 +hcl:#efcc98 eyr:2022 iyr:2017 hgt:185cm + +iyr:2020 hgt:167cm byr:1965 ecl:brn hcl:#888785 +eyr:2028 pid:752062953 + +byr:2026 +hcl:z +eyr:2020 +ecl:#b4ec74 pid:187cm iyr:1974 +cid:326 hgt:150cm + +byr:1996 pid:507323629 +iyr:2015 cid:347 eyr:2026 hcl:#efcc98 +ecl:amb hgt:157cm + +byr:2017 pid:456780590 hcl:#888785 eyr:1966 ecl:amb iyr:2023 cid:187 hgt:62cm + +ecl:hzl iyr:2015 hcl:#6b5442 hgt:152cm eyr:2028 byr:1982 pid:003269467 + +iyr:2017 eyr:2026 +ecl:blu cid:70 hcl:#7d3b0c +byr:1966 pid:160330947 hgt:189cm + +iyr:2010 ecl:amb +hgt:164cm eyr:2029 byr:1963 +pid:596606374 hcl:#efcc98 + +hcl:#fffffd cid:277 pid:102326370 hgt:154cm eyr:2026 iyr:2012 byr:1968 +ecl:hzl + +ecl:oth pid:477189554 hcl:#6b5442 eyr:2022 byr:1948 hgt:74in cid:181 +iyr:2016 + +hgt:169cm hcl:#d7bc93 +cid:344 ecl:oth +pid:#09c55d iyr:2017 +eyr:2030 byr:1928 + +hcl:5d02ff ecl:#ca7901 iyr:1959 byr:2006 eyr:2022 +hgt:164in +pid:#d6cdfd + +ecl:amb pid:5739190196 eyr:2021 hgt:157in hcl:#efcc98 byr:2018 iyr:2028 + +byr:1995 ecl:hzl +iyr:2017 +hcl:#a97842 pid:917039291 eyr:2026 hgt:175cm + +iyr:2017 pid:756519868 +hcl:#623a2f +eyr:2028 +hgt:158cm +ecl:amb byr:1957 + +iyr:2012 +hgt:158cm +byr:2014 pid:973021666 hcl:f04766 eyr:2035 ecl:utc + +ecl:blu +byr:1989 eyr:2022 +pid:520765501 +cid:200 hgt:193cm hcl:#a97842 iyr:2011 + +byr:1959 +ecl:blu hcl:#733820 cid:284 hgt:162cm +eyr:2022 pid:751629408 iyr:2016 + +byr:1978 cid:301 +ecl:oth hgt:67cm hcl:#888785 +eyr:2040 iyr:2025 pid:26038514 + +iyr:2020 byr:1974 hgt:163cm ecl:blu hcl:#7d3b0c eyr:2028 cid:99 + +hcl:#a97842 +hgt:186cm +ecl:grn byr:1969 pid:460360492 iyr:2011 eyr:2028 + +byr:2009 +pid:489490924 eyr:2031 +hcl:cb5351 ecl:#083a25 hgt:164cm + +iyr:2019 +hcl:3463cc ecl:amb pid:4089063078 eyr:2022 hgt:150cm +byr:2007 + +eyr:2028 hcl:#ceb3a1 +hgt:191cm iyr:2019 pid:737842199 ecl:blu cid:268 byr:1925 + +pid:868397851 +hcl:#efcc98 ecl:grn iyr:2017 eyr:2021 byr:1943 +hgt:179cm + +hcl:#623a2f byr:1987 eyr:2023 iyr:2019 hgt:152cm +pid:473569020 +ecl:grn + +pid:953968630 +hgt:175cm +byr:1971 ecl:blu hcl:#623a2f iyr:2017 cid:336 eyr:2030 + +ecl:grt hgt:74cm byr:2022 eyr:2024 pid:39114027 +iyr:2026 hcl:4b5675 + +pid:#492988 +eyr:2032 hgt:63cm iyr:2006 +ecl:#817211 byr:2019 + +pid:800367032 hcl:#341e13 +ecl:#765111 iyr:2012 byr:2006 hgt:166cm cid:291 eyr:2027 + +eyr:2021 iyr:2012 pid:876581393 ecl:amb hcl:#866857 +hgt:64in byr:1993 + +iyr:2017 byr:1996 ecl:hzl pid:038990744 +eyr:2028 +hgt:177cm +hcl:#c0946f + +hcl:#4214a6 +eyr:2021 +iyr:2019 cid:72 byr:1939 +ecl:hzl pid:783071912 hgt:187cm + +eyr:2020 hgt:158cm +pid:274060737 cid:277 +iyr:2015 hcl:#bf9b5e byr:1950 ecl:brn + +byr:1921 hcl:#7d3b0c cid:329 hgt:155cm eyr:2030 pid:718399669 iyr:2011 ecl:brn + +cid:147 eyr:2021 hgt:167cm iyr:2010 ecl:grn byr:1975 hcl:#6b5442 +pid:285479783 + +hgt:187cm +byr:2004 eyr:2025 hcl:bb331b +pid:851189955 iyr:2016 +ecl:amb + +hcl:#94007d pid:361561551 byr:1927 eyr:2026 iyr:2020 +ecl:gry hgt:158cm + +byr:1993 pid:#24c4af iyr:2023 hgt:175cm eyr:2028 +hcl:z ecl:hzl cid:308 + +byr:1985 hcl:#c0946f eyr:2034 hgt:172cm +cid:300 iyr:2013 ecl:gry pid:389455676 + +eyr:2030 iyr:2017 byr:1956 hgt:178cm +pid:864401853 hcl:#6b5442 + +pid:836559549 +iyr:2011 +hgt:167cm +ecl:amb hcl:#c0946f +eyr:2026 byr:1981 + +pid:111085991 iyr:2011 +ecl:blu eyr:2026 cid:311 +byr:1920 hgt:182cm hcl:#602927 + +ecl:oth pid:284436132 +byr:1929 cid:121 +eyr:2027 +iyr:2010 +hgt:75in +hcl:#6b5442 + +byr:1987 +hcl:#7d3b0c iyr:2018 hgt:180cm +ecl:blu eyr:2029 pid:878348021 + +hgt:183cm cid:98 +byr:1953 hcl:#866857 eyr:2021 iyr:2012 pid:158898193 + +eyr:2030 pid:039638764 ecl:hzl hgt:190cm byr:1926 +cid:294 hcl:#b6652a iyr:2017 |