diff --git a/in/4.txt b/in/4.txt new file mode 100644 index 0000000..a62abce --- /dev/null +++ b/in/4.txt @@ -0,0 +1,1168 @@ +iyr:2015 cid:189 ecl:oth byr:1947 hcl:#6c4ab1 eyr:2026 +hgt:174cm +pid:526744288 + +pid:688706448 iyr:2017 hgt:162cm cid:174 ecl:grn byr:1943 hcl:#808e9e eyr:2025 + +ecl:oth hcl:#733820 cid:124 pid:111220591 +iyr:2019 eyr:2001 +byr:1933 hgt:159in + +pid:812929897 hgt:159cm hcl:#fffffd byr:1942 iyr:2026 cid:291 +ecl:oth +eyr:2024 + +cid:83 pid:524032739 iyr:2013 ecl:amb byr:1974 +hgt:191cm hcl:#ceb3a1 eyr:2028 + +ecl:gry hcl:eefed5 pid:88405792 hgt:183cm cid:221 byr:1963 eyr:2029 + +pid:777881168 ecl:grn +hgt:181cm byr:1923 eyr:2021 iyr:2018 hcl:#18171d + +byr:1941 eyr:2027 ecl:gry iyr:2016 pid:062495008 hcl:#a5e1b5 hgt:178cm + +cid:56 +byr:1971 +hcl:#efcc98 pid:649868696 iyr:2011 eyr:2025 hgt:164cm + +ecl:blu +pid:117915262 eyr:2023 byr:1925 iyr:2020 hcl:#888785 +hgt:188cm + +iyr:2012 +cid:174 +eyr:2024 +pid:143293382 ecl:brn byr:1946 hgt:193cm + +eyr:2021 iyr:2011 +hgt:192cm pid:251564680 +byr:1976 +ecl:blu hcl:#602927 + +byr:1973 ecl:blu hgt:164cm +eyr:2022 pid:695538656 iyr:2010 cid:244 hcl:#b6652a + +iyr:2014 +eyr:2027 pid:358398181 ecl:hzl hgt:74in byr:1949 cid:329 +hcl:#ceb3a1 + +cid:211 +byr:1954 eyr:2023 hgt:172cm ecl:blu iyr:2019 hcl:#623a2f pid:657051725 + +pid:562699115 eyr:2026 byr:2000 +hgt:162cm hcl:#602927 ecl:amb iyr:2018 + +ecl:brn +iyr:2013 +pid:835184859 byr:1981 hgt:157cm eyr:2027 hcl:#b6652a + +pid:763432667 byr:1981 hcl:#cfa07d ecl:brn +iyr:2010 hgt:63in cid:107 +eyr:2027 + +byr:2009 +hgt:177cm cid:314 +hcl:f55bf8 eyr:2025 +pid:632519974 +iyr:2015 ecl:amb + +eyr:2024 pid:614239656 hgt:169cm iyr:2014 ecl:hzl byr:1992 +hcl:#602927 + +ecl:blu +eyr:2026 +hcl:#efcc98 +byr:1980 iyr:2013 +hgt:161cm +pid:065413599 + +hgt:182cm +eyr:2025 iyr:2013 pid:939088351 hcl:#b6652a byr:1994 ecl:amb + +hgt:65in cid:220 ecl:amb hcl:#ceb3a1 +iyr:2013 eyr:2025 pid:167894964 byr:1976 + +hgt:185cm cid:88 ecl:blu iyr:2020 +eyr:2020 +hcl:#888785 pid:582683387 +byr:1981 + +hcl:#866857 eyr:2020 byr:1948 +pid:358943355 +ecl:amb hgt:164cm iyr:2019 + +pid:127467714 +hcl:#ceb3a1 byr:1991 hgt:163cm eyr:2020 iyr:2017 ecl:blu cid:229 + +cid:156 byr:1942 eyr:2024 hcl:#cfa07d +ecl:blu pid:843747591 +iyr:2014 hgt:173cm + +hcl:#a97842 hgt:165cm +iyr:2013 ecl:#781088 byr:1952 +pid:516882944 +eyr:2026 + +hgt:179cm +byr:1969 pid:408297435 iyr:2020 ecl:oth hcl:#cfa07d eyr:2020 + +ecl:amb iyr:2013 hcl:#b6652a eyr:2023 cid:88 +pid:324081998 hgt:66in byr:1945 + +iyr:2012 +eyr:2024 +hcl:#18171d +pid:756726480 byr:1947 ecl:oth +hgt:164cm + +ecl:blu +hcl:#fffffd byr:1951 iyr:2019 pid:544645775 +hgt:153cm eyr:2027 + +pid:655906238 ecl:brn eyr:2028 byr:1959 hgt:63in cid:338 +iyr:2020 + +eyr:2020 +hcl:#602927 hgt:72in iyr:2014 +pid:305025767 +cid:297 byr:1957 ecl:gry + +hgt:155cm byr:1942 hcl:#a97842 +iyr:2014 ecl:gry pid:593995708 +eyr:2022 + +pid:219206471 byr:1955 eyr:2030 +hcl:#a97842 ecl:oth iyr:2015 cid:134 hgt:170cm + +iyr:2013 cid:268 +eyr:2020 +hcl:#a97842 ecl:grn pid:235279200 hgt:178cm +byr:1952 + +iyr:2013 pid:016384352 eyr:2027 +hcl:#866857 ecl:grn hgt:161cm byr:1943 + +ecl:amb hgt:169cm pid:149540593 +iyr:2012 +eyr:2040 hcl:#a97842 byr:1954 + +byr:1938 +ecl:brn hcl:#b6652a eyr:2026 hgt:184cm iyr:2018 pid:832531235 + +byr:1945 iyr:2015 hgt:171cm eyr:2028 pid:998746896 ecl:hzl hcl:#866857 + +hgt:73in ecl:hzl eyr:2023 cid:343 pid:458004221 iyr:2017 byr:1962 hcl:#efcc98 + +byr:1970 hgt:159cm pid:925022199 iyr:2013 +eyr:2028 hcl:#888785 +ecl:hzl + +eyr:2027 iyr:2016 ecl:gry +hcl:#cfa07d +pid:006246552 byr:1939 cid:124 hgt:177cm + +byr:1982 +iyr:2016 hgt:159cm +cid:102 hcl:#fffffd +eyr:2029 +ecl:grn pid:619798285 + +iyr:2018 +hgt:189cm hcl:#efcc98 +byr:1937 eyr:2023 pid:727551553 ecl:oth + +iyr:2014 byr:1976 +eyr:2020 hcl:#7d3b0c pid:125102070 ecl:amb +hgt:186cm + +hgt:187cm byr:1949 +pid:027653233 eyr:2021 hcl:#341e13 ecl:hzl +iyr:2020 + +iyr:2016 +byr:1954 pid:545631256 +hcl:#602927 eyr:2023 +hgt:191cm ecl:amb + +pid:509762954 +hgt:190cm ecl:hzl byr:1991 +eyr:2022 iyr:2019 +cid:187 + +hcl:#c0946f eyr:2024 hgt:152cm cid:277 iyr:2015 pid:872373191 byr:1988 + +pid:544267207 cid:113 +iyr:2015 +hgt:181cm +hcl:#6b5442 +ecl:gry +byr:1971 + +ecl:gry +hgt:161cm iyr:2012 byr:1965 +pid:574527322 hcl:#fffffd + +iyr:2018 byr:1976 hcl:#b6652a +pid:024582079 hgt:169cm ecl:oth eyr:2021 + +pid:020478204 +byr:1945 hcl:#7d3b0c +cid:239 eyr:2025 hgt:188cm +ecl:grn +iyr:2012 + +eyr:2026 pid:202653345 +byr:1988 +hcl:#2cdc09 +hgt:185cm iyr:2010 +ecl:hzl + +hgt:183cm iyr:2017 +hcl:#18171d byr:1977 eyr:2029 pid:804559436 ecl:grn + +hcl:#602927 pid:812072269 hgt:170cm eyr:2026 byr:1955 iyr:2020 ecl:gry + +eyr:2023 iyr:2010 +hcl:#cfa07d pid:592419048 byr:1943 +ecl:brn +hgt:172cm + +ecl:brn iyr:2013 pid:558179058 +hcl:#fffffd eyr:2022 +byr:1922 +cid:331 hgt:64in + +ecl:xry +hcl:ade850 eyr:1995 pid:976028541 +iyr:2030 hgt:179cm +byr:2030 + +ecl:#2872b1 pid:158cm eyr:1927 hcl:ee8e92 +iyr:2014 hgt:190cm +byr:2025 + +hgt:155cm cid:283 eyr:2020 ecl:blu pid:755165290 byr:1936 hcl:#733820 iyr:2012 + +eyr:2030 +byr:1943 +cid:323 pid:906418061 hgt:157cm ecl:amb iyr:2010 +hcl:#7d3b0c + +hcl:#fffffd +pid:873200829 hgt:192cm eyr:2022 ecl:blu iyr:2016 byr:1920 cid:200 + +eyr:2021 +byr:1963 +hcl:#a97842 pid:585551405 +iyr:2019 cid:91 +ecl:brn hgt:60cm + +byr:1946 +pid:520273609 hcl:#341e13 cid:66 +iyr:2020 hgt:154cm eyr:2024 +ecl:brn + +ecl:brn hcl:#d64d7b eyr:2020 +byr:1957 hgt:181cm iyr:2019 pid:378496967 cid:135 + +pid:002446580 +eyr:2027 byr:1939 hcl:#888785 +iyr:2011 cid:168 +ecl:oth hgt:160cm + +iyr:2019 hgt:70in hcl:#7d3b0c byr:1983 +eyr:2024 pid:369493064 cid:54 ecl:oth + +iyr:1979 pid:170cm +hgt:65cm eyr:1933 hcl:z + +ecl:zzz pid:193cm hcl:z eyr:2020 byr:2013 iyr:2016 hgt:177in + +iyr:2010 hgt:187cm +byr:1932 +hcl:z ecl:oth pid:665967850 eyr:2030 + +eyr:2029 +iyr:2013 hcl:#b6652a ecl:amb +byr:1936 pid:516025566 +hgt:181cm + +hcl:#c0946f pid:238825672 byr:2000 +iyr:2013 eyr:2028 ecl:amb hgt:183cm + +eyr:2021 hcl:#866857 +cid:77 iyr:2017 hgt:156cm pid:271118829 ecl:amb + +iyr:2014 +hcl:#fffffd +cid:321 hgt:159cm ecl:gry +pid:691381062 eyr:2022 byr:1991 + +pid:111506492 hcl:#c1d296 iyr:2011 +byr:1934 hgt:176cm cid:263 eyr:2028 ecl:amb + +iyr:2014 hgt:64in eyr:2024 cid:193 hcl:#b6652a byr:1967 +ecl:oth pid:138677174 + +hgt:168cm iyr:2020 eyr:2030 +hcl:#6b5442 ecl:brn pid:975843892 byr:1927 + +byr:1957 ecl:amb iyr:2012 pid:177266671 eyr:2026 +hcl:#866857 hgt:162cm + +eyr:2029 +hcl:#341e13 +hgt:175cm pid:465809700 ecl:amb byr:1974 +iyr:2010 + +hcl:#a97842 iyr:2010 +hgt:176cm eyr:2029 byr:1931 ecl:grt pid:161604244 + +eyr:2024 iyr:2018 hgt:170in byr:1959 ecl:gmt hcl:#888785 +pid:94163132 + +iyr:2011 +hgt:186cm pid:998471478 byr:1956 ecl:amb +eyr:2029 +hcl:#efcc98 +cid:76 + +ecl:brn +byr:2001 pid:378527883 iyr:2013 hcl:#83bdc5 eyr:2020 hgt:181cm + +iyr:2017 ecl:grn hgt:172cm hcl:#888785 cid:100 +eyr:2022 byr:2030 +pid:311562177 + +pid:097558436 +cid:141 hgt:152cm iyr:2019 +ecl:brn eyr:2023 +byr:1940 +hcl:#6b5442 + +iyr:2016 eyr:2023 byr:1992 +hgt:174cm ecl:amb +pid:691291640 cid:190 hcl:#fffffd + +hcl:#623a2f ecl:brn +eyr:2028 cid:227 iyr:2012 hgt:74in pid:964273950 byr:1965 + +hcl:#ceb3a1 eyr:2028 +iyr:2013 pid:175294029 hgt:150cm ecl:grn +byr:1936 +cid:143 + +byr:1935 hcl:#a97842 ecl:oth hgt:180cm iyr:2019 +pid:857891916 +eyr:2026 + +pid:084518249 ecl:hzl eyr:2027 hcl:#c0946f hgt:192cm cid:315 byr:1961 +iyr:2010 + +hgt:67cm pid:37925169 eyr:2022 +hcl:z iyr:2012 cid:315 byr:2028 ecl:dne + +hcl:#c0946f byr:1924 +hgt:176cm cid:87 pid:682212551 iyr:2011 +eyr:2026 +ecl:gry + +hgt:181cm byr:1935 +iyr:2018 pid:644964785 +eyr:2026 ecl:amb + +pid:789810179 +ecl:gry eyr:2021 +cid:159 hgt:185cm iyr:2020 hcl:#602927 +byr:1965 + +pid:672386364 +iyr:2013 eyr:2021 byr:1951 hcl:#341e13 +ecl:gry hgt:173cm + +hcl:#18171d eyr:2030 pid:957722245 iyr:2012 byr:1955 +ecl:grn +hgt:154cm + +byr:1955 ecl:oth +hcl:#cfa07d +eyr:2030 +iyr:2013 pid:361945273 hgt:154cm + +iyr:2012 eyr:2027 ecl:grn hcl:#16d373 +hgt:192cm + +pid:275525273 +byr:1986 +iyr:2017 +eyr:2022 +ecl:grn +hgt:75in +hcl:#919cc0 + +eyr:2029 +cid:84 hcl:#cfa07d iyr:2013 hgt:78 +ecl:brn +byr:1925 pid:281331549 + +eyr:2027 +cid:219 iyr:2016 byr:1971 hcl:#7d3b0c hgt:179cm ecl:grn +pid:301296222 + +eyr:2030 iyr:2010 pid:995982765 +byr:1926 ecl:amb hcl:#888785 hgt:186cm + +byr:1955 iyr:2015 hgt:165cm cid:101 +eyr:2027 ecl:amb hcl:#602927 +pid:168654790 + +hcl:#7d3b0c byr:1956 eyr:2029 hgt:155cm +ecl:grn pid:816685992 +iyr:2016 + +ecl:grn hcl:#cfa07d cid:71 +pid:914724136 iyr:2012 eyr:2024 +hgt:184cm byr:1938 + +ecl:gry +eyr:2029 hcl:#602927 pid:255062643 iyr:2015 hgt:175cm + +hcl:#341e13 iyr:2017 eyr:2028 +pid:459704815 byr:1922 +cid:312 +ecl:brn hgt:152cm + +ecl:dne eyr:1981 +pid:8356519470 hgt:176 iyr:1941 byr:2006 hcl:z + +ecl:amb pid:753377589 hcl:#a97842 eyr:2022 hgt:187cm +cid:130 iyr:2013 byr:1961 + +pid:952444443 +hcl:#bde835 byr:1963 iyr:2020 eyr:2025 +ecl:amb hgt:162cm + +eyr:2027 iyr:2018 hcl:#ceb3a1 hgt:152cm pid:882429463 ecl:blu byr:1969 + +cid:134 eyr:2021 hcl:#a97842 hgt:63in +ecl:grn byr:1975 iyr:2019 pid:154078695 + +byr:1956 eyr:2027 +pid:396230480 hcl:#b6652a +hgt:175cm iyr:2020 ecl:oth + +ecl:grn +cid:263 hcl:#506937 byr:1924 +eyr:2030 pid:705511368 hgt:159cm +iyr:2011 + +eyr:2020 hgt:178cm ecl:grn +byr:1947 hcl:#888785 +pid:177476829 iyr:2019 + +ecl:hzl cid:211 iyr:2016 hgt:176cm pid:405182470 +byr:1952 +hcl:#866857 eyr:2028 + +eyr:2032 cid:152 ecl:gmt hgt:150in +pid:75969209 +byr:2019 hcl:z iyr:1940 + +hcl:#fffffd hgt:193cm pid:607407479 cid:300 byr:1944 iyr:2017 +ecl:oth +eyr:2026 + +hcl:z +cid:125 eyr:2040 ecl:dne byr:2015 pid:733096171 hgt:63cm +iyr:1922 + +pid:575721428 hgt:152cm cid:275 +hcl:#cfa07d eyr:2028 +byr:1935 ecl:hzl iyr:2016 + +iyr:2012 +ecl:grn eyr:2027 hcl:#623a2f pid:029106453 byr:1984 hgt:168cm + +ecl:blu cid:140 eyr:2028 iyr:2018 hcl:#c0946f +hgt:163cm byr:1944 +pid:709288293 + +byr:1936 +hgt:172cm eyr:1997 hcl:#8b8c88 cid:50 +iyr:2016 pid:205477922 ecl:grn + +hgt:170cm pid:872750582 eyr:2027 byr:1985 iyr:2017 hcl:#d6976a ecl:blu + +hgt:163cm +pid:189634089 cid:116 byr:1975 eyr:2030 +hcl:#efcc98 ecl:brn iyr:2020 + +ecl:amb byr:1953 hcl:#6b5442 pid:418787965 +iyr:2018 hgt:193cm +eyr:2026 + +ecl:#3ec898 cid:339 hcl:#866857 eyr:2025 hgt:179cm pid:591430028 iyr:1936 byr:1995 + +pid:285371937 hgt:159cm +byr:1922 +iyr:2013 eyr:2023 hcl:#6b5442 ecl:amb + +pid:545260883 ecl:oth +hgt:163cm +iyr:2015 eyr:2021 byr:1975 hcl:#866857 + +ecl:hzl hgt:182cm pid:053762098 eyr:2023 cid:174 hcl:#6daac4 iyr:2017 byr:1937 + +hgt:178cm iyr:2015 byr:1956 pid:815359103 +ecl:blu hcl:#cfa07d eyr:2030 + +hcl:#7d3b0c +pid:438108851 hgt:162cm byr:1930 iyr:2014 eyr:2024 ecl:amb + +eyr:2027 iyr:2019 hcl:#90eb1c hgt:178cm +pid:314810594 cid:278 ecl:amb +byr:2001 + +byr:1949 iyr:1942 hcl:#888785 ecl:hzl hgt:184cm eyr:2027 pid:899137640 + +hgt:153cm +eyr:2022 iyr:2011 byr:1975 +hcl:#602927 +ecl:amb pid:178cm + +hcl:#6b5442 +ecl:amb iyr:2018 eyr:2025 pid:418735327 byr:1922 hgt:74in + +ecl:gmt hcl:z iyr:2024 +eyr:1988 hgt:75cm cid:125 pid:690872200 byr:1928 + +eyr:2024 hgt:184cm +pid:4634589837 ecl:zzz iyr:2022 byr:2000 hcl:89c187 + +iyr:2017 byr:1966 hcl:#efcc98 ecl:brn pid:473085232 eyr:2021 hgt:174cm + +hgt:67in eyr:2030 iyr:2014 byr:1943 hcl:#602927 cid:344 +ecl:oth +pid:210476779 + +byr:1955 +ecl:oth +hgt:193cm iyr:2012 hcl:#623a2f pid:818289829 eyr:2021 + +byr:2018 ecl:#872a51 iyr:2024 hcl:97783d +pid:155cm hgt:174cm +eyr:1964 + +hcl:#6b5442 hgt:157cm byr:1932 ecl:brn pid:4275535874 +eyr:2024 iyr:2015 + +pid:959861097 +hgt:151cm cid:140 byr:1935 +eyr:2029 +iyr:2018 ecl:hzl +hcl:#623a2f + +hgt:181cm pid:911791767 eyr:2027 +iyr:2016 byr:1962 +ecl:grn hcl:#866857 + +eyr:2021 +byr:1994 +hgt:162cm hcl:#866857 ecl:oth iyr:2014 +pid:712345689 + +hcl:#7d3b0c +hgt:170cm pid:600132416 eyr:2025 +iyr:2016 byr:1978 ecl:brn + +hcl:#0a9307 +cid:287 byr:1940 pid:786271493 +eyr:2028 hgt:186cm +iyr:2019 ecl:oth + +eyr:2025 hgt:190cm ecl:hzl cid:228 iyr:2019 +byr:1932 +hcl:#623a2f pid:648307551 + +pid:304587325 iyr:2019 byr:1923 hcl:#7d3b0c +hgt:190cm +ecl:gry eyr:2030 + +hgt:188cm eyr:2027 byr:1958 pid:572934921 +hcl:#888785 ecl:hzl iyr:2010 + +iyr:2019 +hgt:178cm ecl:grn hcl:#7d3b0c pid:007601227 +byr:1975 eyr:2023 + +pid:808872803 byr:1929 +ecl:grn +eyr:2022 iyr:2019 hgt:74in hcl:#602927 + +iyr:2019 +cid:67 hcl:#602927 pid:292601338 ecl:hzl +byr:2001 eyr:2023 hgt:171cm + +byr:1962 eyr:2022 hcl:#b6652a hgt:193cm +ecl:oth +iyr:2010 + +hgt:70in iyr:2014 hcl:#a97842 +cid:169 eyr:2020 ecl:amb +pid:329751670 byr:1959 + +byr:1920 +ecl:oth hgt:172cm cid:57 pid:515139276 +eyr:2030 +hcl:#18171d +iyr:2013 + +iyr:2012 +hcl:#a97842 pid:946040810 hgt:65in +byr:1936 ecl:amb eyr:2020 + +byr:1948 hcl:#18171d +iyr:2019 +ecl:hzl cid:185 +eyr:2023 +pid:583625200 hgt:191cm + +hgt:154cm eyr:2022 +pid:460137392 iyr:2010 +ecl:grn +hcl:#ceb3a1 + +eyr:2024 +iyr:2016 pid:890698391 hgt:172cm hcl:#a97842 cid:271 ecl:oth byr:1926 + +hgt:162cm pid:340904964 hcl:#b6652a +byr:1966 +iyr:2010 +cid:260 eyr:2028 +ecl:amb + +byr:1933 eyr:2029 pid:642043350 +iyr:2016 hcl:#b6652a ecl:grn + +pid:602218620 eyr:2023 ecl:blu +hcl:#623a2f +byr:1950 hgt:168cm iyr:2015 + +ecl:gry pid:490792384 +byr:1974 +hcl:#a97842 iyr:2016 hgt:170cm + +iyr:2020 ecl:gry byr:2002 +eyr:2029 hcl:#9f45c4 +hgt:155cm pid:604239618 + +hgt:190cm pid:560653271 iyr:2020 cid:349 +eyr:2024 ecl:blu hcl:#efcc98 byr:1936 + +eyr:2021 byr:1964 hcl:#efcc98 ecl:grn iyr:2018 +hgt:165cm pid:218376636 + +pid:186217101 +iyr:2019 hgt:155cm +byr:2017 eyr:2022 ecl:grn cid:349 hcl:ece72e + +iyr:2015 +eyr:2026 pid:802832833 +hcl:#888785 hgt:190cm ecl:brn +byr:1952 +cid:202 + +cid:151 iyr:2017 hgt:152cm hcl:#a97842 eyr:2020 ecl:hzl +pid:554959609 byr:1941 + +cid:116 +iyr:2019 hgt:159cm byr:1992 pid:662111811 +hcl:#18171d ecl:oth eyr:2024 + +ecl:grn byr:1966 +iyr:1950 pid:585351486 +eyr:2038 hgt:178in hcl:a27d2b + +iyr:2014 cid:238 hgt:187cm pid:523401750 ecl:amb hcl:#18171d eyr:2023 byr:1984 + +eyr:2021 byr:1957 +pid:340752324 +iyr:2015 hgt:157cm +hcl:#602927 cid:70 +ecl:oth + +pid:458479816 ecl:hzl +eyr:2022 hcl:z +hgt:60cm +byr:2012 iyr:2005 + +cid:57 +hgt:154cm pid:446142864 +hcl:#341e13 byr:1968 eyr:2030 +iyr:2019 +ecl:brn + +eyr:2028 +pid:243811429 byr:1977 +iyr:2011 hcl:#18171d hgt:185cm ecl:oth + +cid:205 byr:1976 eyr:2029 pid:649877471 hcl:#cfa07d hgt:152cm +ecl:blu +iyr:2013 + +iyr:2009 pid:559014976 ecl:oth hgt:189cm byr:1936 eyr:2037 +hcl:#efcc98 + +pid:134378987 byr:1983 iyr:2013 hgt:173cm +ecl:oth hcl:#ceb3a1 +cid:80 +eyr:2020 + +hgt:151cm byr:1964 ecl:grn iyr:2010 hcl:#b6652a pid:939492531 +eyr:2028 + +byr:1961 iyr:2014 hcl:#733820 hgt:179cm +eyr:2026 ecl:gry pid:732892920 + +iyr:2018 byr:1996 +pid:944007809 ecl:hzl +hcl:#866857 eyr:2021 +hgt:155cm + +pid:374875696 hcl:#7d3b0c +ecl:oth +hgt:193cm byr:1948 cid:238 +iyr:2020 + +pid:305782299 hcl:#b6652a +ecl:brn +hgt:172cm +iyr:2018 byr:1927 + +pid:945869114 cid:95 byr:1989 hgt:173cm eyr:2025 hcl:#b6652a iyr:2012 ecl:amb + +pid:55484149 +eyr:1958 +iyr:1956 ecl:grn +cid:95 byr:2028 +hcl:c2af7e + +hgt:176cm ecl:amb +hcl:#a97842 eyr:2029 pid:937928270 +cid:251 +byr:1978 +iyr:2018 + +hgt:154cm +cid:213 pid:767329807 ecl:hzl +iyr:2013 +hcl:#888785 +eyr:2026 byr:1998 + +cid:158 hcl:#b6652a hgt:155cm iyr:2010 eyr:2025 +byr:1980 pid:338567803 ecl:amb + +hcl:#efcc98 byr:1940 hgt:62in ecl:oth pid:537307591 +eyr:2030 +iyr:2017 +cid:179 + +byr:1965 eyr:2027 pid:691913618 hgt:75in +hcl:#6b5442 ecl:gry iyr:2012 + +hgt:163cm byr:1964 eyr:2025 +iyr:2010 hcl:#ceb3a1 ecl:oth +pid:936536544 + +pid:712946803 +cid:343 +hgt:187cm ecl:oth iyr:2020 byr:1983 eyr:2030 +hcl:#7873b3 + +ecl:blu +iyr:2010 +hcl:#fffffd +eyr:2030 +hgt:175cm pid:047567505 byr:1963 + +ecl:gry byr:1946 eyr:2026 hcl:#602927 +hgt:164cm +iyr:2010 + +pid:223378458 +iyr:2014 cid:151 ecl:hzl hgt:171cm +eyr:2020 +hcl:#341e13 byr:1964 + +ecl:brn byr:1948 +hcl:#866857 +hgt:193cm eyr:2024 +iyr:2013 cid:277 + +hcl:#623a2f byr:1943 iyr:2011 ecl:oth +hgt:184cm +pid:371604584 eyr:2024 cid:176 + +hcl:#efcc98 +eyr:2025 pid:241834382 +hgt:178cm +byr:1985 +iyr:2017 + +hcl:#c0946f +byr:1996 pid:701366586 eyr:2026 hgt:163cm iyr:2015 ecl:oth + +hgt:65cm hcl:#18171d +eyr:2024 ecl:brn pid:172cm +iyr:2010 +byr:1990 + +hcl:#fffffd pid:68659204 hgt:161cm iyr:2025 +ecl:#94b8aa byr:2021 eyr:2032 + +ecl:blu iyr:2018 byr:1993 cid:184 +hgt:177cm pid:289871693 hcl:#733820 eyr:2026 + +cid:138 +ecl:gry hgt:174cm eyr:2024 byr:1988 iyr:2014 hcl:#341e13 pid:864852584 + +cid:321 eyr:2028 pid:93285596 hgt:173cm +iyr:2013 ecl:gry hcl:#623a2f +byr:1927 + +pid:431242259 eyr:2022 ecl:hzl +byr:1960 hgt:151cm hcl:#efcc98 iyr:2020 + +hcl:#866857 eyr:2029 iyr:2016 ecl:grn pid:526060780 byr:1929 +cid:310 hgt:162cm + +ecl:blu hgt:183cm cid:168 +iyr:2015 +eyr:2021 byr:1951 hcl:#6b5442 +pid:594960553 + +hcl:#ceb3a1 +iyr:2020 byr:1951 hgt:186cm eyr:2022 ecl:amb pid:317661479 + +iyr:2016 +hgt:163in hcl:#accfa0 +ecl:brn +pid:307377995 byr:2000 eyr:2028 + +pid:933380459 +byr:1938 +cid:291 hcl:#c0946f +ecl:oth iyr:2018 +eyr:2026 hgt:170cm + +byr:1974 +pid:262927116 eyr:2027 ecl:gry +hcl:#341e13 iyr:2014 cid:232 hgt:161cm + +hcl:#602927 +byr:2001 iyr:2011 +hgt:177cm eyr:2028 pid:165733929 ecl:amb + +byr:1922 cid:144 pid:333716867 hgt:183cm iyr:2015 +hcl:#c25ea9 eyr:2022 ecl:blu + +eyr:2021 cid:147 byr:1978 +iyr:2020 pid:938828535 +hcl:#7d3b0c ecl:amb hgt:159cm + +hgt:153cm ecl:hzl +cid:232 byr:1953 hcl:#a97842 iyr:2016 pid:356632792 eyr:2029 + +pid:745727684 ecl:gry iyr:2020 +hcl:#a97842 +eyr:2025 cid:275 +hgt:65in +byr:1957 + +hcl:#733820 +ecl:grn iyr:2019 byr:1943 eyr:2024 hgt:70in +pid:953607814 + +ecl:gry eyr:2028 hcl:#cfa07d +hgt:163cm +byr:1942 iyr:2019 pid:310104177 + +hgt:190cm +eyr:2027 iyr:2010 byr:1978 +ecl:gry +hcl:#964ba7 + +cid:320 +eyr:2022 hgt:169cm +ecl:blu hcl:#a97842 iyr:2015 pid:669007078 byr:1986 + +iyr:2019 pid:901370677 hcl:7f2398 cid:305 +ecl:amb eyr:2011 hgt:190cm byr:1991 + +ecl:brn +cid:256 byr:1987 iyr:2017 eyr:2026 hcl:#623a2f pid:875646528 +hgt:160cm + +byr:1955 pid:120131971 hcl:#18171d +hgt:156cm +ecl:blu +iyr:2011 eyr:2028 + +iyr:2020 ecl:brn cid:188 +hgt:157cm +eyr:2026 +pid:504067323 hcl:#733820 byr:1982 + +cid:102 hgt:177cm +hcl:#733820 ecl:hzl byr:1984 pid:542750146 eyr:2028 iyr:2020 + +pid:419639528 iyr:2013 hgt:175cm ecl:blu +eyr:2026 byr:1999 hcl:#733820 + +byr:1963 eyr:2020 +pid:683641152 ecl:gry cid:207 hgt:180cm +hcl:#cfa07d +iyr:2020 + +hgt:192cm pid:156436859 iyr:2020 hcl:#cfa07d +ecl:blu byr:1963 eyr:2025 cid:147 + +eyr:2002 +hcl:z iyr:2011 +pid:6830168962 +hgt:156in cid:288 byr:2029 + +eyr:2021 +pid:277739802 byr:1992 ecl:hzl iyr:2020 +hcl:#7c5fe8 hgt:184cm + +byr:1989 pid:066973099 +iyr:2017 +eyr:2022 ecl:hzl hcl:#888785 hgt:76in + +hcl:#866857 +iyr:2016 cid:306 +ecl:hzl +pid:453816800 byr:1971 hgt:71in eyr:2030 + +pid:248573931 hcl:#cfa07d +iyr:2014 eyr:2024 hgt:186cm byr:1970 cid:128 ecl:blu + +pid:172567579 ecl:brn iyr:2014 byr:1948 cid:309 +hgt:151cm hcl:#888785 eyr:2024 + +hgt:153cm eyr:2026 byr:1929 ecl:hzl pid:684760742 +hcl:#c45e93 iyr:2018 + +pid:#d50a43 +iyr:1940 +ecl:#7880a9 byr:2018 hcl:dc2fa7 hgt:185in eyr:1978 + +hcl:#602927 cid:71 eyr:2020 +pid:620634584 hgt:157cm byr:1991 +iyr:2020 ecl:amb + +eyr:2023 +byr:1959 iyr:1947 hgt:152cm ecl:#503286 pid:63978523 hcl:57dd0d + +hgt:190cm +byr:1955 ecl:blu +pid:507892696 +hcl:#9bd1f0 eyr:2029 +iyr:2010 + +pid:365539813 +eyr:2022 hcl:#623a2f iyr:2020 hgt:184cm +ecl:oth byr:1920 cid:213 + +cid:50 ecl:oth pid:774859218 hgt:193cm +iyr:2017 byr:1925 hcl:#866857 +eyr:2021 + +hgt:189cm +iyr:2019 byr:1937 +hcl:#a97842 +eyr:2025 ecl:oth +pid:787390180 + +iyr:2019 eyr:2027 hgt:183cm +ecl:hzl pid:549757712 +byr:1956 +hcl:#866857 + +pid:755580715 +hcl:#602927 hgt:187cm iyr:2017 byr:1925 eyr:2020 ecl:blu + +iyr:2019 hgt:69in +ecl:amb +hcl:#602927 eyr:2026 +pid:951019647 byr:1974 + +byr:1943 eyr:2034 hgt:150 pid:#36aedf ecl:oth +hcl:z + +eyr:2024 +ecl:hzl pid:824745692 iyr:2012 hcl:06ab6e +byr:1944 +hgt:159cm +cid:183 + +hgt:169cm ecl:blu +eyr:2030 iyr:2013 byr:1945 pid:791359040 hcl:#7d3b0c + +iyr:2018 +ecl:hzl hgt:152cm +hcl:#18171d eyr:2026 byr:1924 pid:534667048 + +eyr:2029 pid:933295825 +iyr:2011 +hcl:#cfa07d byr:1981 +hgt:164cm ecl:grn + +ecl:amb byr:1964 iyr:2018 +pid:014457573 +cid:152 +eyr:2028 hgt:171cm hcl:#866857 + +hgt:167cm +byr:1974 iyr:2012 ecl:amb pid:512315114 +cid:278 +eyr:2028 hcl:#623a2f + +hgt:153cm ecl:oth iyr:2012 +eyr:2027 hcl:#888785 byr:1999 pid:416990697 + +eyr:2025 ecl:blu byr:1991 hcl:#866857 +hgt:189cm pid:546461828 + +iyr:2016 +byr:1988 +hgt:160cm eyr:2025 ecl:amb hcl:#602927 +pid:562766105 + +ecl:oth byr:1942 +hcl:#341e13 pid:564975864 cid:158 +hgt:159cm eyr:2028 +iyr:2018 + +pid:406209763 hgt:170cm cid:331 +iyr:2018 eyr:2026 byr:1981 +hcl:#733820 ecl:gry + +pid:279164109 ecl:oth +cid:197 hcl:#7d3b0c +eyr:2024 +hgt:185cm iyr:2020 byr:1925 + +hcl:#efcc98 ecl:hzl +cid:92 hgt:190cm pid:724466265 iyr:2020 +eyr:2025 byr:1996 + +byr:1996 +cid:55 pid:906572505 ecl:grn eyr:2022 hcl:#602927 hgt:160cm iyr:2014 + +eyr:2028 hcl:#b6652a ecl:hzl hgt:186cm iyr:2016 pid:132872161 byr:1932 + +hcl:#fffffd iyr:2019 eyr:2020 hgt:188cm +byr:1951 ecl:brn +pid:842126902 + +hcl:#602927 +hgt:158cm +eyr:2023 iyr:2010 +pid:681061896 byr:1977 ecl:gry + +iyr:2018 hgt:192cm byr:1970 cid:200 ecl:grn eyr:2027 +pid:164408694 hcl:#888785 + +eyr:2029 +pid:447061655 iyr:2010 hcl:#341e13 ecl:oth +cid:187 hgt:185cm byr:1943 + +byr:1925 iyr:2012 eyr:2025 +hgt:190cm hcl:#18171d pid:017534154 ecl:brn + +hgt:172cm byr:1923 +eyr:2026 iyr:2015 +pid:580812884 hcl:#c0946f ecl:hzl + +hcl:#888785 eyr:2028 +byr:1952 ecl:brn pid:818889983 +iyr:2010 hgt:180cm + +eyr:2026 ecl:gry byr:1982 hgt:188cm hcl:#c0946f pid:610689703 iyr:2011 + +eyr:2028 +iyr:2018 +pid:921660781 ecl:amb +hcl:#cfa07d hgt:178cm byr:1975 + +byr:1977 pid:667631009 iyr:2010 +cid:86 eyr:2022 hgt:189cm hcl:#7d3b0c ecl:oth + +pid:214679440 hgt:190cm ecl:blu iyr:2017 +eyr:2025 cid:292 + +ecl:amb +iyr:2017 hcl:531ad3 +hgt:163 pid:689027667 byr:2006 eyr:2033 + +hgt:68in byr:1928 iyr:2010 cid:227 eyr:2023 +ecl:hzl pid:#87bab9 hcl:#fffffd + +ecl:grn byr:1940 cid:294 hgt:152cm pid:310277488 +iyr:2015 hcl:#18171d eyr:2030 + +byr:1965 pid:240720987 +eyr:2030 ecl:oth hgt:192cm hcl:#733820 +iyr:2016 + +pid:830487275 +ecl:blu byr:1930 +hcl:#b6652a iyr:2013 hgt:188cm eyr:2025 + +hgt:177cm byr:1955 eyr:2030 ecl:amb pid:476675886 iyr:2016 hcl:#c0946f + +pid:152702068 iyr:2016 hcl:#b6652a +cid:82 ecl:blu eyr:2029 byr:1975 hgt:161cm + +pid:136852264 +eyr:2024 cid:339 ecl:oth byr:1949 iyr:2011 + +iyr:2020 pid:772739059 +eyr:2025 hgt:157cm +byr:1945 ecl:brn +hcl:#6b5442 + +hcl:#18171d eyr:2022 +iyr:2018 ecl:grn byr:1933 pid:053763751 + +pid:214212776 hcl:#18171d +eyr:2030 +iyr:2020 byr:1988 +cid:122 +hgt:170cm ecl:oth + +pid:883116919 iyr:2018 ecl:brn byr:1938 hgt:187cm eyr:2020 + +iyr:2020 hcl:#a97842 +cid:329 eyr:2025 byr:1946 pid:636649774 +ecl:grn hgt:158cm + +eyr:2023 +ecl:blu hgt:161cm +hcl:#341e13 byr:1951 +iyr:2020 pid:461889565 cid:97 + +hgt:168cm pid:492241189 +eyr:2029 +iyr:2013 +cid:150 +byr:1980 hcl:#cfa07d ecl:hzl + +byr:1998 ecl:gry hgt:150cm eyr:2024 pid:401735295 cid:153 hcl:#733820 iyr:2016 + +ecl:hzl hgt:184cm iyr:2018 +byr:2001 +pid:453480077 eyr:2025 hcl:#a97842 diff --git a/source/app.d b/source/app.d index f5e3c24..e232ada 100644 --- a/source/app.d +++ b/source/app.d @@ -8,6 +8,7 @@ import std.getopt; import day1; import day2; import day3; +import day4; import dayutil; immutable string progName = "aoc-2020"; @@ -16,6 +17,7 @@ void function(string[])[] programs = [ &day1.run, &day2.run, &day3.run, + &day4.run, ]; void printUsage(string name) { diff --git a/source/day4.d b/source/day4.d new file mode 100644 index 0000000..c10d56c --- /dev/null +++ b/source/day4.d @@ -0,0 +1,111 @@ +import std.algorithm; +import std.array; +import std.functional; +import std.range; +import std.stdio; +import std.traits; + +import dayutil; + +struct SerName { string name; }; +struct Passport { + @SerName("byr") string birthYear = ""; + @SerName("cid") string countryId = ""; + @SerName("ecl") string eyeColour = ""; + @SerName("eyr") string expireYear = ""; + @SerName("hcl") string hairColour = ""; + @SerName("hgt") string height = ""; + @SerName("iyr") string issueYear = ""; + @SerName("pid") string passwordId = ""; + + bool isValid() { + return birthYear.length > 0 && issueYear.length > 0 && expireYear.length > 0 + && height.length > 0 && hairColour.length > 0 && eyeColour.length > 0 + && eyeColour.length > 0 && passwordId.length > 0; + } +} +void run(string[] args) { + auto lines = stdin.byLineCopy.array; + size_t result = parts!size_t(args, + () => part1(lines)); + writeln(result); +} + +size_t part1(Range)(Range range) if (isInputRange!Range) { + return range.tokenize() + .map!(x => x.deserialize!Passport) + .filter!(x => x.isValid) + .count; +} + +/** + * Deserializes a type from an array in the form of [[key, value], ...] where key an value are + * strings. + * + * NOTE: THE NAME OF THE FIELDS WITHIN T MUST BE ORDERED ALPHABETICALLY! + */ +T deserialize(T, Range)(Range r) + if (isForwardRange!Range && isAggregateType!T) { + + import std.conv; + + T result; + string fName; + alias pred = x => to!string(x[0]) == fName; + static foreach(index, field; T.tupleof) { + static if (hasUDA!(field, SerName)) { + fName = getUDAs!(field, SerName)[0].name; + } else { + fName = field.stringof; + } + if (r.canFind!(pred)) { + result.tupleof[index] = to!(typeof(field))(r.save.find!(pred)[0][1]); + } + } + return result; +} + +unittest { + struct Example { + string foo; + @SerName("baz") int bar; + } + Example example = deserialize!Example([["foo", "12"], ["baz", "32"]]); + assert(example.foo == "12"); + assert(example.bar == 32); +} + + +/** + * Takes the input as a range of a array of a string per line + * + * returns: [[[key, value], ...], ...] + */ +auto tokenize(Range)(Range range) if (isInputRange!Range) { + return range.splitter!(x => x.length == 0) + .map!(records => records.joiner(" ")) + .map!(records => records.array.splitter(' ').map!(record => record.splitter(':').array).array + .sort!(((a,b) => a[0] < b[0]))); +} + + +unittest { + import std.string; + string testdata = q"EOS +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 +EOS"; + assert(testdata + .lineSplitter.part1 == 2); +}