From e550a8565670b614e527c25f2a9ad7db64d56f72 Mon Sep 17 00:00:00 2001 From: Elis Hirwing Date: Sat, 5 Dec 2020 17:32:30 +0100 Subject: [PATCH] [2020-12-04] Add solutions for day04 --- Makefile | 2 + day04/example.txt | 13 + day04/input.txt | 1104 +++++++++++++++++++++++++++++++++++++++++++++ day04/parse.go | 33 ++ day04/solve1.go | 14 + day04/solve2.go | 50 ++ main.go | 4 + 7 files changed, 1220 insertions(+) create mode 100644 day04/example.txt create mode 100644 day04/input.txt create mode 100644 day04/parse.go create mode 100644 day04/solve1.go create mode 100644 day04/solve2.go diff --git a/Makefile b/Makefile index b3cdd32..5f82e79 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,8 @@ day03: go run main.go day03 input day04: + go run main.go day04 input + day05: day06: day07: diff --git a/day04/example.txt b/day04/example.txt new file mode 100644 index 0000000..0ff208e --- /dev/null +++ b/day04/example.txt @@ -0,0 +1,13 @@ +ecl:gry pid:860033327 eyr:2020 hcl:#fffffd +byr:1937 iyr:2017 cid:147 hgt:183cm + +iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884 +hcl:#cfa07d byr:1929 + +hcl:#ae17e1 iyr:2013 +eyr:2024 +ecl:brn pid:760753108 byr:1931 +hgt:179cm + +hcl:#cfa07d eyr:2025 pid:166559648 +iyr:2011 ecl:brn hgt:59in diff --git a/day04/input.txt b/day04/input.txt new file mode 100644 index 0000000..f27b510 --- /dev/null +++ b/day04/input.txt @@ -0,0 +1,1104 @@ +eyr:2033 +hgt:177cm pid:173cm +ecl:utc byr:2029 hcl:#efcc98 iyr:2023 + +pid:337605855 cid:249 byr:1952 hgt:155cm +ecl:grn iyr:2017 eyr:2026 hcl:#866857 + +cid:242 iyr:2011 pid:953198122 eyr:2029 ecl:blu hcl:#888785 + +hgt:173cm hcl:#341e13 +cid:341 +pid:112086592 +iyr:2012 byr:2011 ecl:amb +eyr:2030 + +pid:790332032 +iyr:2019 +eyr:2023 byr:1969 ecl:brn +hgt:163cm +hcl:#623a2f + +byr:1920 eyr:2023 cid:146 pid:890112986 hgt:171cm hcl:#b6652a iyr:2017 ecl:hzl + +hcl:#c0946f byr:1967 cid:199 ecl:gry +iyr:2012 pid:987409259 hgt:157cm eyr:2021 + +pid:316587303 iyr:2016 eyr:2023 ecl:blu byr:1959 hgt:186cm hcl:#733820 + +hcl:#fffffd hgt:152cm byr:1996 ecl:gry eyr:2024 + +ecl:brn hgt:185cm +pid:648491325 byr:1967 +hcl:#172f67 iyr:2014 +eyr:2028 + +pid:328737320 iyr:2017 hcl:#fffffd hgt:178 +ecl:#35fad5 +byr:1959 + +iyr:2010 byr:1943 eyr:2028 +hgt:178cm hcl:#888785 pid:572750267 + +cid:175 ecl:brn eyr:2026 iyr:2017 +hcl:#5d69b9 byr:1998 pid:289515215 +hgt:151cm + +hgt:182cm +ecl:blu eyr:2028 iyr:2011 hcl:#a97842 pid:758494126 + +iyr:2023 +hgt:174cm hcl:cafc2f +ecl:utc +cid:299 eyr:2026 pid:57963956 + +pid:853993893 ecl:blu hgt:188cm cid:294 hcl:#341e13 byr:1975 +eyr:2027 iyr:2015 + +ecl:amb hgt:70 iyr:2018 pid:241872490 +byr:1962 +eyr:2024 hcl:c5f0c3 + +pid:994754974 eyr:2029 iyr:2017 +cid:137 byr:1966 hcl:#733820 ecl:blu + +ecl:utc +pid:937481632 hgt:190 +eyr:2025 iyr:2027 byr:1949 cid:84 hcl:d3f4f5 + +cid:129 ecl:brn hgt:91 eyr:1932 +iyr:2020 pid:298540404 hcl:#888785 byr:1986 + +pid:416051368 eyr:2020 iyr:2011 +hgt:93 byr:2023 hcl:#efcc98 +ecl:amb + +byr:2010 hgt:181cm +iyr:2020 +eyr:2040 pid:785862801 ecl:#f84ccd + +hgt:152cm iyr:2013 pid:932020343 eyr:2023 ecl:hzl byr:1920 +hcl:#fffffd + +hgt:152cm +iyr:2020 byr:1993 hcl:#18171d pid:120354938 +eyr:2021 ecl:gry + +eyr:2025 byr:1996 +hcl:#623a2f +iyr:2018 ecl:oth cid:177 pid:904738945 hgt:164cm + +pid:45042993 +hgt:193 iyr:2018 byr:2026 eyr:2026 +hcl:#623a2f cid:175 ecl:brn + +byr:1956 ecl:hzl iyr:2020 pid:892810672 hgt:164cm eyr:2021 cid:186 hcl:#efcc98 + +cid:314 hgt:180cm +ecl:amb hcl:#602927 byr:2027 +iyr:1958 +eyr:2020 pid:#b2b732 + +cid:50 +hcl:#a97842 +hgt:155cm pid:667716485 ecl:gry iyr:2014 byr:1995 eyr:2029 + +eyr:2030 +pid:783631610 +hgt:74 +byr:2014 hcl:z iyr:2003 ecl:grt + +ecl:#d4d852 iyr:2029 hcl:z hgt:185in +eyr:2034 pid:#526166 + +iyr:1946 eyr:1957 byr:1941 pid:632690435 ecl:oth hcl:18a37c hgt:59cm + +iyr:2013 +eyr:2026 pid:002380966 cid:95 +hcl:#623a2f byr:1965 ecl:oth + +ecl:gry pid:479214778 hcl:#18171d +byr:1928 cid:98 eyr:2020 iyr:2019 hgt:163cm + +hcl:#bd0f54 cid:225 eyr:2024 hgt:153cm iyr:2020 +byr:1956 pid:048565668 ecl:hzl + +ecl:#5d8b3b hgt:156cm eyr:2029 pid:#3df0cc byr:1967 cid:118 hcl:e23f0f + +pid:437721309 +hcl:#cfa07d hgt:181cm iyr:2019 cid:224 eyr:2028 byr:1946 +ecl:gry + +byr:1962 +eyr:2023 +hgt:182cm +pid:733248003 ecl:blu +iyr:2014 hcl:#efcc98 + +byr:1966 hgt:158cm +eyr:2029 hcl:#602927 iyr:2013 +pid:963663665 + +pid:529595074 byr:1940 eyr:2020 hcl:#c0946f cid:113 iyr:2015 ecl:oth +hgt:191cm + +ecl:hzl +hcl:#a97842 +hgt:157cm eyr:2025 iyr:2015 byr:1978 pid:579525362 + +ecl:oth hcl:#18171d cid:76 iyr:2011 eyr:2021 +byr:1953 hgt:173cm pid:976483712 + +ecl:brn hcl:#fffffd cid:242 pid:588299934 +hgt:69in byr:1947 +iyr:2010 eyr:2030 + +hcl:#fffffd ecl:gry cid:93 +pid:731904973 byr:1939 eyr:2029 iyr:2016 + +pid:96716037 iyr:1938 eyr:2032 +hgt:192 ecl:gmt byr:2029 hcl:02edc5 + +byr:1958 +iyr:2011 eyr:2029 ecl:gry +pid:526931024 +hcl:z +hgt:59cm + +byr:1966 ecl:hzl +pid:378066668 hcl:#c0946f +iyr:2017 eyr:2026 cid:142 hgt:184cm + +pid:1134356373 +iyr:2019 +ecl:grn +hcl:#ceb3a1 byr:1950 +hgt:154in + +hgt:157cm ecl:zzz byr:1976 +pid:5047305958 +iyr:2013 hcl:#341e13 + +eyr:2024 +hcl:#a97842 hgt:179cm pid:543943316 cid:214 ecl:brn +byr:1999 +iyr:2017 + +byr:1983 eyr:2024 hgt:177cm +ecl:hzl +iyr:2013 pid:328883228 hcl:#ceb3a1 + +cid:226 pid:262286178 iyr:2010 ecl:grn byr:1962 eyr:2025 hcl:#efcc98 +hgt:60in + +iyr:2029 ecl:#559ffe hcl:z +cid:156 +byr:2003 +hgt:178 +pid:93994500 + +iyr:2026 hcl:#eda7f3 ecl:amb +byr:1921 eyr:2021 pid:153cm + +byr:1988 +ecl:amb hgt:178cm hcl:#2aea45 +pid:70722502 eyr:2027 iyr:2015 + +pid:555636800 eyr:2020 hgt:182cm iyr:2019 byr:1948 cid:325 +hcl:#733820 + +eyr:1973 +iyr:2024 hcl:z byr:2028 ecl:dne cid:169 +pid:43596015 hgt:170in + +hcl:#b6652a ecl:gry +cid:264 +hgt:178cm iyr:2027 pid:23042405 byr:1947 eyr:2024 + +byr:1989 +pid:266274644 ecl:blu eyr:2023 hcl:#733820 +hgt:192cm iyr:2018 cid:272 + +iyr:2013 hcl:z hgt:73cm byr:2014 pid:192cm ecl:#1627a7 + +pid:816749378 hgt:178cm +hcl:#733820 eyr:2029 +byr:1993 + +hcl:0cacc5 byr:1944 iyr:2028 eyr:2024 hgt:163in pid:74169361 +ecl:dne + +hcl:#ceb3a1 +ecl:grn +eyr:2027 pid:481186415 hgt:176cm cid:325 +byr:1986 + +eyr:2028 hgt:174cm ecl:brn +hcl:#888785 iyr:2015 pid:064161451 byr:1969 + +ecl:brn cid:323 hgt:167 +byr:1993 iyr:1953 +hcl:z eyr:2023 pid:161542750 + +ecl:#895336 eyr:2033 hgt:67cm cid:254 iyr:1967 hcl:z byr:1954 + +ecl:#9dbea3 iyr:2018 eyr:2035 +hgt:183 +pid:747501524 hcl:#fd8515 cid:110 +byr:1997 + +ecl:utc +iyr:2014 hgt:183in byr:2007 eyr:2026 hcl:#cfa07d +cid:334 + +ecl:gry hcl:#b6652a pid:250420128 +eyr:2024 byr:1939 hgt:170cm + +hcl:#18171d eyr:2030 byr:1925 pid:204206116 +iyr:2014 hgt:174cm ecl:hzl + +iyr:2020 hcl:#efcc98 +pid:393444692 +ecl:oth hgt:152cm byr:1957 eyr:2021 + +byr:1973 eyr:2024 iyr:2014 hcl:#602927 +pid:832320186 hgt:166cm ecl:grn + +pid:192524664 hgt:182cm +hcl:#18171d +ecl:oth eyr:2030 byr:1942 iyr:2013 + +hgt:129 byr:2016 hcl:6734a1 ecl:#915282 iyr:1949 cid:130 pid:677408864 eyr:2030 + +eyr:2028 ecl:gry hgt:171cm byr:1960 iyr:2020 pid:688526729 cid:262 hcl:#733820 + +ecl:grn iyr:2019 pid:775867641 hcl:#bf1e29 +byr:1920 hgt:163cm + +eyr:2029 hcl:#866857 +iyr:2024 +pid:170cm byr:1931 +hgt:177cm ecl:hzl cid:312 + +iyr:2019 ecl:#19fef5 pid:2080468234 +eyr:2008 hgt:72 +hcl:e14dfe +byr:1980 cid:272 + +byr:2025 +cid:163 +iyr:2020 pid:758946748 hgt:161cm +ecl:amb eyr:2023 hcl:026d4d + +iyr:2021 cid:109 +eyr:2032 byr:2010 +hcl:#fffffd pid:874586711 ecl:hzl hgt:142 + +eyr:2023 +hcl:z iyr:2019 byr:2013 ecl:#b42611 pid:164cm hgt:60cm + +byr:1935 cid:226 hcl:#602927 ecl:blu pid:700452129 eyr:2029 +iyr:2016 hgt:180cm + +hgt:179cm +pid:181cm +ecl:gry cid:309 +eyr:2029 +hcl:#6b5442 +byr:1987 +iyr:2010 + +ecl:gry byr:1986 hcl:#cce4b8 +pid:101583943 iyr:2010 hgt:65cm eyr:2021 + +cid:168 +pid:#8556c9 hcl:413944 eyr:2036 byr:2013 iyr:2012 +ecl:#66dc1c hgt:59cm + +eyr:1984 byr:2017 pid:#cbc84e hcl:z +cid:189 iyr:2021 ecl:blu +hgt:152cm + +byr:1993 hcl:#004c11 eyr:2026 +iyr:2010 +ecl:brn hgt:188cm +pid:889959941 + +hgt:172 byr:2008 eyr:2030 iyr:1959 +ecl:oth hcl:#a8ebbb + +iyr:2013 hcl:#8f97b1 hgt:182cm ecl:grn cid:89 +eyr:2029 +byr:1974 + +eyr:2025 hcl:#6b5442 pid:222418968 byr:1951 cid:105 ecl:hzl iyr:2011 hgt:181cm + +iyr:2017 +ecl:brn pid:481721303 hgt:190cm +eyr:2037 byr:1990 hcl:#ceb3a1 + +hcl:z +pid:85905429 +byr:1923 cid:260 +eyr:2031 ecl:gry +iyr:2022 hgt:180cm + +hcl:#fffffd hgt:76cm +ecl:grn +pid:39254112 byr:2010 iyr:1961 eyr:2028 + +ecl:brn iyr:2016 +eyr:2027 hcl:#efcc98 pid:753268957 hgt:60in byr:1943 + +ecl:oth +pid:087762106 hgt:190cm +byr:1974 cid:171 hcl:#c63f21 +eyr:2020 + +ecl:#8c1b6c +byr:1962 iyr:2007 pid:106672731 +hgt:172in cid:239 eyr:2026 hcl:#b6652a + +hgt:170cm eyr:2021 +cid:219 hcl:#a97842 pid:040224991 byr:1950 iyr:2018 + +byr:2029 +eyr:2036 cid:309 +iyr:2016 hgt:167cm hcl:#fffffd +ecl:#1ab23b + +iyr:2013 ecl:gry eyr:2020 pid:947828194 +hcl:#18171d hgt:163cm byr:1971 + +hcl:#fffffd iyr:2011 +pid:150105713 eyr:2029 +hgt:168cm byr:1925 ecl:hzl + +cid:253 +hcl:#341e13 +eyr:2025 hgt:184cm +pid:651786830 byr:1936 iyr:2013 +ecl:hzl + +pid:7328393469 +hgt:175cm ecl:gry iyr:2012 byr:1963 hcl:#623a2f eyr:2026 + +eyr:2029 pid:669044398 hgt:161cm hcl:#cfa07d ecl:gry iyr:2018 + +pid:920006222 byr:1941 ecl:grn eyr:2027 cid:87 hcl:#733820 +iyr:2018 hgt:171cm + +byr:1964 hgt:157cm hcl:#a97842 +pid:756972774 eyr:2024 iyr:2013 ecl:gry + +iyr:2010 cid:279 +hgt:189cm byr:1959 +ecl:brn eyr:2022 pid:937686753 hcl:#602927 + +iyr:2013 +eyr:2027 cid:223 pid:145547438 +hcl:#6e6f47 hgt:165cm ecl:amb + +byr:2009 +ecl:oth hcl:#623a2f +hgt:166cm eyr:2034 pid:120339592 +iyr:2012 + +eyr:2026 hcl:z byr:2018 pid:7809314464 iyr:2012 hgt:158cm ecl:hzl + +cid:291 hgt:168 +ecl:#7734de iyr:2021 hcl:5b4ef1 pid:3381158334 eyr:1956 byr:2003 + +iyr:2015 hcl:#cfa07d +byr:1971 eyr:2023 +ecl:oth pid:560419063 cid:155 hgt:170cm + +eyr:2021 hgt:189cm iyr:2014 hcl:#6b5442 ecl:brn cid:287 +byr:1951 pid:936881112 + +iyr:2013 +eyr:2020 ecl:hzl hgt:150cm cid:210 +pid:032458640 byr:1920 hcl:#6b5442 + +hgt:180cm hcl:#cfa07d ecl:grn eyr:2027 +pid:140859202 iyr:2014 cid:232 +byr:1932 + +pid:68300657 byr:1988 hgt:181cm +ecl:hzl iyr:1951 hcl:e18469 +eyr:2013 + +pid:157572693 hgt:185cm +hcl:#065fe8 ecl:gry eyr:2027 +iyr:2014 + +eyr:2029 hgt:164cm hcl:z ecl:grn cid:270 iyr:2019 byr:1993 pid:338068138 + +iyr:2016 cid:131 byr:1990 hcl:#7d3b0c ecl:grn pid:066023454 hgt:154cm +eyr:2025 + +iyr:2019 eyr:2024 hgt:174cm +pid:855792798 byr:1920 hcl:#cfa07d + +eyr:2020 +hgt:74in iyr:2013 ecl:amb +byr:1920 hcl:3f6214 +pid:957164804 + +pid:756767000 hcl:#220540 byr:1922 hgt:172cm +eyr:2023 cid:305 ecl:hzl iyr:2019 + +hgt:193in eyr:2025 pid:117240526 iyr:2017 hcl:#888785 byr:1928 ecl:blu + +byr:1942 +ecl:blu +cid:347 +hcl:#fffffd eyr:2023 iyr:2017 +hgt:154cm pid:836554235 + +eyr:2023 hcl:#efcc98 +pid:364475403 byr:1962 iyr:2015 +ecl:brn hgt:59in cid:289 + +byr:2021 hcl:ca4bcf hgt:88 iyr:2017 ecl:gmt pid:181cm eyr:2032 + +byr:1937 iyr:2014 hgt:154cm ecl:brn +hcl:#866857 +eyr:2022 pid:234591437 + +iyr:2002 cid:139 byr:1982 +hcl:#c0946f +pid:#62721b hgt:159in eyr:1966 ecl:brn + +eyr:2036 ecl:oth byr:2026 hgt:96 +pid:137651094 +hcl:z + +pid:373485985 +iyr:2030 ecl:gry byr:2011 hgt:65cm +hcl:#733820 + +pid:390979357 +ecl:gry hgt:164cm +hcl:#ceb3a1 eyr:2029 byr:1932 iyr:2015 + +ecl:hzl hgt:68in eyr:2023 pid:829734763 iyr:2016 hcl:#733820 byr:1997 + +hgt:150cm byr:1926 iyr:2019 pid:521908229 eyr:2029 ecl:brn hcl:#623a2f + +eyr:2023 byr:1974 +iyr:2018 cid:58 +ecl:grn +pid:310883188 hcl:#866857 +hgt:164cm + +byr:1963 iyr:2019 +hgt:162cm +eyr:2021 +hcl:#fffffd ecl:oth pid:104734523 + +hcl:#888785 cid:150 +eyr:2020 byr:1988 +iyr:2018 +ecl:oth +hgt:179cm pid:635972018 + +iyr:2014 hcl:#7d3b0c ecl:hzl pid:717760687 +byr:1929 eyr:2027 hgt:183cm + +iyr:2019 byr:2000 +eyr:2025 pid:506581828 hcl:#602927 ecl:oth +hgt:162cm + +pid:#fd3377 ecl:#618bce hcl:#ceb3a1 +iyr:1944 hgt:182cm cid:57 +byr:2022 eyr:1995 + +pid:4790730010 +hgt:192cm +cid:222 byr:2022 +hcl:4798e7 ecl:#5126d5 iyr:1954 eyr:2040 + +hcl:#b6652a +ecl:brn cid:181 pid:983890186 hgt:189cm byr:1998 +eyr:2022 iyr:2011 + +iyr:2018 eyr:2022 +cid:58 byr:1994 hgt:169cm ecl:hzl pid:036522894 +hcl:#2c9ee8 + +iyr:1979 +hcl:e09b9c byr:2016 +hgt:121 eyr:1962 pid:#fb14be cid:265 ecl:lzr + +eyr:2024 hgt:63in hcl:#efcc98 iyr:2018 +byr:1953 pid:881102827 ecl:amb + +ecl:oth hgt:177cm eyr:2028 iyr:2011 +hcl:#efcc98 pid:113579849 byr:1957 + +ecl:#fe1b74 iyr:1926 hgt:70cm +pid:70807766 hcl:556dca byr:2030 +eyr:2032 + +byr:1997 ecl:blu hgt:105 +pid:178655906 iyr:2025 +hcl:#6b5442 +eyr:2021 + +eyr:2030 ecl:grt hgt:161cm hcl:#ceb3a1 iyr:2016 +pid:318930966 cid:59 byr:1924 + +cid:200 hgt:67in +pid:229395752 byr:1936 ecl:oth iyr:2013 eyr:2020 hcl:#c0946f + +byr:1990 iyr:2018 +cid:99 hcl:#6b5442 hgt:155 pid:350832537 ecl:blu eyr:2021 + +eyr:2039 byr:2025 pid:247367429 hcl:z iyr:2013 ecl:amb +cid:118 + +eyr:2027 hcl:z ecl:utc +cid:274 hgt:175in iyr:2016 byr:1977 pid:478855994 + +eyr:2020 pid:636743032 +hcl:#64a8b8 iyr:2018 ecl:grn hgt:68in byr:1969 + +pid:515635081 iyr:2013 byr:1980 eyr:2024 hgt:173cm ecl:gry +hcl:#b6652a + +ecl:utc byr:2026 iyr:1999 eyr:1937 +hgt:66cm +hcl:z +pid:2247643960 + +iyr:2013 byr:1942 hgt:154cm eyr:2020 hcl:#18171d cid:323 pid:302753381 ecl:oth + +ecl:xry pid:346719476 +iyr:1999 +eyr:2020 hgt:154cm hcl:z +byr:2027 + +hgt:160cm eyr:2025 hcl:#fffffd byr:1998 +pid:678119271 ecl:blu iyr:2014 + +hgt:161cm iyr:2011 +ecl:blu +byr:1921 pid:236833613 eyr:2021 +hcl:#623a2f + +ecl:hzl hcl:#18171d hgt:151cm pid:541887993 +byr:1995 iyr:2019 eyr:2021 + +pid:496474711 byr:1966 ecl:gry eyr:2025 hgt:176cm +hcl:#b6652a iyr:2018 + +iyr:2010 hcl:#efcc98 pid:351846405 +eyr:2024 hgt:150cm +byr:1941 + +hgt:151cm ecl:gry hcl:#a97842 pid:586789406 +eyr:2022 iyr:2013 byr:1982 + +byr:1994 eyr:2028 ecl:gry +hcl:#888785 iyr:2010 +hgt:165cm cid:183 + +iyr:2015 +byr:1933 hcl:#733820 hgt:167cm +ecl:blu pid:914665208 eyr:2027 + +eyr:2031 hcl:6804ef +ecl:amb +byr:2024 +hgt:157cm iyr:1938 +pid:#0418fb + +byr:1936 +ecl:oth hgt:190cm cid:91 +pid:711544430 iyr:2020 +eyr:2025 hcl:#888785 + +pid:381452527 +eyr:2027 hcl:#efcc98 ecl:brn +byr:1956 hgt:63in + +ecl:oth +iyr:2014 hcl:#ceb3a1 +cid:254 +pid:544612871 byr:1985 eyr:2023 hgt:172cm + +hcl:#efcc98 +hgt:191cm byr:1948 +ecl:blu eyr:2028 +pid:953894279 iyr:2017 + +byr:1968 pid:875469219 +hcl:#efcc98 hgt:176cm cid:141 iyr:2017 + +eyr:2022 hcl:#733820 ecl:hzl +pid:870733357 iyr:2013 +byr:1949 hgt:150cm cid:252 + +ecl:gry +hcl:#602927 pid:632246684 byr:1986 +eyr:2030 hgt:152cm iyr:2013 + +eyr:2029 +iyr:2016 +byr:1969 pid:595125675 ecl:gry hcl:#cfa07d hgt:184cm + +byr:1947 hcl:z +cid:188 eyr:2038 pid:177cm iyr:2011 hgt:166cm ecl:#c1376b + +ecl:hzl hgt:170cm cid:307 eyr:2022 +byr:1971 +hcl:#b6652a pid:047040501 + +hgt:126 ecl:zzz +byr:2019 +pid:170207910 eyr:2035 hcl:23df48 +iyr:1932 + +hgt:152cm cid:270 eyr:2036 ecl:#408f6e iyr:1952 pid:5808880830 byr:2022 +hcl:0b1ba6 + +eyr:2021 hgt:179cm +byr:1938 pid:140937061 iyr:2030 hcl:#a97842 ecl:oth + +hgt:67cm eyr:2028 pid:816355657 +iyr:2019 byr:2008 hcl:z ecl:#5b4f31 + +cid:192 +iyr:2018 eyr:2020 byr:1983 pid:873720366 +ecl:grn hgt:187cm hcl:#6b5442 + +byr:1955 hgt:71in iyr:2018 pid:320019385 hcl:#6b5442 +cid:324 eyr:2027 + +pid:957860464 +hcl:#602927 +iyr:2011 +byr:2026 cid:261 eyr:2006 + +byr:1989 ecl:gry cid:143 pid:258434299 eyr:2027 hgt:192cm iyr:2017 hcl:#7d3b0c + +pid:#1742ae +ecl:#a61090 +iyr:2028 hcl:717dd0 hgt:139 cid:183 +eyr:2035 + +eyr:2028 pid:039325804 hgt:167cm hcl:#888785 ecl:oth cid:155 iyr:2013 byr:1923 + +byr:1956 iyr:2010 +hcl:#d683bf +eyr:2023 +hgt:70in +cid:197 pid:143320690 +ecl:hzl + +ecl:#4004e3 cid:278 +iyr:1950 pid:745107377 +byr:2007 eyr:2036 +hcl:8447eb hgt:74cm + +hcl:#ceb3a1 hgt:177cm iyr:2010 pid:640032134 +ecl:gry +eyr:2027 byr:1958 + +hgt:187cm +iyr:1921 ecl:#1c7d96 +eyr:1987 +byr:2028 pid:#28e5a1 cid:144 hcl:9fc25d + +iyr:2012 byr:1996 cid:289 hgt:177cm hcl:#fffffd pid:687240168 eyr:2030 ecl:gry + +pid:860410143 ecl:dne eyr:2031 cid:206 hgt:187in byr:1927 +hcl:8c2149 iyr:2012 + +iyr:2010 +byr:1963 cid:139 pid:160019759 +eyr:2030 hgt:172cm hcl:#602927 + +pid:309851270 +iyr:2014 +ecl:hzl byr:1939 +cid:71 +eyr:2030 +hcl:#b216fb +hgt:161cm + +ecl:gry +cid:138 +iyr:2014 +hgt:177cm byr:1942 +pid:900269082 eyr:2024 hcl:#fffffd + +iyr:2019 hgt:158cm +hcl:#18171d pid:941939350 eyr:2024 ecl:brn byr:1944 + +byr:2023 ecl:brn +cid:101 eyr:2016 pid:190078757 hgt:188in + +cid:188 +ecl:blu pid:075499609 +byr:1970 +hcl:#fffffd hgt:164cm eyr:2028 iyr:2015 + +byr:2011 hcl:z +ecl:gry +pid:408316491 hgt:64cm iyr:2017 eyr:1968 + +ecl:oth hcl:#6b5442 +pid:623099801 +hgt:163cm +byr:1928 + +pid:165230004 +ecl:grn byr:1935 hcl:#c0946f iyr:2012 +hgt:185cm + +hgt:162cm pid:069876432 byr:1960 cid:326 iyr:2013 +hcl:#cfa07d eyr:2021 +ecl:grn + +ecl:#f3d8ba hgt:182cm eyr:2020 byr:2007 +hcl:z iyr:2014 pid:6141297559 + +pid:867747198 +hcl:#efcc98 +eyr:2030 byr:1989 +hgt:181cm + +byr:2000 eyr:2021 hgt:166cm +hcl:#fffffd iyr:2019 pid:546346187 cid:111 ecl:grn + +eyr:2034 hcl:#623a2f +byr:1958 +pid:60553207 ecl:#76b538 hgt:59 cid:75 + +hcl:#623a2f +eyr:2023 pid:251940892 byr:1998 +iyr:2012 +hgt:181cm ecl:gry + +iyr:2020 cid:83 +byr:1938 eyr:2024 ecl:amb pid:046668488 hgt:181cm hcl:#341e13 + +ecl:grn +eyr:2036 iyr:1951 byr:2029 hcl:z hgt:177in +pid:135470038 + +iyr:2015 eyr:2023 +byr:1961 +cid:81 hcl:#a97842 pid:710065884 +hgt:152cm +ecl:#1f9801 + +byr:2014 +pid:25253929 hcl:z +ecl:#f3fb41 eyr:2025 cid:255 iyr:1998 +hgt:155cm + +ecl:gry pid:919070381 hcl:#efcc98 iyr:2019 eyr:2021 byr:1995 + +byr:1942 +eyr:2029 +hgt:191cm hcl:#18171d +pid:649719423 iyr:2018 ecl:brn + +ecl:gry +byr:1963 iyr:2016 hgt:188cm pid:024539026 eyr:2022 + +hgt:176cm +ecl:hzl eyr:1923 pid:176188310 hcl:#b6652a +byr:1939 +iyr:2011 + +iyr:2011 hcl:#888785 eyr:2030 ecl:gry byr:1920 + +pid:#0468a7 hcl:851fe0 eyr:2036 hgt:60cm +byr:2030 +iyr:1995 +ecl:utc + +hcl:#866857 iyr:2016 ecl:oth +pid:414233531 eyr:2022 byr:1957 +hgt:169cm cid:229 + +cid:185 ecl:#5f6f53 +pid:#20f317 byr:2024 eyr:1988 hcl:z iyr:2023 hgt:158in + +pid:015894427 eyr:2027 hgt:177cm ecl:blu +cid:222 +hcl:#c0946f iyr:2010 byr:1993 + +cid:101 hgt:162cm hcl:#c0946f pid:666662343 ecl:grn +byr:1974 +iyr:2019 +eyr:2029 + +pid:782547454 hcl:z ecl:#b0805f +iyr:2013 eyr:2023 +hgt:159cm +byr:1935 +cid:230 + +pid:298008321 hcl:231e1b hgt:166cm ecl:oth +iyr:2026 eyr:2020 + +pid:230201309 iyr:2010 eyr:2025 hcl:#6b5442 +cid:238 +ecl:grn +hgt:174cm + +cid:287 eyr:2026 hcl:#733820 +pid:201750712 iyr:2010 +ecl:oth byr:1985 +hgt:185cm + +hcl:#a97842 hgt:70in eyr:2029 +pid:419407059 ecl:grn byr:1987 +iyr:2016 + +hgt:191cm byr:1951 +eyr:2027 hcl:#8a9477 iyr:2015 ecl:amb pid:769071985 + +hcl:#6b5442 +iyr:2012 ecl:blu +cid:336 pid:391608810 byr:1995 +eyr:2022 +hgt:161cm + +iyr:2020 +byr:1938 +pid:927067439 eyr:2027 hgt:173cm +hcl:306963 ecl:xry + +byr:1991 +iyr:2021 hgt:175cm hcl:68b4f3 ecl:utc +pid:037777327 eyr:2026 + +hgt:64in +eyr:2025 hcl:#da6977 cid:137 byr:1990 iyr:2013 pid:918997697 ecl:amb + +iyr:2011 ecl:gry hgt:173cm eyr:2023 pid:802831612 +hcl:#733820 byr:1976 + +byr:1938 eyr:2021 pid:575395401 cid:234 +hcl:#866857 ecl:hzl hgt:176cm + +hcl:#ceb3a1 ecl:hzl +eyr:2035 +iyr:2014 +byr:2019 + +ecl:hzl pid:961361236 +hgt:193cm hcl:#efcc98 +iyr:2011 eyr:2030 byr:1967 + +eyr:1936 ecl:blu +hgt:153cm hcl:98d3f0 pid:7296832671 +byr:1931 iyr:1962 + +iyr:2016 eyr:2024 hcl:#6b5442 ecl:grn +pid:265815316 byr:1966 +hgt:165cm + +pid:203025149 +eyr:2029 +iyr:2010 cid:124 byr:1999 ecl:blu + +iyr:2011 eyr:2028 pid:#7e0612 byr:1924 hcl:#7d3b0c ecl:oth +hgt:82 + +ecl:hzl +byr:1941 +hcl:#b6652a eyr:2020 pid:409573276 +iyr:1976 hgt:166cm + +ecl:grn eyr:2030 +hgt:163cm iyr:2011 pid:121609314 byr:1961 hcl:#426e1a + +pid:#49ea2c +eyr:2029 hcl:#6b5442 iyr:1931 +hgt:62cm ecl:brn +byr:2012 + +eyr:2038 hcl:8d1f49 ecl:#6d4ea1 pid:0853660207 byr:2020 hgt:71cm + +ecl:hzl hgt:170cm +iyr:2011 +byr:1966 eyr:2028 +pid:609548717 hcl:#c0946f + +byr:1921 hcl:#c0946f ecl:blu iyr:2019 eyr:2024 pid:643387204 + +cid:324 hgt:162cm ecl:amb +hcl:#18171d byr:1961 +eyr:2027 iyr:2010 pid:939720354 + +byr:1933 hcl:#fffffd +pid:353343882 +eyr:2025 hgt:171cm ecl:amb cid:329 +iyr:2017 + +byr:2004 iyr:2022 +pid:157cm eyr:2035 +ecl:#eafe47 hgt:129 +hcl:z + +cid:55 iyr:2025 hgt:177in pid:493884348 +hcl:#888785 byr:1925 ecl:#b11d27 eyr:2036 + +ecl:hzl +hgt:171cm +iyr:2012 pid:479669573 cid:335 hcl:#fffffd byr:1953 +eyr:2029 + +byr:1930 hcl:5bdf31 +pid:#b21f8a hgt:164cm +cid:134 +iyr:2023 ecl:lzr + +iyr:2018 eyr:2026 ecl:grn +pid:541667478 hcl:#6b5442 byr:1992 hgt:155cm + +hcl:2a1c4f iyr:2011 +hgt:192cm eyr:2028 byr:2029 cid:270 ecl:dne pid:7995627426 + +byr:1929 ecl:oth +pid:954905104 iyr:2016 +hgt:68in hcl:#7d3b0c eyr:2020 + +cid:167 byr:2000 hgt:186cm iyr:2013 hcl:#ff4019 pid:384287209 +eyr:2024 ecl:amb + +eyr:2022 +iyr:2018 byr:1972 cid:290 +hgt:170cm ecl:grn pid:127269636 + +byr:1997 +ecl:amb hgt:150cm +pid:056368047 hcl:#fffffd eyr:2020 iyr:2020 + +ecl:gry hgt:167in byr:2020 cid:131 pid:651833067 hcl:#623a2f iyr:2027 eyr:2038 + +hcl:#56c370 +iyr:2014 +byr:1941 +pid:654258425 hgt:184cm +eyr:2025 ecl:hzl + +pid:571765355 +byr:2021 +hcl:z +eyr:1921 cid:106 iyr:1978 +ecl:#1162c5 +hgt:184in + +iyr:2015 hcl:#18171d cid:237 pid:348578306 ecl:blu +byr:1988 eyr:2025 hgt:155cm + +byr:1963 hcl:#733820 cid:145 eyr:2030 ecl:oth pid:964094037 hgt:164cm iyr:2018 + +pid:595618708 ecl:amb +hcl:#866857 +hgt:186cm eyr:2024 byr:1924 iyr:2014 + +ecl:hzl pid:484466493 +hgt:176cm iyr:2016 byr:1983 hcl:#ceb3a1 + +ecl:gry hcl:#6b5442 +hgt:185cm +eyr:2029 +pid:045583320 byr:1974 iyr:2020 + +ecl:brn hcl:352cf1 cid:149 +hgt:184cm byr:2011 +eyr:2031 +pid:21942403 iyr:2028 + +ecl:brn eyr:2029 pid:083295950 byr:1995 hgt:176cm hcl:#c0946f +cid:68 iyr:2014 + +hgt:170cm +byr:1945 hcl:#623a2f +iyr:2013 pid:912213595 ecl:gry eyr:2020 + +ecl:gry +hcl:#18171d iyr:2015 hgt:185cm eyr:2023 +byr:1950 + +byr:1997 hgt:68in pid:368643584 hcl:#623a2f ecl:hzl eyr:2029 iyr:2012 +cid:239 + +iyr:2003 eyr:2020 cid:99 byr:2027 hcl:2c10a6 hgt:74cm +ecl:brn + +pid:151cm hcl:46a5fd eyr:2031 +iyr:2014 +byr:2005 ecl:xry hgt:176cm + +byr:2011 ecl:oth pid:821123244 +iyr:2022 +hcl:839b47 eyr:2039 hgt:150in + +pid:604669618 hgt:152cm iyr:2013 +byr:1954 +eyr:2021 ecl:amb hcl:#623a2f + +hgt:182cm +byr:1993 +cid:177 hcl:#b6652a ecl:gry iyr:2011 pid:441649857 eyr:2027 + +cid:296 hgt:98 +ecl:grt iyr:2028 hcl:#a97842 byr:2022 +pid:69736889 eyr:1935 + +iyr:2016 hcl:#cfa07d +byr:1941 +hgt:182cm +pid:720595987 ecl:gry +eyr:2022 + +iyr:2018 hgt:164cm hcl:#650d28 byr:1973 cid:108 pid:#b0df80 ecl:blu eyr:2020 + +hcl:z +pid:315901778 +iyr:2013 +byr:1999 ecl:#49f691 eyr:2026 hgt:179cm + +byr:1925 +pid:555786686 hgt:189cm hcl:#cfa07d iyr:2012 ecl:gry eyr:2028 + +iyr:2016 +hgt:168cm +eyr:2027 cid:60 ecl:gry hcl:#cfa07d +pid:322944081 byr:1993 + +pid:163cm +hgt:189cm iyr:1997 hcl:03db25 eyr:1970 +byr:2016 ecl:#6c59eb + +pid:766719295 iyr:2017 +hgt:168cm +hcl:z ecl:grt +eyr:2022 byr:2010 + +hgt:173cm pid:247156751 cid:109 eyr:2022 iyr:2012 ecl:gry byr:1989 + +cid:288 +hcl:77241f +hgt:157cm byr:1956 pid:587115461 iyr:2016 ecl:lzr +eyr:2034 + +hcl:5307c9 ecl:#cc4aff +pid:#d80d30 +cid:224 hgt:72cm byr:2025 eyr:2039 iyr:2025 + +eyr:2027 byr:2015 +hgt:184 hcl:98fb9d pid:58151347 +iyr:2029 + +hgt:183cm cid:187 byr:2019 ecl:xry iyr:2013 pid:164cm hcl:#18171d eyr:2021 diff --git a/day04/parse.go b/day04/parse.go new file mode 100644 index 0000000..9672990 --- /dev/null +++ b/day04/parse.go @@ -0,0 +1,33 @@ +package day04 + +import ( + "strings" + + "git.elis.nu/etu/aoc2020/utils" +) + +var rows []map[string]string + +func ParseFile(input string) { + row := make(map[string]string) + + // Parse file + for _, line := range utils.GetLinesFromFile("day04/" + input + ".txt") { + if line == "" { + rows = append(rows, row) + + row = make(map[string]string) + + continue + } + + for _, part := range strings.Split(line, " ") { + parts := strings.Split(part, ":") + + row[parts[0]] = parts[1] + } + } + + // Don't forget the last item + rows = append(rows, row) +} diff --git a/day04/solve1.go b/day04/solve1.go new file mode 100644 index 0000000..e92c931 --- /dev/null +++ b/day04/solve1.go @@ -0,0 +1,14 @@ +package day04 + +import "log" + +func Solve1() { + counter := 0 + for _, row := range rows { + if len(row) == 8 || len(row) == 7 && row["cid"] == "" { + counter++ + } + } + + log.Println("2020-12-04.01: Answer:", counter) +} diff --git a/day04/solve2.go b/day04/solve2.go new file mode 100644 index 0000000..db60a2d --- /dev/null +++ b/day04/solve2.go @@ -0,0 +1,50 @@ +package day04 + +import ( + "log" + "regexp" +) + +func Solve2() { + counter := 0 + + validations := map[string]string{ + // Validate Birth year (1920-2002) + "byr": `^(19[2-8][0-9]|199[0-9]|200[0-2])$`, + + // Validate Issue year (2010-2020) + "iyr": `^(201[0-9]|2020)$`, + + // Validate Expiration year (2020-2030) + "eyr": `^(202[0-9]|2030)$`, + + // Validate height (59-76in) or (150-193cm) + "hgt": `^((59|6[0-9]|7[0-6])in|(1[5-8][0-9]|19[0-3])cm)$`, + + // Validate Hair color + "hcl": `^#[0-9a-f]{6}$`, + + // Validate Eye color + "ecl": `^(amb|blu|brn|gry|grn|hzl|oth)$`, + + // Validate Passport ID + "pid": `^[0-9]{9}$`, + } + + for _, row := range rows { + valid := true + + for key, reg := range validations { + if regexp.MustCompile(reg).FindString(row[key]) == "" { + valid = false + } + } + + if valid { + counter++ + } + } + + // Correct answer: 127 + log.Println("2020-12-04.02: Answer:", counter) +} diff --git a/main.go b/main.go index 67302c0..1377731 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import ( "git.elis.nu/etu/aoc2020/day01" "git.elis.nu/etu/aoc2020/day02" "git.elis.nu/etu/aoc2020/day03" + "git.elis.nu/etu/aoc2020/day04" "git.elis.nu/etu/aoc2020/utils" ) @@ -24,5 +25,8 @@ func main() { case "day03": utils.Perf("2020-12-03", day03.ParseFile, day03.Solve1, day03.Solve2) + + case "day04": + utils.Perf("2020-12-04", day04.ParseFile, day04.Solve1, day04.Solve2) } }