-
-
Save rob-saunders/51ae39369fbcb88eb1ca651b6a6bd90d to your computer and use it in GitHub Desktop.
passport_processor.rb
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
--- Part Two --- | |
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: | |
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 | |
Here are some invalid passports: | |
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 | |
Here are some valid passports: | |
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 | |
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? |
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
eyr:2033 | |
hgt:177cm pid:173cm | |
ecl:utc byr:2029 hcl:#efcc98 iyr:2023 | |
pid:337605855 cid:249 byr:1952 hgt:155cm | |
ecl:grn iyr:2017 eyr:2026 hcl:#866857 | |
cid:242 iyr:2011 pid:953198122 eyr:2029 ecl:blu hcl:#888785 | |
hgt:173cm hcl:#341e13 | |
cid:341 | |
pid:112086592 | |
iyr:2012 byr:2011 ecl:amb | |
eyr:2030 | |
pid:790332032 | |
iyr:2019 | |
eyr:2023 byr:1969 ecl:brn | |
hgt:163cm | |
hcl:#623a2f | |
byr:1920 eyr:2023 cid:146 pid:890112986 hgt:171cm hcl:#b6652a iyr:2017 ecl:hzl | |
hcl:#c0946f byr:1967 cid:199 ecl:gry | |
iyr:2012 pid:987409259 hgt:157cm eyr:2021 | |
pid:316587303 iyr:2016 eyr:2023 ecl:blu byr:1959 hgt:186cm hcl:#733820 | |
hcl:#fffffd hgt:152cm byr:1996 ecl:gry eyr:2024 | |
ecl:brn hgt:185cm | |
pid:648491325 byr:1967 | |
hcl:#172f67 iyr:2014 | |
eyr:2028 | |
pid:328737320 iyr:2017 hcl:#fffffd hgt:178 | |
ecl:#35fad5 | |
byr:1959 | |
iyr:2010 byr:1943 eyr:2028 | |
hgt:178cm hcl:#888785 pid:572750267 | |
cid:175 ecl:brn eyr:2026 iyr:2017 | |
hcl:#5d69b9 byr:1998 pid:289515215 | |
hgt:151cm | |
hgt:182cm | |
ecl:blu eyr:2028 iyr:2011 hcl:#a97842 pid:758494126 | |
iyr:2023 | |
hgt:174cm hcl:cafc2f | |
ecl:utc | |
cid:299 eyr:2026 pid:57963956 | |
pid:853993893 ecl:blu hgt:188cm cid:294 hcl:#341e13 byr:1975 | |
eyr:2027 iyr:2015 | |
ecl:amb hgt:70 iyr:2018 pid:241872490 | |
byr:1962 | |
eyr:2024 hcl:c5f0c3 | |
pid:994754974 eyr:2029 iyr:2017 | |
cid:137 byr:1966 hcl:#733820 ecl:blu | |
ecl:utc | |
pid:937481632 hgt:190 | |
eyr:2025 iyr:2027 byr:1949 cid:84 hcl:d3f4f5 | |
cid:129 ecl:brn hgt:91 eyr:1932 | |
iyr:2020 pid:298540404 hcl:#888785 byr:1986 | |
pid:416051368 eyr:2020 iyr:2011 | |
hgt:93 byr:2023 hcl:#efcc98 | |
ecl:amb | |
byr:2010 hgt:181cm | |
iyr:2020 | |
eyr:2040 pid:785862801 ecl:#f84ccd | |
hgt:152cm iyr:2013 pid:932020343 eyr:2023 ecl:hzl byr:1920 | |
hcl:#fffffd | |
hgt:152cm | |
iyr:2020 byr:1993 hcl:#18171d pid:120354938 | |
eyr:2021 ecl:gry | |
eyr:2025 byr:1996 | |
hcl:#623a2f | |
iyr:2018 ecl:oth cid:177 pid:904738945 hgt:164cm | |
pid:45042993 | |
hgt:193 iyr:2018 byr:2026 eyr:2026 | |
hcl:#623a2f cid:175 ecl:brn | |
byr:1956 ecl:hzl iyr:2020 pid:892810672 hgt:164cm eyr:2021 cid:186 hcl:#efcc98 | |
cid:314 hgt:180cm | |
ecl:amb hcl:#602927 byr:2027 | |
iyr:1958 | |
eyr:2020 pid:#b2b732 | |
cid:50 | |
hcl:#a97842 | |
hgt:155cm pid:667716485 ecl:gry iyr:2014 byr:1995 eyr:2029 | |
eyr:2030 | |
pid:783631610 | |
hgt:74 | |
byr:2014 hcl:z iyr:2003 ecl:grt | |
ecl:#d4d852 iyr:2029 hcl:z hgt:185in | |
eyr:2034 pid:#526166 | |
iyr:1946 eyr:1957 byr:1941 pid:632690435 ecl:oth hcl:18a37c hgt:59cm | |
iyr:2013 | |
eyr:2026 pid:002380966 cid:95 | |
hcl:#623a2f byr:1965 ecl:oth | |
ecl:gry pid:479214778 hcl:#18171d | |
byr:1928 cid:98 eyr:2020 iyr:2019 hgt:163cm | |
hcl:#bd0f54 cid:225 eyr:2024 hgt:153cm iyr:2020 | |
byr:1956 pid:048565668 ecl:hzl | |
ecl:#5d8b3b hgt:156cm eyr:2029 pid:#3df0cc byr:1967 cid:118 hcl:e23f0f | |
pid:437721309 | |
hcl:#cfa07d hgt:181cm iyr:2019 cid:224 eyr:2028 byr:1946 | |
ecl:gry | |
byr:1962 | |
eyr:2023 | |
hgt:182cm | |
pid:733248003 ecl:blu | |
iyr:2014 hcl:#efcc98 | |
byr:1966 hgt:158cm | |
eyr:2029 hcl:#602927 iyr:2013 | |
pid:963663665 | |
pid:529595074 byr:1940 eyr:2020 hcl:#c0946f cid:113 iyr:2015 ecl:oth | |
hgt:191cm | |
ecl:hzl | |
hcl:#a97842 | |
hgt:157cm eyr:2025 iyr:2015 byr:1978 pid:579525362 | |
ecl:oth hcl:#18171d cid:76 iyr:2011 eyr:2021 | |
byr:1953 hgt:173cm pid:976483712 | |
ecl:brn hcl:#fffffd cid:242 pid:588299934 | |
hgt:69in byr:1947 | |
iyr:2010 eyr:2030 | |
hcl:#fffffd ecl:gry cid:93 | |
pid:731904973 byr:1939 eyr:2029 iyr:2016 | |
pid:96716037 iyr:1938 eyr:2032 | |
hgt:192 ecl:gmt byr:2029 hcl:02edc5 | |
byr:1958 | |
iyr:2011 eyr:2029 ecl:gry | |
pid:526931024 | |
hcl:z | |
hgt:59cm | |
byr:1966 ecl:hzl | |
pid:378066668 hcl:#c0946f | |
iyr:2017 eyr:2026 cid:142 hgt:184cm | |
pid:1134356373 | |
iyr:2019 | |
ecl:grn | |
hcl:#ceb3a1 byr:1950 | |
hgt:154in | |
hgt:157cm ecl:zzz byr:1976 | |
pid:5047305958 | |
iyr:2013 hcl:#341e13 | |
eyr:2024 | |
hcl:#a97842 hgt:179cm pid:543943316 cid:214 ecl:brn | |
byr:1999 | |
iyr:2017 | |
byr:1983 eyr:2024 hgt:177cm | |
ecl:hzl | |
iyr:2013 pid:328883228 hcl:#ceb3a1 | |
cid:226 pid:262286178 iyr:2010 ecl:grn byr:1962 eyr:2025 hcl:#efcc98 | |
hgt:60in | |
iyr:2029 ecl:#559ffe hcl:z | |
cid:156 | |
byr:2003 | |
hgt:178 | |
pid:93994500 | |
iyr:2026 hcl:#eda7f3 ecl:amb | |
byr:1921 eyr:2021 pid:153cm | |
byr:1988 | |
ecl:amb hgt:178cm hcl:#2aea45 | |
pid:70722502 eyr:2027 iyr:2015 | |
pid:555636800 eyr:2020 hgt:182cm iyr:2019 byr:1948 cid:325 | |
hcl:#733820 | |
eyr:1973 | |
iyr:2024 hcl:z byr:2028 ecl:dne cid:169 | |
pid:43596015 hgt:170in | |
hcl:#b6652a ecl:gry | |
cid:264 | |
hgt:178cm iyr:2027 pid:23042405 byr:1947 eyr:2024 | |
byr:1989 | |
pid:266274644 ecl:blu eyr:2023 hcl:#733820 | |
hgt:192cm iyr:2018 cid:272 | |
iyr:2013 hcl:z hgt:73cm byr:2014 pid:192cm ecl:#1627a7 | |
pid:816749378 hgt:178cm | |
hcl:#733820 eyr:2029 | |
byr:1993 | |
hcl:0cacc5 byr:1944 iyr:2028 eyr:2024 hgt:163in pid:74169361 | |
ecl:dne | |
hcl:#ceb3a1 | |
ecl:grn | |
eyr:2027 pid:481186415 hgt:176cm cid:325 | |
byr:1986 | |
eyr:2028 hgt:174cm ecl:brn | |
hcl:#888785 iyr:2015 pid:064161451 byr:1969 | |
ecl:brn cid:323 hgt:167 | |
byr:1993 iyr:1953 | |
hcl:z eyr:2023 pid:161542750 | |
ecl:#895336 eyr:2033 hgt:67cm cid:254 iyr:1967 hcl:z byr:1954 | |
ecl:#9dbea3 iyr:2018 eyr:2035 | |
hgt:183 | |
pid:747501524 hcl:#fd8515 cid:110 | |
byr:1997 | |
ecl:utc | |
iyr:2014 hgt:183in byr:2007 eyr:2026 hcl:#cfa07d | |
cid:334 | |
ecl:gry hcl:#b6652a pid:250420128 | |
eyr:2024 byr:1939 hgt:170cm | |
hcl:#18171d eyr:2030 byr:1925 pid:204206116 | |
iyr:2014 hgt:174cm ecl:hzl | |
iyr:2020 hcl:#efcc98 | |
pid:393444692 | |
ecl:oth hgt:152cm byr:1957 eyr:2021 | |
byr:1973 eyr:2024 iyr:2014 hcl:#602927 | |
pid:832320186 hgt:166cm ecl:grn | |
pid:192524664 hgt:182cm | |
hcl:#18171d | |
ecl:oth eyr:2030 byr:1942 iyr:2013 | |
hgt:129 byr:2016 hcl:6734a1 ecl:#915282 iyr:1949 cid:130 pid:677408864 eyr:2030 | |
eyr:2028 ecl:gry hgt:171cm byr:1960 iyr:2020 pid:688526729 cid:262 hcl:#733820 | |
ecl:grn iyr:2019 pid:775867641 hcl:#bf1e29 | |
byr:1920 hgt:163cm | |
eyr:2029 hcl:#866857 | |
iyr:2024 | |
pid:170cm byr:1931 | |
hgt:177cm ecl:hzl cid:312 | |
iyr:2019 ecl:#19fef5 pid:2080468234 | |
eyr:2008 hgt:72 | |
hcl:e14dfe | |
byr:1980 cid:272 | |
byr:2025 | |
cid:163 | |
iyr:2020 pid:758946748 hgt:161cm | |
ecl:amb eyr:2023 hcl:026d4d | |
iyr:2021 cid:109 | |
eyr:2032 byr:2010 | |
hcl:#fffffd pid:874586711 ecl:hzl hgt:142 | |
eyr:2023 | |
hcl:z iyr:2019 byr:2013 ecl:#b42611 pid:164cm hgt:60cm | |
byr:1935 cid:226 hcl:#602927 ecl:blu pid:700452129 eyr:2029 | |
iyr:2016 hgt:180cm | |
hgt:179cm | |
pid:181cm | |
ecl:gry cid:309 | |
eyr:2029 | |
hcl:#6b5442 | |
byr:1987 | |
iyr:2010 | |
ecl:gry byr:1986 hcl:#cce4b8 | |
pid:101583943 iyr:2010 hgt:65cm eyr:2021 | |
cid:168 | |
pid:#8556c9 hcl:413944 eyr:2036 byr:2013 iyr:2012 | |
ecl:#66dc1c hgt:59cm | |
eyr:1984 byr:2017 pid:#cbc84e hcl:z | |
cid:189 iyr:2021 ecl:blu | |
hgt:152cm | |
byr:1993 hcl:#004c11 eyr:2026 | |
iyr:2010 | |
ecl:brn hgt:188cm | |
pid:889959941 | |
hgt:172 byr:2008 eyr:2030 iyr:1959 | |
ecl:oth hcl:#a8ebbb | |
iyr:2013 hcl:#8f97b1 hgt:182cm ecl:grn cid:89 | |
eyr:2029 | |
byr:1974 | |
eyr:2025 hcl:#6b5442 pid:222418968 byr:1951 cid:105 ecl:hzl iyr:2011 hgt:181cm | |
iyr:2017 | |
ecl:brn pid:481721303 hgt:190cm | |
eyr:2037 byr:1990 hcl:#ceb3a1 | |
hcl:z | |
pid:85905429 | |
byr:1923 cid:260 | |
eyr:2031 ecl:gry | |
iyr:2022 hgt:180cm | |
hcl:#fffffd hgt:76cm | |
ecl:grn | |
pid:39254112 byr:2010 iyr:1961 eyr:2028 | |
ecl:brn iyr:2016 | |
eyr:2027 hcl:#efcc98 pid:753268957 hgt:60in byr:1943 | |
ecl:oth | |
pid:087762106 hgt:190cm | |
byr:1974 cid:171 hcl:#c63f21 | |
eyr:2020 | |
ecl:#8c1b6c | |
byr:1962 iyr:2007 pid:106672731 | |
hgt:172in cid:239 eyr:2026 hcl:#b6652a | |
hgt:170cm eyr:2021 | |
cid:219 hcl:#a97842 pid:040224991 byr:1950 iyr:2018 | |
byr:2029 | |
eyr:2036 cid:309 | |
iyr:2016 hgt:167cm hcl:#fffffd | |
ecl:#1ab23b | |
iyr:2013 ecl:gry eyr:2020 pid:947828194 | |
hcl:#18171d hgt:163cm byr:1971 | |
hcl:#fffffd iyr:2011 | |
pid:150105713 eyr:2029 | |
hgt:168cm byr:1925 ecl:hzl | |
cid:253 | |
hcl:#341e13 | |
eyr:2025 hgt:184cm | |
pid:651786830 byr:1936 iyr:2013 | |
ecl:hzl | |
pid:7328393469 | |
hgt:175cm ecl:gry iyr:2012 byr:1963 hcl:#623a2f eyr:2026 | |
eyr:2029 pid:669044398 hgt:161cm hcl:#cfa07d ecl:gry iyr:2018 | |
pid:920006222 byr:1941 ecl:grn eyr:2027 cid:87 hcl:#733820 | |
iyr:2018 hgt:171cm | |
byr:1964 hgt:157cm hcl:#a97842 | |
pid:756972774 eyr:2024 iyr:2013 ecl:gry | |
iyr:2010 cid:279 | |
hgt:189cm byr:1959 | |
ecl:brn eyr:2022 pid:937686753 hcl:#602927 | |
iyr:2013 | |
eyr:2027 cid:223 pid:145547438 | |
hcl:#6e6f47 hgt:165cm ecl:amb | |
byr:2009 | |
ecl:oth hcl:#623a2f | |
hgt:166cm eyr:2034 pid:120339592 | |
iyr:2012 | |
eyr:2026 hcl:z byr:2018 pid:7809314464 iyr:2012 hgt:158cm ecl:hzl | |
cid:291 hgt:168 | |
ecl:#7734de iyr:2021 hcl:5b4ef1 pid:3381158334 eyr:1956 byr:2003 | |
iyr:2015 hcl:#cfa07d | |
byr:1971 eyr:2023 | |
ecl:oth pid:560419063 cid:155 hgt:170cm | |
eyr:2021 hgt:189cm iyr:2014 hcl:#6b5442 ecl:brn cid:287 | |
byr:1951 pid:936881112 | |
iyr:2013 | |
eyr:2020 ecl:hzl hgt:150cm cid:210 | |
pid:032458640 byr:1920 hcl:#6b5442 | |
hgt:180cm hcl:#cfa07d ecl:grn eyr:2027 | |
pid:140859202 iyr:2014 cid:232 | |
byr:1932 | |
pid:68300657 byr:1988 hgt:181cm | |
ecl:hzl iyr:1951 hcl:e18469 | |
eyr:2013 | |
pid:157572693 hgt:185cm | |
hcl:#065fe8 ecl:gry eyr:2027 | |
iyr:2014 | |
eyr:2029 hgt:164cm hcl:z ecl:grn cid:270 iyr:2019 byr:1993 pid:338068138 | |
iyr:2016 cid:131 byr:1990 hcl:#7d3b0c ecl:grn pid:066023454 hgt:154cm | |
eyr:2025 | |
iyr:2019 eyr:2024 hgt:174cm | |
pid:855792798 byr:1920 hcl:#cfa07d | |
eyr:2020 | |
hgt:74in iyr:2013 ecl:amb | |
byr:1920 hcl:3f6214 | |
pid:957164804 | |
pid:756767000 hcl:#220540 byr:1922 hgt:172cm | |
eyr:2023 cid:305 ecl:hzl iyr:2019 | |
hgt:193in eyr:2025 pid:117240526 iyr:2017 hcl:#888785 byr:1928 ecl:blu | |
byr:1942 | |
ecl:blu | |
cid:347 | |
hcl:#fffffd eyr:2023 iyr:2017 | |
hgt:154cm pid:836554235 | |
eyr:2023 hcl:#efcc98 | |
pid:364475403 byr:1962 iyr:2015 | |
ecl:brn hgt:59in cid:289 | |
byr:2021 hcl:ca4bcf hgt:88 iyr:2017 ecl:gmt pid:181cm eyr:2032 | |
byr:1937 iyr:2014 hgt:154cm ecl:brn | |
hcl:#866857 | |
eyr:2022 pid:234591437 | |
iyr:2002 cid:139 byr:1982 | |
hcl:#c0946f | |
pid:#62721b hgt:159in eyr:1966 ecl:brn | |
eyr:2036 ecl:oth byr:2026 hgt:96 | |
pid:137651094 | |
hcl:z | |
pid:373485985 | |
iyr:2030 ecl:gry byr:2011 hgt:65cm | |
hcl:#733820 | |
pid:390979357 | |
ecl:gry hgt:164cm | |
hcl:#ceb3a1 eyr:2029 byr:1932 iyr:2015 | |
ecl:hzl hgt:68in eyr:2023 pid:829734763 iyr:2016 hcl:#733820 byr:1997 | |
hgt:150cm byr:1926 iyr:2019 pid:521908229 eyr:2029 ecl:brn hcl:#623a2f | |
eyr:2023 byr:1974 | |
iyr:2018 cid:58 | |
ecl:grn | |
pid:310883188 hcl:#866857 | |
hgt:164cm | |
byr:1963 iyr:2019 | |
hgt:162cm | |
eyr:2021 | |
hcl:#fffffd ecl:oth pid:104734523 | |
hcl:#888785 cid:150 | |
eyr:2020 byr:1988 | |
iyr:2018 | |
ecl:oth | |
hgt:179cm pid:635972018 | |
iyr:2014 hcl:#7d3b0c ecl:hzl pid:717760687 | |
byr:1929 eyr:2027 hgt:183cm | |
iyr:2019 byr:2000 | |
eyr:2025 pid:506581828 hcl:#602927 ecl:oth | |
hgt:162cm | |
pid:#fd3377 ecl:#618bce hcl:#ceb3a1 | |
iyr:1944 hgt:182cm cid:57 | |
byr:2022 eyr:1995 | |
pid:4790730010 | |
hgt:192cm | |
cid:222 byr:2022 | |
hcl:4798e7 ecl:#5126d5 iyr:1954 eyr:2040 | |
hcl:#b6652a | |
ecl:brn cid:181 pid:983890186 hgt:189cm byr:1998 | |
eyr:2022 iyr:2011 | |
iyr:2018 eyr:2022 | |
cid:58 byr:1994 hgt:169cm ecl:hzl pid:036522894 | |
hcl:#2c9ee8 | |
iyr:1979 | |
hcl:e09b9c byr:2016 | |
hgt:121 eyr:1962 pid:#fb14be cid:265 ecl:lzr | |
eyr:2024 hgt:63in hcl:#efcc98 iyr:2018 | |
byr:1953 pid:881102827 ecl:amb | |
ecl:oth hgt:177cm eyr:2028 iyr:2011 | |
hcl:#efcc98 pid:113579849 byr:1957 | |
ecl:#fe1b74 iyr:1926 hgt:70cm | |
pid:70807766 hcl:556dca byr:2030 | |
eyr:2032 | |
byr:1997 ecl:blu hgt:105 | |
pid:178655906 iyr:2025 | |
hcl:#6b5442 | |
eyr:2021 | |
eyr:2030 ecl:grt hgt:161cm hcl:#ceb3a1 iyr:2016 | |
pid:318930966 cid:59 byr:1924 | |
cid:200 hgt:67in | |
pid:229395752 byr:1936 ecl:oth iyr:2013 eyr:2020 hcl:#c0946f | |
byr:1990 iyr:2018 | |
cid:99 hcl:#6b5442 hgt:155 pid:350832537 ecl:blu eyr:2021 | |
eyr:2039 byr:2025 pid:247367429 hcl:z iyr:2013 ecl:amb | |
cid:118 | |
eyr:2027 hcl:z ecl:utc | |
cid:274 hgt:175in iyr:2016 byr:1977 pid:478855994 | |
eyr:2020 pid:636743032 | |
hcl:#64a8b8 iyr:2018 ecl:grn hgt:68in byr:1969 | |
pid:515635081 iyr:2013 byr:1980 eyr:2024 hgt:173cm ecl:gry | |
hcl:#b6652a | |
ecl:utc byr:2026 iyr:1999 eyr:1937 | |
hgt:66cm | |
hcl:z | |
pid:2247643960 | |
iyr:2013 byr:1942 hgt:154cm eyr:2020 hcl:#18171d cid:323 pid:302753381 ecl:oth | |
ecl:xry pid:346719476 | |
iyr:1999 | |
eyr:2020 hgt:154cm hcl:z | |
byr:2027 | |
hgt:160cm eyr:2025 hcl:#fffffd byr:1998 | |
pid:678119271 ecl:blu iyr:2014 | |
hgt:161cm iyr:2011 | |
ecl:blu | |
byr:1921 pid:236833613 eyr:2021 | |
hcl:#623a2f | |
ecl:hzl hcl:#18171d hgt:151cm pid:541887993 | |
byr:1995 iyr:2019 eyr:2021 | |
pid:496474711 byr:1966 ecl:gry eyr:2025 hgt:176cm | |
hcl:#b6652a iyr:2018 | |
iyr:2010 hcl:#efcc98 pid:351846405 | |
eyr:2024 hgt:150cm | |
byr:1941 | |
hgt:151cm ecl:gry hcl:#a97842 pid:586789406 | |
eyr:2022 iyr:2013 byr:1982 | |
byr:1994 eyr:2028 ecl:gry | |
hcl:#888785 iyr:2010 | |
hgt:165cm cid:183 | |
iyr:2015 | |
byr:1933 hcl:#733820 hgt:167cm | |
ecl:blu pid:914665208 eyr:2027 | |
eyr:2031 hcl:6804ef | |
ecl:amb | |
byr:2024 | |
hgt:157cm iyr:1938 | |
pid:#0418fb | |
byr:1936 | |
ecl:oth hgt:190cm cid:91 | |
pid:711544430 iyr:2020 | |
eyr:2025 hcl:#888785 | |
pid:381452527 | |
eyr:2027 hcl:#efcc98 ecl:brn | |
byr:1956 hgt:63in | |
ecl:oth | |
iyr:2014 hcl:#ceb3a1 | |
cid:254 | |
pid:544612871 byr:1985 eyr:2023 hgt:172cm | |
hcl:#efcc98 | |
hgt:191cm byr:1948 | |
ecl:blu eyr:2028 | |
pid:953894279 iyr:2017 | |
byr:1968 pid:875469219 | |
hcl:#efcc98 hgt:176cm cid:141 iyr:2017 | |
eyr:2022 hcl:#733820 ecl:hzl | |
pid:870733357 iyr:2013 | |
byr:1949 hgt:150cm cid:252 | |
ecl:gry | |
hcl:#602927 pid:632246684 byr:1986 | |
eyr:2030 hgt:152cm iyr:2013 | |
eyr:2029 | |
iyr:2016 | |
byr:1969 pid:595125675 ecl:gry hcl:#cfa07d hgt:184cm | |
byr:1947 hcl:z | |
cid:188 eyr:2038 pid:177cm iyr:2011 hgt:166cm ecl:#c1376b | |
ecl:hzl hgt:170cm cid:307 eyr:2022 | |
byr:1971 | |
hcl:#b6652a pid:047040501 | |
hgt:126 ecl:zzz | |
byr:2019 | |
pid:170207910 eyr:2035 hcl:23df48 | |
iyr:1932 | |
hgt:152cm cid:270 eyr:2036 ecl:#408f6e iyr:1952 pid:5808880830 byr:2022 | |
hcl:0b1ba6 | |
eyr:2021 hgt:179cm | |
byr:1938 pid:140937061 iyr:2030 hcl:#a97842 ecl:oth | |
hgt:67cm eyr:2028 pid:816355657 | |
iyr:2019 byr:2008 hcl:z ecl:#5b4f31 | |
cid:192 | |
iyr:2018 eyr:2020 byr:1983 pid:873720366 | |
ecl:grn hgt:187cm hcl:#6b5442 | |
byr:1955 hgt:71in iyr:2018 pid:320019385 hcl:#6b5442 | |
cid:324 eyr:2027 | |
pid:957860464 | |
hcl:#602927 | |
iyr:2011 | |
byr:2026 cid:261 eyr:2006 | |
byr:1989 ecl:gry cid:143 pid:258434299 eyr:2027 hgt:192cm iyr:2017 hcl:#7d3b0c | |
pid:#1742ae | |
ecl:#a61090 | |
iyr:2028 hcl:717dd0 hgt:139 cid:183 | |
eyr:2035 | |
eyr:2028 pid:039325804 hgt:167cm hcl:#888785 ecl:oth cid:155 iyr:2013 byr:1923 | |
byr:1956 iyr:2010 | |
hcl:#d683bf | |
eyr:2023 | |
hgt:70in | |
cid:197 pid:143320690 | |
ecl:hzl | |
ecl:#4004e3 cid:278 | |
iyr:1950 pid:745107377 | |
byr:2007 eyr:2036 | |
hcl:8447eb hgt:74cm | |
hcl:#ceb3a1 hgt:177cm iyr:2010 pid:640032134 | |
ecl:gry | |
eyr:2027 byr:1958 | |
hgt:187cm | |
iyr:1921 ecl:#1c7d96 | |
eyr:1987 | |
byr:2028 pid:#28e5a1 cid:144 hcl:9fc25d | |
iyr:2012 byr:1996 cid:289 hgt:177cm hcl:#fffffd pid:687240168 eyr:2030 ecl:gry | |
pid:860410143 ecl:dne eyr:2031 cid:206 hgt:187in byr:1927 | |
hcl:8c2149 iyr:2012 | |
iyr:2010 | |
byr:1963 cid:139 pid:160019759 | |
eyr:2030 hgt:172cm hcl:#602927 | |
pid:309851270 | |
iyr:2014 | |
ecl:hzl byr:1939 | |
cid:71 | |
eyr:2030 | |
hcl:#b216fb | |
hgt:161cm | |
ecl:gry | |
cid:138 | |
iyr:2014 | |
hgt:177cm byr:1942 | |
pid:900269082 eyr:2024 hcl:#fffffd | |
iyr:2019 hgt:158cm | |
hcl:#18171d pid:941939350 eyr:2024 ecl:brn byr:1944 | |
byr:2023 ecl:brn | |
cid:101 eyr:2016 pid:190078757 hgt:188in | |
cid:188 | |
ecl:blu pid:075499609 | |
byr:1970 | |
hcl:#fffffd hgt:164cm eyr:2028 iyr:2015 | |
byr:2011 hcl:z | |
ecl:gry | |
pid:408316491 hgt:64cm iyr:2017 eyr:1968 | |
ecl:oth hcl:#6b5442 | |
pid:623099801 | |
hgt:163cm | |
byr:1928 | |
pid:165230004 | |
ecl:grn byr:1935 hcl:#c0946f iyr:2012 | |
hgt:185cm | |
hgt:162cm pid:069876432 byr:1960 cid:326 iyr:2013 | |
hcl:#cfa07d eyr:2021 | |
ecl:grn | |
ecl:#f3d8ba hgt:182cm eyr:2020 byr:2007 | |
hcl:z iyr:2014 pid:6141297559 | |
pid:867747198 | |
hcl:#efcc98 | |
eyr:2030 byr:1989 | |
hgt:181cm | |
byr:2000 eyr:2021 hgt:166cm | |
hcl:#fffffd iyr:2019 pid:546346187 cid:111 ecl:grn | |
eyr:2034 hcl:#623a2f | |
byr:1958 | |
pid:60553207 ecl:#76b538 hgt:59 cid:75 | |
hcl:#623a2f | |
eyr:2023 pid:251940892 byr:1998 | |
iyr:2012 | |
hgt:181cm ecl:gry | |
iyr:2020 cid:83 | |
byr:1938 eyr:2024 ecl:amb pid:046668488 hgt:181cm hcl:#341e13 | |
ecl:grn | |
eyr:2036 iyr:1951 byr:2029 hcl:z hgt:177in | |
pid:135470038 | |
iyr:2015 eyr:2023 | |
byr:1961 | |
cid:81 hcl:#a97842 pid:710065884 | |
hgt:152cm | |
ecl:#1f9801 | |
byr:2014 | |
pid:25253929 hcl:z | |
ecl:#f3fb41 eyr:2025 cid:255 iyr:1998 | |
hgt:155cm | |
ecl:gry pid:919070381 hcl:#efcc98 iyr:2019 eyr:2021 byr:1995 | |
byr:1942 | |
eyr:2029 | |
hgt:191cm hcl:#18171d | |
pid:649719423 iyr:2018 ecl:brn | |
ecl:gry | |
byr:1963 iyr:2016 hgt:188cm pid:024539026 eyr:2022 | |
hgt:176cm | |
ecl:hzl eyr:1923 pid:176188310 hcl:#b6652a | |
byr:1939 | |
iyr:2011 | |
iyr:2011 hcl:#888785 eyr:2030 ecl:gry byr:1920 | |
pid:#0468a7 hcl:851fe0 eyr:2036 hgt:60cm | |
byr:2030 | |
iyr:1995 | |
ecl:utc | |
hcl:#866857 iyr:2016 ecl:oth | |
pid:414233531 eyr:2022 byr:1957 | |
hgt:169cm cid:229 | |
cid:185 ecl:#5f6f53 | |
pid:#20f317 byr:2024 eyr:1988 hcl:z iyr:2023 hgt:158in | |
pid:015894427 eyr:2027 hgt:177cm ecl:blu | |
cid:222 | |
hcl:#c0946f iyr:2010 byr:1993 | |
cid:101 hgt:162cm hcl:#c0946f pid:666662343 ecl:grn | |
byr:1974 | |
iyr:2019 | |
eyr:2029 | |
pid:782547454 hcl:z ecl:#b0805f | |
iyr:2013 eyr:2023 | |
hgt:159cm | |
byr:1935 | |
cid:230 | |
pid:298008321 hcl:231e1b hgt:166cm ecl:oth | |
iyr:2026 eyr:2020 | |
pid:230201309 iyr:2010 eyr:2025 hcl:#6b5442 | |
cid:238 | |
ecl:grn | |
hgt:174cm | |
cid:287 eyr:2026 hcl:#733820 | |
pid:201750712 iyr:2010 | |
ecl:oth byr:1985 | |
hgt:185cm | |
hcl:#a97842 hgt:70in eyr:2029 | |
pid:419407059 ecl:grn byr:1987 | |
iyr:2016 | |
hgt:191cm byr:1951 | |
eyr:2027 hcl:#8a9477 iyr:2015 ecl:amb pid:769071985 | |
hcl:#6b5442 | |
iyr:2012 ecl:blu | |
cid:336 pid:391608810 byr:1995 | |
eyr:2022 | |
hgt:161cm | |
iyr:2020 | |
byr:1938 | |
pid:927067439 eyr:2027 hgt:173cm | |
hcl:306963 ecl:xry | |
byr:1991 | |
iyr:2021 hgt:175cm hcl:68b4f3 ecl:utc | |
pid:037777327 eyr:2026 | |
hgt:64in | |
eyr:2025 hcl:#da6977 cid:137 byr:1990 iyr:2013 pid:918997697 ecl:amb | |
iyr:2011 ecl:gry hgt:173cm eyr:2023 pid:802831612 | |
hcl:#733820 byr:1976 | |
byr:1938 eyr:2021 pid:575395401 cid:234 | |
hcl:#866857 ecl:hzl hgt:176cm | |
hcl:#ceb3a1 ecl:hzl | |
eyr:2035 | |
iyr:2014 | |
byr:2019 | |
ecl:hzl pid:961361236 | |
hgt:193cm hcl:#efcc98 | |
iyr:2011 eyr:2030 byr:1967 | |
eyr:1936 ecl:blu | |
hgt:153cm hcl:98d3f0 pid:7296832671 | |
byr:1931 iyr:1962 | |
iyr:2016 eyr:2024 hcl:#6b5442 ecl:grn | |
pid:265815316 byr:1966 | |
hgt:165cm | |
pid:203025149 | |
eyr:2029 | |
iyr:2010 cid:124 byr:1999 ecl:blu | |
iyr:2011 eyr:2028 pid:#7e0612 byr:1924 hcl:#7d3b0c ecl:oth | |
hgt:82 | |
ecl:hzl | |
byr:1941 | |
hcl:#b6652a eyr:2020 pid:409573276 | |
iyr:1976 hgt:166cm | |
ecl:grn eyr:2030 | |
hgt:163cm iyr:2011 pid:121609314 byr:1961 hcl:#426e1a | |
pid:#49ea2c | |
eyr:2029 hcl:#6b5442 iyr:1931 | |
hgt:62cm ecl:brn | |
byr:2012 | |
eyr:2038 hcl:8d1f49 ecl:#6d4ea1 pid:0853660207 byr:2020 hgt:71cm | |
ecl:hzl hgt:170cm | |
iyr:2011 | |
byr:1966 eyr:2028 | |
pid:609548717 hcl:#c0946f | |
byr:1921 hcl:#c0946f ecl:blu iyr:2019 eyr:2024 pid:643387204 | |
cid:324 hgt:162cm ecl:amb | |
hcl:#18171d byr:1961 | |
eyr:2027 iyr:2010 pid:939720354 | |
byr:1933 hcl:#fffffd | |
pid:353343882 | |
eyr:2025 hgt:171cm ecl:amb cid:329 | |
iyr:2017 | |
byr:2004 iyr:2022 | |
pid:157cm eyr:2035 | |
ecl:#eafe47 hgt:129 | |
hcl:z | |
cid:55 iyr:2025 hgt:177in pid:493884348 | |
hcl:#888785 byr:1925 ecl:#b11d27 eyr:2036 | |
ecl:hzl | |
hgt:171cm | |
iyr:2012 pid:479669573 cid:335 hcl:#fffffd byr:1953 | |
eyr:2029 | |
byr:1930 hcl:5bdf31 | |
pid:#b21f8a hgt:164cm | |
cid:134 | |
iyr:2023 ecl:lzr | |
iyr:2018 eyr:2026 ecl:grn | |
pid:541667478 hcl:#6b5442 byr:1992 hgt:155cm | |
hcl:2a1c4f iyr:2011 | |
hgt:192cm eyr:2028 byr:2029 cid:270 ecl:dne pid:7995627426 | |
byr:1929 ecl:oth | |
pid:954905104 iyr:2016 | |
hgt:68in hcl:#7d3b0c eyr:2020 | |
cid:167 byr:2000 hgt:186cm iyr:2013 hcl:#ff4019 pid:384287209 | |
eyr:2024 ecl:amb | |
eyr:2022 | |
iyr:2018 byr:1972 cid:290 | |
hgt:170cm ecl:grn pid:127269636 | |
byr:1997 | |
ecl:amb hgt:150cm | |
pid:056368047 hcl:#fffffd eyr:2020 iyr:2020 | |
ecl:gry hgt:167in byr:2020 cid:131 pid:651833067 hcl:#623a2f iyr:2027 eyr:2038 | |
hcl:#56c370 | |
iyr:2014 | |
byr:1941 | |
pid:654258425 hgt:184cm | |
eyr:2025 ecl:hzl | |
pid:571765355 | |
byr:2021 | |
hcl:z | |
eyr:1921 cid:106 iyr:1978 | |
ecl:#1162c5 | |
hgt:184in | |
iyr:2015 hcl:#18171d cid:237 pid:348578306 ecl:blu | |
byr:1988 eyr:2025 hgt:155cm | |
byr:1963 hcl:#733820 cid:145 eyr:2030 ecl:oth pid:964094037 hgt:164cm iyr:2018 | |
pid:595618708 ecl:amb | |
hcl:#866857 | |
hgt:186cm eyr:2024 byr:1924 iyr:2014 | |
ecl:hzl pid:484466493 | |
hgt:176cm iyr:2016 byr:1983 hcl:#ceb3a1 | |
ecl:gry hcl:#6b5442 | |
hgt:185cm | |
eyr:2029 | |
pid:045583320 byr:1974 iyr:2020 | |
ecl:brn hcl:352cf1 cid:149 | |
hgt:184cm byr:2011 | |
eyr:2031 | |
pid:21942403 iyr:2028 | |
ecl:brn eyr:2029 pid:083295950 byr:1995 hgt:176cm hcl:#c0946f | |
cid:68 iyr:2014 | |
hgt:170cm | |
byr:1945 hcl:#623a2f | |
iyr:2013 pid:912213595 ecl:gry eyr:2020 | |
ecl:gry | |
hcl:#18171d iyr:2015 hgt:185cm eyr:2023 | |
byr:1950 | |
byr:1997 hgt:68in pid:368643584 hcl:#623a2f ecl:hzl eyr:2029 iyr:2012 | |
cid:239 | |
iyr:2003 eyr:2020 cid:99 byr:2027 hcl:2c10a6 hgt:74cm | |
ecl:brn | |
pid:151cm hcl:46a5fd eyr:2031 | |
iyr:2014 | |
byr:2005 ecl:xry hgt:176cm | |
byr:2011 ecl:oth pid:821123244 | |
iyr:2022 | |
hcl:839b47 eyr:2039 hgt:150in | |
pid:604669618 hgt:152cm iyr:2013 | |
byr:1954 | |
eyr:2021 ecl:amb hcl:#623a2f | |
hgt:182cm | |
byr:1993 | |
cid:177 hcl:#b6652a ecl:gry iyr:2011 pid:441649857 eyr:2027 | |
cid:296 hgt:98 | |
ecl:grt iyr:2028 hcl:#a97842 byr:2022 | |
pid:69736889 eyr:1935 | |
iyr:2016 hcl:#cfa07d | |
byr:1941 | |
hgt:182cm | |
pid:720595987 ecl:gry | |
eyr:2022 | |
iyr:2018 hgt:164cm hcl:#650d28 byr:1973 cid:108 pid:#b0df80 ecl:blu eyr:2020 | |
hcl:z | |
pid:315901778 | |
iyr:2013 | |
byr:1999 ecl:#49f691 eyr:2026 hgt:179cm | |
byr:1925 | |
pid:555786686 hgt:189cm hcl:#cfa07d iyr:2012 ecl:gry eyr:2028 | |
iyr:2016 | |
hgt:168cm | |
eyr:2027 cid:60 ecl:gry hcl:#cfa07d | |
pid:322944081 byr:1993 | |
pid:163cm | |
hgt:189cm iyr:1997 hcl:03db25 eyr:1970 | |
byr:2016 ecl:#6c59eb | |
pid:766719295 iyr:2017 | |
hgt:168cm | |
hcl:z ecl:grt | |
eyr:2022 byr:2010 | |
hgt:173cm pid:247156751 cid:109 eyr:2022 iyr:2012 ecl:gry byr:1989 | |
cid:288 | |
hcl:77241f | |
hgt:157cm byr:1956 pid:587115461 iyr:2016 ecl:lzr | |
eyr:2034 | |
hcl:5307c9 ecl:#cc4aff | |
pid:#d80d30 | |
cid:224 hgt:72cm byr:2025 eyr:2039 iyr:2025 | |
eyr:2027 byr:2015 | |
hgt:184 hcl:98fb9d pid:58151347 | |
iyr:2029 | |
hgt:183cm cid:187 byr:2019 ecl:xry iyr:2013 pid:164cm hcl:#18171d eyr:2021 |
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
class PassportProcessor | |
attr_reader :passport_fields | |
NECESSARY_FIELDS = %w{byr iyr eyr hgt hcl ecl pid} | |
UNNECESSARY_FIELDS = %{cid} | |
def initialize | |
end | |
def process_fields passport_fields | |
contains_fields = NECESSARY_FIELDS.all? { |field| passport_fields.include? field } | |
if not contains_fields | |
raise "This passport does not contain the necessary fields" | |
end | |
fields = passport_fields.split(/\s/).sort! | |
hash = {} | |
fields.map do |field| | |
key, value = field.split(":") | |
#next if UNNECESSARY_FIELDS.include? "cid" | |
hash[key] = value | |
end | |
hash | |
end | |
def check_byr | |
(1920..2002).include? @passport_fields['byr'].to_i | |
end | |
def check_iyr | |
(2010..2020).include? @passport_fields['iyr'].to_i | |
end | |
def check_eyr | |
(2020..2030).include? @passport_fields['eyr'].to_i | |
end | |
def check_hgt | |
match = @passport_fields['hgt'].match(/(\d+)([a-z]{2})/) | |
unless match.nil? | |
case match[2] | |
when 'cm' | |
return (150..193).include? match[1].to_i | |
when 'in' | |
return (59..76).include? match[1].to_i | |
end | |
end | |
return false | |
end | |
def check_hcl | |
@passport_fields['hcl'].match?(/#[0-9a-f]{6}/) | |
end | |
def check_ecl | |
eye_colors = %w{amb blu brn gry grn hzl oth} | |
eye_colors.include? @passport_fields['ecl'] | |
end | |
def check_pid | |
@passport_fields['pid'].match?(/[0-9]{9}/) | |
end | |
def is_valid? | |
[ check_byr, | |
check_iyr, | |
check_eyr, | |
check_hgt, | |
check_hcl, | |
check_ecl, | |
check_pid].all? | |
end | |
def passport_string=(passport_string) | |
@passport_fields = process_fields(passport_string) | |
@passport_fields.delete("cid") | |
end | |
end | |
pp = PassportProcessor.new() | |
valid_passports = 0 | |
total_passports = 0 | |
File.foreach('input.txt', "\n\n") do |entry| | |
begin | |
pp.passport_string = entry | |
if pp.is_valid? | |
valid_passports += 1 | |
else | |
#p pp.passport_fields | |
end | |
rescue | |
"Invalid passport" | |
end | |
total_passports += 1 | |
end | |
p valid_passports |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment