From ace4184758f3964073f23a9be2c3b9e828b399b5 Mon Sep 17 00:00:00 2001 From: Adam Millerchip Date: Fri, 4 Dec 2020 15:21:20 +0900 Subject: [PATCH] Day 4 Parts 1 and 2 --- README.md | 2 +- day4/README | 47 ++ day4/day4part1.exs | 19 + day4/day4part2.exs | 67 +++ day4/input | 1029 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 1163 insertions(+), 1 deletion(-) create mode 100644 day4/README create mode 100644 day4/day4part1.exs create mode 100644 day4/day4part2.exs create mode 100644 day4/input diff --git a/README.md b/README.md index fedbbae..818b392 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ My (attempted) solutions to [Advent of Code 2020](https://adventofcode.com/2020) in Elixir. -image +image ## Strategy diff --git a/day4/README b/day4/README new file mode 100644 index 0000000..59e49c8 --- /dev/null +++ b/day4/README @@ -0,0 +1,47 @@ +Day 4 Notes + ++--------+ +| Part 1 | ++--------+ + +$ elixir day4part1.exs +210 + +Thoughts: + +Parse each passport into a list of key-value pairs, and extract the keys. +Not sure if there will be extra keys, so store required keys in a Mapset, which means I can use +MapSet.subset to make sure all the required keys are present. +Embedded enums are kind of ugly. +Nice usage of Enum.into, IMO 🍠. + ++--------+ +| Part 2 | ++--------+ + +$ elixir day4part2.exs +131 + +Thoughts: + +Need the values too now, so refactor a bit to preserve them, storing each passport at a map. +Can still use part 1 logic to filter out passports that have missing keys. + - just pull out the keys and convert to a MapSet as before. +Delete the cid key if present, since needs to be ignored. + +Validation code: +Mostly just implementing the spec. +Use regex for fiddly requirements. +hgt was a bit annoying, really wanted to fail-fast if the regex failed to match the units, +maybe will come back to that and think of a nicer way later. +For valid?: Is there a nicer way to call a bunch of functions with the same argument and +aggregate their results? 🤔 + + ++------------------+ +| Overall Thoughts | ++------------------+ + +Starting to take me longer now, about an hour for this one. +Ended up not using Enum.reduce here, but every time I do use it I forget the order of the +acc/item pair in the reducer function... 😩 diff --git a/day4/day4part1.exs b/day4/day4part1.exs new file mode 100644 index 0000000..7cb4762 --- /dev/null +++ b/day4/day4part1.exs @@ -0,0 +1,19 @@ +defmodule Day4Part1 do + @required MapSet.new(["byr", "ecl", "eyr", "hcl", "hgt", "iyr", "pid"]) + + def run do + File.read!("input") + |> String.trim() + |> String.split("\n\n") + |> Enum.map(fn passport -> + passport + |> String.split([" ", "\n"]) + |> Enum.map(&String.split(&1, ":")) + |> Enum.into(MapSet.new(), fn [k, _] -> k end) + end) + |> Enum.count(&MapSet.subset?(@required, &1)) + |> IO.puts() + end +end + +Day4Part1.run() diff --git a/day4/day4part2.exs b/day4/day4part2.exs new file mode 100644 index 0000000..0b0b780 --- /dev/null +++ b/day4/day4part2.exs @@ -0,0 +1,67 @@ +defmodule Day4Part2 do + @required MapSet.new(["byr", "ecl", "eyr", "hcl", "hgt", "iyr", "pid"]) + + def run do + File.read!("input") + |> String.trim() + |> String.split("\n\n") + |> Enum.map(fn passport -> + passport + |> String.split([" ", "\n"]) + |> Enum.map(&String.split(&1, ":")) + |> Map.new(fn [k, v] -> {k, v} end) + end) + |> Enum.map(&Map.delete(&1, "cid")) + |> Enum.filter(&MapSet.subset?(@required, &1 |> Map.keys() |> MapSet.new())) + |> Enum.count(&valid?/1) + |> IO.puts() + end + + def valid?(passport) do + byr?(passport) && iyr?(passport) && eyr?(passport) && hgt?(passport) && hcl?(passport) && + ecl?(passport) && pid?(passport) + end + + def byr?(%{"byr" => byr}) do + date = String.to_integer(byr) + 1920 <= date && date <= 2002 + end + + def iyr?(%{"iyr" => iyr}) do + date = String.to_integer(iyr) + 2010 <= date && date <= 2020 + end + + def eyr?(%{"eyr" => eyr}) do + date = String.to_integer(eyr) + 2020 <= date && date <= 2030 + end + + def hgt?(%{"hgt" => hgt}) do + {hgt, unit} = + case Regex.run(~r/\A(\d+)([^\d]+)\z/, hgt, capture: :all_but_first) do + [hgt, unit] -> {String.to_integer(hgt), unit} + nil -> {0, nil} + end + + case unit do + "cm" -> 150 <= hgt && hgt <= 193 + "in" -> 59 <= hgt && hgt <= 76 + nil -> false + end + end + + def hcl?(%{"hcl" => hcl}) do + Regex.match?(~r/\A#[0-9a-f]{6}\z/, hcl) + end + + def ecl?(%{"ecl" => ecl}) do + ecl in ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"] + end + + def pid?(%{"pid" => pid}) do + Regex.match?(~r/\A\d{9}\z/, pid) + end +end + +Day4Part2.run() diff --git a/day4/input b/day4/input new file mode 100644 index 0000000..242437a --- /dev/null +++ b/day4/input @@ -0,0 +1,1029 @@ +iyr:2015 +hgt:59cm byr:2029 cid:219 pid:9381688753 eyr:1992 hcl:#b6652a +ecl:#7a0fa6 + +ecl:blu iyr:2018 pid:943614755 cid:335 +byr:1968 +eyr:2026 + +pid:067285985 hcl:#ceb3a1 cid:281 +ecl:#07219a eyr:1944 +iyr:2025 +byr:2029 hgt:64cm + +hgt:185cm +ecl:gry cid:222 +iyr:2016 +hcl:#866857 byr:1970 pid:269105457 eyr:2026 + +pid:260043570 hcl:#b6652a cid:275 byr:1990 ecl:brn +hgt:163cm iyr:2012 + +hgt:181cm pid:604983466 +iyr:1930 eyr:2039 byr:1950 ecl:#906548 hcl:#b6652a + +iyr:2025 eyr:1956 hcl:z pid:#1c42cc byr:2006 +cid:327 hgt:141 ecl:#f2affc + +hgt:178cm byr:1939 pid:595705064 ecl:oth +iyr:2020 eyr:2026 +hcl:#888785 + +hgt:159cm iyr:2016 +hcl:#efcc98 pid:139063139 byr:1980 ecl:brn +eyr:2020 + +pid:646870519 hgt:179cm eyr:2022 iyr:2011 hcl:#602927 +ecl:brn +byr:1997 + +hgt:170cm hcl:#ceb3a1 iyr:2014 eyr:2023 ecl:oth pid:243067344 byr:1962 + +hcl:#866857 +ecl:oth pid:704529614 +byr:1941 cid:94 +eyr:2026 hgt:180cm +iyr:2010 + +iyr:1924 +pid:36196401 +hgt:74cm eyr:1921 +ecl:#3acf57 hcl:a4e4c0 byr:2024 +cid:153 + +pid:770262094 hcl:#866857 +eyr:2020 hgt:151cm +ecl:blu +iyr:2012 +byr:2002 +cid:242 + +pid:984364862 ecl:dne +iyr:2020 +hgt:151 eyr:2023 cid:314 hcl:z byr:2012 + +hgt:178cm iyr:2020 hcl:#6b5442 ecl:grn cid:323 eyr:2030 byr:1925 pid:285882039 + +iyr:2019 pid:986123633 +eyr:2024 byr:1990 hcl:#7d3b0c ecl:hzl hgt:192cm + +hgt:90 +byr:2025 iyr:1933 +ecl:dne eyr:2040 pid:8194347544 + +hgt:163cm byr:1934 eyr:2026 ecl:amb hcl:#eec6fb cid:303 pid:721792159 iyr:2013 + +iyr:2019 +byr:1920 hcl:#a97842 +cid:186 eyr:2020 +ecl:oth +hgt:167cm pid:217112082 + +pid:#55ce6b hcl:d30f6b eyr:2040 hgt:60cm ecl:dne iyr:1920 +cid:107 byr:2029 + +ecl:amb eyr:2024 pid:644304174 hcl:#6b5442 iyr:2018 +byr:1935 +hgt:182cm + +ecl:hzl pid:559383552 +hcl:#ceb3a1 eyr:2024 hgt:161cm byr:1968 iyr:2010 + +iyr:2018 +hcl:43fafb +hgt:65cm eyr:2027 +byr:1937 pid:#4bff3e ecl:grt + +eyr:2024 +iyr:2014 cid:163 byr:1924 hcl:#18171d +hgt:166cm + +eyr:2026 pid:955203781 +iyr:2016 cid:52 hgt:167cm +ecl:grn byr:1963 + +pid:479898570 hgt:165cm eyr:2024 byr:1932 +iyr:2010 ecl:grn +cid:88 +hcl:#c0a76e + +cid:241 hgt:178cm ecl:blu pid:069760797 hcl:#623a2f byr:1925 eyr:2029 iyr:2019 + +hgt:172cm eyr:2036 +iyr:2016 pid:#98caec +ecl:dne hcl:z + +ecl:#510672 iyr:1938 byr:2018 hgt:172in hcl:z cid:339 eyr:2039 +pid:#6c1216 + +hcl:#efcc98 +byr:1972 ecl:brn iyr:2011 pid:190911803 eyr:2025 hgt:171cm + +pid:0636917222 byr:2009 hgt:96 +hcl:z +iyr:1997 ecl:hzl eyr:2026 + +byr:1989 iyr:2011 pid:071588682 cid:155 ecl:grn +hcl:#ceb3a1 eyr:1955 hgt:170cm + +cid:266 hcl:#a97842 byr:1964 hgt:175cm +iyr:2017 ecl:brn + +pid:930133867 ecl:grn hcl:#733820 hgt:63in byr:1995 +eyr:2021 iyr:2014 + +eyr:2025 pid:284329794 +ecl:blu hcl:#ceb3a1 iyr:2012 +hgt:65in byr:1961 + +iyr:2010 byr:1998 +hgt:160cm +eyr:2029 hcl:#cfa07d +pid:253052921 +ecl:amb cid:324 + +pid:026835791 byr:1999 eyr:2022 hgt:162cm +hcl:#7d3b0c ecl:brn iyr:2014 + +pid:672752198 eyr:2030 byr:1952 hgt:65in iyr:2016 ecl:amb +hcl:#cfa07d + +hgt:193in +byr:2019 hcl:z pid:#cbc08c iyr:1951 ecl:#3e9f2f eyr:2002 + +ecl:utc pid:571477176 +byr:2012 eyr:1929 cid:240 +hgt:175in hcl:f4ef32 + +cid:93 hcl:#a5db2a +pid:274721479 byr:1940 eyr:2022 ecl:gry +hgt:157cm iyr:2012 + +pid:540858450 iyr:2014 cid:95 byr:1964 +hgt:156cm hcl:#866857 ecl:brn eyr:2026 + +pid:532626994 byr:1939 iyr:2017 +ecl:blu eyr:2026 +hcl:#fffffd hgt:184cm + +hgt:70 pid:404622083 +iyr:2026 +byr:2022 hcl:c1ba7f eyr:1979 ecl:lzr + +pid:931910908 +cid:177 hcl:#6b5442 +ecl:gry hgt:184cm +byr:1963 eyr:2020 +iyr:2014 + +iyr:2019 eyr:2022 hcl:#ceb3a1 hgt:191cm ecl:gry pid:954124659 cid:123 byr:1939 + +pid:411032659 byr:1950 +hgt:153cm eyr:2020 iyr:2014 ecl:hzl + +hgt:156cm eyr:2023 pid:29836124 byr:2017 hcl:56de83 ecl:zzz cid:179 +iyr:2018 + +hcl:#866857 iyr:2014 hgt:190cm byr:1998 pid:565524574 eyr:2020 + +byr:1973 hcl:#888785 iyr:2016 eyr:2028 hgt:173cm ecl:blu + +byr:1987 +pid:028825120 hcl:#7d3b0c +eyr:2023 hgt:190cm ecl:oth iyr:2014 + +eyr:2036 pid:172661617 +ecl:#ae607d byr:2017 hcl:z +hgt:82 cid:153 + +pid:202888577 eyr:2028 iyr:2013 +byr:1933 +hgt:68in cid:151 hcl:#b6652a ecl:brn + +iyr:2020 +ecl:amb eyr:2025 hcl:#a355be hgt:63in pid:146650894 + +iyr:2016 hgt:192cm pid:531372965 hcl:#fffffd +ecl:blu eyr:2025 + +eyr:2025 ecl:blu byr:1961 cid:224 iyr:2016 hcl:#6b5442 pid:368694418 +hgt:169cm + +pid:43707504 iyr:1945 +ecl:grt byr:2010 +eyr:2026 cid:273 +hgt:165in hcl:z + +hgt:159cm ecl:gry +hcl:#6b5442 +eyr:2030 pid:915819272 iyr:2015 + +pid:808392314 ecl:gry cid:285 hcl:#efcc98 byr:1923 hgt:161cm iyr:1941 eyr:2020 + +iyr:2017 +hgt:161cm +eyr:2025 hcl:#602927 ecl:oth pid:081917611 byr:1983 + +eyr:2028 pid:831032131 ecl:brn iyr:2013 hcl:#341e13 cid:198 byr:1991 hgt:67in + +hgt:181cm cid:320 pid:032769757 ecl:grn hcl:#733820 +eyr:2022 byr:1992 + +iyr:2010 cid:128 hgt:171cm byr:1932 pid:923377839 ecl:brn +hcl:#18171d eyr:2020 + +ecl:hzl iyr:2021 byr:2008 pid:569583509 hcl:f74823 +hgt:188in + +iyr:2016 hcl:z eyr:2021 ecl:#24ceee pid:349492243 hgt:67cm +cid:144 byr:2010 + +ecl:gry +byr:2029 hcl:3a0c30 hgt:163in eyr:1962 + +byr:1927 hgt:180 +cid:87 +ecl:#7ea777 +hcl:#623a2f iyr:2024 pid:597098940 eyr:2027 + +cid:89 hgt:193cm hcl:#623a2f +iyr:2010 eyr:2026 +pid:374988952 ecl:hzl byr:1973 + +eyr:2023 iyr:2013 byr:1977 +cid:329 pid:711256829 ecl:grn hgt:154cm +hcl:#866857 + +pid:212535692 ecl:brn +hcl:#b6652a hgt:169cm eyr:2025 byr:1920 iyr:2019 + +ecl:blu +byr:1962 +hgt:157cm iyr:2020 eyr:2027 pid:451039029 +hcl:#6b5442 + +hgt:187cm pid:187808959 eyr:2026 iyr:2020 +ecl:oth +byr:1956 hcl:#733820 + +byr:1959 hgt:160cm ecl:blu hcl:#6b5442 +cid:193 eyr:2026 +iyr:2014 +pid:812555315 + +hgt:153cm iyr:2011 +ecl:grn hcl:#ceb3a1 +eyr:2026 byr:1966 pid:503356330 + +ecl:#95d8a9 +eyr:2024 pid:382174744 +iyr:2025 +hgt:152 hcl:#888785 byr:2012 + +eyr:2028 +iyr:2017 byr:1938 +cid:279 hcl:#733820 ecl:amb pid:497365268 hgt:191cm + +cid:335 byr:1982 hgt:171cm iyr:2013 +ecl:hzl eyr:2030 +hcl:#efcc98 pid:018900639 + +eyr:2029 hgt:175cm pid:530128340 +hcl:#888785 +ecl:gry +byr:1947 iyr:2019 + +hgt:183cm +hcl:#6b5442 eyr:2023 ecl:grn +byr:1934 + +hcl:f8ed45 cid:54 iyr:1997 +hgt:69cm eyr:2037 ecl:gry +pid:184cm byr:2012 + +ecl:grn hcl:#733820 byr:1928 pid:002528194 +iyr:2014 eyr:2021 hgt:157cm + +hgt:163in +hcl:#c0946f byr:2018 eyr:2021 +iyr:1955 ecl:#216920 pid:87155266 +cid:298 + +eyr:2026 byr:1945 cid:161 iyr:2017 hgt:170cm hcl:#fffffd ecl:hzl pid:649441221 + +byr:1930 +iyr:2014 pid:151910079 hcl:#18171d ecl:oth eyr:2029 +hgt:169cm + +ecl:blu byr:1950 iyr:2010 cid:260 hcl:#cfa07d +hgt:167cm +pid:910685738 eyr:2021 + +hgt:182cm byr:1993 +eyr:2030 pid:073035999 hcl:#341e13 +cid:117 + +byr:1981 +hcl:#866857 +eyr:2028 iyr:2012 ecl:blu pid:620133246 hgt:157cm + +hgt:191cm +iyr:2010 pid:089995590 eyr:2023 ecl:amb byr:1986 hcl:#733820 + +iyr:2019 ecl:gry +hgt:165cm pid:910093364 hcl:#efcc98 byr:1997 +eyr:2028 +cid:153 + +hgt:83 hcl:174774 eyr:2032 +ecl:xry iyr:2017 byr:1940 + +byr:1943 +pid:980352645 +iyr:2015 hgt:66 eyr:2023 hcl:#b6652a ecl:oth + +ecl:amb byr:1980 hgt:164cm pid:775303596 hcl:#671bed iyr:2013 eyr:2030 + +hgt:173cm byr:1947 eyr:1947 iyr:1940 ecl:gmt hcl:7e515c + +hcl:#b6652a +iyr:2012 +eyr:2030 hgt:185cm ecl:grn + +ecl:amb byr:1940 hcl:#2943a5 iyr:2015 +hgt:185cm pid:931660417 +eyr:2021 + +eyr:1957 hcl:#623a2f +ecl:grt hgt:62cm pid:#af106a iyr:2012 +cid:59 byr:1985 + +ecl:amb eyr:2025 +pid:351412754 iyr:2014 byr:1941 hcl:#6b5442 hgt:174cm + +pid:5621200134 hcl:6ef9ba ecl:#ef68f5 eyr:1924 +hgt:63cm cid:188 byr:2004 + +hcl:#a97842 byr:1976 eyr:2020 hgt:171cm pid:041926354 iyr:2019 + +cid:234 +byr:2025 hcl:98619a pid:181cm eyr:1941 +iyr:2021 +hgt:167in ecl:#f5e651 + +hgt:73cm eyr:2028 byr:1985 iyr:1949 hcl:z ecl:utc cid:207 pid:#ee9f95 + +pid:179cm eyr:2030 hcl:b8e142 +hgt:69cm +iyr:1933 +byr:1934 +ecl:grn + +iyr:2028 eyr:1954 hgt:111 cid:180 pid:183391861 +byr:2030 hcl:1fb30f ecl:#0d0160 + +ecl:#0b3b2d hgt:191cm byr:2023 pid:727024676 eyr:2025 hcl:#b6652a + +hgt:66in +byr:1923 eyr:2023 ecl:gry +pid:454789451 iyr:2013 hcl:#cfa07d + +eyr:2020 +pid:339972685 +ecl:amb +iyr:2017 byr:1926 hgt:154cm +hcl:#18171d + +ecl:oth cid:302 +byr:1946 +hcl:#ceb3a1 +pid:622779476 eyr:2024 iyr:2012 hgt:158cm + +byr:2012 +pid:748786877 hgt:135 iyr:2016 hcl:b6e962 ecl:gry eyr:2011 + +byr:1997 +hcl:#a97842 +eyr:2022 pid:325672898 ecl:amb hgt:190cm iyr:2010 + +cid:210 hcl:#c0946f byr:1957 eyr:2022 +iyr:2020 pid:374646087 ecl:blu hgt:184cm + +eyr:2029 ecl:#353e0f +pid:#66ec82 +byr:2023 hcl:10d9d8 cid:271 + +pid:816485054 +eyr:2019 ecl:grn +hcl:#efcc98 hgt:185cm iyr:2013 +byr:2014 + +hcl:#866857 iyr:2014 byr:1953 eyr:2022 ecl:blu hgt:166cm + +pid:162cm hgt:59cm iyr:1981 +eyr:2025 byr:2009 +ecl:gmt hcl:116742 + +eyr:2028 hgt:67cm hcl:3d1f34 byr:1963 pid:62859332 +ecl:dne +iyr:2023 + +iyr:2013 +pid:271450754 eyr:2016 hcl:e20882 cid:186 hgt:157in ecl:utc byr:2023 + +pid:702200026 eyr:1968 ecl:gmt hcl:#888785 iyr:2018 hgt:193in byr:1943 + +eyr:2025 byr:1989 ecl:amb hcl:#866857 cid:119 +hgt:191cm +pid:556011434 + +hgt:178cm iyr:2013 +pid:928476807 +ecl:amb hcl:#623a2f byr:1996 eyr:2026 + +cid:222 +pid:325218825 eyr:2021 byr:1983 hgt:155cm ecl:brn iyr:2011 +hcl:#fffffd + +pid:949344785 ecl:grn eyr:2025 cid:182 byr:1974 hcl:#ceb3a1 +iyr:2011 + +cid:269 pid:669599426 hgt:176cm ecl:blu byr:1957 +iyr:2015 hcl:#623a2f eyr:2025 + +eyr:2023 hcl:#888785 +pid:178525132 iyr:2018 hgt:186cm + +ecl:hzl +byr:1940 iyr:2013 +hgt:185cm eyr:2028 +hcl:#7c73a3 + +hcl:z +byr:2001 cid:292 ecl:#d56bbd pid:93473192 +iyr:2003 hgt:150 +eyr:1922 + +eyr:2021 pid:786485899 +hgt:170cm hcl:#efcc98 byr:1955 +iyr:2010 ecl:brn + +hcl:#733820 ecl:hzl hgt:157cm byr:1944 eyr:2027 pid:906803629 iyr:2015 + +hgt:151cm ecl:blu iyr:2016 +hcl:#02ffd7 byr:1995 +pid:369315941 eyr:2026 + +cid:330 ecl:#18e883 eyr:2038 +hcl:z iyr:1929 +hgt:193 pid:33765426 + +pid:743094345 eyr:2027 +iyr:1949 byr:1955 +ecl:gry +hgt:160cm hcl:8dae67 + +cid:167 hcl:#18171d +iyr:2016 pid:214065645 byr:1942 eyr:2030 hgt:183cm ecl:hzl + +ecl:brn hcl:#623a2f cid:171 byr:1971 +iyr:2011 eyr:2028 +pid:607344613 +hgt:153cm + +byr:1921 pid:677007802 hcl:#341e13 ecl:brn iyr:2012 hgt:188cm eyr:2028 + +hgt:162cm cid:319 hcl:z iyr:2025 +byr:1989 eyr:1939 pid:67311222 +ecl:utc + +iyr:2014 eyr:2025 hgt:171cm +cid:302 byr:1997 +hcl:z +ecl:amb pid:101363367 + +ecl:oth iyr:2010 +cid:96 hgt:164cm hcl:4bc20a byr:1947 +pid:166115442 eyr:2030 + +byr:1964 +hcl:#6b5442 hgt:156cm eyr:2022 pid:426807062 ecl:brn cid:321 iyr:2012 + +byr:2012 hcl:#888785 cid:298 eyr:1920 ecl:zzz hgt:169cm pid:0660316558 iyr:2019 + +hcl:579266 byr:1931 pid:#aa5fd0 ecl:gry eyr:2017 hgt:60 iyr:1965 + +iyr:2011 +pid:610896691 hcl:#733820 +byr:1936 +ecl:gry eyr:2021 hgt:161cm + +pid:443246791 iyr:2015 hgt:158cm hcl:#18171d +byr:1928 ecl:brn cid:207 + +byr:1950 pid:644579904 hcl:#b6652a +eyr:2027 iyr:2017 +ecl:brn hgt:171cm + +iyr:2011 byr:1960 +eyr:2023 +hgt:171cm ecl:hzl +pid:331465564 cid:205 hcl:#18171d + +hgt:61cm eyr:1987 ecl:#9f458c byr:2023 pid:162cm hcl:z iyr:1997 + +hcl:59e376 pid:065607649 +iyr:2020 +byr:2010 ecl:blu + +pid:167cm byr:2022 hgt:150cm ecl:#06650a hcl:caa145 eyr:2032 +iyr:2015 + +byr:1932 +hcl:#419d73 +cid:203 iyr:2017 +pid:105921085 +ecl:gry + +pid:501585534 hcl:#418895 +iyr:2018 +hgt:157cm byr:1940 ecl:hzl eyr:2027 + +cid:220 hgt:171cm hcl:#623a2f +ecl:gry +iyr:2017 +pid:085309709 eyr:2024 byr:1932 + +hcl:#733820 eyr:2028 cid:93 +iyr:2017 +byr:1974 hgt:163cm ecl:grn pid:630322998 + +hcl:#602927 cid:97 hgt:166cm eyr:2025 +ecl:hzl iyr:2016 byr:1964 pid:355325363 + +iyr:2016 pid:402228657 hgt:174cm byr:1993 +eyr:2020 hcl:#733820 ecl:grn + +iyr:2020 hgt:171cm ecl:amb +hcl:#c0946f +byr:1939 +cid:316 pid:782384470 eyr:2030 + +byr:1983 pid:839608616 +eyr:2026 +hcl:#ceb3a1 cid:242 +hgt:192cm ecl:hzl + +pid:701022732 byr:1931 ecl:amb +hgt:70in hcl:#341e13 eyr:2030 iyr:2013 + +eyr:2027 +pid:740692321 byr:1940 +hgt:179cm ecl:blu cid:153 iyr:2010 + +iyr:2024 hcl:z ecl:zzz hgt:181in pid:#c38620 eyr:1976 cid:97 +byr:2029 + +byr:1999 ecl:lzr hcl:6f29a6 eyr:2023 +iyr:2018 cid:209 pid:401606571 hgt:163cm + +ecl:amb +byr:1996 hgt:181cm iyr:2018 hcl:#6b5442 pid:022285219 eyr:2021 + +cid:93 pid:807990476 +hgt:61in eyr:2027 hcl:#cfa07d ecl:oth iyr:2017 + +hcl:#7d3b0c pid:225151503 iyr:2013 cid:68 +eyr:2029 +ecl:brn hgt:64in byr:1959 + +eyr:2028 hgt:172in +iyr:2014 byr:1950 pid:187cm hcl:z ecl:brn + +byr:1982 +pid:978263388 eyr:2021 hgt:175cm iyr:2014 ecl:brn hcl:#a97842 + +hgt:162cm +eyr:2025 +pid:6533951177 byr:1993 iyr:2011 hcl:#c0946f ecl:hzl + +pid:182cm +iyr:2025 eyr:2035 hgt:59in +ecl:#799f29 hcl:z +byr:1920 cid:202 + +hcl:#733820 +eyr:2022 hgt:185cm byr:1989 pid:195276207 +ecl:blu iyr:2017 + +hcl:#7d3b0c +cid:257 ecl:gry +pid:123065639 byr:1951 iyr:2013 + +eyr:2039 ecl:#a82e90 byr:1927 pid:719738468 hgt:73cm + +hcl:605223 +hgt:162cm pid:50424035 +ecl:oth cid:343 byr:2025 iyr:2023 eyr:2024 + +hcl:699116 iyr:2001 +eyr:2022 +byr:2013 +hgt:171cm pid:8900968325 + +hcl:#efcc98 eyr:2029 ecl:grn pid:568953221 +byr:1986 +hgt:178cm +iyr:2020 + +pid:452235579 byr:1932 +ecl:grn +iyr:2010 hgt:189cm eyr:2028 +hcl:#602927 cid:258 + +ecl:xry iyr:2009 cid:334 pid:189cm +eyr:2032 byr:2005 hgt:172in hcl:z + +hgt:159cm hcl:z pid:166cm +ecl:oth eyr:2026 iyr:2020 + +eyr:2023 ecl:blu byr:1935 iyr:2015 +hcl:#866857 pid:542611829 +hgt:168cm + +pid:#ec3d53 +hcl:#ceb3a1 +byr:1999 eyr:2024 +hgt:188cm ecl:oth iyr:2018 + +byr:2003 hgt:167 +hcl:486800 +ecl:#29bdd6 eyr:2037 cid:169 iyr:2010 + +byr:1983 +eyr:2026 ecl:gry +pid:203934984 +hgt:181cm iyr:2020 hcl:#a97842 cid:184 + +hgt:180cm +iyr:1934 eyr:2038 hcl:#a97842 ecl:brn byr:1942 pid:427001597 + +hcl:#18171d byr:1988 +cid:267 hgt:188cm +ecl:amb +eyr:2028 pid:696617232 + +eyr:2024 hcl:#cfa07d +iyr:2013 pid:176cm hgt:189cm byr:1990 +ecl:gry + +eyr:2025 iyr:2015 hgt:153cm hcl:#ceb3a1 ecl:grn pid:686467422 byr:1961 cid:282 + +byr:1931 hgt:185cm ecl:oth +eyr:2022 +pid:561083684 hcl:#efcc98 +iyr:2012 + +byr:1948 cid:327 hgt:151cm +iyr:2016 hcl:#733820 ecl:oth pid:341978822 + +hcl:#ceb3a1 +byr:1978 iyr:2020 hgt:172cm +eyr:2022 ecl:oth pid:093317990 + +eyr:2029 +pid:096891409 iyr:2018 +hcl:#d82822 hgt:174cm ecl:hzl +byr:1988 + +hgt:170cm iyr:2018 pid:588142771 eyr:2022 hcl:#733820 +cid:273 byr:1940 ecl:#a608fe + +iyr:2029 eyr:1980 hcl:#341e13 byr:2027 ecl:grt +pid:443809337 hgt:180cm +cid:205 + +ecl:#f89df0 hgt:144 hcl:2f26ab iyr:1982 pid:#3b43c1 eyr:2032 byr:2012 + +ecl:hzl byr:1971 +pid:030850749 +hgt:170in +hcl:#ceb3a1 eyr:2023 iyr:2018 + +byr:1940 iyr:2020 +eyr:2026 pid:437820254 +hgt:179cm ecl:gry + +byr:2028 +eyr:1986 hcl:z +hgt:185in pid:773739744 ecl:dne iyr:2020 + +hcl:#a97842 +hgt:186cm cid:64 iyr:2016 +byr:1947 eyr:2021 + +byr:1988 hgt:160cm eyr:2023 hcl:#866857 pid:788805179 iyr:2022 ecl:amb + +hgt:164cm byr:1996 cid:338 hcl:#efcc98 +eyr:2029 pid:208596014 ecl:blu + +pid:357680064 byr:1960 eyr:2029 ecl:gry hgt:192cm hcl:#c0946f + +ecl:#d32320 +hgt:167in pid:19531341 +hcl:z +cid:346 iyr:2024 byr:2006 eyr:2035 + +pid:843729120 byr:1987 hgt:185cm eyr:2022 +ecl:amb +iyr:2012 hcl:#c0946f + +eyr:2020 byr:1961 iyr:2011 +hgt:162cm cid:54 pid:891397982 ecl:brn + +ecl:zzz byr:2019 iyr:2015 eyr:2028 hcl:43d56d +hgt:152cm +pid:182cm + +hcl:#18171d byr:1979 hgt:174cm +iyr:2013 cid:228 eyr:2022 ecl:amb pid:82422450 + +cid:156 iyr:2017 +byr:1924 +hcl:#b6652a ecl:gry hgt:184cm eyr:2027 pid:451347151 + +pid:850192502 hgt:65in +iyr:2011 hcl:#7d3b0c +eyr:2023 ecl:gry + +ecl:amb hgt:181cm iyr:2017 pid:233345009 byr:1934 +hcl:#341e13 +eyr:2024 cid:199 + +eyr:2026 pid:#4cb480 +iyr:1958 hgt:176cm ecl:dne hcl:z + +ecl:grn eyr:2027 hgt:178cm byr:1994 hcl:#341e13 +iyr:2016 pid:790075315 + +pid:140922484 +byr:1958 +eyr:2025 +iyr:2019 ecl:brn hgt:157cm hcl:#623a2f + +pid:466785488 hgt:160cm hcl:#cfa07d +byr:1947 +iyr:2010 +cid:198 eyr:2020 ecl:hzl + +ecl:oth +eyr:2022 byr:1963 +hcl:#fffffd iyr:2017 +hgt:171cm pid:463249115 + +hgt:73cm byr:1968 +pid:470317690 ecl:blu +iyr:2015 hcl:#c0946f cid:54 eyr:2029 + +hgt:162cm iyr:2014 +byr:1951 hcl:#b6652a eyr:2029 ecl:blu + +ecl:oth +hgt:176cm hcl:#888785 byr:1963 +iyr:2017 pid:453133253 eyr:2025 + +hcl:#efcc98 +eyr:2024 iyr:2020 cid:330 byr:1950 pid:937122408 ecl:gry hgt:162cm + +hgt:168cm +pid:745867335 +cid:165 hcl:#c0946f iyr:2018 ecl:grt eyr:2030 +byr:1932 + +byr:1949 pid:116003343 +hcl:#c0946f hgt:178cm eyr:2028 iyr:2020 cid:220 +ecl:hzl + +iyr:2013 +cid:314 pid:186cm hgt:74cm eyr:1973 ecl:hzl byr:2007 +hcl:180e0c + +pid:486330019 +byr:1999 ecl:oth hgt:154cm iyr:2019 eyr:2026 +hcl:#efcc98 + +eyr:2030 iyr:2018 hcl:#18171d byr:1950 +pid:648616604 hgt:160cm ecl:gry + +hgt:173cm +ecl:oth byr:1993 eyr:2029 hcl:#fffffd iyr:2010 pid:317451887 + +ecl:brn hgt:157cm +byr:1963 eyr:2023 pid:005387570 hcl:#866857 iyr:2012 + +pid:419695212 eyr:2020 byr:1957 cid:198 iyr:2015 hcl:#888785 hgt:168cm ecl:amb + +ecl:amb +iyr:2017 eyr:2024 pid:039995171 hcl:#a97842 +hgt:153cm byr:1983 + +byr:1979 eyr:2021 iyr:2011 hgt:157cm ecl:blu pid:110855542 hcl:#c0946f + +ecl:blu pid:948753945 eyr:2029 iyr:2012 hcl:#ceb3a1 +hgt:164cm byr:1988 + +iyr:2010 +eyr:2032 hcl:#fffffd pid:#175129 hgt:184cm +ecl:hzl byr:1985 + +hgt:189cm ecl:blu byr:1936 eyr:2027 hcl:#733820 +pid:728752361 iyr:2011 + +hcl:#733820 ecl:blu eyr:2023 hgt:172cm iyr:2017 +pid:013415387 byr:1947 + +byr:2012 iyr:2017 pid:#424ae4 +cid:172 hgt:166cm eyr:2022 +hcl:b1319b ecl:#6635d8 + +eyr:2030 +iyr:1928 hgt:185cm ecl:brn pid:#ac5a90 byr:1984 hcl:ac8f43 + +eyr:2027 +ecl:amb iyr:2014 hcl:#fffffd +pid:838758900 +hgt:177cm byr:1942 + +cid:166 iyr:2020 ecl:lzr hgt:70cm eyr:2040 byr:2004 hcl:#733820 + +eyr:2028 ecl:grn byr:2016 cid:61 iyr:2010 +hcl:#cfa07d +hgt:155in +pid:9594283803 + +ecl:gmt pid:984675198 +byr:1997 hgt:128 eyr:2037 hcl:#b6652a cid:299 + +iyr:2015 pid:733864914 eyr:2021 ecl:amb +byr:1971 cid:280 +hgt:181cm hcl:#054593 + +ecl:hzl hcl:#cfa07d eyr:2022 pid:832736421 +byr:1958 +iyr:2010 +cid:274 hgt:152cm + +eyr:2020 hcl:#6b5442 cid:223 hgt:155cm byr:1989 ecl:oth +iyr:2011 pid:549182194 + +iyr:2020 hcl:#cfa07d +eyr:2027 pid:093361240 byr:1941 cid:271 hgt:178cm ecl:brn + +ecl:blu cid:290 eyr:2027 +hgt:192cm byr:1945 hcl:#7d3b0c iyr:2020 pid:910713369 + +byr:1991 hcl:#ceb3a1 ecl:xry hgt:159cm pid:9496171384 +eyr:2030 iyr:2016 + +eyr:2020 pid:812617809 hcl:#7d3b0c +byr:1970 ecl:gmt +iyr:1971 hgt:157in + +pid:596027311 hcl:#866857 hgt:169cm byr:1945 eyr:2030 ecl:oth +iyr:2010 + +hgt:176cm +pid:213213359 byr:2012 hcl:be7b13 eyr:1971 ecl:gmt iyr:2011 +cid:64 + +pid:27107946 ecl:utc hgt:66cm byr:1928 eyr:2040 +cid:87 + +byr:1959 ecl:blu hcl:4e023b pid:9017609497 eyr:2023 hgt:68 iyr:2029 + +hgt:164cm eyr:2023 byr:2008 ecl:grn pid:420168481 hcl:#b6652a iyr:2012 + +eyr:1977 byr:1934 +ecl:brn cid:163 +iyr:2018 pid:2863284754 +hgt:150in hcl:#623a2f + +ecl:hzl eyr:2031 cid:145 hgt:186cm hcl:#cfa07d +byr:1941 iyr:2010 pid:722056139 + +ecl:blu eyr:2027 +hcl:#888785 iyr:2018 byr:1977 cid:278 hgt:156cm + +eyr:2039 hgt:82 byr:2007 +hcl:z iyr:2021 ecl:dne cid:191 +pid:#1cf69f + +pid:183cm cid:111 +hgt:66cm +iyr:1950 +eyr:1947 ecl:#016f6a + +ecl:hzl byr:1957 iyr:2015 hgt:186cm eyr:2029 hcl:#701e04 cid:149 pid:827898914 + +cid:214 pid:785688542 hgt:189cm byr:1974 ecl:brn +hcl:#18171d +eyr:2030 + +hcl:#866857 +cid:241 ecl:grn pid:389488422 byr:1959 iyr:2015 hgt:67in +eyr:2027 + +hcl:#6b5442 iyr:2011 hgt:193cm +eyr:2026 byr:1952 +pid:033382338 +ecl:grn + +iyr:2020 hgt:166cm byr:1927 +eyr:2029 ecl:hzl +pid:927006613 hcl:#623a2f + +ecl:gry pid:640783974 +hgt:71in byr:1945 iyr:2019 cid:268 hcl:#b6652a +eyr:2025 + +hcl:#733820 hgt:163cm +pid:1285584293 byr:1967 ecl:oth +cid:309 iyr:2020 eyr:2031 + +pid:910349085 iyr:2011 hcl:#623a2f byr:1956 +eyr:2025 ecl:gry +hgt:182cm + +pid:018283044 hcl:#602927 hgt:153cm ecl:gry iyr:2020 +eyr:2024 +byr:1990 + +hgt:184cm hcl:#866857 ecl:oth +eyr:2023 pid:405733635 cid:205 +byr:1987 iyr:2012 + +hgt:167cm +iyr:2015 ecl:brn +eyr:2025 +hcl:#18171d cid:313 byr:1960 + +hgt:165cm byr:1933 +iyr:2014 +cid:203 +hcl:#1cdbb3 +ecl:hzl eyr:2027 pid:747009469 + +hgt:169cm ecl:gry iyr:2014 +byr:1966 pid:621876532 hcl:#efcc98 + +cid:342 eyr:2029 hcl:#a97842 byr:1970 +ecl:oth +pid:137287449 hgt:180cm +iyr:2011 + +hcl:#cfa07d byr:1985 hgt:183cm ecl:grn +iyr:2013 eyr:2022 + +iyr:2023 +pid:164cm hcl:z byr:1966 +eyr:2021 ecl:utc + +hcl:#fffffd cid:60 +byr:1973 +pid:324648387 +hgt:177cm eyr:2022 iyr:2010 +ecl:oth + +pid:632056596 hcl:#efcc98 +hgt:73in ecl:brn byr:1928 iyr:2017 +eyr:2023 + +cid:144 ecl:amb eyr:2035 byr:1943 hgt:180cm +iyr:2012 +pid:155cm + +hcl:#6b5442 +pid:927492391 +eyr:2023 hgt:172cm byr:1958 cid:92 ecl:gry iyr:2019 + +iyr:2020 cid:82 +hgt:193in hcl:#b6652a +ecl:grn eyr:2034 byr:2026 + +iyr:1922 hcl:245cb3 byr:2015 +pid:151cm +eyr:2040 +ecl:lzr cid:136 hgt:101 + +byr:2025 +eyr:2029 +hgt:193in +cid:308 +ecl:gry iyr:2028 pid:9335153289 +hcl:z + +eyr:2030 hgt:163cm iyr:2014 +pid:147768826 ecl:blu byr:1922 hcl:#ceb3a1 cid:169 + +ecl:blu byr:2002 eyr:2028 pid:998185490 cid:165 iyr:2020 +hgt:188cm hcl:#c0946f