summaryrefslogtreecommitdiff
path: root/day4
diff options
context:
space:
mode:
authorCody Hiar <cody@hiar.ca>2021-01-25 12:34:50 -0700
committerCody Hiar <cody@hiar.ca>2021-01-25 12:34:50 -0700
commit34f71edd66e22b7d1e1b262d92d80e1bf335aa57 (patch)
treeab37eb9345f859b1de50aba7869ea39e35b700a1 /day4
Initial commit
Diffstat (limited to 'day4')
-rw-r--r--day4/day4.py104
-rw-r--r--day4/input1121
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