diff --git a/Cargo.lock b/Cargo.lock index 3b678e8..d990946 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,6 +5,16 @@ name = "AoC2020" version = "0.1.0" dependencies = [ "itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -20,6 +30,46 @@ dependencies = [ "either 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "regex" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.7.15 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread_local" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [metadata] +"checksum aho-corasick 0.7.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" "checksum either 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" "checksum itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +"checksum memchr 2.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +"checksum regex 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +"checksum regex-syntax 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" +"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" diff --git a/Cargo.toml b/Cargo.toml index d4d76bb..3303511 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,3 +8,5 @@ edition = "2018" [dependencies] itertools = "0.9.0" +lazy_static = "1.4.0" +regex = "1.4.2" diff --git a/inputs/day4.txt b/inputs/day4.txt new file mode 100644 index 0000000..15e78e0 --- /dev/null +++ b/inputs/day4.txt @@ -0,0 +1,989 @@ +hgt:176cm +iyr:2013 +hcl:#fffffd ecl:amb +byr:2000 +eyr:2034 +cid:89 pid:934693255 + +hcl:#b5c3db ecl:grn hgt:155cm pid:#baec97 iyr:2017 +byr:1939 +eyr:2020 + +pid:526669252 eyr:1972 +hgt:152cm ecl:dne byr:1960 hcl:z iyr:2023 + +eyr:2028 hcl:#c0946f hgt:73in byr:1926 ecl:#473aaf iyr:2016 pid:565318180 + +pid:472686027 ecl:oth iyr:2019 +cid:277 byr:1940 +eyr:2030 hgt:170cm +hcl:#62e117 + +ecl:oth +iyr:2017 +pid:938461813 hcl:#733820 byr:1959 hgt:159cm eyr:2022 + +iyr:2011 eyr:2021 hcl:z +ecl:hzl byr:2002 pid:17324328 cid:140 +hgt:186cm + +byr:2022 pid:3164234967 iyr:1984 +hgt:76cm hcl:6b3837 +ecl:#fa362b +eyr:2037 + +hcl:z eyr:1945 +pid:9247286687 hgt:75cm +iyr:1934 cid:326 ecl:zzz +byr:2005 + +byr:2005 +ecl:lzr +eyr:2021 pid:152cm +cid:254 iyr:2020 hcl:z hgt:157cm + +iyr:2020 eyr:2020 hcl:#18171d ecl:gry pid:914128753 hgt:168cm +byr:2002 + +hcl:#7d3b0c hgt:160cm eyr:2020 iyr:2015 +pid:054067854 ecl:brn byr:2023 + +hcl:#cfa07d hgt:157cm +byr:1994 eyr:2027 pid:344443856 +iyr:2016 + +pid:762423097 +iyr:2014 hcl:#a97842 ecl:brn hgt:180cm byr:1927 eyr:2021 + +pid:6645616064 hcl:#ceb3a1 byr:2030 +eyr:2032 hgt:158cm iyr:2012 +ecl:#e9619e + +eyr:2022 +ecl:brn +byr:1986 +hgt:161cm cid:99 pid:288726584 hcl:#6b5442 iyr:2019 + +cid:75 +pid:117771843 +hgt:184cm byr:1937 ecl:brn +hcl:#d88fd9 +iyr:2015 eyr:2027 + +iyr:2016 hcl:#fffffd hgt:170cm eyr:2022 ecl:oth pid:629454113 +byr:1952 + +hcl:#c0946f iyr:2018 hgt:189cm +byr:1971 ecl:oth eyr:2029 +pid:800207810 + +eyr:2022 hcl:#7d3b0c pid:969986413 +byr:1978 iyr:2020 hgt:186cm +ecl:gry + +hgt:171cm byr:1949 hcl:#341e13 +ecl:amb eyr:2030 pid:359107274 iyr:2013 + +pid:839751525 eyr:2024 byr:1921 +iyr:2012 ecl:amb hcl:#b0ed6f hgt:154cm + +pid:32592758 +byr:2009 +hgt:107 iyr:2019 hcl:#866857 +eyr:2036 ecl:amb + +eyr:2040 hcl:#733820 cid:199 +byr:2027 +pid:7791792988 ecl:blu iyr:2026 +hgt:63cm + +iyr:2011 cid:119 pid:344693475 +ecl:grn hgt:160cm eyr:2029 hcl:#346973 byr:1996 + +hgt:161in byr:2025 cid:167 iyr:2024 eyr:2040 pid:034804648 +hcl:#efcc98 ecl:oth + +ecl:#ba14f0 iyr:1935 +hgt:60cm +byr:2003 eyr:1987 +hcl:8e509b pid:161cm + +iyr:2018 pid:620508652 ecl:amb eyr:2023 hgt:183cm hcl:#a97842 +byr:1967 cid:117 + +eyr:2022 ecl:amb +pid:476049089 iyr:2012 +hgt:165cm +byr:1955 hcl:#602927 + +byr:2014 hcl:z iyr:2029 cid:279 pid:28914607 hgt:75cm ecl:xry + +hgt:156cm eyr:2023 iyr:2011 ecl:oth hcl:#7d3b0c pid:561313217 byr:1952 + +iyr:2011 byr:1935 +hcl:#cfa07d ecl:oth pid:830614209 +eyr:2028 hgt:173cm + +iyr:2012 cid:210 eyr:2022 +pid:652810130 hcl:#18171d ecl:grn byr:1960 hgt:152cm + +eyr:2026 pid:815848563 hgt:75in iyr:2019 ecl:gry byr:1947 +hcl:#cfa07d + +cid:181 iyr:2012 +eyr:2024 byr:1934 hcl:#c0946f +hgt:165cm ecl:oth pid:232944581 + +cid:135 iyr:2020 +byr:1971 hcl:#733820 pid:531877857 hgt:179cm eyr:2027 ecl:amb + +byr:1987 hcl:936807 eyr:2032 ecl:#4bec4a pid:605628619 cid:180 hgt:150in +iyr:2015 + +hcl:b62ef0 ecl:#092141 +pid:876635399 byr:1944 hgt:158cm iyr:2017 eyr:1924 + +iyr:2016 pid:7039815301 byr:2014 hgt:150 eyr:2032 ecl:blu hcl:z + +byr:1979 eyr:2030 iyr:1978 hgt:63 pid:1554613758 hcl:z ecl:amb + +hgt:70cm hcl:e45897 iyr:2020 eyr:1977 ecl:dne pid:2878189427 byr:1973 + +iyr:2003 +hcl:#cfa07d +pid:260517078 +byr:2030 hgt:175cm eyr:2020 +ecl:brn + +pid:460604681 eyr:2022 +cid:138 iyr:2016 hgt:163cm +byr:1922 +hcl:#ceb3a1 ecl:oth + +hgt:167cm byr:2009 eyr:1975 cid:295 pid:174cm iyr:2029 +hcl:z + +hgt:67in ecl:grn +eyr:2023 +cid:122 pid:281246917 byr:1990 iyr:2011 hcl:#866857 + +ecl:#ed7ddc byr:1922 cid:234 hcl:e61b1e iyr:1932 eyr:1996 pid:31344005 hgt:62cm + +byr:1949 +cid:275 iyr:2017 ecl:grn +hgt:164cm eyr:2027 hcl:#18171d +pid:751342937 + +ecl:blu hgt:162cm +pid:432600613 byr:1923 eyr:2029 iyr:2011 hcl:#623a2f cid:315 + +iyr:2020 +hcl:#b2bb11 pid:055891584 ecl:grn +hgt:67in +eyr:2029 byr:1937 + +iyr:2012 +hcl:#a97842 pid:325640714 ecl:blu hgt:185cm eyr:2024 byr:1971 + +hcl:#b6652a pid:485327267 +ecl:brn hgt:155cm eyr:2028 +iyr:2019 + +pid:902164867 hgt:77 cid:283 eyr:2027 +iyr:2020 ecl:hzl byr:1935 hcl:#efcc98 + +ecl:grn +hcl:#ceb3a1 byr:1977 hgt:165cm +pid:850700221 eyr:2030 +iyr:2012 + +byr:1989 ecl:brn eyr:2026 pid:919138357 iyr:2016 +hcl:#623a2f cid:319 hgt:161cm + +iyr:2017 +byr:1973 pid:293382118 hcl:#341e13 cid:143 ecl:hzl +hgt:166cm eyr:2022 + +pid:517102798 +hcl:f9d9dd +eyr:1933 iyr:2019 hgt:164cm +byr:2017 ecl:utc + +eyr:2023 pid:757868802 hcl:#18171d cid:244 +hgt:156cm +ecl:blu iyr:2015 byr:1926 + +eyr:2022 +iyr:2020 +hgt:158cm ecl:grn +byr:1988 +pid:979194751 hcl:#888785 + +eyr:2039 +pid:3867868142 byr:1936 ecl:dne iyr:2022 hcl:4b43b8 +hgt:115 cid:241 + +iyr:2015 eyr:2026 +hcl:#ceb3a1 pid:539099924 +cid:234 +ecl:brn +byr:1920 hgt:163cm + +cid:259 iyr:2020 +pid:949453818 eyr:2022 hgt:181cm +byr:1997 ecl:blu hcl:#18171d + +byr:2016 +iyr:2012 +ecl:utc +hgt:68in eyr:1993 +pid:1542134802 hcl:486699 +cid:239 + +iyr:2018 +hgt:154cm ecl:brn byr:1970 +eyr:2021 pid:581775861 hcl:#888785 + +iyr:2012 +eyr:2027 hgt:67cm hcl:#efcc98 ecl:zzz pid:312104916 byr:2020 + +hcl:#b6652a ecl:hzl eyr:2023 iyr:2012 pid:513268492 +hgt:159cm + +hgt:162in hcl:z +byr:2029 +eyr:2023 ecl:#e2e7ab iyr:2016 pid:65979982 + +cid:84 hgt:71in ecl:blu pid:982719716 +eyr:2020 iyr:2014 + +eyr:2028 hgt:181cm +ecl:hzl pid:255796693 hcl:#341e13 byr:1994 iyr:2011 cid:218 + +ecl:blu +byr:2029 iyr:2017 pid:468504566 eyr:2020 hcl:z hgt:163cm + +hgt:158cm +eyr:2025 ecl:hzl cid:295 pid:601339484 +hcl:#7d3b0c byr:1991 iyr:2013 + +eyr:2028 +iyr:2018 pid:2236240873 +hgt:172cm +ecl:#0e337e hcl:#b6652a cid:108 byr:1930 + +ecl:gry hcl:#888785 +eyr:2020 pid:442479017 iyr:2016 + +iyr:2014 ecl:grn +cid:313 eyr:2023 +hgt:183cm +byr:1976 +pid:499580308 hcl:#53efe6 + +eyr:2034 +cid:235 hcl:8f3cf5 +byr:2027 +hgt:161in pid:3259965094 ecl:xry iyr:2026 + +eyr:1978 byr:1925 iyr:2018 hgt:170cm ecl:#0c94e8 +pid:562699017 hcl:#816949 + +eyr:2023 hcl:#866857 hgt:179cm +pid:785862442 iyr:2014 cid:165 ecl:amb byr:1939 + +hgt:187cm +pid:64469711 ecl:gry eyr:2023 cid:225 hcl:#341e13 iyr:2011 byr:1958 + +hgt:162cm byr:2028 ecl:#37e345 +eyr:2037 hcl:19fb3d +iyr:2021 +pid:#87921a + +eyr:2027 hcl:#18171d +byr:2002 ecl:gry iyr:2014 +pid:561506850 hgt:177cm + +hgt:64cm pid:#a92686 +eyr:2029 cid:122 +byr:2026 +iyr:2017 hcl:z ecl:grn + +eyr:2028 byr:2007 hgt:155cm ecl:#86fa1b hcl:#733820 pid:562889497 +iyr:2019 + +pid:880698787 +byr:1992 +hcl:#7d3b0c hgt:163cm ecl:hzl +iyr:2011 eyr:2021 + +eyr:2020 byr:1994 iyr:2011 hgt:186cm pid:841855425 hcl:#cfa07d ecl:gry + +byr:1923 iyr:2015 ecl:amb pid:414655744 +hcl:#b6652a +hgt:159cm +eyr:2026 + +hgt:171cm ecl:amb pid:363065723 iyr:2020 +cid:66 hcl:#b6652a eyr:2021 +byr:1960 + +eyr:2002 +hcl:2627b2 ecl:#1bf21d pid:168cm byr:2024 iyr:2020 +hgt:186in + +iyr:2011 byr:1924 eyr:2024 +hcl:#b6652a ecl:brn +pid:794477411 hgt:162in + +hcl:z hgt:67cm +byr:2025 +pid:582569979 +iyr:2013 +ecl:oth eyr:2025 + +cid:50 hcl:931e2c +hgt:172in eyr:1994 iyr:2023 +ecl:#cd2204 +byr:2015 +pid:157cm + +hgt:173cm eyr:2028 +ecl:amb pid:569607283 +byr:1942 +iyr:2019 +cid:228 +hcl:#866857 + +cid:109 +ecl:oth eyr:1933 byr:1982 pid:173cm hcl:#b6652a hgt:174cm +iyr:2023 + +cid:69 hcl:#9ad05b pid:341135641 +byr:1968 ecl:brn +iyr:2012 hgt:156cm +eyr:2020 + +hgt:176cm +byr:1954 ecl:blu +eyr:2020 +pid:478462637 iyr:2019 +hcl:#888785 + +iyr:2026 hgt:193in +byr:2018 pid:162cm hcl:605e7f eyr:1948 ecl:utc + +byr:1962 +eyr:2022 pid:445346117 iyr:2019 hgt:158cm hcl:#623a2f ecl:hzl + +cid:278 hgt:187cm eyr:2024 iyr:2016 byr:1964 +ecl:grn pid:450739552 hcl:#733820 + +ecl:grn byr:2000 eyr:2023 +pid:344489911 hcl:#7d3b0c iyr:2011 hgt:177cm + +iyr:2015 hgt:180cm cid:190 hcl:#a97842 pid:359774842 eyr:2029 byr:2002 ecl:amb + +eyr:2027 iyr:2015 ecl:hzl +pid:082733109 +byr:1975 hgt:191cm cid:251 hcl:#888785 + +hcl:#c0946f iyr:2015 +hgt:167cm byr:1990 ecl:amb pid:168cm eyr:2023 + +ecl:gry eyr:2028 +byr:1934 iyr:2013 hcl:#6b5442 +pid:424412120 hgt:173cm + +pid:273352568 +eyr:2024 +iyr:2013 byr:1926 hcl:#602927 +ecl:brn hgt:180cm + +hcl:#7d3b0c hgt:70in ecl:amb iyr:2019 +byr:1937 +eyr:2030 pid:309011548 + +ecl:grn +hgt:64in pid:796889811 hcl:#18171d +byr:1929 eyr:2027 + +ecl:amb hcl:#888785 +pid:412449028 cid:316 byr:1982 +iyr:2019 eyr:2030 hgt:193cm + +eyr:1927 +hcl:z hgt:158cm byr:1930 +ecl:lzr iyr:2018 +cid:197 +pid:0906120002 + +ecl:grn byr:1970 hgt:181cm +pid:376212702 eyr:2030 iyr:2017 cid:266 hcl:#f8b0f5 + +iyr:2018 hgt:73in pid:652356158 hcl:#c0946f +ecl:grn byr:1973 + +cid:170 hcl:#b6652a byr:2011 +ecl:gry iyr:2025 pid:#b6e567 hgt:67cm eyr:2016 + +hgt:192cm ecl:amb eyr:2026 pid:201824712 hcl:#888785 byr:1966 iyr:2019 + +iyr:2013 byr:1995 eyr:2028 hcl:#b6652a ecl:brn cid:53 pid:705606447 hgt:176cm + +hcl:#341e13 byr:1951 +hgt:161cm pid:231973770 iyr:2015 ecl:hzl +eyr:2030 + +cid:210 ecl:brn iyr:2017 eyr:2030 +hgt:176cm hcl:#efcc98 +byr:1965 + +eyr:2020 hcl:#7d3b0c +pid:872088079 ecl:oth iyr:2017 byr:1920 +hgt:180cm + +hcl:#0b540c iyr:2019 +byr:1938 +hgt:153cm ecl:gry pid:236785988 +eyr:2020 + +eyr:2020 hgt:184cm iyr:2019 +pid:673186642 ecl:oth byr:1977 hcl:#866857 + +eyr:2025 +ecl:gry hcl:#341e13 byr:1970 iyr:2010 pid:972122542 hgt:184cm + +ecl:grn byr:1992 hgt:71in +iyr:2014 cid:254 hcl:#fffffd pid:749733013 +eyr:2026 + +cid:98 ecl:amb eyr:2022 +hgt:169cm pid:022677680 +byr:1937 iyr:2014 hcl:#e62c71 + +hgt:192cm +iyr:2015 +eyr:2028 ecl:oth pid:6000619833 hcl:#c0946f +byr:1930 + +byr:1938 hcl:#efcc98 hgt:178cm iyr:1953 eyr:2038 +ecl:brn pid:#cdc55a + +hgt:66in byr:1951 iyr:2016 hcl:#18171d +eyr:2027 +ecl:lzr pid:834188980 + +iyr:2012 eyr:2025 +hcl:#7d3b0c pid:330325803 cid:166 hgt:186cm byr:1938 +ecl:amb + +iyr:2015 hcl:#602927 cid:268 eyr:2021 +ecl:amb hgt:186cm pid:318676962 + +hcl:#3d6f3c iyr:2014 pid:665730784 cid:191 hgt:150cm byr:1981 ecl:oth eyr:2024 + +ecl:grn hcl:#733820 +eyr:2028 iyr:2010 +hgt:162cm byr:1944 pid:872962499 + +eyr:2028 byr:1974 +ecl:brn +iyr:2010 hcl:#18171d hgt:160cm + +hcl:#602927 +byr:1959 eyr:2027 iyr:2016 ecl:brn hgt:169cm pid:078503025 + +hcl:#623a2f pid:326300051 hgt:153cm +byr:1973 iyr:2012 +ecl:gry eyr:2026 + +hgt:151cm +byr:1966 eyr:2029 pid:026952622 hcl:#18171d ecl:gry iyr:2010 + +hcl:#7d3b0c byr:1974 pid:444713591 iyr:2017 eyr:2030 +hgt:165cm ecl:oth + +iyr:2026 pid:184cm +ecl:gmt hcl:z hgt:71cm +eyr:2029 + +cid:310 hcl:#fffffd byr:1998 +pid:450705840 iyr:2015 +ecl:grn eyr:2021 hgt:165cm + +byr:1939 hcl:#623a2f ecl:gry hgt:69in pid:539812641 eyr:2027 iyr:2013 + +pid:207645014 +iyr:2015 +cid:314 ecl:oth +byr:1942 +eyr:2027 hgt:186cm hcl:#fffffd + +ecl:#fb7e3d eyr:2031 iyr:1956 +hgt:188 pid:160cm hcl:z byr:2027 + +byr:1972 iyr:2020 eyr:2026 hcl:#b6652a pid:289088329 hgt:65in ecl:gry + +eyr:2027 +hgt:59cm +byr:2022 +pid:938063769 ecl:zzz iyr:2028 hcl:23c762 + +byr:2004 hgt:74 iyr:2017 +eyr:2040 ecl:blu pid:4611117799 cid:73 hcl:z + +ecl:brn byr:1962 cid:321 +iyr:2019 eyr:2026 +hgt:159cm +hcl:#667310 pid:439864945 + +iyr:2026 eyr:2039 pid:633263851 cid:321 ecl:lzr hgt:166cm +byr:2023 hcl:fc3c63 + +byr:1961 iyr:2010 ecl:blu +eyr:2023 pid:245858010 + +hgt:193cm pid:821303249 eyr:2020 hcl:#6b5442 cid:130 byr:1946 + +eyr:2026 ecl:brn +hcl:#733820 byr:1983 hgt:182cm pid:727380954 cid:188 iyr:2015 + +hgt:152cm cid:206 iyr:2012 byr:1947 hcl:#888785 ecl:gry +pid:720312394 eyr:2023 + +hgt:150cm ecl:gry pid:863712648 +iyr:2019 cid:349 byr:1976 hcl:#602927 eyr:2022 + +hgt:164in pid:953500867 +eyr:2021 +iyr:2014 +hcl:z cid:343 ecl:amb + +byr:1981 pid:529710230 iyr:2013 eyr:2023 +hcl:#c0946f ecl:amb +hgt:151cm + +pid:706204190 hgt:154cm cid:317 +hcl:#602927 byr:1949 ecl:blu iyr:2010 eyr:2028 + +iyr:2019 hcl:#0219e6 +pid:850093151 ecl:gry +eyr:2030 +byr:1938 hgt:177cm + +ecl:brn hcl:#efcc98 eyr:2029 byr:1963 +hgt:185cm pid:611279647 iyr:2011 + +ecl:blu eyr:2022 byr:1941 hgt:167cm +iyr:2012 hcl:#7d3b0c pid:415739564 +cid:193 + +eyr:2027 ecl:blu byr:1968 pid:479994566 +hcl:#733820 hgt:151cm +iyr:2011 + +pid:263729839 hgt:189cm eyr:2030 ecl:gry byr:2001 hcl:#602927 + +byr:1985 +ecl:amb pid:672663977 cid:139 +hgt:159cm hcl:#733820 iyr:2018 eyr:2020 + +byr:1998 +hcl:#cfa07d eyr:2023 pid:255046063 iyr:2011 ecl:blu hgt:177cm + +ecl:oth +byr:1980 pid:253747166 eyr:2029 +hcl:#6b5442 hgt:186cm + +eyr:2030 hcl:#866857 +hgt:165cm +ecl:amb +iyr:2017 pid:241240220 cid:164 byr:2001 + +byr:1994 hcl:#b6652a iyr:2015 +pid:753831241 +hgt:175cm +eyr:2027 ecl:blu + +hcl:#b6652a pid:471594512 +byr:1961 ecl:hzl hgt:175cm +iyr:2020 eyr:2025 + +byr:1987 pid:112366159 +eyr:2028 hcl:22b2d7 +hgt:64in cid:222 +ecl:#b40dca iyr:2019 + +iyr:2015 hcl:e1ed55 hgt:160in ecl:utc byr:2015 eyr:2036 + +byr:1935 +hcl:#7d3b0c hgt:152cm ecl:gry +pid:160090332 iyr:2020 eyr:2020 + +pid:552779024 byr:1998 hgt:185cm ecl:gry eyr:2026 iyr:2013 hcl:#d46cd6 + +ecl:oth pid:311860969 +cid:57 +hgt:60in +eyr:2026 +hcl:#ceb3a1 +byr:1961 iyr:2011 + +eyr:2021 hgt:162cm cid:240 +pid:259997995 +hcl:#efcc98 +ecl:gry byr:1962 iyr:2017 + +hcl:#866857 +iyr:2016 +eyr:2029 +ecl:blu byr:1927 cid:249 pid:665324615 hgt:65in + +byr:1931 +cid:331 +hgt:66in +ecl:grn iyr:2020 hcl:#efcc98 eyr:2025 pid:175780921 + +hgt:98 +eyr:2040 ecl:blu byr:2029 +iyr:1967 hcl:0d76e9 +pid:#c9053a cid:296 + +pid:370918950 +hcl:#602927 +byr:1938 +hgt:178cm iyr:2018 eyr:2030 +ecl:oth + +hgt:185cm +eyr:1984 ecl:oth pid:851080398 +hcl:z byr:2027 iyr:2017 + +pid:095078224 byr:1957 hcl:#45bcf4 ecl:#f643f9 hgt:63cm eyr:2036 iyr:1978 + +hcl:z +eyr:2023 ecl:oth hgt:162cm +iyr:2016 byr:1938 pid:#fdcddf + +hcl:#341e13 iyr:2013 hgt:189cm +pid:982271041 ecl:brn +byr:1930 eyr:2030 + +eyr:2026 +iyr:2012 hcl:#cfa07d cid:59 pid:105862717 ecl:blu +hgt:159cm byr:1943 + +ecl:hzl +pid:604172804 iyr:2016 hgt:174cm cid:79 eyr:2025 +hcl:#733820 byr:1994 + +iyr:2011 pid:452628771 ecl:gry hgt:182cm hcl:#623a2f +eyr:2023 +byr:1986 + +hcl:#341e13 iyr:2010 byr:1946 eyr:2021 +cid:350 pid:049684494 hgt:180cm +ecl:grn + +iyr:2020 +hgt:173cm pid:384503937 +byr:1986 +hcl:#341e13 +cid:113 +eyr:2025 ecl:amb + +hgt:180cm byr:1949 +hcl:#733820 iyr:2010 eyr:2030 +cid:123 pid:065609606 ecl:oth + +iyr:2010 eyr:2028 +pid:231750173 +hgt:63in ecl:brn +byr:1948 hcl:#18171d + +iyr:2020 hcl:#623a2f +ecl:gry +byr:1922 pid:961213634 eyr:2022 hgt:177cm + +hcl:#18171d eyr:2020 iyr:2014 byr:1983 +pid:183568344 hgt:72in +ecl:gry + +eyr:2023 pid:102781246 ecl:brn +hcl:#888785 byr:1929 hgt:167cm iyr:2010 + +pid:362873066 byr:1994 hcl:#de545f iyr:2018 hgt:177cm ecl:blu cid:86 +eyr:2024 + +hcl:842f2d iyr:1983 +byr:1954 eyr:2037 +ecl:lzr pid:3915492573 hgt:166cm + +ecl:grn +hcl:#fffffd iyr:2014 +hgt:173cm +byr:1939 +pid:930650489 +eyr:2025 + +eyr:2028 ecl:brn hcl:#7d3b0c hgt:166cm byr:1938 pid:992958531 iyr:2011 + +pid:101149939 eyr:2024 iyr:2018 hgt:165cm +ecl:hzl +hcl:#ceb3a1 cid:176 + +cid:62 +pid:651390352 hcl:#efcc98 +iyr:2018 +eyr:2027 +ecl:brn +hgt:66in byr:1953 + +hcl:#623a2f byr:1978 +iyr:2013 +hgt:180cm eyr:2027 ecl:amb pid:836425641 + +pid:557464096 hgt:155cm ecl:blu cid:142 byr:1936 iyr:2010 +hcl:#cfa07d eyr:2027 + +ecl:gry iyr:2024 hcl:#341e13 pid:442593279 cid:314 hgt:186cm byr:1960 +eyr:2022 + +cid:123 iyr:2014 +byr:2000 +pid:878733390 eyr:2021 ecl:hzl hgt:162cm + +byr:1959 cid:259 +pid:722895016 +ecl:brn iyr:2018 eyr:2027 hgt:185cm + +pid:163697814 ecl:hzl +iyr:2013 byr:1932 +hgt:68in cid:286 eyr:2025 hcl:#efcc98 + +byr:1927 +hgt:72cm ecl:oth +eyr:2021 hcl:#99e959 +pid:669724466 iyr:2010 + +byr:1943 iyr:2011 eyr:2024 pid:384419879 ecl:hzl hcl:#7d3b0c hgt:170cm + +pid:137944386 ecl:gry +byr:1953 hcl:#733820 iyr:2013 eyr:2025 hgt:184cm + +iyr:2017 eyr:2023 pid:288078785 +hgt:179cm +byr:1993 hcl:#602927 ecl:hzl + +ecl:brn +hgt:187cm eyr:2024 byr:1971 iyr:2020 hcl:#b6652a pid:622975646 +cid:290 + +pid:371817422 ecl:blu byr:1964 +iyr:2018 +eyr:2021 cid:176 +hgt:153cm hcl:#888785 + +byr:2002 +cid:256 iyr:2014 eyr:2024 ecl:blu hcl:#18171d hgt:187cm +pid:050022911 + +hgt:178cm pid:211144001 eyr:2027 iyr:2013 +byr:1947 +hcl:#7d3b0c ecl:grn + +eyr:2025 ecl:blu pid:046417901 byr:1950 +iyr:2015 hgt:165cm +hcl:#7d3b0c cid:128 + +ecl:hzl eyr:2029 +iyr:2015 +hgt:171cm hcl:#341e13 +pid:561680375 byr:1997 + +byr:1948 iyr:2023 pid:17288381 hcl:6a34a3 ecl:#671ece eyr:2001 +cid:152 + +eyr:2036 hgt:141 iyr:1957 byr:1987 hcl:z +pid:86986187 ecl:utc + +eyr:2024 hcl:#b6652a iyr:2017 ecl:blu byr:1988 cid:348 hgt:152cm pid:068684272 + +iyr:2011 pid:989825275 +cid:78 hcl:#341e13 byr:1983 ecl:blu hgt:158cm eyr:2020 + +ecl:grn hgt:187cm eyr:2027 iyr:2015 +hcl:#866857 pid:240650427 +byr:1940 +cid:91 + +hcl:#888785 cid:185 byr:1925 +hgt:155cm iyr:2015 ecl:blu eyr:2027 pid:851697441 + +iyr:2016 ecl:oth pid:056439470 byr:1985 eyr:2026 +hgt:154cm hcl:#282539 + +ecl:hzl hcl:#a97842 +iyr:1944 +pid:118846711 eyr:2026 byr:1922 hgt:185cm + +iyr:2020 hcl:#733820 +pid:854531642 hgt:165cm +ecl:hzl eyr:2022 + +iyr:2014 +byr:1957 hcl:#7fa674 hgt:189cm +eyr:2023 pid:740871941 ecl:brn + +ecl:amb cid:349 hgt:170cm +byr:1952 hcl:#ceb3a1 iyr:2020 +eyr:2026 +pid:730499325 + +eyr:2027 ecl:amb +byr:1975 pid:985687961 +hcl:z hgt:157cm +iyr:2013 +cid:133 + +ecl:blu +hgt:193cm iyr:2015 hcl:#10f2ba byr:1989 pid:939704495 eyr:2021 + +ecl:oth eyr:2025 hgt:69in iyr:2014 cid:258 pid:477970733 byr:1984 hcl:#b6652a + +hcl:z byr:2013 +ecl:zzz +pid:1904741884 hgt:180 cid:138 eyr:1985 iyr:1935 + +eyr:2025 +iyr:2026 hgt:190in pid:#43ca33 +ecl:#3e1ef1 hcl:#7d3b0c byr:2030 + +eyr:2029 hgt:191cm +byr:1986 hcl:#ceb3a1 cid:327 pid:795060714 iyr:2012 ecl:hzl + +eyr:2025 iyr:2017 ecl:grn +hcl:z +pid:8886398 hgt:174cm byr:2016 + +hcl:#a97842 +eyr:2021 ecl:grn iyr:2013 pid:565234133 byr:1998 +hgt:161cm + +eyr:2029 hgt:163cm byr:1933 cid:86 iyr:2011 +ecl:grn +hcl:#fffffd +pid:818769307 + +hgt:190cm eyr:2030 hcl:#af5b5d iyr:2011 ecl:brn pid:359524299 byr:1969 + +ecl:amb iyr:2011 eyr:2022 +cid:141 +byr:1978 hgt:69in hcl:#fffffd pid:013006109 + +ecl:blu hgt:164cm iyr:2019 eyr:2027 pid:899103430 hcl:#cfa07d +byr:1976 + +eyr:1938 +ecl:#a03c41 pid:708735698 +iyr:2030 +hgt:184cm hcl:#b6652a byr:2013 + +ecl:hzl byr:1997 hcl:#a97842 cid:60 pid:172cm +eyr:2023 hgt:161in iyr:1936 + +ecl:hzl +byr:1938 pid:094889181 +hgt:162cm iyr:2020 +eyr:2028 +hcl:#623a2f + +hgt:162cm cid:86 +hcl:#623a2f pid:738174580 ecl:brn byr:1980 eyr:2028 iyr:2014 + +byr:2007 hgt:150in hcl:z +eyr:2032 +ecl:#114f3b +iyr:2030 pid:5129772 + +ecl:hzl iyr:2017 +hcl:#18171d +pid:696283412 byr:1976 hgt:168cm +eyr:2028 + +eyr:1922 ecl:#84b0d4 byr:2013 hcl:#ceb3a1 pid:150cm iyr:2030 +hgt:71cm + +hgt:164cm byr:1949 ecl:gry eyr:2026 +hcl:#623a2f + +ecl:oth +iyr:2013 hgt:166cm hcl:#50e385 +pid:478852286 +eyr:2030 byr:1930 + +cid:129 +iyr:2020 byr:1978 pid:907580992 eyr:1955 +hcl:#602927 +ecl:grn hgt:165cm + +ecl:blu iyr:2018 byr:1953 +hgt:177cm pid:126681706 eyr:2025 hcl:#c0946f + +byr:1984 pid:275799917 +ecl:oth hcl:#623a2f cid:348 iyr:2020 +hgt:189cm eyr:2024 + +iyr:2016 +ecl:hzl byr:1954 +hcl:#623a2f pid:810508839 eyr:2026 +hgt:185cm + +byr:1967 +eyr:2021 hcl:#ceb3a1 +pid:406634908 hgt:158cm iyr:2018 ecl:hzl + +iyr:2019 eyr:2030 pid:995681076 hcl:#341e13 +cid:101 hgt:162cm ecl:blu byr:1925 + +eyr:2026 pid:272513479 hcl:#b6652a byr:1973 iyr:2016 ecl:amb hgt:182cm + +pid:298704871 eyr:2024 hcl:#efcc98 byr:1959 +iyr:2014 hgt:191cm ecl:grn + +hgt:193cm pid:750729809 ecl:oth +cid:324 +iyr:2011 hcl:#efcc98 byr:1954 eyr:2020 + +byr:1966 iyr:2019 eyr:2025 ecl:#2df4b6 +hgt:184cm pid:#fc17f4 cid:161 hcl:#602927 + +byr:1955 hcl:299464 ecl:amb +hgt:157cm iyr:2017 eyr:2021 +pid:239450987 + +hgt:172cm +ecl:hzl +pid:839804598 +hcl:#341e13 eyr:2030 byr:1964 iyr:2013 + +iyr:2018 hgt:152cm byr:1948 hcl:#623a2f pid:400121515 +ecl:blu +eyr:2020 + +cid:296 +ecl:grn +byr:1960 iyr:2028 pid:#1f4b95 eyr:2033 hcl:#602927 +hgt:66cm + +iyr:1933 ecl:#232e20 pid:#d03ca7 +eyr:2030 hcl:598ed6 hgt:154in byr:2011 + +cid:247 ecl:grn iyr:2014 +hgt:178cm +byr:1992 hcl:#602927 eyr:2021 +pid:678964478 + +iyr:2010 pid:623705680 +ecl:hzl hgt:181cm byr:1980 hcl:#341e13 eyr:2028 diff --git a/inputs/day8.txt b/inputs/day8.txt new file mode 100644 index 0000000..5288d40 --- /dev/null +++ b/inputs/day8.txt @@ -0,0 +1,643 @@ +acc -15 +jmp +164 +nop +157 +acc -12 +acc -19 +acc +41 +jmp +177 +acc +36 +acc +37 +nop +471 +jmp +433 +acc +24 +acc +13 +acc -12 +jmp +556 +jmp +1 +acc -15 +acc +33 +jmp +299 +jmp +344 +acc -3 +jmp +124 +acc +10 +nop +562 +acc +45 +jmp +386 +acc -3 +jmp +206 +acc -19 +acc +12 +jmp +424 +acc -18 +acc +23 +acc +12 +acc +0 +jmp +311 +nop +327 +jmp +301 +acc +20 +nop +375 +jmp +25 +acc -13 +acc +49 +acc +23 +acc -3 +jmp +346 +acc +2 +acc +3 +jmp +123 +acc -7 +nop +183 +jmp +165 +acc +47 +acc +34 +jmp +1 +jmp +359 +acc +12 +acc +16 +acc -3 +acc +0 +jmp +556 +acc +14 +acc -3 +jmp +559 +jmp +192 +jmp +495 +nop +264 +acc +3 +acc +47 +jmp +187 +acc -18 +jmp +1 +acc -12 +jmp -58 +acc +49 +nop +288 +jmp +145 +acc +46 +jmp +294 +acc +38 +nop +400 +jmp +373 +acc +7 +acc +31 +jmp +492 +acc +40 +acc +5 +acc +11 +jmp +263 +acc +29 +acc +10 +acc +21 +acc +14 +jmp +450 +nop +458 +acc +38 +nop +432 +acc +42 +jmp +191 +jmp +279 +nop +71 +acc -17 +jmp -64 +acc +17 +jmp +1 +acc +29 +jmp +506 +jmp +354 +acc +42 +acc +32 +jmp -40 +jmp +184 +acc +41 +acc -7 +acc +10 +acc +38 +jmp +100 +jmp +104 +jmp +245 +jmp +335 +jmp +20 +acc +3 +jmp +490 +jmp -62 +acc +34 +acc +34 +acc -1 +jmp +6 +acc +5 +acc -9 +acc -19 +jmp +397 +jmp +253 +acc +9 +jmp +270 +acc +8 +acc -16 +acc +32 +acc +48 +jmp +258 +acc +4 +acc +37 +nop +319 +jmp +318 +jmp -4 +acc -5 +jmp +32 +nop -86 +jmp +306 +acc -13 +acc +50 +acc -16 +jmp -53 +acc +31 +jmp +52 +acc -11 +jmp +89 +acc +21 +jmp +126 +acc +44 +acc +49 +nop +177 +jmp +44 +acc +8 +jmp +166 +acc +20 +acc -8 +acc +38 +acc +10 +jmp +311 +jmp +21 +acc -10 +nop +84 +acc -7 +acc +13 +jmp +78 +jmp +1 +jmp +366 +acc -6 +acc -12 +jmp -142 +nop +223 +jmp +42 +acc -6 +nop +227 +nop +193 +acc +23 +jmp +83 +acc -10 +acc +12 +jmp +1 +acc -8 +acc +3 +nop +28 +jmp +301 +acc +23 +jmp -170 +nop -79 +acc +21 +acc +37 +jmp +138 +acc +37 +acc +24 +nop +413 +acc -9 +jmp -179 +acc -1 +acc -10 +nop +261 +acc -19 +jmp +168 +acc -16 +acc +19 +acc +17 +acc +21 +jmp -9 +jmp +46 +acc +4 +nop +398 +acc +28 +jmp +396 +acc +11 +jmp +384 +jmp +375 +acc +25 +acc +30 +acc -11 +jmp +371 +jmp +249 +acc -10 +acc -15 +jmp -7 +jmp +38 +acc +29 +acc +15 +acc +46 +jmp -77 +acc +43 +jmp -83 +jmp -42 +acc +30 +acc +44 +acc +33 +acc +14 +jmp +326 +acc -3 +nop +49 +acc +12 +jmp +63 +acc -13 +acc -19 +acc -17 +jmp +126 +jmp +293 +acc +16 +jmp -185 +acc -12 +jmp -92 +acc -13 +acc +19 +acc -1 +jmp -138 +acc +28 +nop -243 +nop +352 +acc +43 +jmp +249 +acc -5 +acc +36 +jmp -217 +nop +197 +nop -106 +acc +30 +jmp +194 +acc +7 +acc -16 +nop +128 +jmp -239 +jmp -258 +acc +11 +nop -74 +acc +42 +acc +40 +jmp +72 +jmp -207 +nop +337 +nop -240 +nop -169 +jmp -55 +nop +165 +acc +27 +acc +4 +jmp -169 +acc -2 +jmp +69 +acc +0 +jmp -250 +acc +11 +acc +45 +acc +31 +jmp +195 +acc -10 +acc -8 +nop -283 +acc -2 +jmp +63 +acc +17 +acc +12 +acc +0 +nop +243 +jmp +190 +acc +17 +acc -18 +jmp +78 +acc +7 +acc +33 +jmp +244 +nop +29 +acc +20 +nop +150 +acc +29 +jmp -43 +acc +45 +nop -132 +acc +16 +acc +14 +jmp -237 +jmp -199 +acc -4 +jmp +179 +acc +13 +acc +15 +acc +6 +acc +46 +jmp -222 +acc -8 +acc +15 +jmp -26 +acc +38 +jmp +1 +nop +266 +jmp +44 +acc -13 +nop +209 +acc +21 +jmp +201 +acc +8 +acc +18 +jmp +190 +acc +35 +jmp -238 +jmp +69 +acc -11 +nop -182 +jmp -221 +acc -16 +acc -5 +acc +7 +jmp +39 +acc +26 +acc +43 +acc +20 +jmp +92 +acc +22 +jmp +81 +acc +32 +acc -13 +jmp +30 +acc +1 +jmp +201 +acc +4 +jmp -165 +acc -17 +jmp -84 +acc -16 +acc +2 +acc +47 +jmp +54 +jmp -195 +acc +33 +acc -17 +jmp -18 +jmp +256 +acc +1 +jmp -244 +acc +28 +acc +35 +jmp +189 +nop +32 +acc +9 +jmp +24 +acc +21 +acc +14 +acc +17 +jmp -67 +acc +21 +jmp -297 +acc +36 +acc +14 +acc -13 +jmp +115 +acc -2 +acc -13 +jmp -182 +nop +119 +acc -4 +acc +44 +acc -14 +jmp +61 +acc +41 +jmp -13 +nop -116 +jmp -294 +jmp +7 +jmp +17 +acc -14 +acc +42 +acc -6 +acc +24 +jmp +151 +nop -374 +nop -375 +acc +4 +jmp -268 +nop -27 +acc +16 +acc +2 +jmp -206 +jmp -320 +nop -196 +jmp +168 +nop +36 +acc +34 +jmp -402 +acc +36 +acc +38 +acc -11 +nop +17 +jmp -182 +acc +15 +jmp -145 +acc +43 +jmp -79 +jmp -391 +jmp -155 +nop -94 +acc +0 +acc +9 +jmp -441 +acc +3 +acc +6 +acc +50 +nop -334 +jmp +163 +acc +18 +acc -11 +jmp +21 +acc +10 +acc +4 +nop +132 +jmp -348 +acc +18 +nop -1 +acc -4 +nop +148 +jmp +165 +jmp +146 +jmp -460 +jmp -14 +acc +26 +nop -388 +nop -353 +jmp +119 +acc +26 +acc -1 +acc +9 +jmp -285 +acc +37 +jmp -345 +jmp -178 +acc +7 +acc +13 +jmp -39 +acc +29 +nop -200 +acc +50 +acc +24 +jmp -160 +acc +18 +jmp +63 +acc -11 +acc +1 +acc -6 +acc +33 +jmp -90 +acc -3 +acc +11 +acc +45 +jmp -197 +jmp -169 +acc +7 +acc -4 +jmp -281 +acc +48 +nop +19 +nop -25 +nop +9 +jmp -274 +nop -126 +acc +22 +acc -4 +jmp -408 +acc +1 +acc +0 +jmp +98 +acc +25 +acc +12 +acc -19 +jmp -90 +acc +44 +acc +20 +acc +21 +jmp -192 +acc -12 +jmp -70 +nop +3 +acc +17 +jmp -349 +acc +20 +acc -7 +acc +6 +nop -43 +jmp +53 +acc +34 +acc +48 +acc -4 +acc +8 +jmp -126 +acc +23 +acc +25 +jmp -349 +acc -4 +jmp -272 +jmp -129 +nop -366 +jmp -292 +acc +29 +nop -269 +acc +50 +nop -254 +jmp -321 +jmp -23 +acc +11 +nop -425 +nop -150 +acc -9 +jmp -467 +acc +18 +acc +27 +jmp -338 +jmp +1 +acc +21 +acc +27 +acc -11 +jmp -160 +acc +27 +acc +15 +acc +0 +acc +41 +jmp -386 +acc -10 +acc +14 +jmp -217 +nop -484 +acc +47 +jmp -529 +acc -10 +acc +48 +acc +0 +jmp -430 +acc +45 +acc -8 +acc +3 +nop -103 +jmp -387 +acc -16 +acc +39 +jmp +1 +acc +17 +jmp -350 +jmp -328 +acc +30 +acc +28 +jmp -309 +nop -361 +acc +1 +nop -468 +jmp -212 +acc +29 +acc -4 +jmp -249 +acc +45 +acc +30 +acc +40 +acc -17 +jmp -579 +acc +25 +jmp -525 +nop -217 +acc +17 +acc +3 +jmp -142 +nop +18 +jmp -493 +jmp +1 +jmp -495 +jmp -360 +acc +7 +acc +30 +acc -3 +nop -449 +jmp -326 +acc -10 +acc -8 +jmp -371 +acc +22 +acc +48 +acc +6 +acc +18 +jmp -59 +acc +17 +acc +14 +jmp -250 +acc +19 +acc +25 +acc -14 +acc -17 +jmp -517 +acc +29 +acc -4 +acc +9 +acc +17 +jmp +1 diff --git a/inputs/test.txt b/inputs/test.txt new file mode 100644 index 0000000..1612072 --- /dev/null +++ b/inputs/test.txt @@ -0,0 +1,26 @@ +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 + +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 diff --git a/src/bin/day2_part2.rs b/src/bin/day2_part2.rs index 3498376..1e4960e 100644 --- a/src/bin/day2_part2.rs +++ b/src/bin/day2_part2.rs @@ -9,8 +9,8 @@ fn is_valid(line: &Vec) -> bool { let pos2: usize = line[1].parse().unwrap(); let policy_char = line[2].chars().nth(0).unwrap(); - let char1 = line[3].chars().nth(pos1-1); - let char2 = line[3].chars().nth(pos2-1); + let char1 = line[3].chars().nth(pos1 - 1); + let char2 = line[3].chars().nth(pos2 - 1); match (char1, char2) { (Some(c1), Some(c2)) => (c1 == policy_char) ^ (c2 == policy_char), diff --git a/src/bin/day4.rs b/src/bin/day4.rs new file mode 100644 index 0000000..7fd54c9 --- /dev/null +++ b/src/bin/day4.rs @@ -0,0 +1,123 @@ +use itertools::Itertools; +use std::collections::HashMap; +use std::error::Error; +use std::fs::File; +use std::io::{self, BufRead}; +use std::vec::Vec; + +#[macro_use] +extern crate lazy_static; +extern crate regex; + +use regex::Regex; + +fn is_valid(passport: &HashMap) -> u32 { + lazy_static! { + static ref HCL_RE: Regex = Regex::new(r"^#[a-f0-9]{6}$").unwrap(); + static ref PID_RE: Regex = Regex::new(r"^[0-9]{9}$").unwrap(); + static ref ECL_RE: Regex = Regex::new(r"^(amb|blu|brn|gry|grn|hzl|oth)$").unwrap(); + static ref HGT_RE: Regex = Regex::new(r"^([0-9]+)(in|cm)$").unwrap(); + } + + if !passport.contains_key("byr") + || !passport.contains_key("iyr") + || !passport.contains_key("eyr") + || !passport.contains_key("hgt") + || !passport.contains_key("hcl") + || !passport.contains_key("ecl") + || !passport.contains_key("pid") + { + return 0; + }; + + if let Ok(year) = passport.get("byr").unwrap().parse::() { + if year < 1920 || year > 2002 { + return 0; + } + } else { + return 0; + } + + if let Ok(year) = passport.get("iyr").unwrap().parse::() { + if year < 2010 || year > 2020 { + return 0; + } + } else { + return 0; + } + + if let Ok(year) = passport.get("eyr").unwrap().parse::() { + if year < 2020 || year > 2030 { + return 0; + } + } else { + return 0; + } + + if !HCL_RE.is_match(passport.get("hcl").unwrap()) { + return 0; + } + + if let Some(cap) = HGT_RE.captures_iter(passport.get("hgt").unwrap()).nth(0) { + if let Ok(hgt) = cap[1].parse::() { + match &cap[2] { + "in" => { + if hgt < 59 || hgt > 76 { + return 0; + } + } + "cm" => { + if hgt < 150 || hgt > 193 { + return 0; + } + } + _ => return 0, + } + } else { + return 0; + } + } else { + return 0; + } + + if !ECL_RE.is_match(passport.get("ecl").unwrap()) { + return 0; + } + + if !PID_RE.is_match(passport.get("pid").unwrap()) { + return 0; + } + + return 1; +} + +fn main() -> Result<(), Box> { + let file = File::open("inputs/day4.txt")?; + let lines = io::BufReader::new(file).lines().map(|l| l.unwrap()); + + let mut passports: Vec> = Vec::new(); + let mut passport = HashMap::::new(); + for line in lines { + if line == "" { + passports.push(passport); + passport = HashMap::new(); + continue; + } + + for tuple in line.split(" ") { + let mut parts = tuple.split(":"); + let key = parts.nth(0).unwrap().to_string(); + let value = parts.nth(0).unwrap().to_string(); + passport.insert(key, value); + } + } + passports.push(passport); + + println!("Read {} passports.", passports.len()); + + let count = passports.iter().map(is_valid).fold(0, |acc, x| acc + x); + + println!("Valid count {}", count); + + Ok(()) +} diff --git a/src/bin/day8.rs b/src/bin/day8.rs new file mode 100644 index 0000000..5492389 --- /dev/null +++ b/src/bin/day8.rs @@ -0,0 +1,55 @@ +use std::collections::HashSet; +use std::error::Error; +use std::fs::File; +use std::io::{self, BufRead}; +use std::vec::Vec; + +enum Instruction { + Nop(i32), + Acc(i32), + Jmp(i32), +} + +fn line_to_instruction(line: String) -> Instruction { + let mut parts = line.split(" "); + let opcode = parts.nth(0).unwrap(); + let arg: i32 = parts.nth(0).unwrap().parse().unwrap(); + + match opcode { + "nop" => Instruction::Nop(arg), + "acc" => Instruction::Acc(arg), + "jmp" => Instruction::Jmp(arg), + _ => panic!("Unsupported Instruction: {}", opcode), + } +} + +fn main() -> Result<(), Box> { + let file = File::open("inputs/day8.txt")?; + let lines = io::BufReader::new(file).lines().map(|l| l.unwrap()); + + let programm: Vec = lines.map(line_to_instruction).collect(); + + let mut pc = 0usize; + let mut visted: HashSet = HashSet::new(); + let mut acc = 0i32; + + while !visted.contains(&pc) { + visted.insert(pc); + match programm.get(pc) { + Some(Instruction::Nop(_)) => pc += 1, + Some(Instruction::Acc(arg)) => { + pc += 1; + acc += arg + } + Some(Instruction::Jmp(arg)) => { + pc = (pc as i32 + arg) as usize; + } + None => panic!("PC {} is beyond the programm", pc), + } + println!("PC: {}, Acc: {}", pc, acc); + } + + println!("Final PC: {}, Final Acc: {}", pc, acc); + + Ok(()) +} diff --git a/src/bin/day8_part2.rs b/src/bin/day8_part2.rs new file mode 100644 index 0000000..2b2e758 --- /dev/null +++ b/src/bin/day8_part2.rs @@ -0,0 +1,131 @@ +use std::collections::HashSet; +use std::error::Error; +use std::fs::File; +use std::io::{self, BufRead}; +use std::vec::Vec; + +enum Instruction { + Nop(i32), + Acc(i32), + Jmp(i32), +} + +struct Node { + inst: Instruction, + jmp_srcs: Vec, + nop_srcs: Vec, +} + +fn line_to_node(line: String) -> Node { + let mut parts = line.split(" "); + let opcode = parts.nth(0).unwrap(); + let arg: i32 = parts.nth(0).unwrap().parse().unwrap(); + + match opcode { + "nop" => Node { + inst: Instruction::Nop(arg), + jmp_srcs: Vec::new(), + nop_srcs: Vec::new(), + }, + "acc" => Node { + inst: Instruction::Acc(arg), + jmp_srcs: Vec::new(), + nop_srcs: Vec::new(), + }, + "jmp" => Node { + inst: Instruction::Jmp(arg), + jmp_srcs: Vec::new(), + nop_srcs: Vec::new(), + }, + _ => panic!("Unsupported Instruction: {}", opcode), + } +} + +fn update_source_locations(programm: &mut Vec) { + for pc in 0..programm.len() { + let node = programm.get(pc).unwrap(); + match node.inst { + Instruction::Nop(arg) => { + if let Some(target) = programm.get_mut((pc as i32 + arg) as usize) { + target.nop_srcs.push(pc); + } + } + Instruction::Jmp(arg) => { + if let Some(target) = programm.get_mut((pc as i32 + arg) as usize) { + target.jmp_srcs.push(pc); + } + } + _ => {} + } + } +} + +fn backtrack_acc( + programm: &Vec, + mut visted: HashSet, + pc: usize, + mut acc: i32, + changed: bool, +) -> Option { + if visted.contains(&pc) { + return None; + } + + let node = programm.get(pc)?; + visted.insert(pc); + + if let Instruction::Acc(arg) = node.inst { + acc += arg; + } + + if pc == 0 { + return Some(acc); + } + + let prev_node = programm.get(pc - 1).unwrap(); + match prev_node.inst { + Instruction::Jmp(_) => { + if !changed { + if let Some(res) = backtrack_acc(programm, visted.clone(), pc - 1, acc, true) { + return Some(res); + }; + } + } + _ => { + if let Some(res) = backtrack_acc(programm, visted.clone(), pc - 1, acc, changed) { + return Some(res); + }; + } + }; + + for src in node.jmp_srcs.iter() { + if let Some(res) = backtrack_acc(programm, visted.clone(), *src, acc, changed) { + return Some(res); + }; + } + + if !changed { + for src in node.nop_srcs.iter() { + if let Some(res) = backtrack_acc(programm, visted.clone(), *src, acc, true) { + return Some(res); + }; + } + } + + return None; +} + +fn main() -> Result<(), Box> { + let file = File::open("inputs/day8.txt")?; + let lines = io::BufReader::new(file).lines().map(|l| l.unwrap()); + + let mut programm: Vec = lines.map(line_to_node).collect(); + update_source_locations(&mut programm); + + println!( + "{:?}", + backtrack_acc(&programm, HashSet::new(), programm.len() - 1, 0, false) + ); + + Ok(()) +}