This commit is contained in:
Shadowfacts 2020-12-04 10:13:09 -05:00
parent 64261b54f5
commit 8acd351f84
Signed by: shadowfacts
GPG Key ID: 94A5AB95422746E5
3 changed files with 1152 additions and 0 deletions

144
lib/day4/day4.ex Normal file
View File

@ -0,0 +1,144 @@
defmodule Day4 do
@example """
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
"""
def part1(example \\ false) do
count_all_valid(example, false)
end
def part2(example \\ false) do
count_all_valid(example, true)
end
def count_all_valid(example, check_values) do
if(example, do: @example, else: File.read!("lib/day4/input.txt"))
|> String.trim()
|> String.split("\n\n")
|> parse_input()
|> count_valid(check_values)
end
def parse_input(inputs) do
Enum.map(inputs, fn input ->
input
|> String.split()
|> Enum.reduce(%{}, fn pair, acc ->
[k, v] = String.split(pair, ":")
Map.put(acc, k, v)
end)
end)
end
@doc """
iex> Day4.validate_byr("2002")
true
iex> Day4.validate_byr("2003")
false
"""
def validate_byr(v) do
Regex.match?(~r/(^19[2-9][0-9]|200[0-2])$/, v)
end
@doc """
iex> Day4.validate_iyr("2010")
true
iex> Day4.validate_iyr("2009")
false
iex> Day4.validate_iyr("2021")
false
"""
def validate_iyr(v) do
Regex.match?(~r/^(201\d|2020)$/, v)
end
@doc """
iex> Day4.validate_eyr("2020")
true
iex> Day4.validate_eyr("2030")
true
iex> Day4.validate_eyr("2019")
false
iex> Day4.validate_eyr("2031")
false
"""
def validate_eyr(v) do
Regex.match?(~r/^(202\d|2030)$/, v)
end
@doc """
iex> Day4.validate_hgt("60in")
true
iex> Day4.validate_hgt("190cm")
true
iex> Day4.validate_hgt("190in")
false
iex> Day4.validate_hgt("190")
false
"""
def validate_hgt(v) do
Regex.match?(~r/^(1[5-8]\dcm|19[0-9]cm|59in|6\din|7[0-6]in)$/, v)
end
@doc """
iex> Day4.validate_hcl("#123abc")
true
iex> Day4.validate_hcl("#123ABC")
true
iex> Day4.validate_hcl("#123abz")
false
iex> Day4.validate_hcl("123abc")
false
"""
def validate_hcl(v) do
Regex.match?(~r/#[0-9a-f]{6}/i, v)
end
@doc """
iex> Day4.validate_ecl("brn")
true
iex> Day4.validate_ecl("wat")
false
"""
def validate_ecl(v) do
Regex.match?(~r/^(amb|b(lu|rn)|gr[yn]|hzl|oth)$/i, v)
end
@doc """
iex> Day4.validate_pid("000000001")
true
iex> Day4.validate_pid("0123456789")
true
"""
def validate_pid(v) do
Regex.match?(~r/^\d{9}$/, v)
end
@required_keys ["byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid"]
def count_valid(data, check_values) do
Enum.count(data, fn passport ->
is_valid(passport, check_values)
end)
end
def is_valid(data, check_values) do
Enum.all?(@required_keys, fn k ->
Map.has_key?(data, k) &&
(!check_values ||
apply(Day4, String.to_atom("validate_#{k}"), [Map.fetch!(data, k)]))
end)
end
end

957
lib/day4/input.txt Normal file
View File

@ -0,0 +1,957 @@
iyr:1928 cid:150 pid:476113241 eyr:2039 hcl:a5ac0f
ecl:#25f8d2
byr:2027 hgt:190
hgt:168cm eyr:2026 ecl:hzl hcl:#fffffd cid:169 pid:920076943
byr:1929 iyr:2013
hgt:156cm ecl:brn eyr:2023
iyr:2011
hcl:#6b5442 pid:328412891 byr:1948
byr:1950 iyr:2019 eyr:2020 ecl:amb cid:279 pid:674907993 hgt:189cm hcl:#602927
byr:1976
ecl:hzl iyr:2015 hgt:178cm eyr:2022 hcl:#341e13
pid:473630095
iyr:2020 eyr:2023 ecl:blu byr:1984
hgt:163cm hcl:#866857 pid:628113926
ecl:amb
pid:312508073
hgt:70in byr:1922 iyr:2019 eyr:2030 hcl:#866857
hcl:#007d7c pid:195125455 cid:213 hgt:154cm eyr:2021 ecl:grn byr:1981
ecl:oth hgt:185cm pid:958027833 hcl:#b6652a iyr:2028 cid:171
eyr:1994
ecl:hzl byr:1982 hcl:#fffffd hgt:188cm iyr:2018 pid:039931872 cid:288 eyr:2025
cid:71 iyr:2012 byr:1950 hcl:#7d3b0c pid:803324747 eyr:2023 hgt:151cm ecl:oth
iyr:2013
ecl:grn eyr:2022
pid:053411982 byr:1946 cid:302 hcl:#60ca85
hgt:160cm
hgt:169cm eyr:2035 pid:023983645 iyr:2014 ecl:amb hcl:#c0946f byr:1975 cid:258
byr:1933 ecl:hzl
hcl:#c0946f iyr:2013 pid:655452550
hgt:170cm
eyr:2024
hgt:156
ecl:oth
cid:235
pid:609823906 iyr:2016 eyr:2021 hcl:#6b5442
byr:1932
iyr:2006
hgt:103 ecl:#2d77e5 cid:214 byr:2018 hcl:6c53a4 pid:190cm eyr:1940
ecl:grn
pid:497830156 byr:2002 eyr:2023 hgt:169cm iyr:2016 hcl:#733820
ecl:gmt hgt:75cm byr:2007 eyr:2037 iyr:2028 hcl:4591f6 cid:118
cid:94
ecl:hzl byr:1972 hcl:#7d3b0c iyr:2015 pid:219956257
eyr:2022 hgt:165cm
eyr:2022 hgt:180cm ecl:amb hcl:#c0946f
pid:543330083
iyr:2014
cid:286 byr:1989
ecl:hzl eyr:2027 iyr:2019 pid:125201586
byr:1947 cid:74 hcl:#341e13
iyr:2020 hgt:192cm ecl:oth
pid:651509606 byr:1965 eyr:2029
hcl:#b6652a
hgt:165cm eyr:2025 ecl:oth pid:844167324 byr:1950 iyr:2014 hcl:#a97842
hgt:159cm
byr:1945 hcl:#6b5442 iyr:2027
eyr:2024
cid:94 ecl:brn pid:476551927
pid:479260033 hcl:#efcc98 iyr:2018 ecl:grn
byr:1993 cid:92 hgt:165cm
eyr:2027
iyr:2015 pid:106083602
hgt:168cm eyr:2025 ecl:gry byr:1996 cid:341
hcl:#fffffd
iyr:2010 hgt:192cm
pid:247508683 ecl:#57a15d byr:1972
hcl:#602927 eyr:2024
ecl:blu byr:1934 hcl:#888785 iyr:2019 pid:905361316 eyr:2021 hgt:150cm
hgt:184cm hcl:#cfa07d cid:335 iyr:2018 byr:1995
ecl:grn eyr:2026 pid:435090537
pid:302395756
ecl:grn hcl:z byr:2005 hgt:111 eyr:2031 cid:147
ecl:gry pid:561021264 cid:178 byr:1980 iyr:2010
eyr:2028 hcl:#7d3b0c hgt:181cm
hgt:172cm byr:1923 pid:741415636 ecl:grn eyr:2022 iyr:2013
pid:457776708
byr:1992
hcl:#b6652a hgt:157cm eyr:2024 iyr:2011
pid:177860177
ecl:blu
hgt:154cm hcl:#cfa07d iyr:2015 eyr:2022
byr:1977
pid:992814815 eyr:2028 iyr:2017 hgt:181cm hcl:#cfa07d
byr:1961 ecl:hzl
eyr:2025 hcl:#a97842
byr:1930 pid:468404395
iyr:2013 ecl:oth cid:220 hgt:170cm
cid:198
iyr:2018 hcl:#a97842 hgt:74in
pid:279483949 eyr:2029 ecl:gry byr:1931
byr:2004 iyr:2021 pid:165cm ecl:#7e7d04
hcl:#18171d
eyr:2035 hgt:61
ecl:#492a33
hgt:168cm
iyr:2018
byr:2017 cid:293
pid:1764204298 hcl:#cfa07d eyr:2022
hcl:#866857
eyr:2026
cid:193 hgt:160cm byr:1970 iyr:2011 ecl:amb pid:895650554
eyr:2022
iyr:2018
hcl:#efcc98 cid:181
byr:2029 ecl:utc hgt:188cm pid:332630362
hcl:#ceb3a1
iyr:2013 pid:592603167
cid:95 ecl:blu eyr:2022
hcl:#efcc98
iyr:2011 pid:550968343
ecl:hzl byr:1924 eyr:2022
hgt:191cm cid:120
hgt:150cm ecl:grn
hcl:8f3824 pid:735766540 eyr:2029
byr:2000 iyr:2015
hcl:z
ecl:hzl byr:2003 hgt:118 eyr:2008 iyr:2022
pid:157cm
byr:1950 ecl:blu hgt:163cm
pid:455597862 cid:302 eyr:2027
hcl:#341e13 iyr:2015
iyr:2015 ecl:oth eyr:2023 byr:1998 hcl:#ceb3a1 cid:136 pid:253146183
hgt:179cm
iyr:2018 hcl:#cfa07d cid:80
pid:347839572 byr:1946 eyr:2023 ecl:blu
hgt:163cm
iyr:1969 cid:324 eyr:1927 ecl:lzr
hcl:z
byr:2030 hgt:172cm
pid:#997235
iyr:2017 ecl:brn
hgt:165cm
pid:818623102 byr:1968 hcl:#fffffd eyr:2020
eyr:2023 byr:1966 ecl:blu
cid:295 pid:347753668
hcl:#c0946f
iyr:2010 hgt:163cm
hcl:#ceb3a1 pid:395843182 hgt:168cm eyr:2025 iyr:2014 byr:1991 ecl:gry cid:283
iyr:2011 byr:1928 pid:438089427
hgt:152cm
ecl:hzl eyr:2022 cid:254 hcl:#866857
iyr:2015
hcl:#ceb3a1
ecl:lzr eyr:2022 hgt:173cm pid:1799325911 cid:210 byr:2018
iyr:2010
pid:121142355
eyr:2020
cid:302
hgt:158cm ecl:amb
byr:1978 hcl:#623a2f
pid:110863702
hcl:#341e13 iyr:2017 byr:1942 hgt:175cm cid:277 eyr:2030
ecl:amb
hcl:#c0946f
pid:473360783 byr:1986
hgt:159cm ecl:brn
iyr:2011 eyr:2023
iyr:2015 hcl:#733820 pid:245692263
ecl:oth byr:1960 eyr:2022
hcl:b9c0fd iyr:1996 hgt:83
byr:2029 pid:#449a30
ecl:grt eyr:1925
hgt:68cm
eyr:2039 hcl:#cfa07d
pid:193cm iyr:1984
ecl:#b9ec76
eyr:2023 ecl:amb
byr:1942
iyr:2012 hcl:#b6652a hgt:156cm pid:398126488
ecl:oth hgt:150cm byr:1937 pid:927692980 iyr:2013 eyr:2023 hcl:#623a2f
eyr:2026 byr:1921 pid:297672804 hgt:172cm iyr:2011 ecl:brn
eyr:2026 cid:241
hcl:#341e13
pid:316611397 hgt:193cm
byr:1977
pid:509492550 hgt:64cm eyr:2030 hcl:#b6652a byr:1986 iyr:1922 ecl:gry
hgt:165cm cid:248 hcl:#6b5442 eyr:2026
pid:703744314
byr:1921 iyr:2020
ecl:blu
byr:2001 pid:332016728
iyr:2018 cid:89
eyr:2031 hgt:155cm ecl:zzz
hcl:#866857
byr:2023
hcl:z pid:3586415546 iyr:2022 cid:209 hgt:188in ecl:brn
ecl:grn
hgt:61in iyr:1925 byr:1984 hcl:#733820
pid:216995428 eyr:1944
byr:1969 hcl:#a97842 cid:226
iyr:2011 pid:621770561
eyr:2024 ecl:blu
hcl:#efcc98 eyr:2024
iyr:2010 ecl:hzl
pid:153620883 byr:1957
iyr:2015
cid:162 eyr:2020
pid:89806820 byr:1955
hcl:b043dd ecl:brn
hgt:162cm
hcl:2ee8db
byr:2008 iyr:2003 pid:50279629 eyr:2030 ecl:grt
pid:939011546 byr:1945
hgt:70in hcl:#cfa07d eyr:2027 ecl:grn iyr:2015
hgt:83 ecl:hzl hcl:z eyr:2026 byr:2029
cid:244 hcl:#623a2f iyr:2012 pid:527925497
byr:1957
eyr:2024 ecl:brn
hgt:179cm
byr:1928
pid:933893768 hcl:#18171d ecl:gry iyr:2016 eyr:2027
hgt:158cm iyr:2017 ecl:brn byr:1935 eyr:2020
pid:331047535 cid:345 hcl:#888785
byr:2009
ecl:#893922
iyr:2020 hcl:a59633 hgt:170in eyr:1995
pid:28540793
byr:1955 hgt:68cm
hcl:#67dac3 eyr:2031 pid:502641687 ecl:oth iyr:1922
pid:2523045951 cid:203 hgt:75cm eyr:2031 hcl:#888785
iyr:1937 byr:1988
pid:558076850 eyr:2030
hgt:192cm ecl:brn
cid:296 byr:1954
hcl:#733820 iyr:2012
cid:272 eyr:2030 pid:044961585
hcl:#602927 byr:1990 hgt:173cm ecl:gry iyr:2018
byr:1958 iyr:2019 hgt:163cm eyr:2029
pid:384542472 hcl:819959
ecl:#866be8
iyr:2027
pid:7267919678 byr:2013 hgt:161in hcl:z ecl:brn
pid:855195796 ecl:oth
eyr:2030 hgt:163cm hcl:#341e13 byr:1978
iyr:2011 cid:206
ecl:brn eyr:2029 hcl:#fffffd iyr:2018 pid:065149883 byr:1938 hgt:178cm
eyr:2024
byr:1983
ecl:gry
hgt:154cm
iyr:2019
pid:#f331f5 hcl:#7d3b0c cid:315
ecl:brn pid:131551626 iyr:2013 eyr:2022 byr:1949
hgt:155cm hcl:#18171d
cid:203 eyr:2028 iyr:2019
byr:1939
hcl:#18171d pid:091534428 hgt:175cm
byr:1921 eyr:2025 iyr:2014 pid:719127279 ecl:brn hcl:#cfa07d cid:243 hgt:176cm
byr:1976 hgt:182cm
ecl:gry pid:534666141
iyr:2019 eyr:2027 cid:197 hcl:#602927
byr:2015
pid:164cm hgt:90 eyr:2036 iyr:1947 hcl:b7b0e6 ecl:#fd96b3
eyr:2029 cid:264 pid:931433692
byr:1974 ecl:oth hcl:z hgt:67in iyr:2012
pid:179cm ecl:#00a56d
eyr:2025 hcl:eed83e iyr:1949 hgt:177in
hgt:159cm ecl:blu
pid:5642951907 iyr:2029 byr:1952
hcl:#6b5442
ecl:amb hgt:163cm
pid:811866600 byr:1952
iyr:2019 hcl:#888785
cid:250 eyr:2027
byr:1953 hgt:190cm
pid:156cm hcl:#7d3b0c eyr:2022 ecl:#1b0b35 iyr:2015
pid:709465009 byr:1971 iyr:2018 hcl:#602927 ecl:oth
cid:222 eyr:2025
hcl:#623a2f pid:583448566
byr:1999
eyr:2026 hgt:179cm
iyr:2015 ecl:gry cid:55
hgt:179cm iyr:2013 ecl:amb hcl:#95766f pid:620956072
byr:1997 eyr:2026
ecl:blu iyr:1924 pid:866797032 hgt:193cm cid:90 hcl:#fffffd eyr:1998 byr:1990
hcl:#733820 ecl:brn byr:1950 eyr:2028
hgt:155cm iyr:2017
pid:605542221
hgt:171cm iyr:2019 byr:1930
ecl:hzl
eyr:2026 hcl:#a6ef22 pid:294449839
pid:480248391
hgt:150cm eyr:2027 cid:226 hcl:#cfa07d
byr:1940 ecl:brn
iyr:2018
hcl:z ecl:#769ca0 pid:180cm
byr:1922 iyr:2026 eyr:2028
hgt:180cm
ecl:lzr byr:1967 pid:50313895 hcl:34441e hgt:158in iyr:2030 eyr:2039
iyr:2025
pid:2210753 byr:2010 hgt:173cm cid:208
eyr:2008 hcl:de66d6
ecl:grt
iyr:2018 eyr:2026
cid:289 byr:1992
hgt:170cm pid:856187601 ecl:gry hcl:#efcc98
cid:94 byr:1934 hgt:59in eyr:2022
hcl:#623a2f pid:573884719
iyr:2016 ecl:oth
pid:206185815 ecl:grn hcl:#cfa07d eyr:2027
iyr:2018 byr:1989
hgt:176cm
hgt:175cm byr:1999
pid:409477026
hcl:#cfa07d
ecl:amb eyr:2021 iyr:2017 cid:75
byr:2018
cid:150 eyr:2033 pid:043853978 iyr:2017 hgt:61cm hcl:z
ecl:#f19d87
pid:549507973 hgt:178cm byr:1929 ecl:oth
iyr:2020 eyr:2025
hcl:#7d3b0c
iyr:2014 hgt:171cm ecl:blu byr:1999
hcl:#6b5442 pid:813505466
eyr:2029
ecl:zzz eyr:2034
byr:2022
pid:52407584 iyr:2016 hcl:#888785
hgt:176in
ecl:oth
byr:1994 iyr:2018 hgt:64in pid:136896463
eyr:2022
hcl:#a97842
ecl:#535e3c hgt:84
eyr:1963 hcl:z
iyr:1986 pid:187cm byr:2028 cid:258
eyr:2029
cid:257 hgt:175cm
ecl:oth iyr:2016
hcl:#602927 pid:506432649
iyr:2015 hgt:165cm
ecl:gmt cid:116 hcl:z
byr:1998
eyr:2021
pid:170cm
iyr:2023 hgt:178cm cid:109 pid:#6eca6e hcl:#7d3b0c eyr:1961
ecl:xry byr:2012
eyr:2025
ecl:grn
pid:708755870 hgt:189cm hcl:#e23d5f
iyr:2017 byr:1982
hcl:#866857 pid:85618849 ecl:brn byr:1958 eyr:2025
hgt:111
cid:190
hgt:75cm byr:1983 iyr:2000
eyr:2007
cid:307
pid:227345093 ecl:#080923 hcl:#ceb3a1
hcl:#602927
ecl:oth hgt:158cm byr:1992 iyr:2012 pid:708206240
eyr:2026 cid:125
eyr:1920 pid:873476029 hgt:192cm byr:1971 ecl:gry iyr:2020 hcl:#f463f6
pid:295847270 hcl:#7d3b0c ecl:oth iyr:2015
byr:2000 hgt:181cm eyr:2025
hgt:189cm
hcl:#18171d iyr:2013
pid:686835652 byr:1972
ecl:grn eyr:2029
iyr:2010
ecl:grn hgt:63cm eyr:2027 hcl:#602927 pid:240973955 byr:1984 cid:280
pid:883408516 eyr:2022
iyr:2010 hgt:182cm ecl:hzl byr:2000 cid:220
iyr:2018 pid:026680847 cid:117 hcl:#602927 hgt:67cm ecl:xry eyr:2030
byr:1989
byr:1933 ecl:hzl
hgt:179cm
pid:500053352 eyr:2020 hcl:#fffffd
iyr:2014
hgt:153cm
pid:523083973 ecl:brn
iyr:2011 byr:2000 hcl:#cfa07d
eyr:2020 cid:114
hcl:#efcc98 ecl:blu
byr:1974 iyr:2019
hgt:165cm
eyr:2020 pid:755433303
eyr:2022
ecl:amb byr:1927 iyr:2012 pid:409960222 hcl:#733820 hgt:169cm cid:336
ecl:#564a01
hgt:136 iyr:1984
pid:#646419
eyr:2032
hcl:z
hgt:71in hcl:14d37b
byr:2017 cid:243 ecl:zzz pid:208245975
iyr:2029
byr:1974 hcl:#6b5442 pid:562222331 hgt:68in
cid:319
ecl:grn
iyr:2012 eyr:2028
iyr:2010 byr:1948 hgt:169cm eyr:2022 hcl:#623a2f
cid:93 ecl:hzl
cid:347
byr:1939 hgt:151cm eyr:2026
iyr:2010
hcl:#fffffd ecl:gry
pid:562919031
hgt:171cm
iyr:2010 pid:812511153 byr:1971 eyr:2026 ecl:hzl
hcl:#6b5442
cid:319 eyr:2026 iyr:2013
hgt:155in
hcl:z pid:185cm
hgt:178cm ecl:gry cid:139 hcl:#341e13 pid:390510619 eyr:2026 iyr:2012
byr:1952
eyr:2025 pid:78761845
hcl:#866857 iyr:2019
hgt:173cm ecl:blu byr:1936
eyr:2028 hgt:192cm
byr:1946 pid:897533472 ecl:brn hcl:#efcc98
pid:467427172 hcl:#efcc98
eyr:2021 byr:1923
iyr:2012 cid:139 hgt:176cm
iyr:2015 eyr:2028
pid:069618718
hgt:190cm ecl:grn hcl:#888785
byr:1956 cid:68
ecl:brn hgt:173cm eyr:2022
iyr:2010 pid:525711593 byr:1990
cid:292
ecl:blu hcl:#602927 hgt:67in iyr:2011 byr:1990 eyr:2027 pid:298224903
hgt:159cm eyr:2029 pid:854089988 iyr:2018 ecl:gry byr:1962 hcl:#efcc98
ecl:grn byr:1964 eyr:2022
hgt:61in pid:202756433 hcl:#cfa07d cid:241
iyr:2015
hgt:68in byr:1973 hcl:#18171d ecl:hzl
pid:701847555 eyr:2030 iyr:2019
eyr:2022
ecl:grn hgt:151cm iyr:2020 hcl:#83f878 byr:1982 pid:816902510
cid:130 hgt:187in eyr:2040
ecl:brn
iyr:2020
hcl:z pid:7364218001
byr:1949
hgt:183cm
eyr:2023 iyr:2019 byr:1946 pid:684966686
cid:307 ecl:brn hcl:#cfa07d
hcl:#6b5442 eyr:2024 pid:7727182081
iyr:2017
hgt:110 ecl:dne
ecl:blu byr:1987 cid:167 iyr:2015 hgt:189cm
pid:797675433 eyr:2024 hcl:#6b5442
iyr:2018 byr:1929 ecl:brn hgt:60in eyr:2024 pid:152cm hcl:#a97842
iyr:2020 eyr:2025 byr:1942 pid:007017276 ecl:oth hgt:170cm
hcl:#ceb3a1 cid:104
iyr:2012 ecl:oth eyr:2020
byr:1965 hcl:#efcc98
hgt:173cm
cid:102 pid:302599543
hgt:187cm pid:958933966
ecl:hzl byr:1955
eyr:2027 hcl:#6b5442
ecl:oth iyr:2013
eyr:2027 hgt:153cm cid:86 hcl:#602927
pid:568040159 byr:1926
hgt:187cm iyr:2008 pid:151cm ecl:blu eyr:1954
byr:2014
pid:9029821667 hgt:59cm eyr:2035 hcl:e9c79a
iyr:2010
eyr:2027 pid:#d676d0
hcl:d2fcfa hgt:154cm ecl:hzl byr:1938
ecl:lzr hgt:61in eyr:2025
pid:556812665
byr:1923 iyr:2019
hcl:e962ed
iyr:2019
eyr:2029
hcl:#866857 byr:1977 pid:115229656 hgt:193cm
ecl:brn cid:350
hcl:z pid:#8d311d iyr:2023 hgt:71cm
byr:1923 ecl:zzz eyr:2039
cid:66 hgt:165cm
eyr:2027 iyr:2012 hcl:#b6652a ecl:amb pid:946987379 byr:1999
byr:2028 iyr:2013 ecl:#376cda
eyr:1928 pid:#c135ce hcl:z hgt:185in
hcl:100344 iyr:1933 eyr:2023 hgt:71cm byr:2010 ecl:#6a8007 pid:90001213
iyr:2012
byr:1987 eyr:2020 hgt:190cm cid:298 hcl:#866857
hgt:161cm hcl:#efcc98 ecl:grn eyr:2028 iyr:2014
byr:1966 pid:769989459
hgt:173cm pid:527615519 eyr:2024 hcl:#602927 byr:1949 ecl:oth cid:328
pid:679489285
hgt:153cm byr:1963
hcl:#602927 eyr:2026 ecl:blu
ecl:blu hgt:186cm hcl:#c0946f pid:741255292 eyr:2022 byr:1996 iyr:2017
hgt:172cm
hcl:#888785 eyr:2022 pid:377797887 byr:1980
hcl:z pid:399837694 iyr:2018 ecl:#33e59d eyr:2038
hgt:60in
eyr:2027
byr:1923
hgt:170cm pid:754104917
iyr:2020 cid:135 hcl:#341e13
ecl:brn
ecl:grn hcl:#c0946f
byr:2028 iyr:2016 pid:950191991
hgt:193cm cid:93
eyr:1935
ecl:brn hcl:#733820 eyr:2024
iyr:2017 pid:450063924
byr:2000 hgt:172cm
iyr:2008
cid:229 byr:2023 eyr:2022 hcl:#341e13
ecl:grn
hgt:70in pid:104660281
eyr:2023 hgt:181cm cid:289 pid:828542447
iyr:2013 ecl:grn byr:1922 hcl:#866857
iyr:2030 pid:152cm cid:297 ecl:#75a512 hcl:z hgt:156in byr:2006
eyr:2035
iyr:2012 hcl:#18171d eyr:2025 hgt:188cm
ecl:blu byr:1976
iyr:2018 hgt:157cm hcl:#b6652a
ecl:oth byr:2002 eyr:2023
cid:161
hcl:#b6652a iyr:2016
byr:1930 ecl:oth pid:000425745 hgt:167cm eyr:2022
hgt:160cm hcl:#89f1a0 eyr:2023 pid:867868252 byr:1976 iyr:2019 ecl:hzl
byr:1966 ecl:grn pid:597443937
iyr:2014 eyr:2029
pid:306301971 ecl:#a145cc
hcl:z iyr:2018 cid:325 eyr:2023 byr:1942 hgt:157cm
ecl:brn
pid:771134604 hgt:160cm
byr:1961 eyr:2020
iyr:2012 hcl:#6b5442
iyr:1922
ecl:gmt
eyr:1963
pid:#d1a6f3 hcl:z byr:2015 hgt:153in
eyr:2022 ecl:gry
hgt:156cm
pid:640711969
hcl:#cfa07d
ecl:grn
eyr:1980 pid:385212564 hcl:5b27f7 hgt:160cm iyr:2016 cid:171 byr:1990
iyr:2020
cid:212 pid:959667791 byr:2002 ecl:amb
hgt:75in eyr:2026 hcl:#888785
byr:1969 eyr:2021
iyr:2012
pid:318752605 hgt:179cm
cid:81 hcl:#888785
byr:1926 hcl:#c0946f iyr:2010 hgt:155cm ecl:gry pid:475722917
eyr:2030
eyr:2025
ecl:grn byr:1980 iyr:2010 hgt:160cm hcl:#d03ef0 pid:474973131
eyr:2020 iyr:2012 hgt:150cm
hcl:#c0946f
byr:1924 ecl:amb
iyr:2016 hgt:173cm eyr:2029
hcl:#888785 ecl:hzl byr:2001 cid:334 pid:291454183
iyr:2013
pid:909258239 byr:1970
ecl:utc eyr:2026
cid:312 hgt:158cm
hcl:#18171d
ecl:grn
byr:1941 pid:395943714
eyr:2027
hcl:#7d3b0c
iyr:2011 hgt:158cm
ecl:amb hcl:#fffffd
byr:1992
pid:266072435
eyr:2028 iyr:2020 hgt:161cm
hcl:de3776 eyr:2021
cid:234 ecl:#160982
iyr:2017 byr:1992
byr:1979 iyr:2020 ecl:brn
hcl:#6b5442
pid:492860333 hgt:168cm eyr:2030
eyr:2025 hcl:#fffffd pid:776551474
ecl:hzl hgt:169cm
iyr:2017
ecl:hzl
eyr:2029
iyr:2013 byr:1952 hgt:152cm
pid:968064648 hcl:#6b5442
byr:1955
pid:947711080
cid:149 ecl:amb
hgt:150cm
hcl:#341e13 eyr:2022 iyr:2016
hgt:71cm ecl:#c6c47f
byr:2028 iyr:1994 eyr:2030 pid:0684877002 cid:237 hcl:#341e13
eyr:2030 hcl:#a97842 hgt:188cm byr:2000 pid:262013450
iyr:2018
hgt:74in byr:1955 ecl:blu iyr:2012 hcl:#341e13 pid:165688658
hgt:176cm cid:346 iyr:2012
pid:322396589
ecl:gry eyr:2029
byr:1976
hcl:#888785
eyr:2021
iyr:2015 hcl:3a6401 byr:1997 ecl:blu pid:188cm hgt:166in
ecl:blu iyr:2010 byr:1984 hgt:183
pid:306571244 hcl:#623a2f eyr:2033 cid:113
ecl:#804adb byr:2004 hgt:181cm
hcl:#623a2f
eyr:2040 pid:#57e9d1
iyr:2028 cid:97
iyr:2015 pid:294753454 byr:1980 eyr:2020
hgt:76in
ecl:oth
hcl:#a97842
hcl:#a7a05c pid:0137262572 eyr:2023 cid:350 iyr:2015
ecl:#52d3fe hgt:190cm
byr:2007
pid:826827136 eyr:2030 ecl:brn byr:1946 hcl:#a97842 iyr:2018
hgt:173in
byr:1967
iyr:2015 pid:142177822 hgt:157cm ecl:oth eyr:2024 cid:221
iyr:2012 byr:1942 cid:187 pid:886132093
hgt:158cm ecl:hzl hcl:#1bc909
pid:490847399
byr:1963
hgt:69in
iyr:2011 ecl:gry
eyr:2027 hcl:#e4f497 cid:87
iyr:2014 ecl:hzl hgt:159cm hcl:#c0946f eyr:2028 byr:1926 pid:007819051
hcl:#cfa07d pid:639664506 ecl:amb
byr:1997 cid:137 iyr:2014 eyr:2030 hgt:67in
hgt:191in
eyr:2025
cid:128
byr:2021 iyr:2015
hcl:5ed1ae ecl:lzr
pid:406311551
eyr:2035
ecl:gmt hcl:71e1ef iyr:2023
pid:4347854 byr:2017
hgt:169cm
eyr:2028
ecl:oth iyr:2016 byr:1954
pid:662755630 hcl:#733820
eyr:2029 pid:664032828 hgt:185cm hcl:#fffffd byr:1991 ecl:grn iyr:2017
pid:240747543 hgt:190cm
hcl:#18171d iyr:2013 eyr:2021 ecl:grn byr:1920
iyr:2024 pid:87644548 hgt:126
byr:1971 ecl:brn
eyr:2040
iyr:2020
ecl:lzr byr:2014 eyr:2027 pid:976290173
hcl:#efcc98
hgt:192in
pid:112431133 byr:1950 hgt:174cm
iyr:2020
cid:118 hcl:#341e13 eyr:2023 ecl:amb
pid:034858755
hcl:#d93689 iyr:2012 eyr:2025
hgt:67cm
ecl:brn byr:2027
cid:306
eyr:2024 hcl:#fffffd ecl:hzl hgt:188cm cid:199 byr:2015 pid:983962091 iyr:1937
hcl:#c0946f pid:899925634
eyr:2025 byr:2020
iyr:2016
ecl:grt hgt:173cm
hgt:59cm hcl:c5b2d7 byr:2008 iyr:2027
ecl:lzr pid:155cm
eyr:2035
iyr:2014
eyr:2022 pid:850258746 hcl:#a97842 byr:2022 ecl:brn hgt:178cm
cid:214 iyr:2017
ecl:oth
hcl:#866857 byr:1995 pid:793515973 hgt:193cm eyr:2023
hcl:#18171d
iyr:2017 hgt:193cm cid:183 eyr:2025 pid:728034540 ecl:hzl byr:1969
eyr:2025 ecl:gry byr:2002 iyr:2019 hgt:174cm pid:603301922
hcl:#fffffd
byr:2002
cid:98 pid:828911903 eyr:2030 ecl:blu hgt:65in hcl:#74b1dc
byr:1969 hcl:#a97842 ecl:gry eyr:2027 pid:835656333 hgt:152cm cid:324 iyr:2014
pid:848442741 eyr:2030 hcl:#ceb3a1 byr:1984 iyr:2019 ecl:grn hgt:164cm
hcl:#341e13 iyr:2019 hgt:166cm pid:419840849 byr:1974 eyr:2026 cid:211
byr:1945 pid:646444288 iyr:2020
eyr:2023 hgt:186cm
pid:375892516
hgt:187cm
iyr:2010 eyr:2028 byr:1972 cid:272 ecl:blu hcl:#888785
hgt:181in
ecl:grn eyr:2034
hcl:#7d3b0c byr:2018
pid:206240985 iyr:2015
hgt:177 eyr:1973 pid:83092851 cid:92 ecl:utc byr:2023 hcl:z iyr:1948
eyr:2029 pid:1655089174 ecl:grn hgt:158cm iyr:2011 hcl:#b6652a byr:1926
cid:158
hcl:#341e13
iyr:2006
byr:2008 hgt:185 eyr:2024 ecl:utc
hgt:171cm
pid:533365287 byr:1957 hcl:#ceb3a1 iyr:2014 ecl:amb eyr:2020
cid:184
hcl:#b6652a
pid:553897602 iyr:1929 ecl:grn cid:191 hgt:178cm byr:1991 eyr:2024
byr:1994 hgt:152cm pid:198152466
eyr:2022 ecl:hzl hcl:#4df239 iyr:2020
ecl:grn
eyr:2022
byr:1968 iyr:2017 pid:044109096
hcl:#d257c7 eyr:2036
iyr:2018
ecl:#5b11eb
byr:1950

51
test/day4_test.exs Normal file
View File

@ -0,0 +1,51 @@
defmodule Day4Test do
use ExUnit.Case
doctest Day4
test "checks invalid passports" do
passports =
"""
eyr:1972 cid:100
hcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926
iyr:2019
hcl:#602927 eyr:1967 hgt:170cm
ecl:grn pid:012533040 byr:1946
hcl:dab227 iyr:2012
ecl:brn hgt:182cm pid:021572410 eyr:2020 byr:1992 cid:277
hgt:59cm ecl:zzz
eyr:2038 hcl:74454a iyr:2023
pid:3556412378 byr:2007
"""
|> String.trim()
|> String.split("\n\n")
|> Day4.parse_input()
assert Day4.count_valid(passports, true) == 0
end
test "checks valid passports" do
passports =
"""
pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980
hcl:#623a2f
eyr:2029 ecl:blu cid:129 byr:1989
iyr:2014 pid:896056539 hcl:#a97842 hgt:165cm
hcl:#888785
hgt:164cm byr:2001 iyr:2015 cid:88
pid:545766238 ecl:hzl
eyr:2022
iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719
"""
|> String.trim()
|> String.split("\n\n")
|> Day4.parse_input()
assert Day4.count_valid(passports, true) == 4
end
end