summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndinus <andinus@nand.sh>2020-12-05 14:02:49 +0530
committerAndinus <andinus@nand.sh>2020-12-05 14:02:49 +0530
commit0c092b17f715f7ebc551a89c24c08bdf5e8c7cc0 (patch)
tree76486c9ee3fd8d48189a55890c3897ce9d4d8d19
parenta79f9b867b99e7d7bb9407cc970341feff97cf19 (diff)
downloadaoc-0c092b17f715f7ebc551a89c24c08bdf5e8c7cc0.tar.gz
Add day-04 solution
-rw-r--r--2020/day-04/README.org211
-rwxr-xr-x2020/day-04/day-04.raku48
-rw-r--r--2020/day-04/input1023
3 files changed, 1282 insertions, 0 deletions
diff --git a/2020/day-04/README.org b/2020/day-04/README.org
new file mode 100644
index 0000000..5456971
--- /dev/null
+++ b/2020/day-04/README.org
@@ -0,0 +1,211 @@
+#+SETUPFILE: ~/.emacs.d/org-templates/level-3.org
+#+HTML_LINK_UP: ../../index.html#2020
+#+OPTIONS: toc:1
+#+EXPORT_FILE_NAME: index
+#+TITLE: Day 04 - Passport Processing
+
+* Puzzle
+- This puzzle is taken from: https://adventofcode.com/2020/day/4
+
+You arrive at the airport only to realize that you grabbed your North
+Pole Credentials instead of your passport. While these documents are
+extremely similar, North Pole Credentials aren't issued by a country and
+therefore aren't actually valid documentation for travel in most of the
+world.
+
+It seems like you're not the only one having problems, though; a very
+long line has formed for the automatic passport scanners, and the delay
+could upset your travel itinerary.
+
+Due to some questionable network security, you realize you might be able
+to solve both of these problems at the same time.
+
+The automatic passport scanners are slow because they're having trouble
+detecting which passports have all required fields. The expected fields
+are as follows:
+
+- =byr= (Birth Year)
+- =iyr= (Issue Year)
+- =eyr= (Expiration Year)
+- =hgt= (Height)
+- =hcl= (Hair Color)
+- =ecl= (Eye Color)
+- =pid= (Passport ID)
+- =cid= (Country ID)
+
+Passport data is validated in batch files (your puzzle input). Each
+passport is represented as a sequence of key:value pairs separated by
+spaces or newlines. Passports are separated by blank lines.
+
+Here is an example batch file containing four passports:
+#+BEGIN_SRC
+ecl:gry pid:860033327 eyr:2020 hcl:#fffffd
+byr:1937 iyr:2017 cid:147 hgt:183cm
+
+iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884
+hcl:#cfa07d byr:1929
+
+hcl:#ae17e1 iyr:2013
+eyr:2024
+ecl:brn pid:760753108 byr:1931
+hgt:179cm
+
+hcl:#cfa07d eyr:2025 pid:166559648
+iyr:2011 ecl:brn hgt:59in
+#+END_SRC
+
+The first passport is valid - all eight fields are present. The second
+passport is invalid - it is missing hgt (the Height field).
+
+The third passport is interesting; the only missing field is cid, so it
+looks like data from North Pole Credentials, not a passport at all!
+Surely, nobody would mind if you made the system temporarily ignore
+missing cid fields. Treat this "passport" as valid.
+
+The fourth passport is missing two fields, cid and byr. Missing cid is
+fine, but missing any other field is not, so this passport is invalid.
+
+According to the above rules, your improved system would report 2 valid
+passports.
+
+Count the number of valid passports - those that have all required
+fields. Treat cid as optional. In your batch file, how many passports
+are valid?
+** Part 2
+The line is moving more quickly now, but you overhear airport security
+talking about how passports with invalid data are getting through.
+Better add some data validation, quick!
+
+You can continue to ignore the cid field, but each other field has
+strict rules about what values are valid for automatic validation:
+
+- =byr= (Birth Year) - four digits; at least 1920 and at most 2002.
+- =iyr= (Issue Year) - four digits; at least 2010 and at most 2020.
+- =eyr= (Expiration Year) - four digits; at least 2020 and at most 2030.
+- =hgt= (Height) - a number followed by either =cm= or =in=:
+  If =cm=, the number must be at least =150= and at most =193=.
+  If =in=, the number must be at least =59= and at most =76=.
+- =hcl= (Hair Color) - a =#= followed by exactly six characters =0-9= or =a-f=.
+- =ecl= (Eye Color) - exactly one of: =amb= =blu= =brn= =gry= =grn= =hzl= =oth=.
+- =pid= (Passport ID) - a nine-digit number, including leading zeroes.
+- =cid= (Country ID) - ignored, missing or not.
+
+Your job is to count the passports where all required fields are both
+present and valid according to the above rules. Here are some example
+values:
+#+BEGIN_SRC
+byr valid:   2002
+byr invalid: 2003
+
+hgt valid:   60in
+hgt valid:   190cm
+hgt invalid: 190in
+hgt invalid: 190
+
+hcl valid:   #123abc
+hcl invalid: #123abz
+hcl invalid: 123abc
+
+ecl valid:   brn
+ecl invalid: wat
+
+pid valid:   000000001
+pid invalid: 0123456789
+#+END_SRC
+
+Here are some invalid passports:
+#+BEGIN_SRC
+eyr:1972 cid:100
+hcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926
+
+iyr:2019
+hcl:#602927 eyr:1967 hgt:170cm
+ecl:grn pid:012533040 byr:1946
+
+hcl:dab227 iyr:2012
+ecl:brn hgt:182cm pid:021572410 eyr:2020 byr:1992 cid:277
+
+hgt:59cm ecl:zzz
+eyr:2038 hcl:74454a iyr:2023
+pid:3556412378 byr:2007
+#+END_SRC
+
+Here are some valid passports:
+#+BEGIN_SRC
+pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980
+hcl:#623a2f
+
+eyr:2029 ecl:blu cid:129 byr:1989
+iyr:2014 pid:896056539 hcl:#a97842 hgt:165cm
+
+hcl:#888785
+hgt:164cm byr:2001 iyr:2015 cid:88
+pid:545766238 ecl:hzl
+eyr:2022
+
+iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719
+#+END_SRC
+
+Count the number of valid passports - those that have all required
+fields and valid values. Continue to treat cid as optional. In your
+batch file, how many passports are valid?
+* Solution
+The input file is split by =\n\n= & stored in =@passports=. We iterate over
+=@passports= & seperate each field in =%field=. Then we check if all
+required fields are present, if not then skip the passport. If true then
+increment =$valid_passports= which holds the number of valid passports.
+
+#+BEGIN_SRC raku
+my $input = slurp "input";
+my @passports = $input.split("\n\n");
+my $valid_passports = 0;
+
+MAIN: for @passports -> $passport {
+    my %fields;
+
+    for $passport.words -> $field {
+        my ($key, $value) = $field.split(":");
+        %fields{$key} = $value;
+    }
+
+    # Check for fields that are strictly required. `cid' can be
+    # skipped. Skip this passport if it's not valid.
+    for <byr iyr eyr hgt hcl ecl pid> -> $field {
+        next MAIN unless %fields{$field};
+    }
+
+    # Do validation in part 2.
+    if $part == 2 {
+        ...
+    }
+    $valid_passports++;
+}
+say "Part $part: " ~ $valid_passports;
+#+END_SRC
+** Part 2
+For part 2, more validation is performed. The rules are simple &
+well-defined in Puzzle section.
+
+I had forgotten the =default= block in =given/when= & that meant it was
+counting passports which don't have =hgt= set to either =cm= or =in= as valid.
+In my case it was a single passport.
+
+#+BEGIN_SRC raku
+next MAIN unless (
+    (1920 ≤ %fields{<byr>} ≤ 2002)
+    and (2010 ≤ %fields{<iyr>} ≤ 2020)
+    and (2020 ≤ %fields{<eyr>} ≤ 2030)
+    and (<amb blu brn gry grn hzl oth> ∋ %fields{<ecl>})
+    and (%fields{<pid>} ~~ /^\d ** 9$/)
+    and (%fields{<hcl>} ~~ /^'#' <[\d a..f]> ** 6/)
+);
+given substr(%fields{<hgt>}, *-2) {
+    when 'cm' {
+        next MAIN unless 150 ≤ substr(%fields{<hgt>}, 0, *-2) ≤ 193;
+    }
+    when 'in' {
+        next MAIN unless 59 ≤ substr(%fields{<hgt>}, 0, *-2) ≤ 76;
+    }
+    default { next MAIN; }
+}
+#+END_SRC
diff --git a/2020/day-04/day-04.raku b/2020/day-04/day-04.raku
new file mode 100755
index 0000000..e7bb0b9
--- /dev/null
+++ b/2020/day-04/day-04.raku
@@ -0,0 +1,48 @@
+#!/usr/bin/env raku
+
+sub MAIN (
+    # Part to run.
+    Int $part where * == 1|2 = 1
+) {
+    my $input = slurp "input";
+    my @passports = $input.split("\n\n");
+    my $valid_passports = 0;
+
+    MAIN: for @passports -> $passport {
+        my %fields;
+
+        for $passport.words -> $field {
+            my ($key, $value) = $field.split(":");
+            %fields{$key} = $value;
+        }
+
+        # Check for fields that are strictly required. `cid' can
+        # be skipped. Skip this passport if it's not valid.
+        for <byr iyr eyr hgt hcl ecl pid> -> $field {
+            next MAIN unless %fields{$field};
+        }
+
+        # Do validation in part 2.
+        if $part == 2 {
+            next MAIN unless (
+                (1920 ≤ %fields{<byr>} ≤ 2002)
+                and (2010 ≤ %fields{<iyr>} ≤ 2020)
+                and (2020 ≤ %fields{<eyr>} ≤ 2030)
+                and (<amb blu brn gry grn hzl oth> ∋ %fields{<ecl>})
+                and (%fields{<pid>} ~~ /^\d ** 9$/)
+                and (%fields{<hcl>} ~~ /^'#' <[\d a..f]> ** 6/)
+            );
+            given substr(%fields{<hgt>}, *-2) {
+                when 'cm' {
+                    next MAIN unless 150 ≤ substr(%fields{<hgt>}, 0, *-2) ≤ 193;
+                }
+		when 'in' {
+                    next MAIN unless 59 ≤ substr(%fields{<hgt>}, 0, *-2) ≤ 76;
+                }
+                default { next MAIN; }
+	    }
+        }
+        $valid_passports++;
+    }
+    say "Part $part: " ~ $valid_passports;
+}
diff --git a/2020/day-04/input b/2020/day-04/input
new file mode 100644
index 0000000..b17cdcd
--- /dev/null
+++ b/2020/day-04/input
@@ -0,0 +1,1023 @@
+ecl:#eef340 eyr:2023 hcl:#c0946f pid:244684338 iyr:2020 cid:57 byr:1969 hgt:152cm
+
+pid:303807545 cid:213 ecl:gry hcl:#fffffd
+eyr:2038 byr:1951
+hgt:171cm iyr:2011
+
+hcl:#c0946f byr:1933 eyr:2025 pid:517067213 hgt:173cm
+ecl:hzl
+iyr:2018
+
+pid:5253256652 byr:2009 hgt:152cm iyr:1989 eyr:1968 hcl:64cb63 ecl:hzl
+
+iyr:2013
+pid:862607211 eyr:2020
+hgt:174cm
+byr:1990
+ecl:blu hcl:#888785
+
+ecl:grn byr:1955
+pid:608098408 eyr:2027 iyr:2020 hcl:#b6652a cid:264
+hgt:181cm
+
+byr:1998 ecl:hzl eyr:2021
+hcl:#866857 hgt:189cm iyr:2030
+pid:013735467
+
+pid:075417314 hcl:#b6652a byr:1957
+iyr:2011
+hgt:154cm
+eyr:2025
+ecl:amb
+
+iyr:1993 hgt:74cm eyr:1960
+byr:2029
+hcl:293244 ecl:#3cb5e5 pid:4861232363
+
+hgt:153cm hcl:#6b5442 pid:065240897 byr:1932
+cid:196 ecl:blu eyr:2028 iyr:2019
+
+eyr:2024 ecl:amb
+hcl:#866857 byr:1922 pid:496904942 hgt:164cm iyr:2020
+
+pid:847705161 byr:1951 cid:124 iyr:1991
+eyr:2028 ecl:dne
+hcl:6b2d28 hgt:172cm
+
+byr:2007 iyr:2029 ecl:hzl eyr:2026 hgt:168in
+hcl:z
+pid:63151612
+
+iyr:2027 hgt:172in
+cid:174 byr:2014 hcl:z eyr:1921
+ecl:grt pid:#cebdc2
+
+ecl:amb hcl:#d09c0f
+iyr:2015 hgt:156cm eyr:2026 byr:1962
+pid:086120872
+
+cid:125
+pid:837849996
+byr:1958 ecl:brn hgt:166cm hcl:#ceb3a1 eyr:2028 iyr:2012
+
+ecl:gry hgt:180cm
+pid:939059935 eyr:2023 byr:1977 hcl:#b6652a
+
+hgt:190in byr:2029 eyr:1984
+ecl:gry hcl:z pid:055092916 iyr:2010
+
+hgt:63in ecl:blu byr:1940 iyr:2012 eyr:2029 hcl:#7d3b0c
+pid:163033394
+
+eyr:2040 pid:181cm
+iyr:1928 hgt:76cm hcl:d8aafb byr:1949 cid:275 ecl:xry
+
+hcl:#cfa07d ecl:oth byr:1948 eyr:2021
+pid:719690182 hgt:179cm iyr:2020
+
+byr:1939 cid:266
+eyr:2026 iyr:2017 hcl:#f116d2
+ecl:hzl pid:522421825
+hgt:68in
+
+hcl:z hgt:61in
+cid:115 pid:180cm iyr:2030 byr:2014 eyr:2032 ecl:hzl
+
+ecl:xry
+eyr:2028 pid:191cm iyr:2015 hgt:150cm byr:2029
+
+eyr:2027
+hcl:#a97842 pid:997937480 hgt:61in iyr:2019
+byr:1921
+ecl:grn
+
+hgt:163cm
+pid:912318455 iyr:2016 byr:1988 ecl:brn hcl:#a97842 cid:221 eyr:2029
+
+cid:333 hcl:#c0946f
+hgt:163cm iyr:2018 eyr:2027 ecl:oth
+
+cid:70 hcl:#c0946f
+pid:961507902 byr:1949 ecl:grn iyr:2017 eyr:2029 hgt:69in
+
+hgt:169cm ecl:amb
+iyr:2013 pid:496169901
+byr:1943 eyr:2028 hcl:#ceb3a1
+cid:249
+
+ecl:blu cid:343
+iyr:1998 hgt:154in hcl:#efcc98 byr:1972
+
+pid:508213120 iyr:2012 eyr:2025 hcl:z hgt:70cm byr:1976
+ecl:brn
+
+iyr:1924
+eyr:2005
+hcl:z
+hgt:167 pid:154cm
+byr:2007
+
+pid:761333244 hgt:180cm iyr:2017 hcl:#18171d eyr:2021
+byr:1983
+cid:67 ecl:oth
+
+eyr:1993
+byr:2003
+hcl:#602927
+ecl:grt
+cid:84 hgt:178
+pid:1847086637 iyr:2026
+
+hcl:#866857 hgt:162cm pid:483774485 iyr:2010
+byr:1946 eyr:2028 ecl:gry
+
+pid:726639691 eyr:2028
+hgt:171cm hcl:#ff65a6
+iyr:2011 byr:1989
+
+hcl:z iyr:2026 ecl:xry
+eyr:2037 byr:2005 pid:#f09a0f
+hgt:68 cid:156
+
+hgt:71in ecl:blu eyr:2026 hcl:#18171d
+byr:1981 iyr:2017
+pid:698636544
+
+eyr:2021
+byr:1957 ecl:brn pid:365378126 cid:93 iyr:2019 hcl:#18171d hgt:179cm
+
+byr:1996 iyr:2014 hgt:64cm
+eyr:2034
+hcl:z
+
+pid:629486472 cid:140
+hgt:192cm eyr:2020 hcl:#b6652a iyr:1988 byr:2021 ecl:brn
+
+byr:1955 iyr:2015 eyr:2030
+ecl:gry hcl:z pid:6550198754
+hgt:158cm cid:305
+
+ecl:gry hcl:#a97842
+hgt:176cm eyr:2022 pid:810146585 iyr:2020
+
+byr:2027 hcl:#cfa07d
+iyr:2011 ecl:#f07598
+cid:293
+hgt:150cm pid:#fa948d eyr:2029
+
+eyr:2028 iyr:2013 hgt:69in ecl:gry pid:317170371
+cid:147 hcl:#bfe1f1
+
+byr:1976
+pid:059341891 hgt:174cm
+ecl:oth
+eyr:2029 iyr:2017 hcl:#733820
+
+iyr:2018 hcl:#ceb3a1 hgt:188cm cid:308
+pid:792826885 byr:1948 ecl:blu eyr:2028
+
+iyr:2017 cid:94 hcl:#95c7dc
+pid:231757803 eyr:2022
+byr:1992 hgt:153cm ecl:amb
+
+eyr:2027
+iyr:2011 hgt:186cm
+ecl:brn pid:996347346 hcl:#866857
+byr:1960
+
+eyr:2025 byr:2001
+ecl:blu pid:755715478 iyr:2019 hgt:61in
+
+ecl:gry
+eyr:2038
+hgt:81 hcl:z iyr:2028
+cid:214 byr:1965
+
+pid:412744447 byr:1979 hcl:#cfa07d ecl:blu
+eyr:2029 cid:157
+hgt:180in iyr:1948
+
+hgt:170cm
+pid:623557081 byr:1924 eyr:2024 hcl:98d623 iyr:2012 ecl:amb
+
+cid:311 ecl:grn
+iyr:2011 byr:1982
+eyr:2002 hcl:#ef318a
+pid:0548169957
+hgt:87
+
+eyr:2030 hcl:#733820 iyr:2016 pid:558470391
+byr:1936 ecl:oth hgt:185cm
+
+iyr:2019
+ecl:amb byr:1949
+pid:376468392
+hgt:178cm
+
+pid:019195245
+ecl:grn hgt:171cm
+byr:1978 iyr:2011 eyr:2022 hcl:#733820
+cid:134
+
+hcl:#623a2f hgt:192cm eyr:2026 byr:1977
+ecl:grn cid:308
+
+ecl:hzl pid:715816358 hgt:69in iyr:2014 hcl:#623a2f
+byr:1996
+eyr:2027
+
+iyr:1947
+ecl:#39a697
+hgt:183cm byr:2029
+eyr:2022 pid:7951883913
+hcl:z
+
+ecl:gry byr:1950
+hcl:#18171d hgt:168cm iyr:2020 pid:677187333 eyr:2027
+
+byr:1969 ecl:blu hcl:#18171d iyr:2011
+hgt:162cm
+pid:701349891
+
+cid:269 byr:1966
+iyr:2011
+pid:905940527 eyr:2023 hgt:190cm
+ecl:brn hcl:#ceb3a1
+
+eyr:2027 pid:454627395 ecl:brn
+hcl:#ceb3a1 cid:302 hgt:184cm
+byr:1959
+iyr:2015
+
+iyr:2011
+eyr:2028
+hgt:166cm
+hcl:#733820 byr:1938 ecl:blu pid:857984986
+
+hcl:#c0946f ecl:brn pid:226877822
+hgt:182cm byr:1998
+cid:160
+
+hgt:186in pid:26499164 byr:2017
+hcl:z
+iyr:1998 eyr:2026
+cid:331 ecl:#236556
+
+pid:328866543
+hgt:165cm eyr:2039 iyr:1987 ecl:amb byr:2018 hcl:z
+
+iyr:2016 eyr:2036 hcl:#888785 byr:1976 pid:160402352 hgt:76cm ecl:blu
+
+ecl:blu
+hcl:#fffffd eyr:2025 hgt:66in pid:979788527
+byr:1957 iyr:2013
+
+ecl:grn pid:279357265 iyr:2019 eyr:2021 byr:1953
+hgt:177cm hcl:#c0946f
+
+ecl:oth hcl:z eyr:2025 byr:1949 hgt:189cm iyr:2020 pid:901383503
+
+byr:2019 hcl:#733820
+pid:31022828 eyr:1929
+hgt:75cm iyr:2012 ecl:grn
+
+pid:080462937
+ecl:blu hcl:#866857
+cid:102
+iyr:2013 eyr:2025 byr:1975 hgt:64in
+
+iyr:2016
+eyr:2028
+cid:125
+byr:1979 hcl:#866857
+ecl:brn hgt:173cm pid:814947616
+
+hcl:z byr:2020 pid:#c3b54b hgt:174in eyr:2038
+iyr:2016
+ecl:gmt
+
+cid:132
+iyr:1958
+pid:61543452 hcl:z
+ecl:zzz eyr:2039 byr:2006
+
+cid:55 eyr:2022 byr:1954 iyr:2015
+hgt:188cm hcl:#a97842 pid:49143631 ecl:amb
+
+hgt:152cm
+byr:1982
+iyr:2013 ecl:blu
+hcl:#341e13
+eyr:2026 pid:440841976
+
+iyr:2019 ecl:blu pid:553456616 hcl:#733820 hgt:160cm byr:1932 eyr:2030
+
+byr:1980 hgt:169cm hcl:#7d3b0c cid:312 iyr:2010
+eyr:2026 pid:028550304 ecl:grn
+
+ecl:amb eyr:2021 iyr:2014 hgt:71in pid:986053283 byr:1981
+
+ecl:oth
+eyr:2023 hcl:#888785
+byr:1949
+iyr:2016 pid:699325656
+
+hgt:63cm cid:297 eyr:2020 pid:990390922
+hcl:#602927 ecl:lzr
+iyr:2012 byr:2016
+
+hcl:9ea2fa eyr:2023 pid:088680493
+byr:1998 iyr:2017 ecl:utc hgt:170cm cid:175
+
+cid:316 iyr:2016 eyr:2026 hcl:#79ff1d hgt:65in
+byr:1997 pid:215466710 ecl:oth
+
+cid:213 byr:1983 hcl:#888785 iyr:2016 pid:767747981 eyr:2025
+ecl:hzl hgt:168cm
+
+eyr:2030 byr:1972
+cid:282
+ecl:gry hgt:178cm
+hcl:#a97842
+iyr:2018
+
+hcl:#6b5442 ecl:amb
+eyr:2028 cid:104 hgt:159cm pid:446429120 iyr:2012
+byr:1938
+
+byr:1940 hgt:178cm ecl:oth
+hcl:#ceb3a1
+pid:845683663 iyr:2015 eyr:2024
+
+byr:1940 pid:496262233
+hgt:184cm hcl:#b6652a
+ecl:grn cid:152 iyr:2012 eyr:2029
+
+hgt:185cm pid:455744229 byr:1954 eyr:2022 ecl:gry hcl:#6b5442 iyr:2012
+
+hgt:182cm byr:1966 eyr:2028 ecl:#a5b7fc
+iyr:2029
+
+pid:343591896
+cid:58
+ecl:hzl
+eyr:2022 hgt:180in byr:2021
+hcl:#6b5442
+
+ecl:utc hcl:#b6652a
+pid:635147657 byr:2020
+eyr:2022 hgt:157cm iyr:2018
+
+ecl:grt cid:312 iyr:1959 pid:154262836
+hgt:171cm
+hcl:#fffffd
+eyr:2024
+byr:1982
+
+hcl:#7a12b4 pid:223424149 ecl:hzl hgt:175cm
+byr:1930 iyr:2010 eyr:2028
+
+hcl:#c0946f pid:633476454 eyr:2026 iyr:2011
+byr:1934
+hgt:186cm
+cid:289 ecl:gry
+
+hcl:#fffffd pid:376300524 hgt:155cm byr:1964 iyr:2017 eyr:2021 ecl:grn
+
+hcl:a5d4dc byr:2006 cid:165 ecl:#db800f iyr:2029 pid:0199789970 eyr:1961 hgt:61cm
+
+eyr:2027 hgt:170cm iyr:2010
+hcl:#c0946f
+ecl:grn pid:415726530
+byr:1985
+
+cid:197 byr:1957 hgt:192in hcl:#a97842 ecl:hzl eyr:2029 pid:958973455 iyr:2011
+
+iyr:2015 pid:933689314 hgt:162cm ecl:amb
+cid:122 eyr:2021
+hcl:#6b5442 byr:1973
+
+eyr:2026 hgt:172cm
+iyr:2012
+ecl:brn hcl:#733820 pid:004474632
+byr:2000
+
+hgt:191cm eyr:2030 byr:1999 pid:9155071477 iyr:2026 hcl:#602927 cid:315
+ecl:grn
+
+iyr:2010 pid:182884251 hcl:#18171d hgt:154cm
+eyr:2020
+byr:1926 ecl:oth
+
+iyr:2019 eyr:1920 pid:132839546
+cid:283 hgt:188in hcl:#efcc98 byr:2027
+
+iyr:2011 hgt:177cm
+cid:117 byr:1976
+ecl:gry
+hcl:#623a2f eyr:2030 pid:134592046
+
+byr:1968 hgt:146
+iyr:2013 hcl:eefdc4 eyr:2028
+ecl:xry pid:722120008
+
+iyr:2016 byr:1941 hgt:67cm cid:51 hcl:#b6652a ecl:hzl eyr:2034 pid:994005715
+
+hcl:#cfa07d ecl:oth
+hgt:182cm eyr:2021 pid:612583941
+byr:1983
+iyr:2019
+
+byr:1922
+hcl:#602927 hgt:161cm ecl:gry eyr:2020 pid:190170808 iyr:2013
+
+hgt:63cm cid:136
+iyr:1999
+pid:8235748647 hcl:z
+byr:2022 eyr:1933
+ecl:#304383
+
+cid:273 ecl:blu hcl:z
+iyr:2011 byr:2007
+eyr:2020
+pid:942473857 hgt:178in
+
+ecl:grt byr:2029 hgt:187in eyr:2030 cid:160
+hcl:#efcc98 pid:#39f22b
+iyr:1966
+
+byr:1978 ecl:oth iyr:2011 hgt:164cm eyr:2027 hcl:#cfa07d
+
+hgt:75cm hcl:#1e8137 byr:1986 ecl:blu eyr:2022 pid:796688423
+iyr:2012
+
+eyr:2026
+ecl:#3013af hcl:z pid:#e8597f hgt:123 iyr:2025 byr:1942
+
+hcl:z hgt:177in
+iyr:1993 pid:#4c9348 byr:2008 eyr:1989
+
+pid:123524366 byr:1935
+hgt:156cm hcl:#7d3b0c
+iyr:2020 ecl:brn eyr:2020
+
+hcl:z eyr:2038 pid:7663741757 ecl:gmt hgt:174
+byr:2008 iyr:1939
+cid:225
+
+hcl:#888785 hgt:172cm
+ecl:oth pid:500711541 eyr:2027
+byr:1931 iyr:2012
+
+pid:575447108 ecl:amb byr:1943
+hcl:#888785 hgt:173cm eyr:2024
+
+eyr:2021 iyr:2010 pid:178773264 hgt:157cm byr:1965 hcl:#bb7bcf ecl:amb
+
+iyr:2023 ecl:#35bd84 byr:2020
+hgt:72in
+eyr:2037
+hcl:#6b5442
+pid:421311669
+
+byr:1921 iyr:2011
+pid:146088688
+eyr:2023 hcl:#15ed24 hgt:183cm
+ecl:brn
+
+hcl:#b6652a cid:243
+byr:1993 eyr:2024
+iyr:2014 hgt:172cm
+pid:771275594
+
+eyr:2024
+hcl:#cfa07d pid:858807920 cid:293 hgt:157cm ecl:hzl iyr:2013 byr:1984
+
+ecl:blu hgt:193cm cid:73 hcl:#18171d eyr:2026
+iyr:2016 pid:124151812 byr:1945
+
+ecl:amb iyr:2018
+pid:214555737 hgt:157cm
+eyr:2028
+byr:1925 hcl:#866857
+
+pid:5633250409
+hcl:4ef7d8
+byr:2004 iyr:1958
+hgt:96
+eyr:2038 ecl:xry cid:274
+
+byr:1972 pid:401239851 hgt:184in hcl:z iyr:2017
+eyr:2030 ecl:#cb289a cid:140
+
+hgt:175cm
+byr:1926 hcl:#cfa07d eyr:2029 ecl:gry pid:325039730 iyr:2017
+
+cid:101 hgt:166cm byr:1986 ecl:amb
+hcl:#7d3b0c iyr:2013
+pid:413769688 eyr:2024
+
+hgt:159cm cid:311
+byr:1993 eyr:2028 pid:188cm ecl:oth hcl:#602927 iyr:2013
+
+pid:565831038
+ecl:amb
+hgt:155cm hcl:#fffffd cid:335 iyr:2016
+eyr:2029 byr:1997
+
+hgt:122
+byr:2022
+eyr:2028 ecl:blu iyr:2017 pid:269710626 hcl:#b6652a
+
+cid:196
+byr:1953 hcl:#6b5442 iyr:2010
+pid:216121215 hgt:188cm ecl:blu
+
+iyr:2011 hcl:98166c hgt:62cm
+byr:2028
+eyr:2024
+pid:792478385 ecl:grn
+
+hcl:#efcc98 iyr:2012 pid:020039675 eyr:2021 byr:1974 hgt:156cm
+ecl:hzl
+
+cid:123 hcl:#7d3b0c
+byr:2026 eyr:2004 iyr:2012 ecl:oth pid:349203133 hgt:160cm
+
+pid:085461475
+byr:1962 iyr:2020 hcl:#623a2f
+eyr:2024
+cid:80 ecl:brn
+hgt:154cm
+
+ecl:oth hgt:156cm iyr:2016
+hcl:#6b5442
+byr:1973
+eyr:2021 pid:539898580
+
+iyr:2026 hgt:191cm
+hcl:z
+byr:1930 pid:#abc2f0 ecl:blu cid:242 eyr:2024
+
+cid:167
+hgt:179cm
+iyr:2017 eyr:2021 pid:756797571 byr:1949 ecl:brn hcl:#a97842
+
+byr:1975 eyr:2030
+ecl:oth hgt:169in pid:4031206183 hcl:#733820 iyr:2017 cid:244
+
+ecl:#54cfeb hgt:152cm
+iyr:2026 hcl:36b4b9
+byr:2030
+pid:#fa1cb9 eyr:1964
+
+byr:1974 cid:99 hcl:9e3296
+eyr:2032
+pid:686747414
+iyr:1995
+ecl:amb
+
+iyr:2030 ecl:oth hcl:z byr:1979
+pid:114661006 hgt:191cm eyr:1941
+
+hcl:#341e13 iyr:2014 byr:1953
+pid:188326193 ecl:gry hgt:189cm cid:283
+eyr:2030
+
+byr:1975
+pid:092061576 hgt:73in eyr:2023
+ecl:brn cid:227 hcl:#5e9d91
+iyr:2011
+
+hcl:#7d3b0c hgt:167cm cid:141
+eyr:1957 byr:2012 ecl:gmt iyr:2019 pid:#1b7c8a
+
+hgt:168cm hcl:#c0946f pid:599500784 byr:1930 eyr:2023 ecl:hzl cid:113
+iyr:2013
+
+eyr:2030 hcl:#b4cb4f
+hgt:68in
+ecl:brn byr:1923 pid:699162086
+
+iyr:2013
+ecl:dne hcl:z eyr:1971
+pid:#580add byr:2020
+hgt:190cm
+
+hcl:#ceb3a1
+byr:1976 eyr:2020
+cid:162 iyr:2016
+hgt:168cm
+ecl:hzl
+
+pid:050478613 hgt:59cm
+iyr:2017
+ecl:grn byr:2030 hcl:#cfa07d eyr:2025
+
+pid:352943968 eyr:2025 byr:1980 iyr:2014 ecl:gry hcl:#c0946f
+hgt:193cm
+
+pid:328621931 cid:310 hgt:170cm
+hcl:#733820 byr:1955
+iyr:2016
+eyr:2028 ecl:hzl
+
+hcl:#866857
+pid:095858739 byr:1956
+iyr:2018 hgt:193cm
+ecl:hzl
+eyr:2029
+
+pid:70973661 eyr:2039 ecl:gry
+iyr:2016
+cid:291
+hcl:#623a2f hgt:97
+
+hcl:4d51a8
+eyr:1978
+ecl:gmt
+byr:2029 iyr:2022
+pid:34507041 hgt:61cm
+
+byr:1989 ecl:brn pid:769582914
+eyr:2026 cid:218
+iyr:2020 hcl:#866857 hgt:184cm
+
+ecl:brn
+iyr:1998 cid:227
+hgt:162in
+byr:2026
+hcl:#602927 eyr:2027 pid:236998728
+
+ecl:gry byr:1984 hgt:157 cid:295
+eyr:2020
+iyr:2018 hcl:#733820
+pid:037871534
+
+hgt:166cm hcl:#c0946f pid:412146401
+iyr:2011
+eyr:2022
+byr:1938
+ecl:brn
+
+ecl:brn cid:95 byr:1981 eyr:2030 hcl:#efcc98 pid:777041035 hgt:152cm iyr:2011
+
+eyr:2024 hgt:89 pid:3761913749 iyr:1939 byr:1967 hcl:a222f6 cid:165 ecl:#7fe574
+
+cid:339 hgt:156cm
+ecl:brn iyr:2013 byr:1951 hcl:#efcc98 eyr:2026
+pid:863566946
+
+ecl:brn hcl:#6b5442 eyr:2023
+pid:787129723 byr:1949 iyr:2015
+
+pid:#7f615a
+cid:202 hcl:#6b5442 eyr:2028
+ecl:#a5419c
+hgt:75cm
+iyr:2011
+byr:2001
+
+pid:864001133
+cid:236
+byr:1943 hcl:#733820 ecl:dne eyr:2025 hgt:171cm iyr:1989
+
+pid:193073684 ecl:grn byr:1962 iyr:2014
+hcl:#cfa07d hgt:189cm
+cid:321 eyr:2029
+
+byr:1959
+hcl:#b6652a
+eyr:2026
+hgt:159cm pid:815014918 iyr:2011 ecl:amb
+
+iyr:2017 hgt:182cm
+hcl:#a97842 eyr:2023 ecl:grn pid:656177536
+byr:1973
+
+eyr:1923 ecl:grn
+cid:138 iyr:2020
+hgt:164cm byr:1958 hcl:#c0946f pid:783366277
+
+iyr:1932 hgt:172 ecl:blu
+hcl:#733820 byr:1962 pid:554221464
+
+cid:169 pid:922622614
+byr:1942 hcl:#ceb3a1 hgt:169cm eyr:2024
+ecl:gry iyr:2017
+
+cid:219 ecl:grn
+hgt:156cm byr:1998 eyr:2021
+iyr:2017 hcl:#ceb3a1 pid:450186263
+
+ecl:amb hgt:179cm pid:768428582 iyr:2010 eyr:2023 byr:1952 hcl:#fffffd
+
+eyr:2024
+hgt:193cm
+iyr:2017 pid:469033795 byr:1979 hcl:#18171d cid:67 ecl:amb
+
+iyr:2016 byr:1937 pid:798267514 hgt:155cm hcl:#866857 eyr:2026
+ecl:oth
+
+hgt:172cm hcl:#866857 iyr:2018 pid:662186551
+byr:1996
+eyr:2025 ecl:amb
+
+pid:2854521962
+iyr:2021
+ecl:zzz
+hcl:12f1ba eyr:2037 hgt:159cm
+byr:1937
+
+ecl:oth pid:488050418 byr:1927 hcl:#a97842 hgt:153cm iyr:2013 eyr:2024
+
+pid:119536312 ecl:#2036ad
+hcl:543178 iyr:2020
+byr:2013
+hgt:177cm
+eyr:2022
+
+pid:788908662 hcl:#602927 eyr:2029
+ecl:oth byr:1930
+iyr:2020
+hgt:179cm
+
+byr:1972
+pid:053386972 iyr:2014 ecl:grn hgt:65in hcl:#cfa07d
+
+pid:9828921035 ecl:blu
+hcl:z hgt:152in
+eyr:1949 byr:2010
+
+cid:157 pid:097910554 byr:1999
+hgt:159cm hcl:#6b5442 ecl:blu eyr:2024
+iyr:2010
+
+hcl:#a97842
+eyr:2040 ecl:#f8ad77
+hgt:173cm
+byr:2019 iyr:2010
+pid:#d16a6e
+
+ecl:dne hgt:191cm iyr:2020 hcl:#b6652a
+eyr:2021 pid:571971509 byr:1983
+
+hcl:#18171d iyr:2016 pid:159074622
+eyr:2027 hgt:163cm byr:1954
+cid:257
+
+pid:243560302 cid:58
+hcl:53a4cf byr:2012
+ecl:#fdbfb8 eyr:1920 hgt:179 iyr:2026
+
+pid:040606106 eyr:2030 hgt:188cm
+byr:1969
+iyr:2012 hcl:#ceb3a1 ecl:amb
+
+eyr:2022
+hgt:175cm hcl:#b6652a byr:1967 pid:269969031
+iyr:2018
+
+hcl:#18171d cid:278 byr:1931
+pid:134809791
+eyr:2035 ecl:#44e6cd iyr:1993
+
+hgt:177in
+ecl:utc cid:289
+iyr:1923
+hcl:13a67a pid:3045345984 byr:2030 eyr:1944
+
+pid:839901650 eyr:2030
+ecl:grn
+byr:2015 iyr:2017 hgt:168 hcl:131f4e
+
+iyr:2015 pid:529736732 ecl:brn hgt:176cm
+eyr:2026 byr:1952 hcl:#6b5442
+
+hcl:#c0946f
+cid:323 pid:303966428 iyr:2019
+eyr:2027 hgt:170cm
+byr:2001
+ecl:brn
+
+pid:193678728 hgt:72in eyr:2027 iyr:2015 byr:1951 ecl:gry hcl:#18171d
+
+eyr:2026 cid:283
+iyr:1938 pid:687430885
+hgt:186cm
+byr:1949 ecl:#521638 hcl:d13b2f
+
+eyr:2024 hcl:#ceb3a1 iyr:2013 ecl:brn
+hgt:168cm pid:792088241
+
+hcl:#888785 ecl:amb
+byr:2009 iyr:2015
+hgt:151cm
+eyr:2020 pid:223927808
+
+byr:1926
+pid:717704850
+hcl:#623a2f eyr:2022 hgt:64in iyr:2018 ecl:gry
+
+eyr:2023 byr:1954
+hgt:169cm
+ecl:hzl
+iyr:2010 pid:116868997 hcl:#18171d
+
+ecl:hzl byr:1965 hcl:#a97842 iyr:2011 pid:506354451 hgt:172cm eyr:2029
+
+eyr:2022 pid:994565705
+iyr:2013 ecl:brn hcl:#623a2f
+byr:1979
+
+iyr:2011
+byr:1931 hgt:183cm hcl:#284f26 cid:306
+ecl:amb eyr:2021
+pid:977533079
+
+eyr:2027
+iyr:2011 ecl:gry
+byr:1993
+pid:272334781 hgt:161cm hcl:#9a35b6
+
+eyr:2026
+hcl:#602927 ecl:blu
+pid:212300161 byr:1946
+cid:193 iyr:2020 hgt:157cm
+
+pid:538594567 byr:1976 eyr:2027 hcl:#efcc98 iyr:2011 hgt:154cm ecl:oth
+
+byr:1949
+hcl:z ecl:#ce67aa
+eyr:1942 pid:7978941589 iyr:2025 hgt:161in
+
+hcl:#c0946f
+cid:55
+byr:1963 ecl:blu hgt:161cm
+pid:547120453 iyr:2015 eyr:2021
+
+hgt:173cm eyr:2022
+iyr:2016 byr:2001
+ecl:hzl pid:239803460
+
+hcl:#b6652a ecl:oth eyr:2021 hgt:167cm pid:401266644 iyr:1969 byr:1974
+
+eyr:2030 pid:581963885
+hcl:#64cb23
+ecl:blu
+byr:1928 hgt:181cm iyr:2018
+
+pid:186338247
+ecl:hzl hgt:193cm hcl:#ceb3a1
+eyr:2022 iyr:2010
+
+iyr:2015 ecl:gry hgt:159cm eyr:2027 hcl:#ceb3a1
+byr:1925 pid:715902111 cid:149
+
+iyr:2018 hcl:#623a2f eyr:2020 hgt:162cm ecl:grn cid:135
+byr:1922
+pid:373216777
+
+eyr:2020 pid:749899012 hcl:#888785 ecl:brn
+iyr:2010 cid:225 hgt:172cm
+byr:1972
+
+iyr:2020 hgt:178cm ecl:grn hcl:#18171d pid:613792489 cid:240
+eyr:2028
+byr:1972
+
+iyr:2015 byr:1938 eyr:2026
+cid:113 ecl:grn
+pid:846231640 hgt:161cm
+hcl:#b6652a
+
+ecl:gry
+hcl:#ceb3a1
+byr:1956 cid:338 pid:936012518
+hgt:62in
+eyr:2029 iyr:2016
+
+pid:730866353 ecl:brn byr:1986
+iyr:2014
+hgt:190cm
+eyr:2021 hcl:#a97842 cid:126
+
+eyr:2021
+cid:180 pid:958310635 ecl:brn iyr:2015 hgt:189cm hcl:#efcc98
+
+hgt:188cm ecl:hzl pid:179001863 iyr:2016 eyr:2029 hcl:#341e13 byr:1932
+
+cid:77 eyr:2027 hcl:#623a2f iyr:2016 ecl:brn hgt:170cm
+byr:1947
+
+hgt:66in pid:617518313 iyr:2013 byr:1977 hcl:#b6652a ecl:brn eyr:2025
+
+pid:787861420
+iyr:2014 hcl:#623a2f hgt:61in
+ecl:oth cid:78
+eyr:2022 byr:1975
+
+ecl:hzl
+iyr:2017 eyr:2028 hcl:#602927
+byr:1958 pid:985208714
+hgt:160cm
+
+byr:2002
+iyr:2013
+hcl:#341e13 pid:188110633 ecl:gry hgt:169cm
+eyr:2025
+
+byr:1981
+eyr:2028
+hcl:#341e13 ecl:amb hgt:160cm cid:121
+iyr:2015 pid:963848397
+
+iyr:2013 hcl:#866857 pid:#db8648 eyr:2021 ecl:gry
+byr:1975
+hgt:153cm cid:114
+
+hgt:109
+cid:287 hcl:#6b5442
+iyr:2028 byr:1926 eyr:2036 pid:2378208387
+ecl:#245a62
+
+pid:857722366
+byr:1975 eyr:2027
+ecl:grn iyr:2019 hcl:#0afad1
+hgt:66in
+
+byr:1935 hcl:#cfa07d hgt:173cm ecl:brn eyr:2021 iyr:2019
+
+cid:66 eyr:2024 hcl:#efcc98 byr:2002 iyr:2010
+hgt:176cm pid:697153153 ecl:amb
+
+iyr:2019
+hcl:#cfa07d ecl:blu
+pid:695914972
+eyr:2024
+hgt:158cm
+byr:1943
+
+ecl:xry hgt:62in
+pid:14733148 cid:148
+iyr:2016 byr:1925 hcl:#6b5442
+eyr:2028
+
+iyr:2025
+cid:53 hgt:132 ecl:gmt hcl:159b19
+pid:156cm
+byr:2025 eyr:2001
+
+hcl:#623a2f ecl:oth byr:1974 iyr:2018 hgt:161cm eyr:2029 pid:6826285172
+
+ecl:gry
+byr:1956 hcl:#7d3b0c hgt:170cm iyr:2020
+
+eyr:2020
+pid:#946a88 hgt:186cm hcl:#733820 byr:1946 ecl:#016645 iyr:2015
+
+hgt:181cm hcl:#888785 iyr:2013 pid:634152817
+byr:1982 cid:245 ecl:grn eyr:2021
+
+ecl:brn
+pid:737531770 iyr:2010
+eyr:2020
+byr:1929 hgt:189cm hcl:#c0946f
+
+cid:158 iyr:2019 hcl:#341e13 eyr:2027 ecl:amb
+byr:1986 pid:834976623
+
+pid:976934668 cid:61 eyr:2020 iyr:2020
+hgt:76in byr:1927 ecl:amb
+hcl:#e05ee3
+
+pid:526042518 iyr:2019 eyr:2027 hcl:#623a2f byr:1976 ecl:amb
+
+pid:279367290 hcl:#a97842 hgt:158cm
+eyr:2027
+byr:1959
+iyr:2020
+
+ecl:xry byr:2028
+pid:357216861 hcl:#a97842 eyr:2024 hgt:66cm
+iyr:2012
+
+hgt:188in
+ecl:lzr cid:64 eyr:1958 byr:2014 hcl:z pid:285207570 iyr:2026
+
+eyr:1973 iyr:2017 ecl:oth cid:282 pid:695814158
+hcl:z
+
+iyr:2010 pid:661168409
+hcl:#53c696
+hgt:186cm ecl:amb
+byr:1960
+eyr:2029
+
+eyr:1982 hgt:169cm
+iyr:2002 byr:2025 hcl:327f93 pid:831648100
+
+byr:1967 ecl:oth
+eyr:2021
+hcl:#602927 iyr:2014
+pid:274974402 hgt:183cm