From 5a2aec7e76b498a97bed59218197ce472d1621b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tristan=20Dani=C3=ABl=20Maat?= Date: Fri, 4 Dec 2020 20:15:55 +0000 Subject: [PATCH 1/2] Complete day 4.1 --- day-4/.gitignore | 1 + day-4/Cargo.lock | 78 ++++ day-4/Cargo.toml | 10 + day-4/input | 1068 +++++++++++++++++++++++++++++++++++++++++++++ day-4/src/main.rs | 80 ++++ 5 files changed, 1237 insertions(+) create mode 100644 day-4/.gitignore create mode 100644 day-4/Cargo.lock create mode 100644 day-4/Cargo.toml create mode 100644 day-4/input create mode 100644 day-4/src/main.rs diff --git a/day-4/.gitignore b/day-4/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/day-4/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/day-4/Cargo.lock b/day-4/Cargo.lock new file mode 100644 index 0000000..44f11e3 --- /dev/null +++ b/day-4/Cargo.lock @@ -0,0 +1,78 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "day-4" +version = "0.1.0" +dependencies = [ + "indoc", +] + +[[package]] +name = "indoc" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8" +dependencies = [ + "indoc-impl", + "proc-macro-hack", +] + +[[package]] +name = "indoc-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0" +dependencies = [ + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", + "unindent", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "syn" +version = "1.0.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8833e20724c24de12bbaba5ad230ea61c3eafb05b881c7c9d3cfe8638b187e68" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "unindent" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f14ee04d9415b52b3aeab06258a3f07093182b88ba0f9b8d203f211a7a7d41c7" diff --git a/day-4/Cargo.toml b/day-4/Cargo.toml new file mode 100644 index 0000000..223e26a --- /dev/null +++ b/day-4/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "day-4" +version = "0.1.0" +authors = ["Tristan Daniƫl Maat "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +indoc = "0.3" diff --git a/day-4/input b/day-4/input new file mode 100644 index 0000000..5b0a490 --- /dev/null +++ b/day-4/input @@ -0,0 +1,1068 @@ +hgt:159cm +pid:561068005 eyr:2025 iyr:2017 cid:139 ecl:blu hcl:#ceb3a1 +byr:1940 + +iyr:2014 +byr:1986 pid:960679613 eyr:2025 ecl:hzl + +cid:211 ecl:blu hcl:#7d3b0c iyr:2011 pid:006632702 +byr:1982 eyr:2023 hgt:68in + +hcl:#341e13 hgt:192 iyr:2028 +ecl:utc +eyr:2027 byr:1979 pid:653515689 + +eyr:2026 hgt:161cm ecl:#1850b8 +pid:298779494 hcl:b2114e iyr:1953 + +hgt:155cm +hcl:#a97842 iyr:2019 +ecl:gry byr:1939 +pid:935099157 eyr:2027 + +eyr:2024 ecl:grn +pid:102781360 byr:1962 iyr:2013 hcl:#602927 + +hcl:#602927 hgt:152cm +pid:659074205 ecl:brn iyr:2014 byr:1951 + +iyr:2025 hcl:8464b2 byr:2030 pid:976783295 hgt:155cm ecl:dne + +hcl:#ceb3a1 byr:1984 pid:863872932 +iyr:2016 hgt:190cm ecl:grn eyr:2026 + +eyr:2030 hcl:#efcc98 +cid:166 pid:894418497 ecl:hzl +hgt:189cm iyr:2014 byr:1966 + +byr:1937 iyr:2017 eyr:2028 +ecl:amb +hgt:165cm cid:84 +pid:435289747 + +hgt:166cm hcl:#6b5442 byr:1953 eyr:2023 iyr:2010 +pid:948173962 ecl:amb + +byr:1962 cid:276 iyr:2010 hgt:183cm pid:097154397 +hcl:#341e13 eyr:2024 + +hgt:61cm +byr:1942 ecl:xry hcl:#05e97d pid:42823283 +eyr:2024 + +hcl:#888785 +pid:960190685 byr:1967 iyr:2012 cid:99 eyr:2021 +hgt:76in + +eyr:2025 byr:1958 hcl:#18171d iyr:2012 pid:759427419 +ecl:hzl + +ecl:#829d2e +cid:60 iyr:2028 +byr:1979 hcl:caff12 eyr:1931 pid:#fd7aab hgt:184cm + +cid:251 byr:1981 pid:625590775 +hcl:#a97842 eyr:2020 +ecl:amb hgt:178cm +iyr:2016 + +pid:026891577 ecl:amb byr:2014 +hcl:bc419f eyr:2026 +iyr:1948 +hgt:123 cid:67 + +ecl:hzl +hgt:152cm hcl:#efcc98 +byr:1993 +eyr:2025 + +ecl:grn iyr:1924 eyr:2039 pid:8441306576 +hgt:163in +byr:2012 +cid:193 + +ecl:#78f4fa +eyr:2020 hgt:165cm byr:1965 pid:987868257 iyr:2012 +cid:331 hcl:z + +ecl:brn cid:289 pid:868305933 +byr:1936 hgt:174cm iyr:2016 hcl:#623a2f eyr:2021 + +hcl:#2a6308 eyr:2027 hgt:154cm ecl:grn +iyr:2012 +byr:1940 +pid:675209536 + +pid:186cm eyr:2022 +hcl:#fffffd hgt:151cm iyr:2016 ecl:hzl byr:1954 + +ecl:grn hgt:177cm pid:725111435 byr:1927 eyr:2027 cid:154 iyr:2010 hcl:#623a2f + +pid:801551597 cid:55 eyr:2028 hgt:193cm hcl:#a97842 +ecl:hzl byr:1942 iyr:2015 + +cid:176 eyr:2030 iyr:2018 byr:1932 hgt:162cm pid:896180324 ecl:amb hcl:#6b5442 + +cid:239 ecl:grn iyr:1953 pid:9500162195 +byr:1998 +hgt:182cm hcl:#733820 eyr:1966 + +eyr:2030 +pid:919325322 hcl:z iyr:2024 hgt:71cm ecl:#1e935c byr:2026 + +iyr:2012 +ecl:gry eyr:2025 hcl:#602927 hgt:168cm byr:1925 +pid:303312675 + +hgt:150in iyr:2014 ecl:gry eyr:2029 +byr:2029 +cid:228 + +ecl:#9524e0 byr:2026 hcl:z +iyr:2023 +cid:325 +eyr:1996 +pid:6172325031 hgt:191 + +ecl:#689e88 +eyr:1937 +cid:75 byr:1963 iyr:2024 +pid:4980937 hgt:156cm +hcl:#fffffd + +pid:719820090 iyr:2020 hgt:165cm +hcl:#ceb3a1 byr:1997 ecl:blu eyr:2027 + +eyr:2025 +pid:241723456 +iyr:2011 +byr:1953 cid:230 hgt:185cm hcl:#efcc98 ecl:oth + +byr:1936 hcl:#623a2f +iyr:2010 hgt:156cm +eyr:2022 +pid:064253102 ecl:brn + +cid:332 hcl:#a97842 eyr:2026 ecl:gry iyr:2019 pid:#4e4a46 +hgt:150cm +byr:1987 + +ecl:grn hgt:67in +iyr:2012 +byr:1953 pid:910793005 hcl:#341e13 eyr:2020 + +iyr:2024 eyr:2030 cid:204 hgt:166cm pid:218828260 +hcl:701b48 ecl:gry byr:1930 + +hgt:162cm pid:024916763 eyr:2026 ecl:hzl +hcl:#efcc98 iyr:2019 byr:1921 + +eyr:2025 +iyr:2017 ecl:hzl hcl:#fffffd hgt:167cm pid:779214145 + +eyr:2022 +hcl:#6b5442 byr:1941 ecl:grn hgt:169cm iyr:2014 +pid:610328167 + +iyr:2026 cid:179 pid:193cm +ecl:#deb37c +byr:1958 eyr:2024 +hgt:185cm + +pid:907508207 ecl:oth byr:1941 iyr:2017 hcl:#341e13 +eyr:2030 hgt:186cm + +iyr:2018 byr:1925 +ecl:brn eyr:2023 pid:903196231 +hgt:159cm +hcl:#a97842 cid:323 + +hgt:185cm ecl:hzl eyr:2022 iyr:2020 pid:572453155 hcl:#fffffd + +hcl:#a97842 ecl:blu pid:#ab3597 eyr:1964 byr:2030 +hgt:181cm iyr:2018 + +ecl:blu +hcl:#602927 +cid:234 +hgt:68in eyr:2021 pid:257420555 iyr:2014 byr:1972 + +hcl:#7d3b0c eyr:2022 +hgt:152cm byr:1974 +iyr:2017 +pid:353127736 +ecl:gry + +iyr:2018 eyr:2028 byr:1924 hcl:#69929e ecl:gry +hgt:68in pid:942207567 + +eyr:2028 cid:90 +hgt:185cm +ecl:amb byr:1990 pid:947625812 hcl:#623a2f iyr:2011 + +eyr:2023 byr:1996 hgt:175cm +iyr:2012 +hcl:#866857 ecl:blu +pid:437669135 + +byr:1937 eyr:2030 +hcl:#866857 iyr:2017 pid:513963895 hgt:157cm +ecl:grn + +iyr:2016 hcl:#623a2f eyr:2025 +pid:559150893 hgt:176cm +byr:1920 ecl:amb + +byr:1982 +eyr:1961 ecl:hzl +hgt:167cm hcl:#888785 iyr:2011 cid:261 pid:709006236 + +pid:307171649 byr:1935 hcl:#888785 hgt:182cm ecl:brn eyr:2030 iyr:2013 +cid:256 + +ecl:hzl +eyr:1998 +byr:2009 +hgt:153cm iyr:2010 +hcl:#888785 pid:140487128 + +iyr:2019 cid:78 +hgt:169cm +hcl:#888785 ecl:hzl byr:1997 eyr:2028 + +hgt:182in eyr:2025 hcl:#cfa07d ecl:#27a1c9 byr:2005 pid:8143047758 + +byr:2013 hgt:178in +eyr:1933 +pid:829007679 iyr:2016 hcl:#783308 +ecl:grn + +cid:267 byr:1930 pid:949963673 eyr:2026 +ecl:grn iyr:2020 +hgt:188cm hcl:#6b5442 + +eyr:2022 pid:254482159 +byr:1935 iyr:2017 +ecl:hzl +hcl:#b6652a +hgt:165cm + +hcl:109d15 hgt:72cm +cid:258 byr:2023 eyr:1987 ecl:grt iyr:2022 + +byr:1969 +ecl:oth hgt:151cm +pid:578662559 +eyr:2024 iyr:2015 hcl:#602927 +cid:343 + +iyr:2011 byr:1989 +ecl:brn eyr:2029 pid:123354233 +hcl:#efcc98 + +hcl:#a97842 iyr:2010 pid:558586208 +eyr:2029 byr:2002 ecl:amb +cid:225 hgt:152cm + +eyr:2005 byr:2024 iyr:1924 ecl:gmt cid:186 pid:#886ae9 +hcl:3cf4cd hgt:74cm + +ecl:gry +eyr:2029 +iyr:2013 +hgt:178cm hcl:#7d3b0c + +byr:1970 hcl:#6b5442 hgt:155cm iyr:2020 ecl:hzl +pid:698123164 eyr:2030 cid:185 + +hcl:#6b5442 ecl:hzl +iyr:2014 cid:324 pid:149063285 hgt:64in eyr:2023 +byr:1949 + +hcl:#866857 +eyr:2025 +iyr:2012 cid:116 hgt:185cm +pid:416329937 +ecl:grn byr:1962 + +iyr:2020 cid:55 byr:1985 hcl:#733820 pid:237883033 eyr:2020 ecl:blu + +iyr:2020 hgt:71in +ecl:hzl byr:1960 cid:53 hcl:#888785 pid:590574853 eyr:2024 + +pid:834729501 iyr:2019 hgt:72in byr:1977 +hcl:#604861 ecl:oth eyr:2024 + +pid:111536282 ecl:gry +hgt:69in eyr:2021 byr:1940 +iyr:2019 +hcl:#ceb3a1 + +hgt:186cm pid:045765056 ecl:gry byr:1958 iyr:2012 +eyr:2025 hcl:#cfa07d + +hgt:61in eyr:2023 pid:4189258985 ecl:brn iyr:1995 +hcl:#602927 byr:2017 + +byr:1984 hcl:#866857 +iyr:2013 pid:927074474 hgt:168cm +eyr:2021 ecl:oth + +hgt:186cm +pid:948677443 iyr:2014 hcl:#866857 byr:1968 ecl:amb eyr:2027 + +eyr:2028 cid:260 hcl:#623a2f pid:500330326 +iyr:2018 hgt:170cm +ecl:gry +byr:1960 + +hgt:71cm +pid:6209572 byr:1927 iyr:2011 ecl:utc hcl:3bc47a eyr:1984 + +hgt:164cm cid:160 iyr:2010 +byr:1922 eyr:2024 hcl:#c0946f ecl:gry pid:867476938 + +cid:316 +iyr:2015 hcl:#b6652a hgt:72cm pid:#c37dbf byr:2022 eyr:2036 ecl:#8bd8f4 + +iyr:2016 hgt:172cm +pid:482664712 ecl:hzl eyr:2024 hcl:#602927 byr:1945 + +eyr:2029 pid:883381915 +hgt:174cm byr:1937 hcl:#fffffd ecl:gry cid:91 + +eyr:2029 pid:302832265 hcl:#ceb3a1 byr:2010 +hgt:64 iyr:1960 + +hgt:170cm eyr:2030 pid:846949920 +hcl:#ceb3a1 +ecl:hzl iyr:2016 byr:1945 + +hcl:#efcc98 +pid:406029852 eyr:2023 byr:1981 ecl:blu iyr:2013 + +pid:788563693 hcl:#a97842 hgt:172cm eyr:2022 ecl:brn iyr:2010 byr:2002 + +iyr:2013 +hgt:60cm hcl:#7d3b0c pid:6594060725 ecl:#46a7d7 eyr:2023 byr:1995 + +cid:313 byr:1964 pid:102442749 eyr:2020 +hgt:167cm +hcl:#341e13 + +ecl:grn hgt:163cm pid:405504213 cid:349 hcl:#733820 eyr:2029 iyr:2011 + +ecl:hzl pid:470689685 iyr:2015 byr:1980 hgt:180cm eyr:2027 + +eyr:2023 iyr:2013 +hgt:189cm hcl:#866857 byr:1981 +cid:313 +ecl:brn pid:386584267 + +iyr:2011 +hcl:#7d3b0c +eyr:2027 +ecl:gry byr:1931 +hgt:71in +pid:435568613 + +eyr:2021 +pid:443386140 hgt:192cm iyr:2015 byr:1974 + +byr:1989 ecl:oth iyr:2011 +eyr:2027 +pid:761106563 hcl:#efcc98 +hgt:60in + +byr:1933 ecl:brn pid:607926472 +hcl:#cfa07d eyr:2026 +iyr:2010 + +ecl:hzl eyr:2027 hgt:175cm +pid:68527368 +byr:1980 iyr:2017 hcl:#341e13 + +hgt:159cm pid:6199921925 iyr:1920 byr:1950 ecl:amb cid:229 eyr:2034 + +pid:060780170 ecl:gmt +eyr:1961 hgt:184cm hcl:#a97842 byr:2007 + +eyr:2025 byr:1970 ecl:brn hgt:183cm pid:423232940 hcl:#cfa07d cid:283 + +hcl:#18171d hgt:191cm +byr:1951 +eyr:2029 +pid:627632195 cid:268 iyr:2012 + +eyr:2025 iyr:2019 hgt:163cm +ecl:oth pid:967756889 +byr:1938 + +hgt:160cm iyr:2015 +ecl:#9cf598 pid:297446459 cid:123 byr:1968 eyr:1970 +hcl:#efcc98 + +ecl:hzl pid:311990731 hgt:171cm hcl:#602927 byr:1978 +eyr:2026 cid:254 iyr:2014 + +hcl:#8e0dfc +pid:961997362 byr:1950 eyr:2027 hgt:184in ecl:blu iyr:2015 cid:266 + +pid:953859016 iyr:2018 hcl:#341e13 ecl:grn cid:61 +hgt:192cm +eyr:2022 byr:1920 + +eyr:2026 pid:149020634 byr:1942 iyr:2021 hcl:#6b5442 +ecl:oth hgt:176in + +eyr:2025 hgt:176cm +iyr:2020 ecl:oth hcl:#efcc98 pid:196082064 byr:2002 + +hgt:172in hcl:z +pid:#b454a0 +ecl:#d7a600 +byr:1977 +eyr:2035 iyr:2014 + +cid:254 iyr:2020 +pid:716596533 +hcl:#341e13 byr:1947 +hgt:150cm ecl:hzl eyr:2028 + +iyr:2019 pid:190601635 byr:1922 hcl:#18171d hgt:71in ecl:brn eyr:2021 + +byr:1938 iyr:2019 eyr:2028 pid:568504071 hcl:#efcc98 hgt:178cm ecl:amb + +pid:921417345 eyr:2020 ecl:brn hcl:#c0946f +hgt:168cm +byr:1983 cid:170 +iyr:2018 + +iyr:2020 cid:212 eyr:2002 pid:61850316 hgt:148 hcl:#b6652a +byr:2024 ecl:grn + +hcl:z eyr:1985 iyr:2015 hgt:72cm ecl:brn pid:599880521 + +pid:166cm hcl:z +hgt:165 eyr:2036 +cid:152 iyr:1943 +ecl:zzz + +eyr:2021 iyr:2014 +hgt:156cm +pid:654181902 ecl:amb +byr:1946 +hcl:#733820 + +iyr:2019 +hgt:189cm byr:1940 pid:419593669 ecl:amb +cid:149 hcl:#fffffd eyr:2020 + +hgt:172cm +ecl:lzr pid:788208394 hcl:#341e13 cid:183 +iyr:2020 eyr:2027 byr:1988 + +byr:2030 ecl:#d82c54 iyr:2014 +hcl:#be9be7 eyr:2027 pid:1291285950 hgt:61cm + +ecl:hzl +hcl:#a97842 hgt:186cm byr:1992 eyr:2022 + +iyr:2017 hgt:191cm pid:097984693 eyr:2025 byr:1963 +cid:333 +ecl:blu + +ecl:zzz pid:425594420 +byr:1983 +hcl:z +eyr:2028 hgt:184cm +iyr:1937 + +hgt:167cm +eyr:2025 hcl:#623a2f pid:575911832 +cid:305 byr:1939 iyr:2020 + +iyr:2015 hgt:179cm hcl:d678e0 byr:2030 pid:284187009 eyr:1977 cid:285 + +pid:405789549 byr:1982 eyr:2020 hcl:#623a2f +hgt:161cm iyr:2013 ecl:amb + +pid:775860836 hgt:184cm hcl:#fffffd ecl:amb byr:1930 eyr:2022 iyr:2016 + +iyr:2020 byr:1979 +eyr:2024 hgt:171cm +ecl:brn hcl:#ceb3a1 pid:853915000 + +iyr:2015 pid:244459567 +hcl:#18171d cid:224 byr:1931 eyr:2022 hgt:169cm ecl:gry + +iyr:2017 cid:308 eyr:2026 ecl:blu hgt:59in byr:1953 +hcl:#ceb3a1 pid:466915764 + +hcl:#7d3b0c +byr:1940 iyr:2015 +eyr:2020 pid:950614940 ecl:amb +hgt:179cm + +byr:2010 +cid:106 eyr:2022 +iyr:2020 pid:336057617 ecl:brn hcl:f13e26 +hgt:182cm + +byr:1981 iyr:2017 hgt:152cm +hcl:#fffffd +eyr:2024 ecl:gry + +cid:216 hgt:193cm +byr:1975 ecl:oth pid:684529055 iyr:2018 eyr:2020 hcl:#18171d + +hgt:150cm +eyr:2028 +hcl:#cfa07d ecl:grn +iyr:2018 byr:1951 pid:749102509 + +pid:937451204 hcl:#341e13 iyr:2020 +hgt:171cm eyr:2021 +byr:1941 +ecl:hzl + +cid:69 +iyr:2014 eyr:2022 pid:174789690 hgt:157cm byr:1961 ecl:hzl +hcl:#a97842 + +hcl:#7d3b0c pid:658134059 hgt:65in byr:2005 ecl:#2dcb50 iyr:2012 +eyr:2030 + +eyr:2027 +hgt:68in ecl:oth hcl:#888785 iyr:2016 pid:181577931 + +iyr:1997 byr:1994 +hgt:189cm +ecl:gry pid:564165515 +eyr:2029 hcl:#ceb3a1 + +hcl:#602927 eyr:2024 +cid:130 +iyr:2015 ecl:blu +hgt:184cm byr:1996 +pid:897871188 + +ecl:oth hcl:#623a2f +iyr:2016 pid:012591439 byr:1937 eyr:2022 hgt:176cm + +eyr:2020 +byr:1965 +iyr:2013 hgt:193cm +hcl:#ceb3a1 +ecl:hzl pid:177120440 + +byr:1934 iyr:2015 hcl:#341e13 +pid:370860309 ecl:oth +eyr:2028 hgt:157cm + +ecl:brn +byr:2001 +iyr:2010 +eyr:2028 hcl:#866857 hgt:183cm pid:194361427 + +hgt:182cm pid:449667574 ecl:amb +byr:1958 iyr:2017 +hcl:#efcc98 + +iyr:2020 ecl:hzl eyr:2030 hgt:185cm byr:1969 hcl:#ceb3a1 pid:157651787 + +pid:893956434 eyr:2027 hgt:185cm hcl:#a97842 +byr:1944 ecl:oth + +byr:2011 +iyr:2018 +hcl:#623a2f hgt:159cm ecl:blu pid:174cm +eyr:2030 + +ecl:grt pid:520129782 eyr:2020 +byr:2020 hcl:z cid:50 iyr:2017 +hgt:156cm + +iyr:2015 +ecl:grn hcl:#83b224 eyr:2021 pid:554994156 hgt:179cm byr:1994 + +ecl:gry byr:1971 pid:772131254 +eyr:2027 cid:201 hcl:#602927 + +cid:125 +byr:1943 hgt:168cm ecl:hzl pid:418786991 +eyr:2020 iyr:2016 +hcl:#cfa07d + +pid:825704567 eyr:2032 byr:2024 +iyr:1926 +hcl:d31139 hgt:190in + +cid:243 hcl:#cfa07d byr:1951 ecl:oth pid:382615614 +iyr:2018 eyr:2030 hgt:64in + +byr:1925 hgt:187cm ecl:oth eyr:2023 hcl:#888785 + +eyr:2028 iyr:2013 ecl:brn byr:1923 cid:174 hcl:#b6652a hgt:154cm pid:274036240 + +ecl:brn hgt:183cm iyr:2016 +byr:1922 +hcl:#efcc98 eyr:2030 + +hgt:188cm +byr:1979 +ecl:amb +eyr:2025 hcl:#b6652a cid:130 +pid:646985829 iyr:2019 + +hgt:76cm hcl:z cid:112 ecl:zzz +pid:953385473 eyr:2020 +byr:1943 + +ecl:#12c807 +byr:1954 eyr:1934 hgt:73cm hcl:#ceb3a1 iyr:2015 pid:704621520 + +hgt:188cm hcl:#733820 eyr:2024 ecl:grn +iyr:2018 byr:1982 pid:522812862 + +hgt:68cm ecl:blu +byr:2023 pid:875418461 iyr:2021 eyr:2020 hcl:#623a2f + +byr:1967 +pid:313706535 ecl:amb hcl:#888785 +iyr:2012 +eyr:2026 + +eyr:2026 +pid:288363970 cid:70 byr:1932 hgt:157cm iyr:2016 ecl:hzl hcl:#ceb3a1 + +byr:1992 pid:539896055 +eyr:2023 +cid:189 hgt:70in ecl:oth iyr:2019 +hcl:#866857 + +hgt:158in +ecl:gry byr:2028 +eyr:2036 cid:188 +hcl:#cfa07d +pid:044279141 + +eyr:2024 hgt:170cm ecl:hzl +byr:1939 pid:851235247 iyr:2013 +hcl:#fffffd + +ecl:hzl hcl:#c0946f +hgt:167cm +eyr:2024 byr:1936 pid:463230636 cid:297 +iyr:2016 + +pid:291401545 ecl:grn hcl:#b6652a iyr:2014 +hgt:185cm eyr:2025 byr:1947 + +eyr:2029 pid:612595763 +iyr:2018 ecl:gry +cid:290 +byr:1991 hcl:#733820 +hgt:150cm + +hgt:151cm +pid:667532675 cid:134 +byr:1930 +hcl:#efcc98 iyr:2012 +ecl:oth + +ecl:gry +hcl:#888785 hgt:161cm +eyr:2023 +pid:467759498 cid:274 + +eyr:2023 byr:1956 hgt:188cm iyr:2014 hcl:#b6652a pid:382721925 ecl:brn + +byr:1947 ecl:gry eyr:2020 +pid:874004905 hcl:#602927 hgt:161cm iyr:2029 + +pid:164334257 +iyr:2014 cid:286 eyr:2020 +hcl:#733820 +ecl:gry byr:1959 hgt:165cm + +hgt:59in +pid:#5b1362 +eyr:2028 iyr:1980 hcl:z byr:2030 +ecl:utc + +pid:604128460 iyr:2016 byr:1952 hgt:152cm ecl:grn hcl:#7d3b0c eyr:2021 + +pid:7483106309 eyr:2005 hgt:158in byr:2024 iyr:1935 hcl:z +ecl:#158994 + +hcl:22207f eyr:1994 +cid:166 pid:#d8e64c ecl:utc +byr:1966 hgt:70cm +iyr:1980 + +iyr:2012 pid:045892410 hgt:70in ecl:dne hcl:1a323a byr:1920 eyr:2022 + +hcl:#18171d iyr:2019 eyr:2026 +hgt:191cm pid:514596186 cid:327 byr:1938 ecl:grn + +pid:904148746 hcl:#a97842 hgt:161cm +cid:181 +iyr:2012 eyr:2020 ecl:oth + +iyr:2028 +eyr:2034 +cid:276 pid:#0e7ee2 byr:2020 +hgt:63cm ecl:gry +hcl:z + +pid:4270554593 eyr:2031 ecl:lzr hgt:72cm +iyr:2027 hcl:ffc210 cid:132 +byr:2008 + +iyr:2018 pid:174cm cid:144 +ecl:#10b2ed byr:1931 eyr:2040 hcl:z hgt:68in + +pid:446746712 +iyr:1957 +ecl:oth cid:213 hgt:184cm byr:2008 hcl:z + +hcl:#7d3b0c iyr:2012 ecl:hzl +eyr:2023 pid:270148060 + +pid:832184923 +eyr:2023 hgt:180cm +byr:1965 ecl:hzl cid:189 hcl:#a97842 +iyr:2016 + +pid:688867083 +iyr:2011 hcl:#733820 cid:147 eyr:2021 +byr:1986 ecl:oth + +hgt:166in ecl:amb byr:2014 +pid:169cm hcl:#cfa07d iyr:1976 + +hgt:64in byr:1987 hcl:01f3d7 +pid:553206412 eyr:2027 ecl:grn cid:336 +iyr:2012 + +cid:336 +ecl:oth byr:1975 +pid:296100726 hcl:#6b5442 iyr:2016 hgt:180cm eyr:2029 + +hcl:#ceb3a1 hgt:181cm pid:364719801 byr:1922 eyr:2029 +iyr:2010 cid:346 ecl:gry + +hcl:#1c7f1d cid:205 +hgt:184cm +byr:1928 +pid:694275035 iyr:2018 ecl:blu eyr:2023 + +eyr:1970 +hcl:z byr:2001 +pid:9244596 iyr:2030 hgt:187in ecl:blu + +hgt:96 +byr:2030 ecl:zzz eyr:1920 pid:115437655 hcl:z +iyr:2017 +cid:344 + +iyr:2018 +eyr:2023 +hcl:#888785 hgt:188cm +ecl:amb byr:1992 pid:602211075 + +pid:848099019 hgt:168cm iyr:2016 +eyr:2026 ecl:amb +hcl:#866857 byr:1981 + +iyr:2013 hcl:#623a2f hgt:151cm cid:135 byr:1974 eyr:2026 ecl:gry +pid:313553018 + +hcl:#733820 +byr:1986 hgt:182cm +ecl:brn eyr:2024 iyr:2017 +pid:676008782 + +eyr:2030 pid:833874339 iyr:2011 byr:1949 hgt:159cm +ecl:brn hcl:#602927 + +hgt:182cm hcl:#6b5442 pid:131549376 eyr:2029 iyr:2012 +ecl:gry byr:1926 + +cid:55 ecl:amb iyr:2015 hgt:192cm hcl:#a97842 +byr:1944 +eyr:2027 + +iyr:1944 eyr:2038 hcl:a2adf2 cid:99 byr:2006 hgt:67cm +pid:154cm +ecl:dne + +eyr:2005 hcl:#1495bd ecl:grt byr:2028 +iyr:2016 hgt:155 pid:182cm +cid:326 + +hgt:136 +pid:599182089 eyr:2020 byr:1945 +iyr:2012 +ecl:oth hcl:#18171d + +pid:4695182580 +iyr:2012 +ecl:brn eyr:2039 byr:1936 +hcl:#cfa07d + +ecl:hzl byr:1949 cid:133 hgt:159cm hcl:#b6652a pid:9833212692 iyr:2011 eyr:2030 + +eyr:2020 +hgt:175cm +cid:140 iyr:2014 byr:1980 hcl:#7d3b0c +ecl:grn pid:400508366 + +pid:#100a75 iyr:2016 +hgt:65 +eyr:2037 ecl:hzl +byr:1962 + +eyr:2024 pid:180cm hcl:#6b5442 hgt:154cm +iyr:1964 + +byr:1986 hgt:159cm ecl:brn +pid:856817592 hcl:#cfa07d eyr:2024 +iyr:2017 + +hgt:166cm +byr:1996 hcl:#410645 +ecl:hzl iyr:2010 cid:178 pid:337713295 +eyr:2026 + +iyr:2017 byr:1964 hgt:167cm hcl:#7d3b0c cid:298 ecl:brn pid:371416367 + +byr:1929 iyr:2011 hcl:#fffffd ecl:blu +pid:013408674 hgt:187cm eyr:2021 + +hcl:#cfa07d byr:1986 cid:331 +iyr:2010 ecl:gry pid:616063053 hgt:150cm +eyr:2028 + +pid:013835033 iyr:2017 byr:1991 +hgt:154cm hcl:#efcc98 eyr:2020 + +byr:1978 eyr:2024 +hgt:155cm iyr:2012 hcl:#694989 pid:914726069 +ecl:amb + +ecl:blu pid:139464317 hcl:#fffffd eyr:2024 byr:1970 hgt:72in iyr:2012 + +byr:1965 hcl:#ceb3a1 ecl:hzl iyr:2019 pid:910593212 eyr:2029 + +byr:1994 cid:228 +ecl:grn hgt:171cm pid:538884417 eyr:2025 iyr:2011 hcl:#6b5442 + +cid:264 hcl:#623a2f +hgt:186cm iyr:2012 ecl:brn eyr:2024 pid:304101929 byr:1954 + +hgt:183cm byr:1987 hcl:z ecl:gry eyr:2020 pid:384983241 iyr:2015 + +pid:#885c1a +byr:2012 eyr:2034 ecl:#8ea705 iyr:2028 hgt:61cm hcl:z + +eyr:2023 hgt:156cm byr:1939 hcl:#cd2220 ecl:brn pid:484163297 + +hgt:158in +byr:2000 ecl:lzr +iyr:2014 +eyr:2033 pid:50157400 + +byr:1974 hcl:#c0946f +iyr:2018 pid:285451524 cid:299 eyr:2029 hgt:184cm ecl:hzl + +byr:1974 hcl:#602927 hgt:151cm iyr:2013 pid:322935162 ecl:amb +cid:209 +eyr:2026 + +hcl:#341e13 iyr:2015 +ecl:gry byr:1970 +hgt:186cm +pid:330151070 eyr:2034 + +ecl:gry eyr:2023 +hgt:160cm hcl:#c0946f +iyr:2011 byr:1926 pid:727347794 + +iyr:2012 +byr:1974 hcl:#866857 +eyr:2025 +pid:933155590 hgt:167cm +ecl:grn + +iyr:2015 ecl:gry eyr:2029 +byr:1967 hcl:#f9f576 hgt:170cm pid:439696954 cid:173 + +eyr:2029 byr:1935 ecl:brn pid:165587982 +hcl:#6b5442 +iyr:2020 + +eyr:2029 ecl:hzl hcl:#866857 byr:1994 +pid:308548232 hgt:162cm iyr:2012 + +byr:1924 cid:274 +pid:028266367 eyr:2025 iyr:2017 hgt:169cm +hcl:#cfa07d ecl:gry + +eyr:2025 byr:1995 +ecl:brn +hgt:160cm +pid:819047484 +hcl:#602927 iyr:2011 + +pid:660383456 +iyr:2016 eyr:2022 hgt:158cm byr:1942 ecl:amb cid:334 hcl:#efcc98 + +hcl:#6b5442 iyr:2024 cid:180 ecl:grn pid:167cm hgt:169 + +eyr:2024 iyr:2017 hgt:165cm hcl:#7d3b0c byr:1920 +ecl:amb pid:236377188 + +pid:063113952 +ecl:grn hcl:#341e13 hgt:166cm +byr:1977 iyr:2017 + +ecl:amb hgt:174cm +eyr:2028 byr:2002 +hcl:#7d3b0c +pid:428826816 iyr:2017 + +byr:2025 ecl:dne hgt:167in pid:706379338 +iyr:2019 hcl:240e75 eyr:1971 + +eyr:2021 +hcl:#efcc98 iyr:2014 +pid:358236477 +byr:1923 cid:73 hgt:165cm ecl:amb + +eyr:2030 cid:267 +ecl:brn +pid:282023612 hcl:#c0946f iyr:2018 byr:1989 +hgt:72cm + +ecl:utc hcl:ea4b34 byr:2013 +pid:#d58d54 +hgt:107 iyr:2027 cid:296 eyr:2038 + +byr:1946 eyr:2024 iyr:2012 +hcl:#341e13 +pid:765835791 hgt:159cm + +hcl:#341e13 byr:1927 +ecl:grn iyr:2011 +hgt:175cm eyr:2023 pid:638808763 cid:339 + +eyr:2030 cid:160 byr:1994 hgt:163cm ecl:hzl iyr:2016 hcl:#623a2f pid:569304871 + +byr:1965 +eyr:2020 hgt:157cm hcl:#a97842 +cid:271 iyr:2014 pid:326802068 ecl:#a16571 + +byr:1965 +ecl:hzl eyr:2029 iyr:2010 hgt:157cm +hcl:#7d3b0c pid:617693914 + +pid:547158528 byr:1956 +ecl:gry hgt:189cm +eyr:2029 +hcl:#602927 +iyr:2011 + +hcl:#efcc98 +ecl:#1ecd0e pid:160cm eyr:2027 hgt:183cm byr:2027 iyr:1963 + +hcl:#fffffd eyr:2021 iyr:2014 byr:1959 ecl:amb +pid:102521439 hgt:190cm + +cid:112 hcl:#fffffd byr:2025 +pid:016603375 +eyr:1942 hgt:145 +iyr:1994 + +ecl:xry +pid:#5be367 +hgt:171cm cid:144 iyr:1946 eyr:2034 hcl:z byr:2022 + +ecl:oth +iyr:2014 hcl:#7d3b0c +cid:316 +byr:1936 pid:088295340 +eyr:2029 + +iyr:2019 +hgt:183cm ecl:brn hcl:#efcc98 pid:821190245 cid:251 eyr:2023 +byr:1993 + +ecl:oth iyr:2018 +cid:131 +hcl:#524e2e byr:1981 hgt:183cm eyr:2022 pid:037981572 + +hcl:#18171d byr:1934 eyr:2020 hgt:62in +cid:64 +ecl:oth pid:343039563 iyr:2010 + +hcl:#733820 pid:374199356 +hgt:169cm eyr:2026 byr:1994 iyr:2015 ecl:brn + +pid:394267581 +hcl:#a97842 iyr:2010 byr:1988 +hgt:185cm ecl:amb +eyr:2022 + +ecl:#be3b70 iyr:2025 +hcl:z +eyr:2010 +byr:2023 +hgt:65 cid:220 pid:#d6af49 + +eyr:2029 +hcl:#a97842 ecl:amb hgt:159cm +cid:228 byr:1946 iyr:2012 +pid:805319194 + +hcl:#c0946f eyr:2020 hgt:171cm ecl:oth iyr:2010 byr:1958 pid:276122958 + +iyr:2017 +hcl:#da47a1 byr:2007 ecl:utc +eyr:1945 cid:327 hgt:192cm pid:549704477 + +iyr:1923 hgt:174in hcl:z byr:1974 +eyr:2026 +ecl:xry pid:158cm + +iyr:2022 +ecl:#ae10f9 +hgt:108 +eyr:2035 hcl:z byr:2019 pid:#1f4f7c + +eyr:2021 pid:959352732 cid:306 hgt:178cm ecl:amb +iyr:2012 +byr:1953 + +byr:2016 ecl:lzr eyr:2021 hcl:z iyr:1977 hgt:181cm cid:164 + +cid:242 byr:2008 hcl:#866857 hgt:172cm iyr:2011 +ecl:blu eyr:2026 pid:350658669 + +hgt:67in eyr:2030 +ecl:gry pid:156329184 iyr:2010 byr:1936 hcl:#efcc98 + +cid:110 hgt:76in iyr:2018 +eyr:2029 pid:474249956 byr:2002 hcl:#866857 +ecl:oth + +iyr:2016 hgt:193cm eyr:2029 +byr:1934 hcl:#b6652a pid:901756621 +ecl:brn + +eyr:2017 hcl:z pid:#2f9848 iyr:2024 +hgt:170cm + +hgt:60in eyr:2026 byr:1922 hcl:#18171d iyr:2016 +pid:921038878 diff --git a/day-4/src/main.rs b/day-4/src/main.rs new file mode 100644 index 0000000..f1f268e --- /dev/null +++ b/day-4/src/main.rs @@ -0,0 +1,80 @@ +use std::collections::HashMap; +use std::fs; + +fn main() -> Result<(), Box> { + let input = fs::read_to_string("input")?; + let passports = parse_passports(&input)?; + println!("{}", validate_passports(&passports)); + + Ok(()) +} + +fn parse_passports(input: &str) -> Result>, &str> { + input + .split("\n\n") + .map(|passport| { + passport + .trim() + .split(|c| c == ' ' || c == '\n') + .map(|field| { + let split = field + .find(':') + .ok_or("Invalid passport entry; no separator")?; + let item = field.split_at(split); + + let key = item.0; + let value = item + .1 + .strip_prefix(":") + .expect("We've already checked the separator exists"); + + Ok((key, value)) + }) + .collect() + }) + .collect() +} + +fn validate_passports(passports: &Vec>) -> usize { + let required_fields = ["byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid"]; + + passports + .iter() + .filter(|passport| { + required_fields + .iter() + .all(|field| passport.contains_key(field)) + }) + .count() +} + +#[cfg(test)] +mod tests { + use super::*; + use indoc::indoc; + + #[test] + fn test_simple() -> Result<(), String> { + let example = indoc!( + "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 + " + ); + + let passports = parse_passports(example)?; + assert_eq!(validate_passports(&passports), 2); + + Ok(()) + } +} -- 2.44.1 From 1eed1d2f85303f07440ff59c09f2e5cbbcf70d9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tristan=20Dani=C3=ABl=20Maat?= Date: Fri, 4 Dec 2020 21:34:49 +0000 Subject: [PATCH 2/2] Complete day 4.2 --- day-4/src/main.rs | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/day-4/src/main.rs b/day-4/src/main.rs index f1f268e..1e5dfd9 100644 --- a/day-4/src/main.rs +++ b/day-4/src/main.rs @@ -37,13 +37,55 @@ fn parse_passports(input: &str) -> Result>, &str> { fn validate_passports(passports: &Vec>) -> usize { let required_fields = ["byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid"]; + let rules = [ + |year: &str| match year.parse() { + Ok(1920..=2002) => true, + _ => false, + }, + |year: &str| match year.parse() { + Ok(2010..=2020) => true, + _ => false, + }, + |year: &str| match year.parse() { + Ok(2020..=2030) => true, + _ => false, + }, + |height: &str| match height.split_at(height.chars().count() - 2) { + (height, "cm") => match height.parse() { + Ok(150..=193) => true, + _ => false, + }, + (height, "in") => match height.parse() { + Ok(59..=76) => true, + _ => false, + }, + _ => false, + }, + |color: &str| match color.split_at(1) { + ("#", code) => code.chars().all(|a| char::is_ascii_hexdigit(&a)), + _ => false, + }, + |color: &str| { + ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"] + .iter() + .any(|c| c == &color) + }, + |pid: &str| pid.chars().count() == 9 && pid.chars().all(char::is_numeric), + ]; passports .iter() .filter(|passport| { required_fields .iter() - .all(|field| passport.contains_key(field)) + .zip(rules.iter()) + .all(|(field, rule)| { + if let Some(value) = passport.get(field) { + rule(value) + } else { + false + } + }) }) .count() } -- 2.44.1