diff --git a/input/2020/day4.txt b/input/2020/day4.txt new file mode 100644 index 0000000..03b412d --- /dev/null +++ b/input/2020/day4.txt @@ -0,0 +1,1138 @@ +byr:1971 +eyr:2039 +hgt:172in pid:170cm hcl:17106b iyr:2012 ecl:gry +cid:339 + +hgt:161cm eyr:2027 +ecl:grn iyr:2011 hcl:#a97842 byr:1977 pid:910468396 + +cid:257 +ecl:gry hgt:186cm iyr:2012 +byr:1941 +eyr:2029 +pid:108935675 +hcl:#cfa07d + +hgt:165in +hcl:#cfa07d eyr:2035 pid:82570731 +byr:1973 +cid:74 ecl:xry + +eyr:2020 cid:105 iyr:2012 pid:947726115 +hcl:#ceb3a1 ecl:grn byr:1966 hgt:151cm + +hcl:#888785 eyr:2027 ecl:hzl byr:1966 +pid:853607760 +iyr:2012 +hgt:155cm + +hgt:61cm +iyr:2019 +byr:1952 pid:#1468e6 eyr:2033 ecl:#7d39d5 hcl:z + +pid:2306523501 +eyr:2032 hcl:z ecl:brn +cid:266 hgt:151in iyr:2024 +byr:2008 + +hcl:#a97842 hgt:191cm eyr:2025 ecl:gry byr:1923 pid:574171850 iyr:2019 + +hgt:140 +iyr:1987 byr:2003 +eyr:2013 cid:242 hcl:z +ecl:#19177c pid:150cm + +byr:1959 +hgt:169cm hcl:#7d3b0c ecl:gry eyr:2028 cid:107 pid:584790749 + +byr:1955 +cid:309 +hcl:#a97842 +pid:740105085 iyr:2020 +hgt:188cm ecl:oth eyr:2029 + +iyr:2016 hcl:#cfa07d eyr:2026 +hgt:151cm +pid:394185014 ecl:grn byr:1974 + +pid:226566060 ecl:blu cid:272 hgt:188cm hcl:#efcc98 +eyr:2029 iyr:2014 +byr:1956 + +pid:#7c7a9d ecl:#8fa327 +eyr:2006 iyr:2022 +hcl:#7d3b0c hgt:169 +byr:2025 + +hgt:188in byr:2015 ecl:xry +iyr:1975 +eyr:1928 +pid:8939875193 hcl:7bbcce + +hgt:193cm +eyr:2029 +pid:141707808 byr:1997 +cid:83 iyr:2019 +ecl:hzl hcl:#cfa07d + +iyr:2019 +pid:681586971 +hcl:#6b5442 hgt:165cm +eyr:2022 ecl:brn byr:1985 + +byr:1970 +iyr:2016 hgt:156in pid:#e32394 eyr:2024 +hcl:#efcc98 ecl:grt + +iyr:2013 +ecl:grn pid:341584587 eyr:2027 hgt:185cm hcl:#18171d +byr:1935 +cid:113 + +hcl:#fffffd ecl:grn iyr:2010 +pid:738986504 hgt:98 eyr:2024 +byr:1968 + +pid:175337478 ecl:oth hgt:173cm hcl:#733820 +eyr:2025 byr:1960 +cid:283 iyr:2018 + +byr:1959 +hcl:#341e13 eyr:2023 +pid:566612260 hgt:176cm +iyr:2017 ecl:grn + +cid:321 pid:355095309 byr:1945 +hgt:161cm +eyr:2029 iyr:2017 +ecl:brn hcl:#733820 + +hcl:#c0946f pid:75316487 iyr:2013 cid:201 hgt:152cm ecl:lzr byr:1996 eyr:1928 + +hgt:160cm iyr:2010 hcl:#a018b9 +eyr:2024 ecl:amb +cid:347 + +eyr:2021 +pid:893047101 iyr:2016 ecl:hzl hcl:#866857 byr:1988 +hgt:166cm + +hcl:#7d3b0c +ecl:blu pid:085336099 eyr:2024 +iyr:2019 hgt:178cm byr:1999 + +ecl:grt iyr:2022 +hcl:z +hgt:192cm byr:2010 + +pid:677187953 eyr:2025 iyr:2020 hgt:163cm byr:1957 ecl:grn hcl:#cfa07d + +cid:213 +byr:1987 +pid:113078018 ecl:blu iyr:2013 eyr:2022 +hcl:#7d3b0c hgt:157cm + +ecl:blu hcl:#c0946f hgt:186cm +byr:1992 eyr:2028 iyr:2010 + +pid:#b01156 hgt:67 +byr:2014 ecl:#35dca0 eyr:1922 hcl:790130 + +hcl:#602927 +ecl:blu hgt:173cm byr:1974 pid:116377061 cid:294 eyr:2030 iyr:2010 + +hgt:151cm eyr:2022 iyr:2011 ecl:blu byr:1987 hcl:#733820 +pid:#b90d2e + +cid:188 +byr:1990 +hcl:#602927 iyr:2026 +pid:530373696 +hgt:154cm ecl:gry +eyr:2029 + +hgt:178cm eyr:2027 +hcl:#733820 +ecl:grn iyr:2014 pid:575371227 byr:1965 + +hcl:#fffffd iyr:2020 +hgt:185cm ecl:amb pid:692760311 +byr:1961 + +byr:1967 pid:397518948 ecl:lzr iyr:2015 hcl:#cfa07d cid:328 +hgt:177cm eyr:2035 + +hcl:#8e1608 +pid:554618249 iyr:2010 hgt:176cm cid:220 +ecl:brn byr:1928 eyr:2029 + +eyr:2030 +ecl:oth cid:177 hcl:#602927 +iyr:2010 hgt:66in +pid:915661465 byr:1992 + +ecl:brn pid:558826437 hgt:151cm byr:1936 hcl:#fffffd +eyr:2021 iyr:2012 + +eyr:2033 +iyr:2019 hgt:190cm byr:1953 +hcl:#6b5442 +pid:584941735 ecl:hzl + +hgt:71cm +byr:2015 iyr:2025 +ecl:#663b65 eyr:2039 hcl:z pid:62548949 + +ecl:hzl byr:1943 +iyr:2020 hgt:175cm pid:830628564 hcl:#7d3b0c eyr:2021 + +hgt:182cm byr:1951 cid:175 eyr:2021 pid:635966127 ecl:blu iyr:2014 hcl:#18171d + +hcl:#733820 iyr:2011 pid:581100835 eyr:2022 ecl:grn byr:1985 hgt:192cm + +iyr:2013 +ecl:grn +hgt:185cm hcl:#a97842 byr:1981 eyr:2029 pid:711625030 + +byr:1995 +pid:326992839 +iyr:2015 +eyr:2028 hcl:#733820 ecl:hzl + +hgt:160 +eyr:2037 ecl:#6b6b83 +cid:123 iyr:2028 +pid:7692333345 +hcl:z byr:2029 + +hcl:#6b5442 iyr:2030 +hgt:165cm byr:2028 ecl:#21516d +eyr:2039 +pid:182cm + +hgt:159cm iyr:2018 pid:610521467 eyr:2028 ecl:amb byr:1934 hcl:#602927 + +ecl:blu +hcl:#09d9a5 hgt:162cm iyr:2020 +eyr:2025 byr:1971 pid:406714780 + +hgt:179cm eyr:2022 hcl:#18171d +ecl:blu pid:314891131 iyr:2015 +byr:2002 + +hcl:#623a2f hgt:181cm pid:442693333 byr:1990 ecl:grn eyr:2027 +iyr:2011 + +iyr:2022 eyr:1939 +pid:557187110 hcl:#18171d hgt:60cm ecl:#d6ac04 byr:1984 + +ecl:grn byr:1948 hgt:174cm pid:438876745 cid:321 +iyr:2018 +hcl:#866857 eyr:2023 + +hgt:189cm iyr:2012 hcl:#602927 pid:978388052 ecl:brn +eyr:2030 + +ecl:amb cid:235 +byr:1938 +pid:315825546 hcl:#ceb3a1 eyr:2029 +iyr:2013 hgt:171cm + +ecl:dne hcl:z +hgt:76cm byr:2010 +cid:185 eyr:2001 + +hcl:#733820 byr:1988 pid:558453117 +hgt:66in +ecl:oth iyr:2010 eyr:2021 + +byr:1926 pid:796557821 cid:155 hcl:#efcc98 +hgt:159cm eyr:2023 ecl:oth iyr:2016 + +byr:2023 eyr:2031 hcl:0ba99a pid:14902250 +hgt:132 ecl:#9b89b1 iyr:2017 + +hcl:#a97842 byr:1926 +cid:205 +ecl:blu +iyr:2016 hgt:159cm eyr:2029 + +byr:1939 hcl:#866857 +pid:025607627 hgt:174cm cid:309 eyr:2026 ecl:brn + +ecl:hzl pid:805133506 +iyr:2014 +byr:1991 +hcl:#cfa07d +cid:350 +hgt:190cm + +hgt:155cm byr:1941 eyr:2024 +cid:164 hcl:#602927 iyr:2013 pid:531781358 ecl:amb + +hcl:#72a068 hgt:164cm +pid:621006770 +ecl:brn +eyr:2029 byr:1969 + +byr:1991 +ecl:grn iyr:2020 +pid:9921729009 eyr:2029 hcl:#623a2f +hgt:62in + +iyr:2017 ecl:hzl +pid:768217275 eyr:2020 byr:1937 +hcl:#866857 hgt:157cm + +cid:270 byr:1993 hcl:#733820 ecl:hzl pid:722650020 +hgt:174cm iyr:2010 +eyr:2021 + +hcl:#c0946f ecl:blu +hgt:154cm +eyr:2022 byr:1929 pid:357023679 iyr:2010 + +ecl:hzl +iyr:2013 hgt:165cm byr:1979 eyr:2023 hcl:#733820 pid:008734536 + +hcl:#341e13 +eyr:2030 byr:1993 +iyr:2014 hgt:193cm +cid:346 +ecl:blu pid:536339538 + +eyr:2030 +ecl:hzl +cid:296 pid:660062554 hcl:#efcc98 +byr:1977 hgt:179cm +iyr:2010 + +cid:119 pid:498520651 hgt:159cm +eyr:2029 iyr:2015 hcl:#18171d +ecl:gmt +byr:1950 + +eyr:2025 iyr:2010 hcl:#efcc98 pid:196372989 hgt:181cm byr:1952 ecl:oth + +cid:317 +eyr:2026 ecl:blu hcl:#733820 +hgt:184cm +pid:549730813 byr:1927 iyr:2018 + +pid:591769824 +hgt:180cm +byr:1920 +ecl:blu +eyr:2021 hcl:#cfa07d iyr:2017 + +pid:988946348 hgt:183cm cid:117 byr:1955 ecl:blu +iyr:2015 hcl:#623a2f eyr:2029 + +iyr:2014 +eyr:2026 hgt:184cm +ecl:oth +hcl:#7d3b0c pid:252101860 + +byr:1995 +hgt:182cm ecl:brn hcl:#6b5442 +iyr:2012 eyr:2028 pid:482757872 + +iyr:2017 cid:333 ecl:gry hcl:#623a2f hgt:157cm eyr:2021 +pid:487895819 +byr:1951 + +hcl:#fffffd +hgt:193cm eyr:2025 byr:1927 iyr:2014 ecl:oth pid:989206297 + +eyr:2030 ecl:brn hcl:#18171d hgt:193cm +iyr:2013 byr:1953 pid:862636088 + +hcl:#fffffd +pid:204286737 ecl:gry byr:1923 +hgt:181cm +iyr:2015 +eyr:2023 + +cid:288 pid:413935643 ecl:gry +iyr:2012 +hgt:171cm +hcl:#623a2f +eyr:2020 byr:1943 + +byr:2023 hcl:#c0946f +ecl:oth +pid:182634296 eyr:2009 +cid:306 hgt:183cm +iyr:2029 + +eyr:2026 ecl:hzl byr:2003 +iyr:2027 pid:734296691 hgt:188cm hcl:#fffffd + +hcl:#18171d ecl:gry pid:401957684 eyr:2020 +iyr:2017 cid:141 byr:1944 hgt:74in + +ecl:grn hcl:z +pid:335097003 byr:1925 +hgt:170in iyr:2020 eyr:2022 + +pid:727198487 +hgt:173cm +cid:323 hcl:#18171d iyr:2012 eyr:2024 +byr:1995 ecl:blu + +ecl:amb hcl:#602927 +pid:460274414 +hgt:76in byr:1995 +iyr:2020 +eyr:2028 + +byr:2002 ecl:oth pid:101164770 +hgt:172cm hcl:#fffffd eyr:2023 iyr:2016 + +ecl:blu hcl:#888785 iyr:2016 pid:031162631 eyr:2025 hgt:186cm +byr:1959 + +ecl:blu pid:093242619 hgt:188cm byr:1970 +eyr:2025 +hcl:#6b5442 +iyr:2020 + +byr:1990 eyr:2025 ecl:grn +pid:907309460 +iyr:2011 hcl:#602927 hgt:62in + +pid:346468647 eyr:2021 +ecl:oth hgt:169cm +iyr:2010 cid:233 +hcl:#b6652a byr:1977 + +pid:904834317 iyr:2011 +hcl:#b6652a eyr:2028 cid:281 +byr:1944 hgt:187cm ecl:gry + +eyr:1988 pid:663941602 +hgt:156in +hcl:#fa2e93 iyr:2015 ecl:gry byr:1953 + +hgt:184cm cid:107 pid:094829817 +ecl:gry byr:1998 eyr:2023 iyr:2017 + +eyr:2020 ecl:gry byr:1955 hcl:#a97842 pid:553841536 + +hgt:185cm eyr:2022 hcl:#341e13 ecl:oth byr:1934 pid:863541754 cid:178 +iyr:2016 + +eyr:2029 iyr:2014 byr:1937 cid:232 hgt:177cm hcl:#fffffd ecl:blu +pid:076753558 + +hcl:#cfa07d +hgt:168cm +ecl:grn +pid:664159349 eyr:2028 iyr:2017 byr:1972 + +hcl:#a97842 +byr:1987 +eyr:2020 hgt:182cm +iyr:2018 +ecl:brn pid:560272731 + +hgt:172cm cid:125 ecl:blu pid:291640184 +byr:1926 +iyr:2014 hcl:#ceb3a1 + +iyr:2027 hgt:84 hcl:z +ecl:#b68fec +pid:809408661 +byr:2018 eyr:1927 cid:87 + +pid:951007276 cid:260 eyr:2025 +ecl:brn iyr:2015 byr:1957 +hcl:#4b8216 hgt:161cm + +pid:359973697 hcl:#6b5442 +eyr:2022 hgt:169cm +byr:1965 ecl:brn iyr:2013 + +iyr:2012 hgt:65in eyr:2024 pid:842371195 +ecl:amb +hcl:#341e13 byr:2000 + +ecl:hzl hgt:170cm byr:1950 +cid:289 eyr:2037 iyr:2021 hcl:#18171d pid:389051819 + +hgt:159cm +ecl:amb hcl:#c0946f eyr:2020 pid:010539976 iyr:2011 byr:1921 + +hgt:176cm cid:270 pid:838338992 +eyr:2024 hcl:#866857 +ecl:amb iyr:2015 byr:1982 + +ecl:blu +cid:246 hgt:185cm +byr:1987 +hcl:#fffffd pid:042361456 eyr:2022 +iyr:2010 + +hgt:164cm +pid:881486702 ecl:brn byr:1969 hcl:#c0946f +iyr:2010 eyr:2030 + +iyr:2019 hcl:#6b5442 hgt:167cm +ecl:amb +cid:207 byr:1922 +eyr:2025 pid:343956182 + +ecl:oth iyr:2012 +hgt:158cm +eyr:2024 hcl:#602927 byr:1964 + +byr:1988 pid:030965463 hgt:154cm +ecl:gry eyr:2020 cid:227 +iyr:2012 +hcl:#3edc53 + +hgt:178cm hcl:#c0946f byr:1945 ecl:amb eyr:2030 + +hgt:158cm pid:270264980 eyr:2027 iyr:2016 byr:1928 cid:259 +ecl:gry hcl:#733820 + +byr:2026 hgt:164in cid:235 ecl:xry +hcl:z pid:2517730699 +eyr:2033 iyr:2024 + +ecl:grn hgt:69cm pid:1321222581 byr:1987 +eyr:2035 +iyr:2018 hcl:#fffffd + +hcl:#733820 cid:244 +ecl:gry iyr:2013 eyr:2028 +pid:794178180 hgt:74in byr:1923 + +hcl:#a97842 byr:1934 ecl:hzl eyr:2027 +pid:401882857 +iyr:2018 hgt:185cm + +iyr:2018 +pid:665564950 byr:1990 ecl:hzl +hgt:154cm +eyr:2026 hcl:#623a2f + +hcl:#602927 cid:189 byr:1967 pid:332861702 eyr:2021 +hgt:163cm +ecl:amb + +ecl:grn pid:734161280 hgt:184cm +iyr:2018 eyr:2020 byr:1929 hcl:#a97842 + +iyr:2018 byr:1925 +eyr:2022 hgt:193cm ecl:hzl +hcl:#341e13 +pid:008582320 + +byr:2025 ecl:dne hgt:167cm pid:48963526 +iyr:2025 hcl:z +eyr:2034 + +hcl:#cfa07d ecl:hzl eyr:2029 cid:194 byr:1936 +iyr:2020 +hgt:186cm +pid:328573727 + +iyr:2011 hgt:188cm pid:338435675 cid:326 ecl:gry +eyr:2027 +hcl:#6b5442 +byr:1958 + +pid:165cm +hgt:70 iyr:1996 +eyr:2034 cid:210 hcl:z ecl:#75606f byr:2027 + +hgt:180in hcl:#a0515a pid:#97a753 +byr:2026 iyr:2016 +eyr:1995 + +eyr:2020 +hcl:#18171d byr:1978 iyr:2012 hgt:68in +ecl:amb cid:346 pid:332495922 + +ecl:blu hgt:61in pid:747650669 +byr:1961 eyr:2028 +iyr:2020 +hcl:#4992f2 + +byr:1958 iyr:2017 ecl:oth +hgt:153cm +hcl:#602927 eyr:2023 pid:108391213 + +byr:1976 eyr:2023 iyr:2015 hgt:177cm pid:391628371 hcl:#8069c4 +ecl:grn + +pid:910402636 ecl:gry hgt:188cm byr:1924 hcl:#82dfdc eyr:2029 + +byr:1978 pid:302223240 iyr:2017 +hgt:174cm +hcl:#6b6569 ecl:blu eyr:2027 + +cid:135 +byr:1995 iyr:2015 ecl:oth pid:054611703 +eyr:2023 +hcl:#7d3b0c hgt:75in + +ecl:grn +eyr:2020 hgt:184cm pid:444944678 iyr:2019 hcl:#efcc98 + +byr:1946 +hgt:70in eyr:2022 hcl:#6b5442 ecl:amb iyr:2018 pid:859762925 + +byr:1995 eyr:2022 +ecl:grn pid:575081777 +hcl:#341e13 +hgt:183in iyr:2018 + +eyr:2028 hgt:162cm byr:1989 hcl:#0bd11f +iyr:2020 ecl:gry +pid:073498924 + +iyr:2014 +pid:122787281 byr:1982 cid:138 eyr:2021 hcl:#866857 ecl:hzl hgt:184cm + +cid:198 byr:2014 +pid:5529128129 +hgt:185in +iyr:2025 +hcl:z +eyr:2023 +ecl:gmt + +eyr:2021 hgt:170cm +cid:74 +iyr:2019 pid:943445928 byr:1980 +ecl:oth hcl:#ceb3a1 + +iyr:2020 eyr:2030 pid:201122734 cid:246 hgt:169cm ecl:grn hcl:#fffffd byr:1962 + +pid:025560194 +byr:1989 +hcl:#cfa07d hgt:182cm ecl:blu eyr:2025 iyr:2012 + +hgt:151cm +hcl:#efcc98 ecl:blu +byr:1983 eyr:2023 pid:814513328 iyr:2013 cid:73 + +byr:1961 pid:536384108 hgt:188cm ecl:amb iyr:2013 eyr:2027 hcl:#888785 cid:121 + +pid:364607819 +eyr:2024 ecl:amb hcl:#b6652a iyr:2016 +byr:2000 hgt:187cm + +hcl:z eyr:1956 iyr:2028 +hgt:168cm cid:105 +byr:2026 +ecl:#5b17d3 + +cid:207 pid:913509058 ecl:brn byr:2001 eyr:2026 +hcl:#866857 iyr:2019 +hgt:180cm + +pid:363979129 +eyr:2027 iyr:2013 +ecl:gry hcl:#866857 byr:1957 hgt:62in + +byr:1932 +eyr:2027 +hgt:66in ecl:hzl hcl:#efcc98 pid:417620217 iyr:2013 + +iyr:2013 cid:331 hgt:192cm +hcl:#d896d9 pid:795744816 byr:1935 + +byr:1960 hcl:#888785 hgt:176cm ecl:hzl pid:025206542 +iyr:2015 eyr:2030 + +ecl:oth hgt:182cm +hcl:#341e13 +pid:526568190 iyr:2018 cid:280 byr:1997 +eyr:2028 + +hgt:186cm pid:273625601 byr:1993 iyr:2018 eyr:2021 hcl:#733820 +ecl:blu + +hgt:74cm +byr:1981 eyr:2024 +ecl:amb iyr:2012 pid:154027492 hcl:#733820 + +hcl:#a97842 pid:347084450 ecl:oth +eyr:2030 hgt:176cm byr:1955 cid:229 +iyr:2013 + +hcl:#fffffd byr:1979 iyr:2017 +pid:183840860 hgt:177cm ecl:blu eyr:2023 + +pid:045246162 eyr:2021 byr:1928 hgt:190cm ecl:gry hcl:#602927 + +pid:273620987 +eyr:2022 hgt:162cm +cid:269 +byr:1991 hcl:#602927 ecl:amb iyr:2019 + +pid:621069556 ecl:amb +cid:202 byr:2020 hgt:189cm +iyr:2014 hcl:#fffffd +eyr:2027 + +eyr:2022 byr:1988 +hgt:190cm +pid:349839553 hcl:#602927 iyr:2018 ecl:gry + +iyr:2014 ecl:gry +hcl:#733820 eyr:2025 hgt:179cm pid:231854667 byr:1984 +cid:102 + +eyr:2020 +pid:509400891 hcl:#cfa07d hgt:172cm +ecl:grn byr:1997 iyr:2020 + +iyr:2017 byr:1994 hgt:174cm ecl:amb +pid:685743124 +hcl:#fffffd eyr:2029 + +iyr:2012 hgt:177cm byr:1999 pid:549190825 hcl:#b6652a eyr:2028 ecl:oth cid:316 + +hgt:192cm ecl:grn byr:1924 +iyr:2011 eyr:2029 hcl:#efcc98 +pid:215962187 + +iyr:2011 hcl:#866857 +cid:164 +hgt:184cm +ecl:gry eyr:2023 byr:1959 pid:204093118 + +hgt:172cm ecl:hzl hcl:#3f2f3a pid:623470811 byr:1938 iyr:2013 eyr:2022 + +hcl:#b6652a +iyr:2019 hgt:152in +ecl:oth +pid:189008850 byr:2006 + +ecl:oth hcl:#602927 +pid:049746898 byr:1924 hgt:150cm eyr:2026 +iyr:2014 + +ecl:oth +eyr:2028 byr:2018 hcl:#733820 +pid:8676207205 iyr:2018 +hgt:190cm + +eyr:2023 cid:308 hgt:170cm ecl:oth iyr:2014 hcl:#18171d pid:874405208 byr:1936 + +eyr:2021 ecl:hzl +pid:423603306 +hcl:#c0946f cid:147 +byr:1988 iyr:2016 hgt:164cm + +hgt:176cm iyr:2010 +hcl:#6b5442 cid:280 byr:1988 ecl:hzl pid:967151288 eyr:2028 + +cid:299 hgt:163cm ecl:gry +pid:561439154 eyr:2023 +hcl:#cfa07d iyr:2019 byr:1959 + +pid:635547007 +ecl:blu +byr:1996 hcl:#7d3b0c cid:280 eyr:2023 +hgt:170cm iyr:2017 + +hcl:#888785 iyr:2014 +ecl:brn +hgt:190cm byr:1941 eyr:2021 + +hcl:#c0946f cid:199 hgt:162cm ecl:amb pid:130696599 eyr:2022 iyr:2018 byr:1948 + +cid:314 hcl:#a4fc09 ecl:hzl iyr:2019 +pid:886849824 eyr:2026 byr:1933 hgt:178cm + +byr:1996 iyr:2016 eyr:2030 hgt:169cm +pid:119207760 +hcl:#ef542c +ecl:brn + +iyr:2030 eyr:2039 hcl:#c0946f pid:#7336a0 hgt:182cm cid:347 +ecl:#c81361 byr:2003 + +pid:727812879 iyr:2013 eyr:2027 hgt:172cm +hcl:#7d3b0c ecl:gry byr:1966 + +hcl:#341e13 +iyr:2016 pid:744997238 +cid:322 +byr:1973 +ecl:hzl eyr:2028 hgt:190cm + +hgt:171cm eyr:2026 +iyr:2014 ecl:oth +pid:074049558 hcl:#04083f byr:1923 + +pid:973713235 +eyr:2021 +ecl:brn +byr:1922 hcl:#fffffd iyr:2012 +hgt:178cm + +ecl:#10165d +cid:201 eyr:2026 pid:#ceefa8 byr:2020 +hgt:164cm iyr:2011 +hcl:9fccf7 + +ecl:blu +hgt:165cm iyr:2012 eyr:2025 pid:775787557 +byr:1952 hcl:#623a2f + +pid:6186829005 ecl:lzr hcl:z hgt:69in iyr:2021 byr:2018 eyr:1974 + +pid:824641755 eyr:2028 byr:1950 hgt:184cm +hcl:#c0946f +iyr:2014 + +hcl:#7d3b0c cid:84 hgt:187cm iyr:2015 +pid:895876610 +byr:1988 eyr:2023 + +hcl:#fffffd +hgt:157cm iyr:2020 eyr:2030 ecl:grn pid:486236241 + +iyr:2010 +eyr:2029 +hgt:74in ecl:hzl byr:1926 pid:348573885 hcl:#9d1214 + +hgt:171cm ecl:oth +eyr:2022 pid:148728436 byr:1993 hcl:#a97842 iyr:2013 + +iyr:2019 +hgt:151cm +eyr:2020 pid:319882814 ecl:grn byr:1966 cid:256 hcl:#3107b3 + +hgt:184cm ecl:grn +byr:1947 +eyr:2025 iyr:2015 pid:827962962 cid:62 hcl:#f3a364 + +iyr:2013 +hcl:#fffffd pid:215012801 ecl:amb eyr:2024 +hgt:154cm +byr:1973 + +ecl:hzl hgt:152cm +hcl:#623a2f +byr:1944 eyr:2022 pid:295632731 +cid:243 iyr:2019 + +ecl:brn +iyr:2011 pid:089250747 byr:1984 hcl:73e739 cid:253 hgt:161cm eyr:2021 + +hcl:#18171d byr:1944 pid:732054667 eyr:2021 +ecl:oth hgt:173cm + +ecl:gry pid:445116331 +hcl:#a97842 +hgt:187cm eyr:2026 iyr:2020 byr:1992 + +hcl:80c091 pid:745555899 +iyr:2021 +hgt:170cm +byr:1990 + +pid:058987865 byr:1927 cid:209 +hcl:#65ccf6 eyr:2025 +ecl:brn iyr:2012 hgt:164cm + +hgt:67cm +byr:2026 hcl:f8e749 iyr:2023 eyr:1921 ecl:lzr + +eyr:2028 iyr:2013 pid:103268377 hgt:179cm byr:1922 +ecl:hzl +hcl:#7d3b0c + +byr:1923 ecl:gry hgt:167cm hcl:#7fc8ee iyr:2015 pid:427963077 eyr:2024 + +byr:1927 ecl:grn pid:741328150 +eyr:2029 hcl:#733820 +iyr:2015 hgt:157cm + +hgt:70cm hcl:e76970 iyr:1945 cid:186 +byr:1921 eyr:2029 +pid:823622634 +ecl:zzz + +hgt:61cm cid:87 hcl:d5e5ff +eyr:2024 ecl:dne pid:182634269 +iyr:2029 + +hcl:#623a2f eyr:2020 byr:1936 ecl:gry pid:236984204 +iyr:2011 hgt:156cm + +pid:872645776 +byr:2023 +cid:220 ecl:blu hgt:172cm eyr:2033 +iyr:2010 hcl:ff82f9 + +pid:774489073 iyr:2013 byr:1922 ecl:brn eyr:2025 hcl:#18171d hgt:163cm + +eyr:2024 hgt:65in byr:1962 iyr:2019 +pid:112233558 hcl:#888785 ecl:grn + +hgt:172cm eyr:2022 +hcl:#18171d ecl:blu +pid:609008608 iyr:2013 +cid:244 byr:1980 + +cid:124 hgt:175in eyr:2025 +hcl:674e80 pid:099875931 iyr:1956 + +byr:1926 hgt:188cm +ecl:hzl eyr:2021 +iyr:2018 +hcl:#866857 pid:557800355 + +byr:1939 pid:200409089 +eyr:2026 hgt:164cm +ecl:grn iyr:2013 +hcl:#733820 + +cid:73 hgt:169cm iyr:2016 byr:1976 ecl:gry eyr:2024 +pid:043453462 + +pid:609818712 hcl:#733820 byr:1958 +eyr:2025 hgt:187cm iyr:2017 ecl:gry + +hgt:66in pid:618590610 iyr:2013 byr:1938 hcl:#d1bda9 +eyr:2022 +ecl:grn cid:69 + +hgt:156cm pid:755742405 +byr:1929 hcl:#6b5442 eyr:2024 +iyr:2018 +ecl:gry +cid:105 + +eyr:2030 pid:77022842 +hgt:160cm byr:1989 +iyr:2011 hcl:#7d3b0c ecl:blu + +iyr:2015 +hcl:#341e13 byr:1968 pid:434159843 +ecl:amb hgt:150cm +eyr:2030 + +hcl:z eyr:1993 pid:#b3a5a6 iyr:1947 hgt:176in +ecl:#78876d + +cid:249 hcl:#cfa07d +hgt:180cm ecl:gry eyr:2026 byr:1965 +pid:048327438 iyr:2010 + +pid:136468890 ecl:gry +byr:1940 +hcl:#fffffd hgt:185cm iyr:2016 eyr:2021 + +hcl:#b6652a hgt:180in byr:1976 eyr:2022 pid:156cm ecl:#737836 +iyr:2013 + +ecl:amb iyr:2016 hgt:162cm byr:1955 pid:193cm eyr:2028 cid:346 +hcl:#733820 + +iyr:2010 byr:1932 eyr:2025 ecl:grn +pid:595837820 +hcl:#341e13 +hgt:166cm cid:224 + +pid:481646831 +eyr:2029 +hcl:#623a2f cid:319 iyr:2016 +ecl:brn hgt:160cm byr:1944 + +ecl:zzz pid:428329840 cid:238 iyr:2022 hgt:76cm +hcl:#a97842 +byr:2024 eyr:2028 + +iyr:2014 hgt:170cm +byr:1963 hcl:#623a2f +eyr:2026 pid:225910806 ecl:gry + +ecl:grn iyr:2010 hgt:193cm byr:1928 eyr:2028 pid:343022641 hcl:#733820 + +eyr:2023 ecl:grn +byr:1950 iyr:2012 hcl:#866857 pid:400725165 +hgt:193cm + +cid:195 iyr:2014 ecl:oth eyr:2027 byr:1966 +hgt:177cm hcl:#18171d pid:913894485 + +iyr:2015 hgt:154cm +cid:206 +pid:134599284 hcl:#602927 +eyr:2023 ecl:brn +byr:1983 + +ecl:#2d0e7a pid:#f34625 eyr:1942 iyr:2027 byr:2013 hcl:z hgt:162cm + +hgt:189cm byr:1965 iyr:2011 +cid:178 ecl:hzl +hcl:#b6652a eyr:2026 pid:683560227 + +eyr:2030 pid:047446524 ecl:grn hgt:167cm iyr:2017 hcl:#602927 +byr:1920 + +cid:86 +iyr:1920 hgt:193cm +eyr:2027 pid:401913877 ecl:hzl +hcl:#888785 byr:1953 + +byr:1991 +ecl:grn +iyr:2016 +hcl:#5e1ef2 hgt:186cm +pid:076499738 +eyr:2025 + +eyr:2030 hcl:#18171d pid:750694893 +hgt:157cm iyr:2020 cid:338 +byr:1956 ecl:gry + +iyr:2027 pid:#37f002 hgt:164cm ecl:#80df11 +hcl:#aeacee cid:320 +eyr:2039 byr:1956 + +iyr:2014 hcl:#733820 ecl:grn +byr:1960 +eyr:2025 pid:667089568 + +hgt:163cm +byr:1962 cid:108 ecl:gry hcl:#733820 iyr:2012 +eyr:2029 pid:763684725 + +byr:1984 hcl:#888785 hgt:159cm iyr:2012 ecl:gry +eyr:2024 cid:236 pid:174711749 + +ecl:gry pid:044931271 +hcl:#b6652a eyr:2029 iyr:2013 byr:1985 + +byr:1973 iyr:2018 hcl:#a97842 pid:937214113 ecl:blu +cid:247 hgt:186cm eyr:2023 + +cid:108 pid:231782961 iyr:2017 +eyr:2034 hgt:170cm byr:2025 hcl:#18171d ecl:utc + +pid:298274796 byr:1928 hcl:#a97842 hgt:188cm iyr:2011 ecl:gry eyr:2028 + +hgt:65cm iyr:1943 eyr:2025 +hcl:z +pid:65702335 ecl:#bb54e6 byr:2010 + +pid:499116613 eyr:2024 +ecl:gry hcl:#cfa07d hgt:193cm byr:1999 +cid:278 iyr:2015 + +hcl:#6b5442 eyr:2027 hgt:175cm byr:1988 +ecl:brn pid:410075320 iyr:2010 + +pid:269678991 ecl:oth iyr:2013 +hcl:#602927 byr:1991 eyr:2023 + +ecl:oth +pid:144593265 hcl:#fffffd +eyr:2020 iyr:2018 +byr:1975 hgt:160cm +cid:304 + +iyr:2014 hcl:#ceb3a1 eyr:2029 +byr:1951 pid:520804395 hgt:185cm ecl:oth + +hgt:159cm +pid:312887994 +cid:205 +iyr:2016 ecl:hzl hcl:#866857 eyr:2029 byr:1944 + +iyr:2023 ecl:#54c85c byr:2030 +eyr:1946 cid:190 pid:512417622 + +byr:1946 eyr:2023 hgt:163cm +hcl:#2d4e9c ecl:brn pid:839043333 iyr:2014 + +iyr:2027 cid:122 hgt:187cm eyr:1975 ecl:grn byr:1920 +hcl:#c0946f + +eyr:2029 hgt:189cm ecl:blu byr:1922 iyr:2016 +pid:924104599 +hcl:#b6652a + +hgt:162cm +iyr:2016 byr:1921 hcl:#18171d eyr:1938 ecl:hzl +pid:682222023 + +cid:118 pid:959515596 +byr:1921 iyr:2010 eyr:2029 hcl:#7d3b0c ecl:oth hgt:158cm + +ecl:#8ac844 pid:162cm +hcl:8f4d80 hgt:150in byr:2005 +eyr:2008 +iyr:2017 cid:174 + +hcl:z byr:1936 +pid:255481052 eyr:2021 +iyr:2012 hgt:170cm cid:276 ecl:hzl + +iyr:2013 byr:1935 hgt:179cm +eyr:2023 ecl:amb pid:073621563 hcl:#623a2f + +hcl:#18171d cid:230 byr:1989 ecl:oth eyr:2021 hgt:181cm pid:661224730 +iyr:2019 + +pid:748039140 iyr:2020 eyr:2020 ecl:#6ebbc2 hcl:#fffffd hgt:171cm +byr:1995 + +ecl:hzl pid:758144605 hcl:#ceb3a1 hgt:186cm +eyr:2028 iyr:2014 +byr:1928 + +ecl:hzl +hgt:66in +byr:2000 iyr:2017 eyr:2020 +pid:162973694 hcl:#a97842 + +iyr:2012 pid:749770535 +byr:1969 cid:148 +hcl:#733820 +hgt:180cm eyr:2021 ecl:hzl + +iyr:2010 +byr:1958 +hgt:164cm +ecl:blu hcl:#733820 pid:890634327 eyr:2024 + +hgt:70in pid:218397894 +iyr:2020 eyr:2025 ecl:gry hcl:#341e13 +byr:1970 + +eyr:2020 pid:854208004 hgt:157cm hcl:#7d3b0c ecl:amb byr:1981 iyr:2020 + +byr:1924 +cid:321 eyr:2028 hcl:#cfa07d iyr:2010 ecl:amb pid:036669613 hgt:170cm + +ecl:#6649d4 pid:0026989865 cid:188 +hgt:152in +byr:1950 hcl:z eyr:1928 iyr:1963 + +hcl:#ceb3a1 ecl:grn eyr:2028 pid:074363489 iyr:2010 hgt:173cm byr:1966 + +eyr:2030 +pid:9731612333 ecl:#f8824c +iyr:2022 hgt:161in +byr:2023 +cid:316 +hcl:z + +hgt:175cm iyr:2016 eyr:2024 cid:244 +byr:1952 +pid:085432899 +hcl:#fffffd ecl:brn + +ecl:brn eyr:2026 iyr:2017 hgt:75in +pid:745302991 byr:1969 hcl:#7394c7 diff --git a/input/2020/day5.txt b/input/2020/day5.txt new file mode 100644 index 0000000..1de357f --- /dev/null +++ b/input/2020/day5.txt @@ -0,0 +1,927 @@ +BBFBFFBRLL +FBFBFFBRRR +BBBFBFFLLR +BFBBFFBRRL +BBFFBBBRRL +BFFFFFBLRR +FBBBFBFLLL +FBBFBFFLRR +FBFFFFBRLR +FBFBFBFLRL +FFBBFFFLRR +BFFBBBFRRL +FFBBFBBRRR +BFFBBFFRRR +FBBFBBFRLR +BFFFFBBLRL +BFFBFFBRLL +BFFFBFFRLL +BBFFFBFRLL +FFFFBFBLLR +FBFBFFBLRR +FBBFFFFRRL +FBBFFFFLRL +BBFBFFFLRR +FFBFBBFLLR +FFFFBFBRRL +BFFFBBBLRR +BBFBFBFRRL +FFBFBFBRRL +FFFBBBBRRL +FBBBBBBLLR +FFFFFBFRLR +FBBFBBBRRL +FBBBBFFRLR +FFBBBFFRLR +FFBBBFFLRR +FFBBBBBRLR +FFBFFFBRLR +FBFBFFBLRL +BFBBBBFRRR +FBFFBFFRRL +BFFFBFFLRL +BBFBFBBRRR +BFBFBFFLRR +BFFFBBBRRR +FBBFFBFLRR +BFFBFBFLRL +BFBBBFBRRL +BFBFBFBRRR +FFFBBFFRLR +FFFFBBBLRR +BFBFFBBRLL +BBFFBBBLLR +FBFFFBFLLL +FFBFBBFRRL +FFFBBFFLLR +FBBFFFBRRL +FBFFBBBLRL +FFBBFBBLLL +FBBBBBBRRR +FBBBBFFLRR +FBFFFFFLLL +FBFBFBFLLL +BBFFBFBLRL +FBFBBFFRLR +FFFBFFBRLL +FFBFFBFRRL +FBBFFFFLRR +FBFFFFFRLR +FFFBFBBLLR +FBBBFFBRLL +BBFFBBFLRR +FBBFBBFLLL +FFBFBBBLRR +FFFFFFBLLL +BFFFBBFLLR +FFFFBBFLLL +BFBFBFBLRL +BFBBFFBRRR +BFBBFBBRLR +FFFBFFFLRL +BBFBBBBLRL +FFBFBBBRRR +BFFFBFBRLL +BBFFFBFRRR +BFFFFFFRRL +BFBBFFFRLR +FFFFBFBLRL +FBFBFFBLLR +BBFFFBFRLR +FFBBFFFRLL +FBBBFBFRRR +BFFBBFFLLR +FFFFBFBRRR +FBFFFBBRLL +FBBFFFBRLR +BFBFBBFLLL +BFFBFFBRRR +FFBBBFBRLL +BFBFFBBLLL +FFBFFBBLLL +FFBBFBFRLL +BFFFBBFLRL +BBFBBFFLRL +BFBBFFFRLL +BBFFFFFRLR +FFFBBFBLRR +BBFFBBBRRR +FBFFFBFRRL +BFBFFBFRRR +FBFBBFFLRR +FBBFFBFLRL +FBBBBFBLLL +BFBFFBFLRR +BFFBFBBRLR +FFBBBFBRRR +FBBBBBFLRL +BFBBFFBRLL +BFFBFBBRRL +BBBFFBFRRR +FBBFFBBRLL +BFFFFBBLLL +BFBBBFBRLL +BFFFBBFRLR +FFBFFFBLLR +BFBBFFFRRL +BFFBFBFRRR +FBFFBFBRLR +FBFFBBFLLR +BFFFFFBRRR +FFFFFBBRLR +FBBFFFBLLL +BFFFFFBRRL +BBBFFFFLRR +BFFFBBBRLL +BFFFFFBRLR +FFFBBBBLRL +FBBFFBBLRL +FBBBBFFLLR +BFBFBFBRLL +FBFBBFFLLR +FFFFFBFLLL +FBBBFFFRLL +BFBBFFFLLR +FBFBBFFRLL +FBFBBFBLLL +FBFBFFBRLL +BBBFFFBRRL +FFBBFBFLLR +FFFFFFBRLL +BFBFBFBRRL +BFFBFFBLLL +FBBFFFBRLL +FFFFBBBLLR +FFBFFFBLRL +FBFBBBBRRR +FFBFBBBRLL +BFBFBFFRRR +FBBFBFFRRR +FBBFFFBLLR +FBBBFFFLRR +BBFFFFFRLL +FBBBBBBRLR +BFBFBBBRLL +BBFFBBFRRL +BBFFFFFLLR +FFBFFFBRLL +BBFBBFBLLL +FFBFFBFLRR +FBBBFFBRRR +FBFBFBFRRL +FBFBFBBRLL +FFFFFFBRRL +FBBFFBFRLR +FBFFFBFRLL +FFBBFFBRRL +FBFFBBBLLL +FFFBFBFLRL +BBFFFFBRRR +FFBFBFBLRL +FBBBFFFLLR +FBBBFFFRRR +BFFFFBBRRL +BFFBBBFLLR +BBBFFBFRLR +FBFBFBFLRR +FFFFBFBLLL +BFBBFFBLLL +FFFFBBFRLL +FFBBFFFRRR +BBFBFBFLRL +FFBBBBBRRR +FBBBFBBLLR +FBBBFBBRRL +FBFBFBFLLR +BFFFBFFLLR +BBBFFBBLRL +FFFFFBBLLL +FBFBBBFLLR +FBFBFBBRRR +BFFFBBFRLL +BFFBFFFLRL +FFFFFBBLRR +BFFBFFBLRL +FBBFFBBRRR +FFBFFBFLRL +FBFFBBBLLR +BBFBBFBRLR +BFBBFFFLLL +FBFBBBFRLL +BFFFFBFLRL +BBFBBFFRRR +BBFBBBFRRR +FFBFFFBRRL +FFFFFFFRRR +FBBFBBBRRR +BBBFFBFLLR +BFFBFFBRLR +FFBFFFBLRR +BBFFFBFLRR +BBBFFFBLRL +FFBBFBFLLL +BBFBFFBRLR +BFBFFBFLRL +FBFFFBBLLL +FBBBBBFLLR +BFBFFFBLRL +FFFBBBBLLL +FBBFBBFRRL +FBBFFBFLLL +FFBBBFFRRL +BFFFBBFRRR +FFBFBBFRLL +FFFBFFFRLL +FBBFFFBLRR +BBFFBBBLLL +FBFFBFFRLR +BBFBFFFRLR +FBFBBFFLLL +BBFFFBBRLL +BBBFFBBLLL +BFBFFFFRLR +FBFBBFBLLR +FBFFFBFLLR +FFBBFBFLRR +BFFBFFFLLR +BBBFFFBRLR +BFBBBBBRRR +FFFBFFFRRL +FFBBBBBRRL +BBFBFBFLLR +BBFFFFFRRR +FBFFBBFRRL +FBFFBFBLRR +BFBFFFBRRL +FFFBFBFLRR +FFBBFFBRLR +BFFBFBFLRR +FBBBBBFLLL +BFBFFFBRRR +BBFBFBBRLR +BFFBFBBLLL +FBBFFFFRLR +BFBFBFFRRL +FFFFBBBRLR +FFFBBFFRLL +FBFFBBBRLL +FFBBBBBRLL +BFFFFBFRRR +FBBFBBFLRR +FFBFBFBRLR +FBFBFFBRRL +FFFFBFFLRR +BFBFBFFRLR +FFFFFFBRRR +BFBBBBFRLR +FFBFBBBLLR +FBBBFFBLRR +FFBFBFFLRL +BBBFFFBLLL +FFBFFFBLLL +BFBFFFBRLR +BFFFBFFLRR +FFBFBFFRRL +FFFFFBBRRR +FFBBFFFLLR +FBFFBFFRLL +FBFFBBFRLL +FFFFBBFLRL +FFFBFFFLLL +BFFBFBBRLL +FBFFFFFLLR +FFFFFBBRRL +FBFBFFFRRL +FBFBFBBRLR +FFBBFFBLRR +BBFFBFBLLR +BFFBFBFLLL +FBFBFFFLRL +FFFFBBFRRR +FFBFFFFRLL +FBFBBFBRRL +FBFBBFBRLR +BBFFFFBLRL +BFFFFBFRLL +FFBFBBFRLR +FFBFFBBLRR +BFFFFFFRRR +FBBBFBFLRL +FBFFBFBRRR +FBFFBFFRRR +BFBFBFBLLR +FBBBBBBRRL +BFBFBFBLRR +BBFFBFBLLL +BFFBBBBLRL +BFFBBBBLLR +FFBFFBBRLL +BBBFFBBRLR +BBBFFFFLLL +BFBBFBFLRL +BBFBFFBLLR +FFFBBFBRRL +BFBBFBBLRL +FFFFBFFRLL +FFBBBFFLLR +FFBBBFBRRL +FFBFFFFRRL +FBBFFFBLRL +BBFFFBBLRR +FFBBBBBLLR +BBFBBBBRLL +BFFFBFFRRR +FFFFBBBRLL +FFBFFBBLLR +BFBBFBFRRL +FFBFBBFLRL +FBFFFFBRRL +BFFFFFBLRL +FFFBBFBLLL +FBFFFFBLRL +BFBBFFFLRR +FBBBFBBLRR +BFBBBBBLLR +FFBFFBFRLR +FFBFBBBLRL +FBFFFBFRLR +FFBBFFBLLR +BBFFBBFRLR +BBFFFBBRRR +BBFFBBFRLL +FFBBFFBLLL +FBBBBFBLRL +FFFFBBBLRL +BBFBBBBRRR +FFBFBFBLLL +BFFFFBBLLR +BFFBFFFRLR +BFBFBFFLRL +FFFBBBBRLR +FFBBBBBLRL +BFBBBBBLRL +BBFFFFFLRR +FBBBFFFLRL +FBFBFFBRLR +BFFBFFFLRR +FFFFFBFLLR +BFBBBBFLRR +BFBBBFBLLL +BBFBBFBRRL +BBFFBFFLRL +BFBBBBBRLL +FBBFBBBRLR +BBFFBBBLRR +FFFBBFBLLR +BFFFBBBLRL +FFFBFBBRLL +BBFBBFFRLR +BFBFFBBRRR +FFFBFBFRRL +FFFBFFFLLR +BBBFBFFRLR +FFFBFFFRLR +FBBFBFBRRR +FFBBBBFRRR +FBBBFBFLLR +BBBFBFFLRL +FFBBFFFRLR +FFFBFFFRRR +FFBFFFFLLR +BFFBBFBLRR +FBFFBFBLRL +BBFBFBFRRR +BBBFFFFLLR +FBFFBFFLRR +BFFFFFFLLL +FBFBBFBRLL +FFBFBFFRLL +FBFFBFBLLL +FFBBBBBLLL +FFFFBFFLLL +FBBBBFBRLR +FFBBBBFLLL +FFBBBFFRLL +FFFBFBFLLL +BFBBBBBLLL +FBBFFFFRRR +BFFBBFBRLR +FBFFFBBLRL +FBBFBFBLRR +BBFFFFBLLR +FFBBBBFLRR +FFBFBBFLRR +BBFBBFBRRR +FBFBFBFRLL +BFBFBBBLLL +BFBBBFBRLR +FFFBFBFRLR +BFBBBFFRRR +FFFFBBBLLL +BFBFBBBRRR +FBBBBFFRRL +BBFBFFFLLL +FBBBFBFRLR +BFBBBFFLLR +FBFFFFFLRL +BFBFFBFLLL +BFFFFBFLLL +BFBBFFBLLR +FBBFBBBRLL +FFFBBBFLRR +FBBBBFFLLL +FFBBBBFLLR +BFBFBFBLLL +BFBFBBFRLR +FBBFBBFRLL +FBFFFBFLRR +BFFBBFFRRL +FFFBBFBLRL +FBFFFFFRLL +BFFFFBFRRL +FFFBBBBRLL +BFFBFFBRRL +FBBFFFFLLL +FFBBFBBLRR +BFBFFFBLLL +BFBFFFFLLR +BBFBFFBRRR +BBFBBFFRLL +FFFBBBFLLR +BFFBBBBRRR +FBBBBBBLRR +FFBFFBBLRL +FBBFFBBRLR +BFFFBFFRLR +FBBBFFBLLL +FFFBFBFRLL +BFFBFFFRRL +BFFFBFBRRR +BFBFFFFLRR +FFFBFBBLRR +BBFBBBFLLL +FBBFBFFRLR +BBFFBBFLLL +FBFFBBFRRR +BFFFBFBLRL +BFFFFBFLRR +BFFFFBFRLR +BBFFBBBRLR +FBBFBFBRLL +FBFBBFFRRL +BBFFBFBLRR +FBBFFBBLRR +BBFFBFBRRL +FFBBBBFLRL +FFFBFBFLLR +BBBFFFFRLR +BFBFFBBRLR +BFFBBFFRLR +BFFFFFFLRR +BBFFFFBLRR +FFFFBFFLRL +FBBBBBFLRR +BFBFFFFRRR +FBBBFBFLRR +BFBFBBFRLL +FBBFBBFLLR +FBFFFFFRRR +FBBFFBFRLL +FBFBFFFRLR +FFBBBFBLLR +FBBBBFFLRL +BBFFFFBRLL +FBBBBBFRRL +FBBBBFFRLL +BBFFBFBRLR +FBFBFBBRRL +FBBFBFBLLL +FBFFBFBLLR +BFBBBFFLLL +FFBFFBBRRL +BBFBFBBLLL +FBBBFFFLLL +FBFBBBBLLL +FBFFBFFLLL +FFFBBFFLRL +BBFFBBBLRL +BFFFBFBRLR +BBFFFFBRLR +BBFBBBBLLR +BFFBBFBLLR +FFFBBFBRLL +BBFFFBFRRL +FFBFFFBRRR +BBFBFBBRLL +FBFBFBBLLR +FBBFFBFRRR +FBBBFFBLLR +BFFFBBBRRL +BFFBBFBLRL +FBFFBBFLLL +BFBFBFFRLL +BFBBBFBLLR +FBFFBFFLLR +FBBFBFFLLR +BFBFFFBLRR +FBBFFBBLLL +FFBFBFFLLL +FFBBFFBRLL +FFBFFBFRRR +FBFBFFFRLL +BBFBBFFLLL +FBFBBBBRLR +FFFBBBFRLL +FFBFFBFLLR +BFFFFBBRLR +FFBFBBBRRL +FFFFBFFRLR +FFBBFFFLLL +FBFFFFBLRR +FBBBBFBRLL +FBFFBBBLRR +FFFBBFBRRR +BFBBFBFRRR +BFFFBFBLRR +BFBFFBFRRL +FFFBBBBRRR +FBBFBFFRRL +BFBBFFBLRR +FBBFBBBLRR +BFBBFBBRRR +FFFFFBFLRR +FBFBBBFLRR +BBBFFFFRRL +BBFFFBFLLL +BBBFFFFLRL +FFBBBBBLRR +BBBFFBFLLL +FBFBFBBLRR +FFFBFFBLRR +FFBBBFBLLL +BBFFFBFLLR +FFFFBBFRRL +FBFBBFBLRL +BBFBBFFLRR +BFBFBFBRLR +FFBFFBFRLL +BFBBBFFRRL +FFBBFBBLRL +FBFFFFFRRL +FBFFFFBLLR +FFBFBFFRLR +BFBBFBFRLL +FBFBBBFRRR +FBFBBBBLRL +FFFBFFBRRL +BFFFBFBLLR +BFBFBBFLRL +BBFBFBBLLR +BBFFFFFLRL +FFFBBFFLRR +BFFBFBBLRR +BBFFBBBRLL +BFBBFBBRLL +BFFBBBFRRR +FBFBFFFRRR +FBFBFFFLLR +FFFBBBFLRL +BBFBBFFRRL +BFFFFFFRLR +FFBBBFBRLR +FFFFBBBRRR +FFFBFBBRLR +FBFBFFBLLL +BBFBFFBLRR +FBFFFFFLRR +FFFBFBBLRL +FBBBBFBLLR +FBBBFBBLLL +FFBBBBFRLL +FBFFFBFRRR +FFFBFFFLRR +BFFBFFBLLR +BBFBBBFRLR +BFBFFBBLRR +FFFBBFBRLR +BFBBFBFRLR +FBFFFBBLLR +FBFBFFFLRR +BFFFFBBRRR +BBFFFFBLLL +BFFBFFBLRR +BFBFFBFLLR +FBFBFBBLRL +BFFBBBFRLL +FFFFBFBRLL +FFBFFFFLRR +FBBFBBFRRR +BFFFBFBRRL +BFFFFBBLRR +FFFFFBBRLL +FBFFBBBRRR +FFFBBFFLLL +FFBFBFBRLL +BFFBFBBRRR +FFFFBBFLRR +FBBFBBFLRL +BBFFBBFLRL +FBBBFBFRRL +FFFBFBBLLL +FFFBFFBRLR +FFFFFBFLRL +BFFFFFBLLL +BFFBBFFLLL +FBBFBFBRLR +FBFBFBFRLR +FBBBBFBRRR +BFFFFFFLRL +BFBFBBBRLR +FBFBBBBRRL +BFBBBFFLRR +BFBFFFFRLL +BBFFFBBLRL +BBFFFFBRRL +BBFBFBBRRL +BFFBBBFLRR +BBBFFFBLLR +BBFFBFBRLL +FBBFFBFRRL +BFFFFFFLLR +FFFFFBBLLR +FBFBBFFLRL +BBFBFBFLLL +BBFBBBBLRR +FFBFFFFLLL +FBFFFBBRRR +BBFBFBBLRL +BFBBBBBRLR +FBBFBBBLRL +BBFBBBFRRL +BBFBFFFLRL +FFBFFFFRLR +FFFFBFFLLR +FBFBBBBLLR +BFBBFBFLLR +FBFFBBFRLR +BFFFBFBLLL +FBFBBBBLRR +BBFBFFFRRL +FBFBBBFLRL +BFFBBFBLLL +BFFBBBBRLR +FBBBFBBLRL +BFBBBFFRLL +BFBBBFBLRR +BFBFBBFRRL +BFBBFBFLRR +FBFFBBFLRR +BBBFFBFRLL +BBFBBFBLRL +BBFBFFFLLR +FBBBBBFRLL +FBFBFFFLLL +FFBFBFBLRR +FBBBFFFRRL +FFFFBBFRLR +FFBFBBBLLL +FBBFBFFLLL +BBBFFFBRLL +BFBFBBBLLR +BBFBBFBLLR +FFFFBFFRRL +FBFBBBFRLR +BFFBBFBRRR +BFBFBFFLLL +BFBBBFBRRR +FBFFBBBRLR +BFBBFFBRLR +BBFBBFFLLR +FFBBFBFRRR +BBFFFFFRRL +FBBFBBBLLR +BBBFFFFRLL +FBFFBFBRRL +BFFFFFFRLL +FBBBBBFRLR +FBBBBBBLLL +BFFFFFBLLR +BBBFFBFLRR +BFFFFBBRLL +BFBBFFFLRL +BBFBBBBRLR +FBFFBBBRRL +BBFFBFFLLR +BFFFBBBRLR +BFBBFBBLRR +BBBFBFFRLL +FBFFFFBRRR +BFBBBFFLRL +FBBFFFFRLL +FFBBFBBLLR +BFFBFFFRRR +BFBFFBBLRL +FBFBBBFLLL +FBBFFBBLLR +FBBBFBBRLL +FBFFFFBRLL +FBFBBFBRRR +FFBFFBBRRR +FBBBFFBRRL +FFBFBBFLLL +FFBFBFBRRR +FFBBFBFRLR +FFBBBBFRRL +FBBFFBFLLR +FBBFBFBLRL +FFBBBFFRRR +FFBFBFFLLR +BBFFBFBRRR +BFFBBBBRRL +FFFFFBFRRL +FBFFBFFLRL +FBBBFBFRLL +FFBBBFBLRR +FFFBFFBLLR +BFFBFBFRLL +FFFBFBBRRL +BFFBFFFRLL +FBBBFFBRLR +FFFBFBBRRR +BBFBFFFRLL +BBFFBFFLRR +BFFBFBFRRL +FFFBFFBLRL +BBBFFBFLRL +BFFBFBBLLR +FFBFBFBLLR +FFFBFBFRRR +FFBBFFBLRL +BBFFBBFLLR +FFBBFBBRLL +FFBBBBFRLR +FFFFBFBLRR +FFBFBFFLRR +BFBBBBBLRR +FBBFBFFLRL +FFFFFFBLRR +BFBBBBFLRL +BBBFFBBLLR +BFFFBBFRRL +FFFFBBBRRL +FBFFFBFLRL +BBFBBBBLLL +BFBBBFFRLR +BFFBBBBLLL +BFFFFFBRLL +BBFBBBBRRL +BFBFBBBLRR +FBFBBBFRRL +BFBFFFBRLL +BFFBBFBRRL +FBBBBFBLRR +BFBBFFBLRL +FFFFFFFRRL +BFBFBBBRRL +BFBBFBBRRL +FFBFBFFRRR +FFBBFFBRRR +FFFBBBBLLR +FBBFBFBLLR +BBFFFBBLLR +FFFBBBFLLL +FFFBBFFRRL +FFFBBFFRRR +FFBBFFFLRL +FBFBBFBLRR +BFFBBFBRLL +FFBBFBFLRL +FFFBBBFRLR +BBFBBFBRLL +FBFBBFFRRR +BFFBBFFLRL +BBFFBFFRRR +BBFBBBFLRR +FFFBBBFRRL +BBFFBFFRRL +FFBFBBFRRR +BBFFFBBRLR +FFFFBBFLLR +FFFFFFBLRL +BBFBFFFRRR +BFBFFFBLLR +FBFFFFBLLL +FBBBBFFRRR +BFFFBBFLRR +FFBBFBBRLR +BFFFBFFRRL +BBFBFFBLLL +FBBFBFFRLL +BFBFFBBRRL +BFFBBBFLLL +FBFBFBFRRR +BBFFBFFLLL +BFBFBBFLLR +BBFBFBFLRR +BFBBFBBLLR +FBBBFBBRLR +BFFFBBBLLL +BFBBBFBLRL +BBBFFBFRRL +FFFFFFBLLR +BFFFBBBLLR +BFBBBBFLLL +BBFBFBBLRR +FBBFBBBLLL +BBFFBFFRLR +FFFBBBBLRR +BBBFFFFRRR +BFBBBBFRRL +BBBFBFFLRR +BFBBBBFLLR +BFFBBBFLRL +BBFBBBFRLL +FFFFFBFRRR +BBBFBFFLLL +BFFFBBFLLL +BFFBFFFLLL +FFBFFBFLLL +BBFBFBFRLR +FFBBFBFRRL +BBFBFFBLRL +FBBFFBBRRL +BFFBFBFLLR +BFBFBFFLLR +BBBFFBBLRR +FBBBBBBLRL +FFBBBFBLRL +FFBFFBBRLR +BBBFFBBRRL +BFBBFBBLLL +FBFFBFBRLL +BFBBFBFLLL +BFFFBFFLLL +FBFFFBBRLR +BBBFFFBLRR +BBFFBBFRRR +BFFBBFFLRR +BFBFFFFRRL +FFFFFBFRLL +FBFBBBBRLL +FBFBFBBLLL +FFFFBFFRRR +FFBFFFFRRR +FBFFFBBLRR +FFFFBFBRLR +BFBFBBBLRL +FBBFFFFLLR +BFFBFBBLRL +FBBFBFBRRL +BBFFBFFRLL +BBFFFBFLRL +FFFBBBFRRR +BBBFFBBRRR +BFFBBBBRLL +BBFFFBBRRL +BFBFFBBLLR +FFBBBFFLLL +BFBBBBFRLL +FFBBFFFRRL +FBBBFFBLRL +BFFBFBFRLR +BBFBFFBRRL +FBBBBBBRLL +FBBBBBFRRR +BFFBBFFRLL +BBFFFFFLLL +BBBFFBBRLL +FFFBFFBLLL +FFFBFFBRRR +FFBFBBBRLR +FFFFFFBRLR +FBFFFBBRRL +BFFFFBFLLR +BFBFBBFRRR +FBBBFBBRRR +BFBFFFFLLL +BBFBBFBLRR +BFBFBBFLRR +FFFFFBBLRL +FBBFFFBRRR +FFBBFBBRRL +BFFBBBBLRR +BBFBBBFLRL +FBFFBBFLRL +BBBFFFBRRR +BBFBFBFRLL +BFBFFBFRLR +BFBFFFFLRL +BBFBBBFLLR +BFFBBBFRLR +BFBBBBBRRL +BFBFFBFRLL +BBFFFBBLLL +FBBBBFBRRL +FFBFFFFLRL +FFBBBFFLRL +FBBBFFFRLR diff --git a/input/2020/day6.txt b/input/2020/day6.txt new file mode 100644 index 0000000..07c4388 --- /dev/null +++ b/input/2020/day6.txt @@ -0,0 +1,2201 @@ +necytxmlfhsu +uecosjvlhpmk + +mnslbuziphawkxyg +whpmnesikaglzb + +kaw +akw + +qurg +hrqug +qrgu +gruq + +sczomkv +zejkhvslmucbwdo +pxsianovzcmk +tcokmvsyz +ozskvimcr + +tfzajkxngwsqrbleic +tijoqnerxsplwzgabkfc +ogkezbiwqtaxrscljfn +xsqauezwnjckbtgiryfdml + +piz +zip + +tlp +npl +lpt + +idbnxuclqgw +sxfdnlatmbhcowigj +plzgbwdqkcinx +ydxinwgcblr + +nbuxjwhsrlekfyzpq +kecyiurjfvqpbxhzsn +nkxfhpbsuyrqjezom +tinlhkbjsuydrqpzexf +pnzraelgquxhydsbjkf + +obvmw +eoczsqun + +nhdxqwk +dnzmlxwhkapq +whxqdnk + +jnqdabgc +nacqdbgj + +buyskiwz +uazbkwys + +mbfxswpli +uswalhxz +xnq +tdcrjgoyekv + +fancdpkmtuqy +zdmenqjpaxftuy + +jkul +d +o + +vhpoxgqsrtce +hgopxeqcdrstv +xcvrqoetpsgh + +gekpzayfux +pyegazxukf +pkxaezhgyfu +fegypukaxz +zxpyefugka + +yrpfd +ydsh + +smjqcafnug +mnicqsu + +tkxi +ixakt +tfncxkmi + +kedibluzopjhagvtxf +afiklbvtjeoudhgpzx +lavbxpjzgedktoifuh +tbgpaxjqeoifvklhzud +zghidtfplxbvkoueja + +gtvnqyrmf +hogpb + +cnelsqwj +atyimdbvfxuozkg + +lgybpaeztvhrxducjiqosmnwk +ivpaygxweszductombhljrqk + +grli +lrig +sjglri +girl +rigl + +qnwmxjbpecoyztufidhsg +ynqdiwhmusgtebjfzxcpo + +luasrtmfkgywv +vgskmufywrat + +ceyux +ycux + +nurijfsovkbxdp +ayqclmthgzwe + +xeqjdhsubiovwrg +gobdjqwvusehrx +weqjgvhosudrbx +ngdubsvqxejrhow + +ywdfqpxekujbovr +yujfdoqbkxrepvw +owfkudjbvyrxqep +oqjvedypxukwbrf +xufwdpebyjrqokv + +csujqndzmw +wznscqmjud +cqpwjzmunda +wjumnzcqd + +dhsow +ohswd +wsnogh + +cxfltiq +ixztfq +gtfqiux +jtqfxi +xiftzq + +tr +rt +rt + +pnuztcbegwiksd +cuewibkptdnm +nvqdpcjxekiwtauhofb +pbytreinuwdkc + +y +y +hejq + +rvmwqn +wvrmq + +knxmwecsjlrft +hnmwzaqt +dmywnitg +tmwvquonh +bwqvtmnh + +e +e +e + +qjtywgdlek +nhifs +zvxinh + +nzhroemi +dzruoegimh +emzoirh + +hpfkraltbxg +gazxlmphrt + +jyhugbxqz +zbnox +epdilfaw + +vmr +vsfm +fmvsr +mnvckiaqy + +zegpfuwtkrnoqdh +eorznfkgpduth +tkfpzhnredguo + +zmqkwxipctney +ncwzeqpmkiytx +yptienwzxkcqm +yeqwcpxtkzmin + +csbdyzl +ejoiwtzqabm +lzbkup +zbvprxf + +wvpshngbmiftuzrxoyde +szobihvwpdtylqerc +phbdzoikvtajyesrw + +ymuflnrxspqvkihbe +eymxrhlfnqksuivbp + +rktwzd +wtdkzir +wkmaziqdrt +togpzwdkr + +uwiazbylcpojst +lcyibajuptwzso + +dtoqbcxhlyrpfwjnkasugvm +wunkfstmcjhqxliogrdvpy + +wpnk +hdpkwuftjymv +cpkownz +kpwz +rqpwnk + +tfplznqcju +puqlsnzfjtv +jqtfpzlun +ntqpczjflu + +ozalwumpqv +ztheoalrwsciyk + +wyiqbsr +bysqwri +yrbswiq +iqwrsyb +iwbrysq + +elnroc +zmjlre +vhelbru +jyhruezflvk + +ftyceboh +ofybh + +jvlbdm +noakrg + +dokjncqauebfpmszvtl +suebonpdjmflaqctkvz +dtjzmcblsvokpunaefq +tjzmeqkafluvpbconsd + +qhrmvegsicnyupf +uifknverhsg +izlrvgefndjwasuh + +syxvtjwfucilqogmnpk +jwkytpqofgimvcsnlxu +dwhglcxzoqnmjfkuiyvpst +ygwntxipqlmvkufcsoj + +hdnqaburow +hqwadmbocsgue +bwoqtuadh +adqhbwuo + +dzfohqe +ehfqzod +fdzhoqe +hdofzeq + +sxmkrghyvlwzbc +yhkmwzxbgsvlc + +qdumkytwlfsrja +drfqukzymilsjaw +jkwqumylsardf + +pcvs +prvc +hmbpvc +svrpzc + +epkjyc +jerpoy +gjpye +abxepuyj +ejyopc + +ohe +gheo +eoh +ofehy + +klhziowmjpyfubdsaqtgvrcn +aytbormdiksnqpzhcfvulgjw +lhmvkafdrscjgwnyiuptqobz + +vcrqpdxljnmgusie +cgdwmipluoe + +hqibentfmxyszljow +msozdjnibrfytxqhle +imlyxwehznjsbft +ysifkzbljphuxcmenvt + +vjhdmkrpecniafgqlstxyzb +zxjrkebfvcwyqihlsmpgtd +xrfzidgthsbklmveypqcj +vjxytzgdlbefsirkcmpqh + +dyxrwbngpijkt +xtwkdipaygjr +iklrmzwpjxgdtuye +pdgrxyjkitw +xtirhvwgdkjyp + +zbjdt +jdat +shouqjtxcd + +klarpuiv +iqaxjdps +cpnafbsi + +xfpiourcst +ovfrlutxpb +trgqfxjuop +rsktucfpox +rtufoqpx + +g +g +g + +nfutbyvj +umvwyi + +tjniwlydzqpsxbkcmugf +utpmixqdvzbfcwgljs + +wetypdlnxm +cfavwyzji +mywgu +lyorqkbw +whdeyxp + +qsbnwozepvhkmaxdrt +qmsopwtaznxfkehdyrv +xnvhwrzpemkqdtsoa +ituvkrhmdegazwsobnxpq + +fxhwdio +hofdxi +hivztfonxdg +fhkoidx + +ja +jca +ajzxt +ahjy +tajc + +epan +pcn +udn + +mfowepjdlnkags +oakwgflnp +pnlzgoawfk +kfgrowlnap + +uw +aimwo +wzrhcjeq +wtf +w + +x +tvx +x + +tigsjdufrwomv +vjrstigqudohwkm +visrjodutwbmg + +ety +exatp +hicfzqnb +uvejo + +oqlgmk +kgvqxd +jzhgkpdqy +ikegfwatqub +nlogqkz + +sl +q + +rkpew +eqrwk +rakwe + +r +r +r +rb + +u +pua + +pjmhtvd +drjnpuvib +djsplvy +dpvj + +caugyqs +hxwyqst +sougylqre + +krfshpzjmgav +uwrqidcotlbxhj + +mzivctbfjgwq +lsomkypgajiq + +ikoamrpc +kmociarp +brkmpiwycoa +itmckrodpa +kmipacro + +htbpcdqx +ctpbxdq + +gpduzcoiyxhleqrknbaw +nirehbulapcoxkzwdy +icuzyxopwhkalendrb +aokdrxhlcebpyiuwnz + +yzlvptdaubjerkh +iyaoltghebpndkjszr +kqxjtldzpbcyawh +dbjtlavzmfhkyp + +vg +sv + +cdiaynroehqw +cqtaridyohewn +dciornehwayq +rwhnoaeqicdy +wqroadniechy + +ivstkj +vgciqk +qkivg +vkgi + +fp +pf +pf +fp +fp + +xidyqnk +jbicfant +zabfhin + +oqtys +stqyo +syqot +yostq +boqytws + +gmnqxaictud +tucidaxqnmg +pgtquxidcnma +iagdtcfmquxn + +yfhxgw +rgn +nsog + +wndrqktbmfa +fwqadkrtbnm +mabfntkqword +qbwntakrmdf + +elanoudxhbzfrtvci +ztalefiodxrubvckhn +ulvabcnthpdzxoifer + +omdrvepliwafhjynbscu +mblrxjsfahocwnvyu +umcjlsowatvnfybhr +uahvcnbwlmsjzfoyr + +n +tn +n + +grk +rgk +krg +gkr +rgkhv + +stmlnek +pgsltne + +alcztk +bctvk +khcgtb + +nsgevcthrpykbwfoizda +khneritgszvbfycaowdp +ivybwzeaogdsrnfctphk + +e +e +e + +cxkzdbgiqyawnm +afyvkbeirtjowmcl + +omb +p + +lnhwcoiyafs +soihnyxqfc +ohncjyifsq + +o +o +om +oxqnsd +oaj + +okucjhiq +xpgwcnqjiomyfluk +irhoukdsbjqc + +uolgz +nglczu +zlngu +zmhlgvjru + +mhdapszf +anmfwdvkc +dpamf + +aqleivtyzsogjc +syvbgxqpdflezoac +ilvzqsjaegokyc + +zxndhja +haxzd +xhazd + +mo +om +mo +mo + +vfxep +xfepv +xevpf +vexfp +pevfx + +mrtkehqnjxizgp +kbunrqytcmes + +nz +ipneu + +bznteo +tbzeoqwp +olftzbpk +grzvityxudohjma + +xg +rg + +rdu +urvd +rud +rzud + +somnbutz +tuosnmb +ntomsbu + +fxsvrzqntbueoyp +eqzsvxyunbroptf +zvypnrxfsqebuot +zrosbxeqpunvfty +zprtfvsnbquexoy + +qwzknfvl +funqlwkj +nqkwflz +fgxlkwzqn + +rzqihd +rbz +zr +uzer +rbz + +utrq +osa +pm + +zgdci +brhu + +bxvymlzqkpha +vmhlakpyxq +ypxvqkmhal +xhvpymaqkl +aplqvkhmyx + +sjntbvyogeplwzu +rbjqiefhapxodwk + +frlsoptqwbc +ljrzxqntfom + +zlhvjamtpfonk +lcokjzdhmfvnp +siohzynkmbjvlrf + +osvgwnticelpzm +jvswetpozlcg + +npmgrvysfj +nvqxrjfsgmp +vofthkcjsblpmudizwr + +oiev +lmeiov +oiezyv +uievodkac + +iforupqjzykdtc +yqfhdcxvtopz +tzqpfdycgo +ceyqfozvtpd +dpxqflohzyatc + +srz +zsrt +strz +xzs +sz + +dgo +odg +ogd +dog +qogd + +gotwqhick +okhqtgicw +gsouwitkjcqh +hctgioqwk +tkghocwiq + +mfnziwvxtlpubqryojasd +mzojuctvnbriypwflskqda +pmuavqjifnlhrtbyzwods + +ozj +joz +zjo +jzo + +jzwbhrscm +rzmhjctb +zbrhcmj + +sucgimtr +myliojcrsg +ipcsegxrmv + +znhvi +hvin +wosganie + +wptoqxmafhg +awqfhgcozmtx + +azbqlviyrwjc +ybxcrawv + +qa +vcuwbfgsl +hkraj + +biglkjtpoqs +zvxcfumeywrhand + +ske +s +sp +hs + +n +yn +n +n +n + +lrvsmxzkgi +zgrmkdsxl +lzgmpakrs +wgqtrkmsfz +nirmkugzds + +crewvjdqsplkibthxz +wxjmtpirhalqsckbdz + +iecxrbplho +xhrpibovlce +brxlgchopei +cbhioprexln +lchxirebop + +f +f +q + +nxqkrhdi +pkhdrquxn +ynqdlxkh +xghkndq + +wvknrdjx +vknxrwdm +kfvicpwndb + +rcqwlutsanpdz +yoxenmkvbjf + +izqsa +sqzai +zqsai +osiazq +izqsa + +ysokhbpzcqanmdifw +kdlowyusmqhbjxci +hibkmzocndqswy + +yjwd +bgas +yj +k + +tzruq +uorz +zckrvux + +rjn +nrj +nrj +jrn +njr + +ecu +pzus +wokxu +ruw +twu + +fcnajztduyripl +chmpkvlynsxrauobji + +cwfgtjre +ejwufr +frwje +newvryfjbhq +iwjextrf + +ltqapiwhzfeoncxdg +hndclgoxeiwtpqfz +cwnpdogxteilfqhz + +uerinxhsygpbzcdvfmo +lxeihducozgqnrymb +edmugnyxifoczrbha +ucezhnrsdybmiotgx + +xuvfhjeyi +ztcgaqs + +yxrospmijwvcdb +yjpbrcosuv + +viuhdrgnlak +lniaruvkdgh +khrgdnuiavl + +qfzxb +gfqx + +k +nzyo +kcj + +bmi +bmi +imb +imb +ubmi + +pl +pl +pl +lp + +x +v +x + +hgwtocs +gdctwhoi +iczwfgtoxh + +wrcjdaqm +wsrlog +jrnqmcw + +ouhmpnyskxcqafidbjvgt +dnimvbpytfsoagucjx +jpctsmuxiaovyqnfdbg +gzbvfwmojuyxsrdtpcna +yxfolphstnabcmuvjgd + +nlrdxe +ceksxuhazmjo +ywxedfgqtpr + +ckuwoghtaxrledvzms +mtksozduwvrehxclag +xwvcusrmlazoetkdgh +regwvshxkdzuctomal + +khsnymbpjz +hzknspmbj + +zqc +kpgsjrqxiyd +wtbuhoq +qwc +eq + +ljewzy +qlwjy +wzljy +lwyj +ljwy + +vpodmhni +bvryknfg +jcutez + +wedfcoh +wigfnjkaoz +exwoqfm +pfuohsw + +adyzjwgqxv +qjwvxzagyd + +cazpofbyd +nodypfbcam + +ukvrcslyqzamhteowdfibx +ktrgqpmnawdycsivhzlbefx +fxdabuylcveksjwrmzqhtio + +xyb +xesy +xdqcy +yex +xy + +hotd +odhzqt +othd +htod + +hvkc +lzei +asw +a +d + +q +q +q +q +q + +a +a +a + +suqbvedipgzcjykfmaxno +jzfudeoxikpbvmgynsha +iswkepmodzvfgxnylujba + +xpqjonkzlrfhtyw +fjqksrlozypwnmxth +pkrohjnxlfzyqtw + +pxuhsc +hcxsnu +hxcse +cxhws +hcrsex + +iglfosahy +hizgfalodbs +lgfoiahs +gsfalhyio + +xrgzwbdnohfeijacsmltqp +djpgqrimtwcafsxnlebzoh + +qlrn +qrn +qrn +qrn + +xhbiakuzcjm +nfpykow +klfs + +lcubkpfhnomgwyarjetqd +wtcrgofdnlpbaykquevhj + +bdqusvnyetklmwizcopxjr +drbxlptyeqcvjwiusmzokn +oqcjzvuwslkpedbxmrntyi +jvlnxtdpkusyczbeomqirw +wltriuqnpzcxbysvojdmek + +tyeorbzjdxpqn +oprlqdnwbzyx +brnydoqzxp + +bupvcrylqazehoknjtf +aqfroczbylpvuejk +ubqvelyfrzoxcpagkj + +awbzx +axuw +ywildxoa +uwxnba + +mjfvro +wmrfjov +ojvmursf + +zwxouqy +ouzyw + +dsxf +sfdti +syrfd + +zmibfjk +kimbz + +nebq +beqn +eqnb +bqnpe + +avtnckldjpeys +scjtklpdneyav +kytncdpsvaelj +tkpacjysdnvle +dycsvtjplenak + +mkyojv +biwro +botsx + +owxyu +wyuxo +yxwuo + +qgjplcvo +vgjqocpl +ojvlcpgq + +xczvkuohisrfqbagp +prbeilfzognvqws +voitfqpgjmrzsb +rvlfdoqigsbpz +ipqogbrzfmsv + +j +s +st +t +pzde + +kuwbthejxcfrzgosmn +xwcukhrtsgzf +tkfcguxwshrz +hxukfzgdwsrqict +zwucgkfqhvxtrs + +wvthikzpgrjaf +swdnemkqobcyx + +lewoquaprbkxyj +xpelwoaksubcrhqd +gbrxmluktiwnaopqe +epxuyczokafblwjrq + +mcyepsvwxr +bhe +nqeztgd +uaehil + +tq +be +e + +duqgair +dfrwuiqga +qaugidr + +hmofng +hgnomf +mofghn +gmotfhn + +ewhblqnsmjict +whmbxvpjs +ufzyaogdkr + +jqpynazsfvklied +sjilykvqza +izsvjlqayk +qiksvzlajy + +vbps +vbstp +evnigorks +vbst +jslv + +qgdzylwkbfou +jbwygulq +qwhxrugpeb +giqdfvbwu + +jubto +aeuvgdpx +unl +yorqui +uqm + +ic +kci +a +i +gyfe + +tjxp +xtj +xjt + +ldspeai +eapidul +peiadl +ipelad + +oymwvfriux +moxuywvfir +rmvxwoujifyb +fpvwdumgyroxzi + +mcplvnkgjfz +idszwngkfcvpl +njzfklgcpvo +fcvokpnlzg + +xdnsilr +irnlsx + +bndvimefz +atopdu +xhswykcqgrjl + +kvlorsye + +vsdoq +dvos +vodjs + +bxczyfeajkmloi +jcimfkaloybxze +ceijaokfzyxmlb +feymoacbjxikzl +kcxmiebzyaoljf + +lo +ol + +etxkfsgjlqoy +fgshieyj +esywfgj +gwrjsyepf + +jtzlgakxins +gqlznxfabskijp +ikaxgsnzljh +lgaizhkjxns +hgaznkjxtlis + +urhjiycw +rhycisw +zrwihkcy + +xc +cvx +cx +cxgl + +audxneqrchg +efkmodwqplrzsiyb + +g +x +x + +ziuplaqo +czqtihuw +zufiq +nqzubpixak + +cibdku +dbckiu +kdciub + +eshpjzgtwrka +tgwpafmsjkrehz +sekbwtnxjhpzrag + +dj +dm +dj + +trqkdpwoxjfyg +csu +ancv +lui +ebhmaz + +ljbvexnhgwfs +hfjbxneyilwgu +znejqblcdhfgwx + +b +b +b +b +b + +idxrcyjegnu +lrhvskceg +rozwmgafbce + +gzasrwjlukomvdxhbpc +cahmgzurlvpwxbdjs +uxjzsbgmdlchvprwa +hramvdjxslubpzgcw + +gw +wge + +fpgdzy +wpfdbz +zpfahde +lfdpszcorx +zfdgbqpha + +gfuclekqavitdxr +euwkvdirqtcxa +riuxvaqkcdte + +eqaphotimfdrukcgwbyx +dxtowkygamibqcrfeuhp +oiutpbavhdyqergfcmxws +ahcteowdfrkugpibqjymx + +pmixjle +uxljemp +lkpsej + +mzqcwxuo +xoucwzmq +xcumzqsow +zcuqxmwo + +wt +wt + +tyrajn +hdtgroynjae +jrnyat + +uqifnlv +iqnevl +vqienl +navciql + +qjxpshtuzbmfnvogcalw +skvzqthufxcjeagrmdiwlyb + +lvaftw +vkfaywtl +lfvawtq + +wpusqdfkybg +mghtdxkpsur +dsgxhumpk +jmdkpzrsixug + +qcbalvykixze +fmrhcsadlnio +cpautjihl +clgainupm +ilcaft + +pklutwg +gdpkrl +lrpkg + +wbup +bygfurw +ubw + +xsoqjceyhunvat +jshgokqucxvlyn + +pyk +pyk + +l +s + +m +m +hm + +msultwhivz +vzitlhwmus +htsmluvzwi +ihszwmvult +iwthzsumvl + +wlohkegqpb +jzguytqrncd +igqvesfa + +h +hgy + +xb +x +x +x +x + +ij +ji +hqdl + +k +k +fkswyr +zk + +frvpln +vfcnlpr +vfnrlp +rnpvfl + +ouy +yu +uy +yu +yug + +rhekb +etnxfymlgdwovqzu +csbheji +beca + +vj +nfpv +v +v + +ruvqehmija +mdhjqrayuie +ksqrfgjeihpmlu + +kbsnlqxfrizjauthodp +uxdjbqniholafzrskt +eaokjungrdfshlbtzqix +wjlsbciontzkdqfxhuar +qjlosubzkfitnahrdx + +sbzcefm +zsmb +szmb +mszb +smzb + +xzisbpmc +prihnxstmfzb +klpbmszijxw +vmepbiszxaq +zipmjbxvs + +qjgbnvamedwi +qajzdoksweb + +gtkfqwlzashcen +geiqzsnhkfwctv +esnmhfzgqutpwyk +igselxqndbfwthkz + +obpdyswkvthxgreanmjluq +lahobnkyxtdrqgseuvcj + +pw +wpe +ylp +ep + +owrlgniy +iljkvwxyhopufzsqdc + +wxzgdpt +saxprdtkf +qdxjotpgbwl +xtdhjpl +utdjphxci + +gwkrjnizdxbvc +hfnpygvaw +ygvutnaw + +pecfzghqxturdijsblmk +klsxuqpfhdbctrjgemzi +dtuzljfxhmbgciqkeprs + +iznfycwdrh +zwnrchiydf + +xutwndim +osidj + +knwyjicb +jc +zjgc +cju + +jwtep +hjer +egj + +khwsitfnxyep +iwkpnxeh +wephiklnx +hcigwzkapxremn +nwehmapkxib + +vuqbmineogja +dlrpainmvugj +ravsmgijfcuhynt +awvpiunjmg + +zdcalubhniv +nclhvibudaz +vhcdbuznila + +bzcaorhqflg +jteyvpwsuxdnik + +icr +rvic +cri +ric +ric + +bqikw +ibwqk + +ipxdcvmfulwejyg +nqcelgydaskrxhi + +pkovrgdljyh +vq +ixwv +vsxaczn + +ix +xi +ix + +hkxl +hklx +uxlkcsvgeh +khlyjx +blkxh + +lhgcae +yczfas +conasulj +xgbflezcuayo +mvcidtapr + +iwaepxckbvjnzmqft +pwiancxtmufqsvzj +cpanmiftxjwqzv +mhftvjnxzpowciqa + +ir +rd +ir + +xt +xt +tx +xtk +tx + +rdatjzibwsu +mdsuarwtizjb + +rselwj +wetbjy +pzxqjowe +njtgbvwmei + +qgcazvn +gqsvcnz +vczgqn + +vmufbi +efuinvmq +uicgmkvr +vnmilu +ubvwmix + +lseymvjuidhkoptazcxrw +wnbsukhpjoedczrlavgtmf +scmrptkhdeazojwvquly + +qopb +evwqyl + +syuzojncfrliwap +wnocfplirjzsa +izwrhvftqbdgpcjoasln +ljiznraspxofwc +rzcpanjowslif + +lpebrhxtam +iyuvknwfso + +by +yb + +qshtypdlocawvgjb +xvyrnwfqezshjoka + +xhw +nwhx +hwx +whsex + +xelcghsquwivjydnrzkbfpa +elviwcpnsokhjqubgadxyzfr +dcfqxvneymsutzkrlpgbjiwah + +ghckb +bgh + +rdojuvqncia +nracovyiw +cvryoina +echariovn + +rjmdqahvbplcusigfx +cluaqvsfhmrjbpgidx +gvchlipxjsaufrbqdm +pjdsqmvlcaubfirhxg + +tngbc +btcng +nbgct +bcgnt + +aonpsbqkhwclrmdyuz +mcgubhqdokarzlspnwy +olhybcuasmrdzqwnkp +lkshamocyrdznwuqbp +wlunozascybqprmhkd + +skilqth +qhlts +uslvqt +fqstl +ftshql + +fbtxdirelcsqzu +icsyjfltxdeurq +rueptfdcqylixs +usqtxfdrclei +lwqdvtxeirsfucna + +xphvrbl +bthixl +wqjmohcfxyazlsb +vhluxb + +kbnogjrhe +krbngeohj +hnekjbrog +rkbeognjh +kjrohebng + +z +yzn + +wslprjfqa +regwpyqdksaci + +glmkujvbatqwc +mtubqgclavrjwk +wuqmjlgcabvtk +galuqbvctmkjw +ckblwqujgvmat + +kgrmfstlejw +bdithoauynzpv + +wvyzhfdistmqkrugx +nzlspqermfwjahui +ufqsipwozmhr + +fdsavukrbpcm +zrasokjlvudmpbf +eqvbkfrswpdtumag +dmhkfplvbarnus + +tdorlvb +pvdhiko +omgsjwuavycxe +pziqbovhnf + +f +a +u +u +u + +efg +egf +feg +fge + +wsf +lmcd +f +v +ve + +mibscvfqnhoxty +rxphcsiqbofvnw +uexoibzljkqagcnf + +sbmhgyqvkuoljzwrfnxietca +ocjebltaqwursipnfkmx + +xeh +unxmh + +du +ud +ud +du + +tvzo +vo +ovft +vto +povdq + +r +s +lhibgo +qny +nwk + +cwxfhrgjdsyamtkv +fshogpwdinlrcjexmt +yxvdtzfrsgmcjqwbh + +zil +liz +liz + +iygvphrujkwaxl +ikjyutlxawvgrph +hvuliyrdjakwpxg +rjthkylwipxgvuad +wivxkhlausgpjyr + +vrxkaqzgmsyon +vorxcumswqznyag + +vlhuwzmdq +bsoryk +yeka + +eiqwuz +uvwznpqikr +wluozi +xjbyizufsagdtwm +wzhuic + +wydkjlfzpeqtgxorhmnuci +tuczlfqrdnyxihgjopkwem +tdpylmxcibgkfhjzwerasnou +zelpcrdoygnxjvfmktuhwi +gwmehyiojukcnfxrptzdl + +vcuizfrlhqa +rvizlucafhqj +cviluqfhraz + +wmgu +ve +sgly +fmwx + +ke +ek + +elhq +hqel +qehl +ehql + +hzdfnwxtjysrio +mykgu +vy +kpmaqy +gbeykc + +pfkj +hfkpj +kpfj +pfjk +kpfjd + +z +t +z +t +oxy + +ux +auhzoj +xu +u + +gcaldiph +lhnfapi + +slg +slg +lgs +lgs +sgl + +h +h +h + +qodwxpmskvjbtycuzghfe +pesjgxqzbtdcoyhwmu +ylthszqpuwebodxmgcj +chqjetzxgdyopbwmuls + +fkgtmuyoivdehpjcxsba +agycjmdsfirvkuowtpbhex + +ocaw +msclaw +cwm +jdwceh + +ekfyibdncovguazhjr +jkhgzbaoyidunvfr +vyaihouznrkgjbfd +xghojvrbdnzfuyaki + +jpgqlhvyi +pqihag +hqpig +gupqhi +ghqip + +glatmnqesbiwzkhup +jykuqrbswnmvocx + +ykqwxpjgcshtdbau +dfxqwpgbjcstkyua +xsgatjcbkwdyqup +usqykjpbgxdcwat + +cmevolpwiq +moagpqevltjiw +fmwziqbpuvleko +djvspewmohiql + +mdux +xmkud +xmdu + +vptyrkjxhcmounzgaw +wkmranuoxcjhslzytdigq +mjcazrxkguwfhbtnoy + +e +z +mr +e + +vrqek +kevrq + +wb +vcti +hyar + +e +e + +chqesv +vesqch +eqhvcs + +uae +xzecw +eyl + +bkgftdhvn +nbfkgdtvhj +nhftvgpkdb + +fwxkbouizcyjg +kwfqjgcyxzou +gfkdoytrjpczuwx +gyjvzcxfuowk +mxcjzsnuaefowyhlkg + +itwzbp +yhnafe + +dtnzjkibprafm +fnarjbkiptzdm +njrtpifmkbdaze +qkndmpaufbrjtiwzx + +eknujdxzmytriao +erkujinftzq +eskumatjicdnryz + +lvzhmxewbgnkuorypfai +ibnwkrfogvhaezxumpyl +hvbarmnowygqizujxplkef +hegopvnwrfybamkluxiz + +rdylnbotpv +raugkqfelbnwy + +vk +gnuypkw +kvj +kjh + +uprylxio +luixrp +ruxplki + +u +gmu + +ugbqne +ykvzwr +i + +vcqosrjbuxtl +hovtxlrbcqsu +bequwsltvxco +vxarnqstcbuzlo +cvuxqpobtsjl + +ctviybroekm +cyrtbevimok +tvokrbciyme +ekctbyvmoir +tymcviebokr + +sdmkxgfhjlpyba +puaowzsdqthkle +zwredloshkpca + +fjxo +joxf +fjxo +jfxo +fxoj + +mrqtv +rvqtwfm +rqmnvt +wmrvtq +qrftvm + +qwtjlfobuydncgzheisxr +qwxdlcuhjbnemaorpgfyzist + +zenwdhikljm +nejlmiwzkdh +jndelhwzkbmi +zelhwnijkdm + +jofdgmy +ojqdpbfg +gduojf + +awsgplcxqu +mulxgapdcjqk +acqjhfldpxgu +xluqipvbngact + +scdzqhyfplnx +nxkygdjuzbcqsmvt +zlxsqwnpdcay +czsxnrqyold + +qzvlitw +njapdb +xkbcf +uaogk + +ok +e +iu + +qshidleorzbgjnvpuckyawt +piojqrtzbnaukgwvchlesd +gduvqkcnhioepstrljwbza +qhripvstdjznlbgwuocake +jevrwsibcqlnutgkohdapz + +upcealv +gmpeyv +pve +lpkuevz + +pbtldk +bpqhdk +cibzd + +lk +hs +kx +l + +fkuirx +sy +zgqw +qmv +qv + +gdrtbwcjlhmqk +akdlqzjhctgm +dchqomkjylaftg + +vwal +ficwjzusyom +lw + +z +jyxo +n + +x +x +x +twxs +ox + +jzhaxuflebqwsipgctr +mgawzjihxrpcuesfbqtl +rljqhausvigxtofwczpbe +ifwjsdcbztphlxqrkeuag +hizafygceblrquxwtnsjp + +ioamx +xiaomg +oxami +axoim +amibxo + +dxgwsbmlnyqruckezp +xlurgtqncpwyfbisdkejm + +vflkdqcxbzuwmengty +swdbuexzlqvgmf + +ehsmravbk +ehmvrkadb + +qh +hq +thqx +qh + +uhi +aui +ui +iu +iu + +wlrnmb +yblnpr +bztijfenkola + +y +fgzyvds +yoj +iyp + +ohbiqfxzp +fpqihobx +xhoeiqbfp + +cgfi +figc +fgci +cflgi +cihgfnv + +vytbdxlzuwarjphnogic +gexwbnqfizmhtdjyrcolas + +hdeowrivjq +uzihgmjwxrve +wijeorhlqdsuv +ryeitfhvjw +ejhawvnuir + +siaxlobjmkvcwhernytfugd +rmtfsolejkdxihgvbnwcyua +oxglvkinrcebswamujfhtdy +gwsatohiknljburmdycevxf +cwuzdbgnethrvysmxolfkaji + +m +gm +bhslre + +xonqwkzcfbmtidpyvlsheu +pylzcoxmvqkehdsnftubjwi +nworbkczxutyedsvqfhimpl + +uatwvlgknhrfoqi +nwhbtokfiq +seniqpdzfhxmcotyw +utoiqafwhn +nqtoifwjh + +oxiflw +hflwxo +loxwbf + +mbt +tbm + +ocjflngrdakuypqiwxstzhmvbe +ykdaueiczwglbtrhjqnmsfxovp + +wtlzyrcomasqnjude +owhqdnmkzrpjlsxc +loqdmszxgvrjwcn + +on +x +x + +lbeyqfxkwm +jmqnfxbgwde +oezbufqrtm + +d +y +y +ta + +z +p + +fyx +xfiy +fxyw +xdfcy +fyx + +csjxkozmnl +slomjxkzc + +hqwadymfsbtlxv +kdvbatlfshwqmxy +lyahsxmqfwdtbvz +wxmlyahfdstvqb +tvqdsxfynlhamwb + +ojmvurikheablq +ukidqhvaljobe + +imc +tdkjmp +mi + +eq +eq + +thgulyifqobdwvecmarsjnp +ndlygcmjahefquiswbrptvo + +sjnptmdrlc +uvebzmlodrncp +lmypxkcfrnsd +cnmhdlqxiarwpg + +nzvqlh +hlzvn +lzhnv + +juq +ju +uj + +tjqiucmynvozxh +kmdvwafrxtq +exgqmtv +ftsqxmv +qklbtmxva + +r +r +pj + +pkoy +ypok +kypo +okyp + +f +fl +f +f +f + +snvqdyx +tdsxvnqy +deqynxsv +dnsxqvy + +lzhopfimuretwvd +jqgbvakrds + +zfbocen +mzbnacu + +ezyxtajrv +wzjuxreatv + +mrsejiyuvfz +jkuctbxpoiw + +nyvefxqicbah +brgeyltxvik +kyuvilexbs +ztvixyepb +pxiygvbe + +nadq +nyt + +prmt +ysjqkmocznhda +gmlibeu +bxmvf + +rm +wm +m +m + +wyfjzdlvcgreb +emlxnkpfjav +elijupnfvh + +pybv +bpvy +yrbvp + +zrjkxshpufec +vindgwtqbl + +ngmtqzfcpudhw +tphzgcwnqdfmu +ftzgphnmcudqw +quzpmctfngdwh +gqpdhufwcmtzn + +szfcnb +fczns +fnzcbsg +sznvafck + +arcezgin +egcirazn +gezcrian +icgnraez + +hgqucfnt +gqnukt +qgncut +tuqnhg +unfgqit + +w +setbdgv + +lck +lxk +kcl +kl + +emaqhxorctykufp +tigjzqhv + +mlvow +jqwo +ghksnruxipoac + +hxnpeqt +htzen +nhte +pchtne + +ehovjgfzaql +qhazvjlgeof +kfgljqhavzoe +jvlzfhgoeqa +veolzqfjgah + +bdlitrzuwh +epfmuhgvstibr diff --git a/src/day1.rs b/src/day1.rs new file mode 100644 index 0000000..f1315c5 --- /dev/null +++ b/src/day1.rs @@ -0,0 +1,39 @@ +use aoc_runner_derive::{aoc, aoc_generator}; + +#[aoc_generator(day1)] +pub fn d1_input(input: &str) -> Vec { + let mut entries: Vec = input.split('\n').map(|x| x.parse().unwrap()).collect(); + entries.sort(); + entries +} + +#[aoc(day1, part1)] +pub fn solve_d1_p1(input: &[u64]) -> u64 { + for entry in input { + let needed = 2020 - entry; + if let Ok(idx) = input.binary_search(&needed) { + return entry * input[idx]; + } + } + panic!("not found"); +} + +#[aoc(day1, part2)] +pub fn solve_d1_p2(input: &[u64]) -> Option { + for i in 0..input.len() - 2 { + let entry1 = input[i]; + for j in i + 1..input.len() - 1 { + let entry2 = input[j]; + if entry1 + entry2 > 2020 { + break; + } + for k in j + 1..input.len() { + let entry3 = input[k]; + if entry1 + entry2 + entry3 == 2020 { + return Some(entry1 * entry2 * entry3); + } + } + } + } + return None; +} diff --git a/src/day2.rs b/src/day2.rs new file mode 100644 index 0000000..f9f87e1 --- /dev/null +++ b/src/day2.rs @@ -0,0 +1,53 @@ +use aoc_runner_derive::aoc; + +struct PasswdEntry<'a> { + lower_bound: usize, + upper_bound: usize, + policy_char: u8, + passwd: &'a [u8], +} + +impl<'a> PasswdEntry<'a> { + fn parse(mut input: &'a str) -> Option { + let lb_idx = input.find('-')?; + let lower_bound: usize = (&input[..lb_idx]).parse().ok()?; + input = &input[lb_idx + 1..]; + + let ub_idx = input.find(' ')?; + let upper_bound: usize = (&input[..ub_idx]).parse().ok()?; + input = &input[ub_idx + 1..]; + + let policy_char = input.as_bytes()[0]; + let passwd = &input[3..].as_bytes(); + Some(PasswdEntry { + lower_bound, + upper_bound, + policy_char, + passwd, + }) + } +} + +#[aoc(day2, part1)] +pub fn solve_d2_p1(input: &str) -> usize { + fn line_is_valid(line: &str) -> bool { + let entry = PasswdEntry::parse(line).unwrap(); + let count = entry + .passwd + .iter() + .filter(|&&b| b == entry.policy_char) + .count(); + (count >= entry.lower_bound) && (count <= entry.upper_bound) + } + input.split('\n').filter(|x| line_is_valid(x)).count() +} + +#[aoc(day2, part2)] +pub fn solve_d2_p2(input: &str) -> usize { + fn line_is_valid(line: &str) -> bool { + let entry = PasswdEntry::parse(line).unwrap(); + (entry.passwd[entry.lower_bound - 1] == entry.policy_char) + ^ (entry.passwd[entry.upper_bound - 1] == entry.policy_char) + } + input.split('\n').filter(|x| line_is_valid(x)).count() +} diff --git a/src/day3.rs b/src/day3.rs new file mode 100644 index 0000000..58ba078 --- /dev/null +++ b/src/day3.rs @@ -0,0 +1,101 @@ +use std::convert::TryFrom; + +use aoc_runner_derive::{aoc, aoc_generator}; + +#[derive(Debug)] +pub enum MapSquare { + Open, + Tree, +} + +impl TryFrom for MapSquare { + type Error = u8; + fn try_from(b: u8) -> Result { + Ok(match b { + b'.' => MapSquare::Open, + b'#' => MapSquare::Tree, + unknown => return Err(unknown), + }) + } +} + +#[aoc_generator(day3)] +pub fn d3_input(input: &[u8]) -> Vec> { + input + .split(|&b| b == b'\n') + .map(|line| { + line.iter() + .copied() + .map(|b| MapSquare::try_from(b).unwrap()) + .collect() + }) + .collect() +} + +#[aoc(day3, part1)] +pub fn solve_d3_p1(input: &[Vec]) -> usize { + input + .iter() + .skip(1) + .enumerate() + .map(|(steps_taken, grid_line)| { + let x_coord = (steps_taken + 1) * 3; + match grid_line.iter().cycle().nth(x_coord).unwrap() { + MapSquare::Open => 0, + MapSquare::Tree => 1, + } + }) + .sum() +} + +#[aoc(day3, part2)] +pub fn solve_d3_p2(input: &[Vec]) -> usize { + #[derive(Debug, Clone, Copy)] + struct Step { + x_step: usize, + y_step: usize, + } + + let steps = [ + Step { + x_step: 1, + y_step: 1, + }, + Step { + x_step: 3, + y_step: 1, + }, + Step { + x_step: 5, + y_step: 1, + }, + Step { + x_step: 7, + y_step: 1, + }, + Step { + x_step: 1, + y_step: 2, + }, + ]; + + steps + .iter() + .copied() + .map(|Step { x_step, y_step }| -> usize { + input + .iter() + .skip(y_step) + .step_by(y_step) + .enumerate() + .map(|(num_steps_taken, grid_line)| { + let x_coord = (num_steps_taken + 1) * x_step; + match grid_line.iter().cycle().nth(x_coord).unwrap() { + MapSquare::Open => 0, + MapSquare::Tree => 1, + } + }) + .sum() + }) + .product() +} diff --git a/src/day4.rs b/src/day4.rs new file mode 100644 index 0000000..959a60f --- /dev/null +++ b/src/day4.rs @@ -0,0 +1,190 @@ +use std::str::FromStr; + +use aoc_runner_derive::aoc; + +#[derive(Debug)] +struct BirthYear(u16); +impl FromStr for BirthYear { + type Err = (); + + fn from_str(s: &str) -> Result { + let year = s.parse().map_err(|_| ())?; + if year < 1920 || year > 2002 { + return Err(()); + } + Ok(BirthYear(year)) + } +} + +#[derive(Debug)] +struct IssueYear(u16); +impl FromStr for IssueYear { + type Err = (); + + fn from_str(s: &str) -> Result { + let year = s.parse().map_err(|_| ())?; + if year < 2010 || year > 2020 { + return Err(()); + } + Ok(IssueYear(year)) + } +} + +#[derive(Debug)] +struct ExpYear(u16); +impl FromStr for ExpYear { + type Err = (); + + fn from_str(s: &str) -> Result { + let year = s.parse().map_err(|_| ())?; + if year < 2020 || year > 2030 { + return Err(()); + } + Ok(ExpYear(year)) + } +} + +#[derive(Debug)] +struct HairColor(u32); +impl FromStr for HairColor { + type Err = (); + + fn from_str(s: &str) -> Result { + let hex = s.strip_prefix("#").ok_or(())?; + let hcl = u32::from_str_radix(hex, 16).map_err(|_| ())?; + if hcl > 0xffffff { + return Err(()); + } + Ok(HairColor(hcl)) + } +} + +#[derive(Debug)] +enum Height { + Inches(u8), + Cm(u8), +} +impl FromStr for Height { + type Err = (); + + fn from_str(s: &str) -> Result { + if let Some(cm) = s.strip_suffix("cm") { + let cm: u8 = cm.parse().map_err(|_| ())?; + if cm < 150 || cm > 193 { + return Err(()); + } + Ok(Height::Cm(cm)) + } else if let Some(inches) = s.strip_suffix("in") { + let inches: u8 = inches.parse().map_err(|_| ())?; + if inches < 59 || inches > 76 { + return Err(()); + } + Ok(Height::Inches(inches)) + } else { + Err(()) + } + } +} + +#[derive(Debug)] +enum EyeColor { + Amber, + Blue, + Brown, + Gray, + Green, + Hazel, + Other, +} +impl FromStr for EyeColor { + type Err = (); + + fn from_str(s: &str) -> Result { + Ok(match s { + "amb" => EyeColor::Amber, + "blu" => EyeColor::Blue, + "brn" => EyeColor::Brown, + "gry" => EyeColor::Gray, + "grn" => EyeColor::Green, + "hzl" => EyeColor::Hazel, + "oth" => EyeColor::Other, + _ => return Err(()), + }) + } +} + +#[derive(Debug)] +struct PassportId(u32); +impl FromStr for PassportId { + type Err = (); + + fn from_str(s: &str) -> Result { + if s.len() != 9 { + return Err(()); + } + Ok(PassportId(s.parse().map_err(|_| ())?)) + } +} + +#[derive(Debug)] +pub struct Passport<'a> { + byr: BirthYear, + iyr: IssueYear, + eyr: ExpYear, + hgt: Height, + hcl: HairColor, + ecl: EyeColor, + pid: PassportId, + cid: Option<&'a str>, +} + +impl<'a> Passport<'a> { + fn parse(input: &'a str) -> Option { + fn parse_kv(input: &str) -> Option<(&str, &str)> { + let mut iter = input.split(':'); + let k = iter.next()?; + let v = iter.next()?; + if iter.next().is_some() { + return None; + } + Some((k, v)) + } + + let mut byr = None; + let mut iyr = None; + let mut eyr = None; + let mut hgt = None; + let mut hcl = None; + let mut ecl = None; + let mut pid = None; + let mut cid = None; + for field in input.split_ascii_whitespace() { + match parse_kv(field) { + Some(("byr", value)) => byr = Some(value.parse().ok()?), + Some(("iyr", value)) => iyr = Some(value.parse().ok()?), + Some(("eyr", value)) => eyr = Some(value.parse().ok()?), + Some(("hgt", value)) => hgt = Some(value.parse().ok()?), + Some(("hcl", value)) => hcl = Some(value.parse().ok()?), + Some(("ecl", value)) => ecl = Some(value.parse().ok()?), + Some(("pid", value)) => pid = Some(value.parse().ok()?), + Some(("cid", value)) => cid = Some(value), + _ => return None, + } + } + Some(Passport { + byr: byr?, + iyr: iyr?, + eyr: eyr?, + hgt: hgt?, + hcl: hcl?, + ecl: ecl?, + pid: pid?, + cid, + }) + } +} + +#[aoc(day4, part2)] +pub fn solve_d4_p2(input: &str) -> usize { + input.split("\n\n").filter_map(Passport::parse).count() +} diff --git a/src/day5.rs b/src/day5.rs new file mode 100644 index 0000000..a77a6c2 --- /dev/null +++ b/src/day5.rs @@ -0,0 +1,86 @@ +use aoc_runner_derive::aoc; + +use std::fmt; + +#[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd)] +pub struct SeatId(u16); +impl fmt::Display for SeatId { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + ::fmt(self, f) + } +} + +impl SeatId { + fn parse(input: &[u8]) -> Option { + if input.len() != 10 { + return None; + } + let mut seatid = 0u16; + + for b in &input[..7] { + let value = match b { + b'F' => 0, + b'B' => 1, + _ => return None, + }; + seatid = (seatid << 1) | value; + } + + for b in &input[7..10] { + let value = match b { + b'L' => 0, + b'R' => 1, + _ => return None, + }; + seatid = (seatid << 1) | value; + } + Some(SeatId(seatid)) + } + + fn row(&self) -> u8 { + (self.0 >> 3) as u8 + } + + fn column(&self) -> u8 { + (self.0 & 0b111) as u8 + } +} + +#[aoc(day5, part1)] +pub fn solve_d5_p1(input: &[u8]) -> SeatId { + input + .split(|&b| b == b'\n') + .map(|i| SeatId::parse(i).unwrap()) + .max() + .unwrap() +} + +#[aoc(day5, part2)] +pub fn solve_d5_p2(input: &[u8]) -> SeatId { + #[derive(Debug)] + struct MinMaxSum { + min: u16, + max: u16, + sum: u32, + } + let MinMaxSum { min, max, sum } = input + .split(|&b| b == b'\n') + .map(|i| SeatId::parse(i).unwrap()) + .fold( + MinMaxSum { + min: u16::MAX, + max: 0, + sum: 0, + }, + |MinMaxSum { min, max, sum }, seatid| MinMaxSum { + min: std::cmp::min(min, seatid.0), + max: std::cmp::max(max, seatid.0), + sum: sum + seatid.0 as u32, + }, + ); + let max = max as u32; + let min = min as u32; + let num_seats = max - min + 1; + let expected_sum = (max + min) * num_seats / 2; + SeatId((expected_sum - sum) as u16) +} diff --git a/src/day6.rs b/src/day6.rs new file mode 100644 index 0000000..66fb4dc --- /dev/null +++ b/src/day6.rs @@ -0,0 +1,76 @@ +use std::{iter::FromIterator, ops::BitAnd}; + +use aoc_runner_derive::aoc; + +/// A set that can only contain b'a'..b'z'; +struct AlphabetSet(u32); +impl AlphabetSet { + pub fn new() -> AlphabetSet { + AlphabetSet(0) + } + + pub fn insert(&mut self, b: u8) { + self.0 |= 1 << Self::char_to_bit_index(b); + } + + pub fn len(&self) -> usize { + self.0.count_ones() as usize + } + + fn char_to_bit_index(b: u8) -> usize { + debug_assert!(b >= b'a' && b <= b'z'); + (b as usize - 97) & 0x1f + } +} + +// Do a set intersection with another set. +impl std::ops::BitAndAssign for AlphabetSet { + fn bitand_assign(&mut self, rhs: AlphabetSet) { + self.0 &= rhs.0; + } +} + +impl FromIterator for AlphabetSet { + fn from_iter(iter: I) -> AlphabetSet + where + I: IntoIterator, + { + let mut set = AlphabetSet::new(); + for entry in iter { + set.insert(entry); + } + set + } +} + +#[aoc(day6, part1)] +pub fn solve_d6_p1(input: &str) -> usize { + input + .split("\n\n") + .map(|record| { + record + .split('\n') + .flat_map(|line| line.as_bytes()) + .copied() + .collect::() + .len() + }) + .sum() +} + +#[aoc(day6, part2)] +pub fn solve_d6_p2(input: &str) -> usize { + input + .split("\n\n") + .map(|record| { + let mut line_iter = record + .split('\n') + .map(|line| line.as_bytes().iter().copied().collect::()); + let mut group_set = line_iter.next().unwrap(); + for set in line_iter { + group_set &= set; + } + group_set.len() + }) + .sum() +} diff --git a/src/lib.rs b/src/lib.rs index 0940312..fedaca3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,164 +1,8 @@ -use std::convert::TryFrom; +pub mod day1; +pub mod day2; +pub mod day3; +pub mod day4; +pub mod day5; +pub mod day6; -use aoc_runner_derive::{aoc, aoc_generator, aoc_lib}; - -#[aoc_generator(day1)] -pub fn d1_input(input: &str) -> Vec { - let mut entries: Vec = input.split('\n').map(|x| x.parse().unwrap()).collect(); - entries.sort(); - entries -} - -#[aoc(day1, part1)] -pub fn solve_d1_p1(input: &[u64]) -> u64 { - for entry in input { - let needed = 2020 - entry; - if let Ok(idx) = input.binary_search(&needed) { - return entry * input[idx]; - } - } - panic!("not found"); -} - -#[aoc(day1, part2)] -pub fn solve_d1_p2(input: &[u64]) -> Option { - for i in 0..input.len() - 2 { - let entry1 = input[i]; - for j in i + 1..input.len() - 1 { - let entry2 = input[j]; - if entry1 + entry2 > 2020 { - break; - } - for k in j + 1..input.len() { - let entry3 = input[k]; - if entry1 + entry2 + entry3 == 2020 { - return Some(entry1 * entry2 * entry3); - } - } - } - } - return None; -} - -struct PasswdEntry<'a> { - lower_bound: usize, - upper_bound: usize, - policy_char: u8, - passwd: &'a [u8], -} - -impl<'a> PasswdEntry<'a> { - fn parse(mut input: &'a str) -> Option { - let lb_idx = input.find('-')?; - let lower_bound: usize = (&input[..lb_idx]).parse().ok()?; - input = &input[lb_idx + 1..]; - - let ub_idx = input.find(' ')?; - let upper_bound: usize = (&input[..ub_idx]).parse().ok()?; - input = &input[ub_idx + 1..]; - - let policy_char = input.as_bytes()[0]; - let passwd = &input[3..].as_bytes(); - Some(PasswdEntry { lower_bound, upper_bound, policy_char, passwd }) - } -} - -#[aoc(day2, part1)] -pub fn solve_d2_p1(input: &str) -> usize { - fn line_is_valid(line: &str) -> bool { - let entry = PasswdEntry::parse(line).unwrap(); - let count = entry.passwd.iter().filter(|&&b| b == entry.policy_char).count(); - (count >= entry.lower_bound) && (count <= entry.upper_bound) - } - input.split('\n').filter(|x| line_is_valid(x)).count() -} - -#[aoc(day2, part2)] -pub fn solve_d2_p2(input: &str) -> usize { - fn line_is_valid(line: &str) -> bool { - let entry = PasswdEntry::parse(line).unwrap(); - (entry.passwd[entry.lower_bound - 1] == entry.policy_char) - ^ (entry.passwd[entry.upper_bound - 1] == entry.policy_char) - } - input.split('\n').filter(|x| line_is_valid(x)).count() -} - -#[derive(Debug)] -pub enum MapSquare { - Open, - Tree, -} - -impl TryFrom for MapSquare { - type Error = u8; - fn try_from(b: u8) -> Result { - Ok(match b { - b'.' => MapSquare::Open, - b'#' => MapSquare::Tree, - unknown => return Err(unknown), - }) - } -} - -#[aoc_generator(day3)] -pub fn d3_input(input: &[u8]) -> Vec> { - input - .split(|&b| b == b'\n') - .map(|line| line.iter().copied().map(|b| MapSquare::try_from(b).unwrap()).collect()) - .collect() -} - -#[aoc(day3, part1)] -pub fn solve_d3_p1(input: &[Vec]) -> usize { - input - .iter() - .skip(1) - .enumerate() - .map(|(steps_taken, grid_line)| { - let x_coord = (steps_taken + 1) * 3; - match grid_line.iter().cycle().nth(x_coord).unwrap() { - MapSquare::Open => 0, - MapSquare::Tree => 1, - } - }) - .sum() -} - -#[aoc(day3, part2)] -pub fn solve_d3_p2(input: &[Vec]) -> usize { - #[derive(Debug, Clone, Copy)] - struct Step { - x_step: usize, - y_step: usize, - } - - let steps = [ - Step { x_step: 1, y_step: 1 }, - Step { x_step: 3, y_step: 1 }, - Step { x_step: 5, y_step: 1 }, - Step { x_step: 7, y_step: 1 }, - Step { x_step: 1, y_step: 2 }, - ]; - - steps - .iter() - .copied() - .map(|Step { x_step, y_step }| -> usize { - input - .iter() - .skip(y_step) - .step_by(y_step) - .enumerate() - .map(|(num_steps_taken, grid_line)| { - let x_coord = (num_steps_taken + 1) * x_step; - match grid_line.iter().cycle().nth(x_coord).unwrap() { - MapSquare::Open => 0, - MapSquare::Tree => 1, - } - }) - .sum() - }) - .product() -} - -aoc_lib! { year = 2020 } +aoc_runner_derive::aoc_lib! { year = 2020 }