Created
December 10, 2020 18:33
-
-
Save nwjlyons/28655d4c10373dcb33d4d1b659b0e483 to your computer and use it in GitHub Desktop.
Advent Of Code Day Four Part Two
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ecl:hzl byr:1926 iyr:2010 | |
pid:221225902 cid:61 hgt:186cm eyr:2021 hcl:#7d3b0c | |
hcl:#efcc98 hgt:178 pid:433543520 | |
eyr:2020 byr:1926 | |
ecl:blu cid:92 | |
iyr:2010 | |
iyr:2018 | |
eyr:2026 | |
byr:1946 ecl:brn | |
hcl:#b6652a hgt:158cm | |
pid:822320101 | |
iyr:2010 | |
hgt:138 ecl:grn pid:21019503 eyr:1937 byr:2008 hcl:z | |
byr:2018 hcl:z eyr:1990 ecl:#d06796 iyr:2019 | |
hgt:176in cid:75 pid:153cm | |
byr:1994 | |
hcl:#ceb3a1 hgt:176cm cid:80 pid:665071929 eyr:2024 iyr:2020 ecl:grn | |
cid:280 byr:1955 ecl:blu hgt:155cm hcl:#733820 | |
eyr:2013 iyr:2011 pid:2346820632 | |
hcl:#4a5917 hgt:61cm | |
pid:4772651050 | |
iyr:2026 ecl:brn byr:2015 eyr:2026 | |
iyr:2019 hcl:#a97842 hgt:182cm eyr:2024 ecl:gry pid:917294399 byr:1974 | |
ecl:#9c635c pid:830491851 hgt:175cm cid:141 | |
iyr:2010 | |
hcl:z | |
byr:2026 eyr:1998 | |
byr:1927 iyr:2011 pid:055176954 ecl:gry hcl:#7d3b0c eyr:2025 hgt:166cm | |
hcl:#733820 byr:2008 ecl:utc eyr:1920 pid:159cm hgt:66cm iyr:2030 | |
pid:027609878 | |
eyr:2022 iyr:2012 | |
byr:1960 hgt:157cm | |
hcl:#b6652a | |
cid:117 | |
ecl:grn | |
iyr:2025 pid:7190749793 ecl:grn byr:1984 hgt:71in hcl:c41681 | |
cid:259 eyr:1928 | |
eyr:2029 pid:141655389 cid:52 hcl:#cfa07d iyr:2019 | |
ecl:blu hgt:69in byr:1938 | |
eyr:2020 hgt:166cm | |
ecl:gry | |
pid:611660309 iyr:2011 | |
hcl:#623a2f byr:1943 | |
hgt:190cm eyr:2022 byr:2000 cid:210 pid:728418346 hcl:#a97842 ecl:xry iyr:2015 | |
byr:1973 eyr:2028 iyr:2012 | |
hcl:#ff0ec8 pid:740554599 ecl:amb cid:58 hgt:155cm | |
iyr:2016 pid:922938570 ecl:oth hcl:#fffffd hgt:154cm eyr:2021 byr:1966 | |
ecl:amb | |
byr:1929 | |
hcl:#c3bbea pid:511876219 | |
iyr:2019 | |
hgt:191cm | |
eyr:2026 | |
ecl:utc hgt:155cm pid:#9f0a41 iyr:2012 hcl:#bd4141 | |
byr:1998 eyr:2020 | |
ecl:grn hgt:173cm cid:321 pid:851120816 byr:1968 hcl:#a97842 eyr:2027 | |
iyr:2014 | |
hgt:155cm hcl:#f40d77 pid:038224056 byr:1953 ecl:brn iyr:2014 | |
eyr:2022 | |
pid:181869721 | |
iyr:2011 hgt:151cm hcl:#733820 cid:110 ecl:blu | |
byr:1931 eyr:2024 | |
byr:1948 | |
hcl:#888785 | |
hgt:74in | |
cid:112 ecl:hzl pid:921761213 eyr:2028 | |
iyr:2015 | |
ecl:gry | |
byr:1931 | |
pid:600127430 hcl:#341e13 eyr:2027 | |
iyr:2013 hgt:173cm | |
hgt:178cm pid:530791289 hcl:#6b5442 | |
eyr:2022 byr:1979 iyr:2014 ecl:hzl | |
pid:412193170 hcl:#cfa07d hgt:186cm iyr:2012 cid:284 eyr:2020 byr:1967 | |
ecl:grn | |
hcl:#6b5442 | |
iyr:2015 pid:808448466 ecl:blu eyr:2022 hgt:159cm byr:1969 | |
eyr:2020 | |
iyr:2019 hgt:170cm pid:8964201562 hcl:#6b5442 byr:1947 ecl:amb | |
eyr:2029 ecl:hzl hcl:#866857 byr:1961 | |
iyr:2017 | |
ecl:#3456ba eyr:2013 iyr:2020 pid:378280953 | |
hcl:z hgt:174cm | |
hgt:172cm | |
cid:202 ecl:oth eyr:2021 byr:1980 | |
iyr:2012 | |
hcl:#cfa07d pid:605707698 | |
cid:281 hgt:161cm iyr:2017 pid:122936432 hcl:#602927 byr:1981 ecl:gry eyr:2021 | |
byr:1959 hgt:193cm pid:083900241 iyr:2020 eyr:2037 hcl:#623a2f | |
ecl:hzl | |
iyr:2030 hgt:153cm eyr:2022 hcl:#efcc98 cid:131 | |
byr:2016 ecl:hzl pid:64053944 | |
hgt:172cm eyr:2025 | |
hcl:#866857 | |
byr:1938 ecl:dne | |
pid:192cm iyr:2014 | |
pid:016297574 cid:152 iyr:2015 | |
eyr:2024 hcl:#341e13 byr:1965 hgt:175cm | |
ecl:oth | |
pid:604330171 cid:125 byr:1974 hgt:160cm iyr:2014 | |
eyr:2022 ecl:oth hcl:#6b5442 | |
pid:59747275 | |
byr:2027 | |
hgt:145 | |
hcl:1fd71f iyr:1944 eyr:2037 ecl:brn | |
iyr:2010 | |
eyr:2021 byr:1953 | |
pid:7098774146 ecl:brn hcl:98737d hgt:158cm | |
hcl:#602927 eyr:2039 pid:#81a5a1 iyr:2012 cid:67 byr:1951 | |
ecl:#6551f5 hgt:76cm | |
hgt:170cm ecl:oth | |
cid:235 eyr:2022 | |
byr:1929 iyr:2019 | |
hcl:#341e13 pid:797557745 | |
iyr:2011 | |
hcl:#733820 | |
eyr:2022 pid:830183476 ecl:blu byr:1976 cid:157 hgt:75in | |
hgt:164cm ecl:amb pid:653425455 hcl:#623a2f byr:1977 eyr:2020 | |
iyr:2013 | |
byr:2009 eyr:1953 hgt:178cm pid:#5d02f0 | |
hcl:#a97842 iyr:2016 | |
ecl:amb | |
pid:009643210 eyr:2036 ecl:zzz | |
cid:97 hcl:32e540 byr:2005 hgt:187cm iyr:2021 | |
pid:155cm | |
iyr:2022 byr:2024 eyr:2031 ecl:amb cid:79 | |
hcl:#cfa07d hgt:69cm | |
cid:176 ecl:oth | |
pid:688645779 byr:1933 eyr:2026 hgt:69cm | |
iyr:2016 hcl:#888785 | |
hcl:#888785 | |
eyr:2027 | |
iyr:2020 pid:802243213 ecl:brn | |
hgt:179cm byr:1976 | |
hcl:#6cad3e hgt:164cm byr:1982 iyr:2020 | |
ecl:gry | |
pid:142160687 eyr:2023 | |
hcl:#18171d | |
hgt:153cm | |
iyr:2014 ecl:hzl cid:231 pid:167809118 byr:1997 eyr:2028 | |
byr:1940 | |
ecl:hzl iyr:2016 cid:67 hcl:#c800da | |
pid:563956960 eyr:2021 | |
hgt:189cm | |
pid:133094996 eyr:2032 hgt:60cm hcl:#623a2f byr:2030 ecl:dne iyr:2023 | |
pid:65195409 hcl:d0d492 | |
iyr:1956 | |
byr:2019 ecl:#bb043f eyr:2031 hgt:167in | |
iyr:2016 byr:2006 ecl:#35d62f eyr:2029 | |
hgt:186cm | |
hcl:1d8307 | |
eyr:1935 iyr:1960 pid:346667344 ecl:grn hgt:170cm hcl:cfcc36 | |
ecl:oth byr:1979 pid:165581192 | |
hgt:177cm | |
hcl:#c0946f | |
iyr:2011 | |
iyr:2011 eyr:2030 pid:250840477 | |
byr:1934 cid:174 hgt:179cm hcl:#866857 | |
ecl:blu | |
hgt:157cm hcl:#7d3b0c eyr:2027 pid:979510046 | |
ecl:oth | |
iyr:2025 | |
hgt:69 | |
ecl:grt byr:1935 | |
eyr:1928 pid:168cm | |
cid:271 hcl:z | |
pid:998166233 | |
iyr:2020 hgt:166cm ecl:amb byr:1995 hcl:#fffffd | |
hcl:#ceb3a1 ecl:amb | |
iyr:2019 | |
eyr:2024 hgt:184cm byr:1980 pid:839215481 | |
cid:146 | |
byr:1967 | |
pid:444303019 ecl:oth hgt:150cm eyr:2024 | |
eyr:2023 byr:1960 iyr:2010 | |
cid:236 hcl:#733820 pid:900635506 | |
hgt:69in | |
ecl:hzl | |
eyr:2029 pid:969574247 | |
hgt:150cm byr:1967 | |
iyr:2010 ecl:blu | |
pid:575879605 iyr:2010 | |
ecl:hzl | |
byr:1963 | |
hgt:151cm | |
hcl:#c0946f cid:277 | |
byr:1998 pid:621374275 | |
ecl:brn hcl:z iyr:2029 | |
eyr:2024 | |
hgt:68cm | |
pid:365407169 ecl:amb hcl:#87f433 iyr:2011 eyr:2021 byr:1987 | |
hgt:175cm cid:201 | |
hgt:175cm iyr:2020 | |
ecl:gry | |
eyr:2029 pid:806927384 cid:59 | |
byr:1932 hcl:#888785 | |
pid:589898274 cid:113 hcl:z hgt:184cm eyr:2000 | |
ecl:lzr iyr:2016 byr:2016 | |
ecl:#2bafbb | |
eyr:2038 iyr:2027 | |
hcl:#fffffd | |
hgt:174 byr:2007 | |
pid:093750113 | |
eyr:2022 hgt:59in | |
hcl:#ceb3a1 | |
pid:159921662 ecl:gry | |
byr:1948 iyr:2014 | |
cid:50 | |
hgt:190cm | |
iyr:2014 pid:480507618 hcl:#fffffd byr:1945 eyr:2029 | |
byr:1951 hgt:152cm ecl:brn iyr:2016 eyr:2029 cid:179 pid:027575942 | |
hcl:#fffffd | |
cid:198 pid:728480773 eyr:2028 hgt:153cm iyr:2018 | |
hcl:#888785 ecl:amb byr:1983 | |
byr:1968 hcl:#c0946f ecl:grn eyr:2027 | |
iyr:2013 pid:269749807 | |
cid:227 | |
hgt:178cm | |
eyr:2024 hgt:185cm ecl:oth | |
hcl:#448ace byr:1987 iyr:2018 pid:454243136 | |
byr:1930 ecl:grn iyr:2018 hgt:158cm | |
hcl:#341e13 eyr:2021 | |
eyr:2024 cid:194 pid:425431271 | |
hgt:169cm ecl:grn byr:1973 | |
iyr:2014 hcl:#fffffd | |
ecl:grn cid:110 iyr:2013 hcl:#18171d | |
hgt:155cm eyr:2024 byr:1962 pid:522435225 | |
byr:1934 ecl:hzl hgt:152cm iyr:2018 | |
eyr:2024 pid:079740520 | |
ecl:grn eyr:2023 hcl:c3f119 pid:468039715 iyr:2013 hgt:150cm byr:1955 | |
pid:809357582 eyr:2025 byr:1958 | |
hcl:#6b5442 iyr:2013 | |
hgt:161cm ecl:hzl | |
hcl:#b6652a pid:068979430 byr:1960 iyr:2010 ecl:grn hgt:159cm eyr:2021 | |
cid:105 pid:495292692 byr:1965 | |
hcl:#ceb3a1 hgt:160cm ecl:amb | |
iyr:2020 | |
iyr:2010 | |
eyr:2024 byr:1941 ecl:grn hcl:#b35770 hgt:171cm cid:132 pid:975699036 | |
pid:767448421 hgt:186cm hcl:#733820 | |
byr:1972 iyr:2020 eyr:2026 ecl:grn | |
pid:036236909 iyr:2012 | |
hgt:181cm hcl:#888785 | |
eyr:2026 | |
ecl:hzl byr:1936 | |
hgt:173cm | |
byr:1923 ecl:blu | |
eyr:2026 pid:570818321 | |
hcl:#733820 iyr:2016 | |
cid:59 | |
pid:2711059768 | |
byr:2024 | |
cid:139 ecl:blu hcl:z hgt:60cm | |
eyr:2025 | |
pid:671193016 | |
byr:1950 hcl:#6b4b25 iyr:2017 hgt:158cm ecl:blu | |
hgt:175cm iyr:2015 ecl:amb | |
byr:1984 eyr:2026 pid:342782894 | |
cid:140 | |
iyr:2019 eyr:2027 byr:1972 | |
pid:196266458 | |
hgt:158cm hcl:#7d3b0c cid:69 | |
pid:604018034 iyr:2016 ecl:brn eyr:2028 hgt:172cm hcl:#6b5442 byr:1922 | |
cid:238 | |
eyr:2024 ecl:gry byr:1970 pid:356551266 cid:340 hgt:162cm iyr:2013 | |
ecl:amb | |
hgt:151cm hcl:#18171d byr:1921 pid:187276410 eyr:2030 iyr:2015 | |
eyr:2030 pid:056372924 hcl:#d236d9 hgt:156cm | |
iyr:2014 ecl:blu | |
iyr:2014 eyr:2028 byr:1991 | |
hcl:#b6652a pid:119231378 hgt:155cm ecl:blu | |
cid:77 | |
hcl:#341e13 | |
eyr:2027 | |
iyr:2012 ecl:grn hgt:152cm pid:405955710 byr:1970 | |
iyr:2013 hgt:180cm eyr:1978 ecl:amb byr:1929 pid:3198111997 hcl:z | |
pid:32872520 ecl:#8a0dd4 iyr:1955 eyr:2036 | |
byr:2027 cid:133 hcl:z hgt:184in | |
hgt:152cm pid:402361044 | |
hcl:#efcc98 eyr:2029 ecl:grn iyr:2014 | |
byr:1960 | |
byr:1972 eyr:2026 pid:411187543 iyr:2014 | |
hgt:184cm cid:211 hcl:#866857 ecl:brn | |
ecl:brn | |
hcl:#efcc98 | |
pid:311916712 | |
byr:1957 hgt:151cm eyr:2020 iyr:2020 | |
iyr:1968 | |
hcl:a28220 | |
pid:#ed250d cid:240 eyr:2031 | |
hgt:181cm ecl:xry | |
ecl:grn byr:1946 hgt:172cm iyr:2010 hcl:#b6652a pid:372011640 eyr:2026 | |
ecl:brn | |
eyr:2026 byr:1980 hcl:#c0946f | |
hgt:151cm pid:153076317 iyr:2012 | |
byr:1966 pid:852999809 ecl:oth | |
hgt:163cm | |
iyr:2014 eyr:2029 hcl:#341e13 | |
ecl:blu | |
byr:1959 hgt:191cm pid:195095631 iyr:2016 hcl:#ceb3a1 eyr:2028 | |
byr:2001 ecl:gry hcl:#888785 iyr:2018 hgt:177cm pid:576714115 | |
iyr:2017 | |
byr:1949 | |
ecl:blu hgt:186cm cid:289 pid:859016371 | |
hcl:#ceb3a1 eyr:2021 | |
byr:1999 hcl:#b6652a eyr:2023 | |
hgt:175cm | |
ecl:gry iyr:2013 cid:165 pid:194927609 | |
hgt:70in eyr:2027 ecl:brn iyr:2012 pid:162238378 hcl:#ceb3a1 byr:1986 | |
hgt:63in ecl:xry | |
byr:2011 iyr:2024 | |
hcl:5337b0 | |
hcl:#341e13 eyr:2029 | |
hgt:184cm ecl:amb iyr:2012 | |
byr:1970 | |
byr:1920 pid:472914751 | |
eyr:2028 | |
hgt:187cm hcl:#cfa07d cid:290 ecl:gry | |
byr:1948 ecl:gry eyr:2025 hgt:151cm cid:276 hcl:#6b5442 pid:937979267 | |
iyr:2016 | |
byr:1934 | |
pid:626915978 hcl:#623a2f hgt:167cm ecl:gry | |
iyr:2020 eyr:2023 | |
byr:1949 | |
hgt:68in eyr:2027 iyr:2019 hcl:#733820 ecl:brn cid:237 | |
pid:057797826 | |
pid:155cm | |
hgt:68cm ecl:lzr hcl:z cid:344 eyr:2028 iyr:2020 byr:2017 | |
byr:1959 | |
hcl:#341e13 eyr:2022 | |
iyr:2019 pid:728703569 | |
hgt:167cm | |
ecl:oth | |
ecl:grn | |
eyr:2024 byr:1999 | |
pid:566956828 | |
iyr:2015 cid:293 hcl:#602927 hgt:192cm | |
byr:1939 | |
ecl:xry pid:929512270 hgt:66in iyr:1939 eyr:2030 hcl:#efcc98 | |
eyr:2026 | |
iyr:2014 | |
pid:176cm hcl:#fffffd | |
ecl:gry | |
hgt:151cm byr:1933 | |
cid:256 | |
ecl:oth eyr:2025 iyr:2017 hgt:159cm pid:055267863 cid:55 byr:2001 hcl:#cfa07d | |
eyr:2029 byr:1954 ecl:hzl cid:123 iyr:2020 hgt:192cm hcl:#866857 | |
pid:225593536 | |
pid:320274514 cid:289 byr:1963 | |
eyr:1942 | |
ecl:gmt hcl:z hgt:167in iyr:2022 | |
byr:2013 | |
ecl:gmt | |
iyr:2011 | |
hcl:#733820 pid:#e7962f | |
hgt:178cm eyr:2029 | |
pid:154cm ecl:hzl | |
eyr:2035 byr:2023 cid:104 iyr:2026 | |
eyr:2024 ecl:hzl hcl:#7d3b0c iyr:2010 | |
pid:105864164 | |
byr:1955 | |
hgt:163cm | |
eyr:2021 hgt:151cm | |
iyr:2017 hcl:#c0946f | |
ecl:amb | |
cid:150 | |
pid:296798563 | |
byr:1953 | |
iyr:2012 | |
byr:1990 hcl:#341e13 | |
pid:189449931 eyr:2024 hgt:64in | |
hcl:z cid:79 byr:2028 | |
eyr:2028 pid:886152432 | |
ecl:#ce0596 hgt:178cm | |
iyr:2029 | |
ecl:brn | |
iyr:2019 hgt:151cm | |
hcl:#341e13 | |
byr:1969 | |
pid:468846056 | |
eyr:2022 | |
ecl:grn hgt:157cm iyr:2012 | |
eyr:2020 | |
hcl:#b6652a cid:338 | |
byr:1954 pid:153867580 | |
iyr:2011 | |
eyr:2027 | |
byr:1935 | |
hgt:151cm | |
ecl:blu pid:802665934 cid:276 hcl:#623a2f | |
hcl:#efcc98 eyr:2026 ecl:amb | |
iyr:2014 pid:320160032 | |
hgt:157cm | |
byr:1976 | |
eyr:2021 cid:172 | |
iyr:2012 ecl:oth hgt:187cm | |
pid:432856831 byr:2001 hcl:#733820 | |
eyr:2028 ecl:amb hcl:#efcc98 | |
iyr:2020 byr:1954 hgt:153cm | |
byr:1930 ecl:brn hcl:#fffffd | |
pid:458840035 hgt:178cm eyr:2021 | |
iyr:2011 cid:336 | |
pid:216876576 hcl:#341e13 | |
eyr:2028 iyr:2018 hgt:177cm byr:1938 | |
ecl:brn cid:214 | |
byr:2029 eyr:1987 | |
hgt:75cm pid:193cm hcl:#b6652a cid:246 iyr:2028 | |
ecl:hzl hgt:151cm hcl:#7d3b0c | |
eyr:2030 pid:910999919 | |
iyr:2019 byr:1956 | |
byr:1950 | |
cid:95 iyr:2013 ecl:grn | |
eyr:2020 hcl:#623a2f | |
pid:603817559 hgt:159cm | |
pid:913791667 | |
iyr:2018 byr:1959 hcl:#a97842 hgt:179cm eyr:2029 ecl:gry | |
hgt:71in | |
ecl:blu eyr:2028 | |
hcl:#18171d byr:1937 iyr:2011 pid:951572571 | |
hcl:#b6652a iyr:2015 hgt:170cm ecl:blu cid:292 | |
byr:1977 pid:475457579 eyr:2020 | |
ecl:amb eyr:2029 | |
pid:530769382 iyr:2018 cid:53 | |
hgt:63in | |
byr:1954 hcl:#07de91 | |
hcl:#cfa07d hgt:185cm | |
byr:1929 iyr:2011 | |
eyr:2027 | |
iyr:2019 ecl:oth byr:2023 hcl:#341e13 pid:879919037 | |
eyr:2030 hgt:174cm | |
hcl:z hgt:182cm ecl:grn iyr:2010 eyr:2020 pid:2063425865 | |
cid:182 | |
byr:2019 | |
byr:1930 hgt:185cm pid:412694897 eyr:2025 ecl:brn iyr:2020 | |
hcl:#a97842 | |
hgt:150cm byr:1955 eyr:2020 cid:149 pid:597600808 | |
hcl:#ceb3a1 | |
ecl:hzl | |
pid:209568495 | |
eyr:2026 byr:1928 hcl:#341e13 hgt:183cm ecl:brn iyr:2011 | |
pid:723789670 ecl:blu iyr:2013 byr:1933 | |
cid:239 hcl:#7d3b0c eyr:2026 hgt:151cm | |
byr:1978 eyr:2027 hgt:164cm | |
pid:009071063 | |
hcl:#602927 iyr:2014 ecl:blu | |
hcl:#18171d ecl:grn hgt:154cm cid:154 iyr:2016 | |
byr:1952 pid:730027149 eyr:2024 | |
eyr:2025 hcl:#888785 iyr:2013 cid:90 | |
byr:1975 ecl:grn | |
pid:619198428 hgt:161cm | |
ecl:gry iyr:2013 pid:795604673 cid:198 byr:1962 | |
hcl:#6b5442 hgt:64in eyr:2021 | |
hcl:#ceb3a1 ecl:oth iyr:2015 | |
eyr:2021 pid:920586799 cid:302 hgt:60in | |
byr:1964 | |
eyr:2021 ecl:gry iyr:2019 | |
hcl:#6b5442 hgt:192cm | |
byr:1996 | |
pid:692698177 | |
ecl:grn pid:141369492 byr:1956 eyr:2028 hcl:#6b5442 hgt:190cm iyr:2014 | |
hcl:#6b5442 | |
ecl:grn iyr:2020 hgt:153cm | |
pid:312738382 eyr:2028 | |
byr:1985 | |
byr:1979 | |
eyr:2021 ecl:gry hgt:175cm pid:787676021 cid:81 hcl:#b6652a iyr:2012 | |
cid:80 hgt:188cm byr:1964 pid:105773060 iyr:2014 hcl:#733820 ecl:gry eyr:2028 | |
byr:1960 pid:251870522 iyr:2018 hgt:168cm ecl:blu hcl:#c0946f eyr:2026 | |
cid:270 | |
pid:#5661f0 hgt:182in | |
ecl:dne | |
byr:1930 | |
hcl:z iyr:2026 | |
hcl:#888785 byr:1954 pid:170544716 eyr:2028 hgt:162cm cid:244 | |
iyr:2014 | |
ecl:grn | |
iyr:2017 | |
hgt:69in | |
ecl:hzl | |
pid:544135985 hcl:#ceb3a1 eyr:2020 | |
hcl:92d4a1 iyr:2018 pid:178cm | |
cid:347 | |
hgt:97 eyr:2017 | |
ecl:gmt byr:2004 | |
ecl:oth iyr:2018 hcl:#fffffd byr:1999 pid:853396129 | |
cid:119 eyr:2026 hgt:178cm | |
hgt:69in | |
hcl:#fffffd eyr:2026 byr:1922 | |
iyr:2010 ecl:oth pid:664840386 | |
hgt:178cm | |
byr:2000 | |
iyr:2013 hcl:#cfa07d | |
eyr:2028 pid:842454291 | |
ecl:amb | |
ecl:hzl | |
hcl:#733820 pid:316835287 byr:1998 | |
eyr:2024 | |
iyr:2015 hgt:165cm | |
pid:684064750 byr:1928 ecl:gry iyr:2015 cid:343 | |
hgt:189cm | |
hcl:#4c6cb4 eyr:2020 | |
byr:1923 hcl:#a97842 eyr:2024 ecl:gry | |
pid:095911913 | |
hgt:185cm iyr:2010 | |
ecl:hzl | |
byr:1996 | |
eyr:2023 | |
hgt:177cm | |
hcl:#b6652a pid:011541746 | |
iyr:2011 | |
hcl:#efcc98 | |
iyr:2014 ecl:oth byr:1942 pid:730960830 | |
hgt:183cm | |
eyr:2025 | |
byr:1939 eyr:2029 ecl:amb hcl:#fffffd | |
hgt:188cm pid:732730418 iyr:2013 cid:313 | |
hgt:164cm cid:217 byr:1985 hcl:#888785 eyr:2020 | |
iyr:2014 ecl:oth | |
pid:071172789 | |
eyr:2024 pid:215897274 ecl:#c67898 | |
byr:1972 hcl:#866857 iyr:2010 hgt:170cm cid:310 | |
ecl:hzl pid:030118892 byr:1941 hgt:158cm hcl:#b6652a | |
eyr:2029 iyr:2012 | |
ecl:gry hcl:#c0946f hgt:166cm pid:604313781 | |
byr:1924 eyr:2023 iyr:2020 | |
hcl:#602927 hgt:168cm eyr:2027 ecl:brn | |
pid:764635418 byr:1968 iyr:2010 | |
pid:157933284 | |
ecl:grn | |
eyr:2030 byr:2000 | |
hgt:81 hcl:z | |
hcl:#ec24d1 | |
pid:647881680 byr:1922 | |
hgt:178cm iyr:2020 ecl:amb eyr:2021 cid:94 | |
ecl:hzl byr:1971 iyr:2018 pid:975690657 eyr:2027 | |
hgt:192in | |
cid:202 hcl:#c0946f | |
pid:678999378 | |
hgt:61in | |
byr:1981 hcl:#cfa07d eyr:2029 iyr:2014 | |
ecl:oth | |
eyr:2022 iyr:2012 ecl:grn pid:883419125 | |
hcl:#ceb3a1 | |
cid:136 hgt:75in | |
byr:1952 | |
iyr:2018 hgt:185cm | |
byr:1985 pid:119464380 eyr:2028 hcl:#623a2f ecl:gry | |
eyr:2025 hcl:#ceb3a1 byr:1953 | |
cid:277 hgt:164cm iyr:2010 pid:574253234 | |
cid:252 ecl:amb pid:594663323 | |
hgt:75in hcl:#cfa07d iyr:2019 | |
eyr:2026 byr:1964 | |
iyr:2026 hcl:z pid:60117235 ecl:lzr | |
byr:2016 hgt:156in eyr:1994 | |
pid:448392350 | |
eyr:2022 hcl:#a97842 | |
hgt:157cm | |
ecl:hzl | |
iyr:2018 byr:1973 | |
ecl:brn | |
byr:1951 | |
eyr:2028 | |
hcl:#7d3b0c iyr:2018 hgt:164cm | |
hgt:156cm | |
byr:1963 | |
iyr:2014 eyr:2020 ecl:blu hcl:#ceb3a1 | |
pid:#a87d16 | |
pid:447170366 ecl:blu hcl:#888785 | |
iyr:2012 cid:236 | |
hgt:167cm | |
eyr:2022 byr:1942 | |
hcl:#623a2f | |
eyr:2020 iyr:2017 cid:128 ecl:amb pid:279550425 | |
byr:1983 hgt:154cm | |
byr:2014 eyr:2034 hgt:176in hcl:z | |
ecl:#d4e521 | |
pid:3629053477 cid:177 | |
iyr:1970 | |
pid:30370825 byr:1966 eyr:2026 | |
iyr:2026 hcl:#866857 | |
cid:346 ecl:#f7c189 | |
iyr:2010 pid:271066119 eyr:2023 hcl:#efcc98 hgt:179cm byr:1956 | |
byr:1966 hgt:156cm pid:977897485 cid:287 iyr:2011 hcl:#b6652a ecl:amb eyr:2029 | |
cid:211 ecl:gmt byr:2017 | |
hcl:z eyr:2029 hgt:180in iyr:2021 pid:81920053 | |
byr:2019 | |
pid:5229927737 hcl:75b4f1 hgt:146 iyr:2026 ecl:#92cf7d eyr:2032 | |
eyr:2027 pid:604671573 | |
ecl:hzl | |
hgt:189cm byr:1979 | |
hcl:#efcc98 iyr:2020 | |
iyr:2018 cid:192 | |
eyr:2029 ecl:grn | |
pid:653764645 hgt:179cm | |
hcl:#341e13 byr:1927 | |
byr:2012 | |
iyr:2015 | |
hcl:#b6652a | |
pid:168500059 eyr:2038 cid:234 hgt:191cm ecl:zzz | |
ecl:gry hcl:#623a2f byr:1925 | |
iyr:2016 | |
eyr:2028 cid:157 | |
hgt:154cm | |
pid:196280865 | |
cid:319 pid:928322396 ecl:gry | |
byr:1949 | |
eyr:2028 | |
hcl:#341e13 hgt:171cm | |
iyr:2018 | |
byr:2023 | |
iyr:1953 hgt:154cm ecl:dne | |
hcl:#888785 | |
pid:066246061 eyr:1983 | |
hcl:z | |
iyr:2016 byr:1986 ecl:utc | |
hgt:179cm eyr:2019 pid:583251408 | |
ecl:amb iyr:2014 pid:499004360 | |
byr:1927 eyr:2021 hgt:193cm hcl:#ceb3a1 | |
pid:631303194 ecl:gry | |
hcl:#18171d cid:216 iyr:2019 | |
eyr:2024 hgt:178cm | |
hcl:#341e13 cid:201 | |
byr:1949 iyr:2019 ecl:gry pid:372356205 | |
eyr:2024 | |
hcl:#18171d | |
pid:867489359 | |
hgt:185cm | |
iyr:2020 ecl:amb | |
eyr:2030 | |
byr:1955 | |
byr:1991 | |
ecl:brn eyr:2025 hgt:184cm iyr:2016 pid:202216365 | |
ecl:xry pid:#524139 hgt:151cm hcl:z eyr:2031 byr:2030 iyr:2005 | |
byr:1971 hgt:178cm ecl:amb hcl:#ceb3a1 | |
iyr:2010 | |
eyr:2026 pid:396974525 | |
iyr:2014 | |
hgt:177cm pid:928522073 | |
eyr:2022 | |
ecl:hzl | |
hcl:#c0946f byr:1983 | |
hgt:167cm hcl:#ceb3a1 iyr:2014 | |
pid:172415447 | |
eyr:2020 byr:1956 | |
iyr:2011 hgt:188cm byr:1947 eyr:2020 pid:667108134 ecl:amb hcl:#44a86b | |
cid:302 ecl:brn pid:292483175 hgt:154cm | |
byr:1997 | |
eyr:2026 | |
iyr:2014 hcl:#623a2f | |
hgt:171cm | |
iyr:2014 hcl:z ecl:hzl pid:321513523 eyr:2027 cid:146 | |
byr:2001 | |
eyr:1956 ecl:dne hgt:75cm hcl:82e1fa | |
iyr:2030 byr:2027 | |
eyr:2020 | |
iyr:2011 pid:656669479 ecl:oth hgt:151cm hcl:#efcc98 byr:1981 | |
iyr:2013 | |
byr:1934 | |
pid:142890410 hgt:62in | |
eyr:2022 | |
hcl:#87cca4 | |
ecl:hzl | |
pid:006232726 | |
hgt:173cm ecl:hzl cid:110 | |
eyr:2026 hcl:#866857 iyr:2017 byr:1992 | |
cid:208 | |
iyr:2014 ecl:brn eyr:2024 byr:1935 hgt:187cm | |
hcl:#b6652a | |
pid:770836724 | |
iyr:2014 cid:144 hgt:169cm | |
eyr:2022 | |
ecl:oth | |
pid:117575716 hcl:#fffffd byr:1926 | |
byr:1971 ecl:brn | |
hcl:#733820 eyr:1942 iyr:2013 | |
pid:606274259 hgt:163cm cid:196 | |
byr:1964 | |
pid:997828217 eyr:2029 iyr:2017 ecl:blu hcl:#341e13 | |
hgt:158cm | |
pid:568202531 hcl:#efcc98 hgt:154cm eyr:2029 iyr:2010 | |
byr:1946 | |
ecl:blu | |
iyr:2011 | |
pid:619355919 | |
byr:1955 | |
ecl:brn hcl:#888785 eyr:2030 hgt:155cm | |
ecl:hzl pid:367152545 | |
hgt:162cm | |
cid:221 hcl:#866857 | |
eyr:2024 | |
byr:1997 iyr:2019 | |
hgt:157in | |
cid:268 hcl:32371d byr:2020 | |
ecl:zzz pid:1081234390 | |
ecl:hzl eyr:2026 | |
byr:1969 pid:850482906 cid:166 hcl:#602927 hgt:60in | |
iyr:2019 | |
hcl:#c0946f | |
hgt:176cm | |
ecl:brn eyr:2026 iyr:2018 cid:172 byr:1986 pid:172963254 | |
ecl:grn iyr:2016 | |
hgt:187cm | |
byr:1983 | |
hcl:#efcc98 | |
pid:722084344 eyr:2025 | |
ecl:oth hcl:#341e13 pid:130312766 hgt:171cm iyr:2018 byr:1927 eyr:2024 | |
byr:2021 hgt:152cm hcl:74dda6 | |
eyr:1984 cid:216 | |
iyr:2018 pid:95283942 | |
hcl:#b6652a pid:924778815 iyr:2017 ecl:gry | |
eyr:2035 | |
hgt:68cm | |
iyr:2010 | |
hcl:#efcc98 ecl:brn eyr:2020 pid:801894599 hgt:163cm byr:1959 | |
pid:798701070 eyr:2030 | |
hcl:#866857 ecl:hzl hgt:169cm byr:1994 cid:219 iyr:2010 | |
pid:#e9b41b | |
hcl:#341e13 byr:1970 | |
iyr:2014 | |
ecl:oth cid:266 hgt:68cm eyr:2023 | |
byr:1931 pid:929960843 hgt:187cm hcl:#6b5442 cid:52 iyr:2010 eyr:2024 ecl:brn | |
iyr:2017 byr:1974 | |
ecl:hzl cid:243 pid:66053995 hgt:147 eyr:1920 hcl:z | |
iyr:2012 byr:1962 ecl:brn pid:773399437 hcl:#341e13 | |
eyr:2026 | |
pid:738442771 hgt:186cm eyr:2027 hcl:#efcc98 iyr:2013 | |
ecl:brn byr:1928 | |
pid:855794198 | |
ecl:oth | |
hgt:67in | |
cid:81 | |
iyr:2011 hcl:#b6652a eyr:2020 | |
byr:1921 | |
hcl:176abf hgt:161in | |
byr:2002 iyr:2016 eyr:2027 pid:639047770 ecl:brn | |
cid:178 | |
pid:335686451 | |
hcl:#86c240 iyr:2017 hgt:190cm byr:1968 ecl:amb | |
hgt:150cm | |
hcl:094a87 ecl:#09c463 eyr:1926 pid:537511570 byr:2009 | |
iyr:1998 | |
hgt:74in | |
pid:927963411 | |
eyr:2026 ecl:gry cid:323 iyr:2012 hcl:#fffffd byr:1959 | |
iyr:2018 byr:1978 | |
hcl:#ff1829 eyr:2023 | |
pid:823129853 ecl:hzl | |
hgt:65in | |
pid:189cm | |
ecl:#00391e hgt:72cm hcl:11050f | |
byr:2029 | |
eyr:1994 | |
iyr:1935 | |
cid:186 | |
ecl:grn byr:1942 pid:217290710 hgt:181cm eyr:2021 hcl:#7d3b0c iyr:2019 cid:320 | |
byr:1983 iyr:2013 cid:122 hcl:#ceb3a1 eyr:2030 hgt:59in ecl:grn pid:946451564 | |
ecl:amb | |
cid:236 hgt:184cm | |
hcl:#cfa07d iyr:2017 pid:934730535 eyr:2021 byr:2002 | |
byr:1950 ecl:hzl eyr:2030 hcl:#623a2f pid:742249321 | |
hgt:158cm iyr:2018 | |
byr:1946 eyr:2021 hcl:#a97842 pid:204671558 ecl:grn | |
iyr:2010 hgt:187cm | |
hcl:#b6652a pid:528124882 hgt:162cm byr:1924 ecl:amb iyr:2027 cid:157 | |
eyr:2028 | |
hgt:180cm iyr:2013 byr:1926 pid:232265934 hcl:#602927 ecl:oth | |
byr:1984 ecl:brn | |
iyr:2016 pid:756596443 eyr:2030 hcl:#7d3b0c hgt:183cm | |
hgt:185cm | |
hcl:#fffffd byr:1991 eyr:2023 iyr:2014 | |
ecl:amb | |
pid:759105859 | |
cid:82 iyr:2012 hgt:160cm eyr:2022 pid:593798464 ecl:gry hcl:#4e7571 byr:1983 | |
pid:478427550 | |
iyr:2010 | |
ecl:amb byr:1969 hgt:68in cid:94 eyr:2021 hcl:#866857 | |
ecl:amb iyr:2019 byr:1986 hgt:170cm | |
hcl:#c0946f | |
pid:779205106 eyr:2027 | |
ecl:brn eyr:2025 byr:1925 | |
hcl:#7d3b0c hgt:76in pid:576353079 iyr:2010 | |
hgt:175cm hcl:4bf5ae ecl:amb | |
eyr:2029 pid:173cm cid:329 | |
iyr:1952 byr:1972 | |
ecl:grn | |
eyr:2030 | |
iyr:2015 hcl:#c0946f | |
byr:1989 | |
hgt:178cm | |
pid:287209519 | |
pid:834505198 byr:1985 ecl:gry eyr:2024 | |
cid:295 hgt:169cm iyr:2017 | |
hgt:170cm | |
pid:054644831 eyr:2023 iyr:1949 ecl:amb | |
hcl:#888785 | |
byr:1955 | |
hgt:171cm | |
pid:947263309 iyr:2015 byr:1944 eyr:2027 ecl:grn cid:79 hcl:#341e13 | |
eyr:1982 | |
cid:147 | |
iyr:2015 | |
hgt:70cm hcl:a77c10 ecl:zzz byr:2007 | |
pid:161cm | |
ecl:gry byr:1933 | |
hcl:#c0946f pid:483275512 iyr:2012 eyr:2025 hgt:161cm | |
eyr:1985 hgt:176cm hcl:7b6ddc iyr:2012 cid:326 byr:1973 pid:929418396 ecl:gmt | |
ecl:gry | |
byr:1971 | |
hgt:184cm | |
eyr:2027 hcl:#3adf2c iyr:2017 cid:210 | |
pid:693561862 | |
eyr:2021 pid:779298835 byr:1921 hgt:193cm ecl:amb | |
iyr:2016 hcl:#ceb3a1 | |
hcl:4a1444 | |
byr:2019 iyr:2024 hgt:182in | |
cid:87 ecl:#122264 | |
pid:181cm | |
eyr:1927 | |
cid:267 ecl:amb eyr:2020 byr:2000 | |
hcl:#18171d iyr:2012 hgt:190cm pid:18525759 | |
ecl:oth byr:1988 | |
iyr:2019 pid:660570833 | |
hcl:#866857 hgt:176cm | |
eyr:2030 hcl:#866857 | |
byr:1967 cid:316 pid:560346474 iyr:2015 | |
hgt:160cm | |
ecl:gry | |
ecl:hzl | |
iyr:2014 hgt:164cm hcl:#733820 eyr:2025 | |
pid:106302413 byr:1920 | |
iyr:2016 pid:515066491 | |
ecl:grn eyr:2026 hgt:179cm hcl:#b6652a byr:1982 | |
ecl:#7de6a0 | |
iyr:2004 eyr:1955 hgt:154cm cid:138 byr:2004 | |
pid:758934555 | |
hcl:a21980 | |
pid:#2a21e0 ecl:#1b9b27 hgt:165in | |
byr:1998 iyr:2014 eyr:2032 | |
eyr:2021 hgt:184cm pid:431054313 hcl:#ceb3a1 cid:109 byr:1977 ecl:blu | |
iyr:2011 | |
pid:006339126 hgt:177cm | |
cid:188 hcl:#a97842 | |
iyr:1959 | |
ecl:xry | |
byr:2000 | |
ecl:hzl eyr:2029 | |
iyr:2011 hcl:#866857 hgt:74in |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import re | |
import unittest | |
from typing import Optional | |
class Passport: | |
FIELDS = {"byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid", "cid"} | |
REQUIRED_FIELDS = {"byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid"} | |
def __init__( | |
self, | |
*, | |
byr: Optional[str] = None, | |
iyr: Optional[str] = None, | |
eyr: Optional[str] = None, | |
hgt: Optional[str] = None, | |
hcl: Optional[str] = None, | |
ecl: Optional[str] = None, | |
pid: Optional[str] = None, | |
cid: Optional[str] = None, | |
) -> None: | |
self.byr = byr | |
self.iyr = iyr | |
self.eyr = eyr | |
self.hgt = hgt | |
self.hcl = hcl | |
self.ecl = ecl | |
self.pid = pid | |
self.cid = cid | |
def __repr__(self): | |
return f"<Passport {self.byr=} {self.iyr=} {self.eyr=} {self.hgt=} {self.hcl=} {self.ecl=} {self.pid=} {self.cid=}>" | |
def is_valid(self) -> bool: | |
return bool( | |
self.has_required_fields() and | |
self.is_valid_byr() and | |
self.is_valid_iyr() and | |
self.is_valid_eyr() and | |
self.is_valid_hgt() and | |
self.is_valid_hcl() and | |
self.is_valid_ecl() and | |
self.is_valid_pid() | |
) | |
def has_required_fields(self) -> bool: | |
""" | |
Has passport got all required fields | |
>>> Passport().has_required_fields() | |
False | |
>>> Passport(pid="087499704", hgt="74in", ecl="grn", iyr="2012", eyr="2030", byr="1980", hcl="#623a2f").has_required_fields() | |
True | |
""" | |
fields_with_data: set = { | |
field | |
for field in self.FIELDS | |
if getattr(self, field) is not None | |
} | |
return self.REQUIRED_FIELDS.issubset(fields_with_data) | |
def is_valid_byr(self) -> bool: | |
"""± | |
Is birth year valid | |
>>> Passport(byr="1920").is_valid_byr() | |
True | |
>>> Passport(byr="1900").is_valid_byr() | |
False | |
>>> Passport(byr=None).is_valid_byr() | |
False | |
""" | |
return int(self.byr) in range(1920, 2002) if self.byr is not None else False | |
def is_valid_iyr(self) -> bool: | |
""" | |
Is issue year valid | |
>>> Passport(iyr="2010").is_valid_iyr() | |
True | |
>>> Passport(iyr="2009").is_valid_iyr() | |
False | |
>>> Passport(iyr=None).is_valid_iyr() | |
False | |
""" | |
return int(self.iyr) in range(2010, 2020) if self.iyr is not None else False | |
def is_valid_eyr(self): | |
""" | |
Is expiration year valid | |
>>> Passport(eyr="2020").is_valid_eyr() | |
True | |
>>> Passport(eyr="2010").is_valid_eyr() | |
False | |
>>> Passport(eyr=None).is_valid_eyr() | |
False | |
""" | |
return int(self.eyr) in range(2020, 2030) if self.eyr is not None else False | |
def is_valid_hgt(self) -> bool: | |
""" | |
Is height valid | |
>>> Passport(hgt="60in").is_valid_hgt() | |
True | |
>>> Passport(hgt="190cm").is_valid_hgt() | |
True | |
>>> Passport(hgt="190in").is_valid_hgt() | |
False | |
>>> Passport(hgt="190").is_valid_hgt() | |
False | |
""" | |
if self.hgt and self.hgt.endswith("cm"): | |
return int(self.hgt.removesuffix("cm")) in range(150, 193) | |
elif self.hgt and self.hgt.endswith("in"): | |
return int(self.hgt.removesuffix("in")) in range(59, 76) | |
return False | |
def is_valid_hcl(self) -> bool: | |
""" | |
Is hair colour valid | |
>>> Passport(hcl="#123abc").is_valid_hcl() | |
True | |
>>> Passport(hcl="#123abz").is_valid_hcl() | |
False | |
>>> Passport(hcl="123abc").is_valid_hcl() | |
False | |
>>> Passport(hcl=None).is_valid_hcl() | |
False | |
""" | |
return bool(re.match(r"^#[a-f0-9]{6}$", self.hcl)) if self.hcl is not None else False | |
def is_valid_ecl(self) -> bool: | |
""" | |
Is eye colour valid | |
>>> Passport(ecl="brn").is_valid_ecl() | |
True | |
>>> Passport(ecl="wat").is_valid_ecl() | |
False | |
>>> Passport(ecl=None).is_valid_ecl() | |
False | |
""" | |
return self.ecl in ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"] if self.ecl is not None else False | |
def is_valid_pid(self) -> bool: | |
""" | |
Is passport ID valid | |
>>> Passport(pid="000000001").is_valid_pid() | |
True | |
>>> Passport(pid="0123456789").is_valid_pid() | |
False | |
>>> Passport(pid=None).is_valid_pid() | |
False | |
""" | |
return len(self.pid) == 9 and self.pid.isnumeric() if self.pid is not None else False | |
def parse_raw_data_to_passport(raw_passport_data: str) -> Passport: | |
""" | |
Parse raw data to Passport object | |
""" | |
return Passport( | |
**dict( | |
tuple(field.split(":")) | |
for field in raw_passport_data.split() | |
) | |
) | |
class DayFourPartTwoTestCase(unittest.TestCase): | |
def test_invalid(self): | |
for raw_passport_data in [ | |
"eyr:1972 cid:100\nhcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926", | |
"iyr:2019\nhcl:#602927 eyr:1967 hgt:170cm\necl:grn pid:012533040 byr:1946", | |
"hcl:dab227 iyr:2012\necl:brn hgt:182cm pid:021572410 eyr:2020 byr:1992 cid:277", | |
"hgt:59cm ecl:zzz\neyr:2038 hcl:74454a iyr:2023\npid:3556412378 byr:2007", | |
]: | |
with self.subTest(raw_passport_data=raw_passport_data): | |
self.assertFalse(parse_raw_data_to_passport(raw_passport_data).is_valid()) | |
def test_valid(self): | |
for raw_passport_data in [ | |
"pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980\nhcl:#623a2f", | |
"eyr:2029 ecl:blu cid:129 byr:1989\niyr:2014 pid:896056539 hcl:#a97842 hgt:165cm", | |
"hcl:#888785\nhgt:164cm byr:2001 iyr:2015 cid:88\npid:545766238 ecl:hzl\neyr:2022", | |
"iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719" | |
]: | |
with self.subTest(raw_passport_data=raw_passport_data): | |
self.assertTrue(parse_raw_data_to_passport(raw_passport_data).is_valid()) | |
file = open('./data.txt', 'r') | |
data = file.read() | |
file.close() | |
passports = [parse_raw_data_to_passport(raw_passport_data) for raw_passport_data in data.split("\n\n")] | |
valid_passports = [passport for passport in passports if passport.is_valid()] | |
invalid_passports = [passport for passport in passports if not passport.is_valid()] | |
print("valid_passports", len(valid_passports)) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Results in 144 valid passports out of 290. Answer is too low. Any ideas?