aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin Borner2020-12-04 22:29:36 +0100
committerMarvin Borner2020-12-04 22:29:36 +0100
commit24091cc157b1f32458bee8200dc302f906c4d4de (patch)
tree835bcd79a08fa9ca54f4f51f5098913622874a4d
parent0134ebd5dac9754045e619423cacca14f8fedb0d (diff)
Very ugly 4th solution
-rw-r--r--2020/4/Makefile10
-rw-r--r--2020/4/input959
-rw-r--r--2020/4/solve.c156
3 files changed, 1125 insertions, 0 deletions
diff --git a/2020/4/Makefile b/2020/4/Makefile
new file mode 100644
index 0000000..7f68e56
--- /dev/null
+++ b/2020/4/Makefile
@@ -0,0 +1,10 @@
+.PHONY: solve.c
+
+solve.o: solve.c
+ @gcc $+ -o $@ -lm
+
+clean:
+ @rm -f *.o
+
+run: solve.o
+ @./solve.o
diff --git a/2020/4/input b/2020/4/input
new file mode 100644
index 0000000..c8bf8c0
--- /dev/null
+++ b/2020/4/input
@@ -0,0 +1,959 @@
+byr:1971
+ecl:hzl pid:112040163
+eyr:2023 iyr:2019
+hcl:#b6652a hgt:167cm
+
+pid:108667812 eyr:2023 hcl:#623a2f hgt:171cm iyr:2018 ecl:amb byr:1993
+
+hcl:#cfa07d iyr:2014 ecl:blu eyr:2023 cid:304 hgt:70in byr:1961
+
+byr:1977
+hcl:#b6652a
+iyr:2017 ecl:oth pid:703877876 hgt:185cm
+
+byr:1972
+cid:271
+iyr:2016 pid:876104259 hgt:173cm eyr:2028 ecl:brn hcl:#733820
+
+hgt:174cm ecl:gry iyr:2014 eyr:2029 hcl:#c0946f
+byr:1967 pid:406306240
+
+hcl:#6b5442
+iyr:2011
+pid:040592028 eyr:2026
+ecl:amb
+byr:1923
+
+pid:293598838 byr:1960 cid:87
+iyr:2018
+ecl:blu eyr:2029
+hcl:#7d3b0c
+hgt:62in
+
+iyr:2018 cid:137
+hcl:1c7db1 ecl:#38812e byr:2006 eyr:2038 pid:1239811353 hgt:84
+
+hcl:#888785 pid:308480529
+iyr:2010 byr:1988
+eyr:2025 hgt:176cm ecl:amb
+
+cid:79 ecl:lzr
+iyr:2013 byr:1991 hcl:2f49ef
+hgt:191cm
+pid:378428551
+
+iyr:2005
+hgt:64in hcl:89c369
+ecl:gry byr:1932
+eyr:2029 pid:753055776
+
+ecl:amb iyr:2017
+byr:1969 hcl:#fffffd
+pid:305746470
+hgt:173cm
+
+pid:081972188 iyr:2011
+hcl:9bb154
+eyr:2024 byr:1966 ecl:oth cid:185 hgt:171cm
+
+pid:522553186 hgt:171cm ecl:grn hcl:#7d3b0c
+byr:1955
+eyr:2025 iyr:1999
+
+iyr:2015
+byr:1941 pid:140123640 ecl:amb hgt:153cm hcl:#ceb3a1 eyr:2020
+
+ecl:grn
+cid:202 hcl:#602927
+eyr:2029
+hgt:180cm byr:1974
+pid:658341964
+iyr:2017
+
+pid:2037156813 eyr:1978 ecl:grn hcl:519b45 iyr:2011 byr:2017
+
+hcl:#fffffd ecl:hzl
+pid:658716289 byr:2001 hgt:154cm cid:234 eyr:2031 iyr:2010
+
+byr:2013 pid:#eb519e eyr:2026
+hgt:157cm iyr:2030 hcl:7e9d5a ecl:oth
+
+byr:2002
+ecl:brn iyr:1998 hgt:60cm
+hcl:#7d3b0c pid:#90286d
+eyr:1938
+
+byr:1956 hcl:#efcc98
+hgt:190cm
+iyr:2010 eyr:2023
+ecl:amb
+cid:342 pid:278521396
+
+hgt:67cm
+cid:98 eyr:2036 byr:2028 ecl:grt hcl:08b5ad iyr:2029 pid:187cm
+
+ecl:dne hcl:fca461 hgt:129 iyr:2020 eyr:2027 byr:2022 pid:5014208295
+
+hgt:169cm ecl:gry iyr:2015 eyr:2025 hcl:#733820 pid:240085824 byr:1920
+
+iyr:2020 eyr:2033
+pid:#3f8e9d hgt:190in ecl:brn hcl:#efcc98 byr:2004
+
+iyr:2018 hcl:#18171d ecl:brn byr:1933
+pid:514517439 hgt:171cm eyr:2028
+
+eyr:2030 pid:053251865
+byr:2028 hgt:174cm iyr:2015 hcl:5a0da9 ecl:hzl
+
+hgt:169cm iyr:2014 ecl:oth eyr:2029 pid:348737413 hcl:#b6652a byr:1997
+
+hgt:181cm cid:315
+eyr:2021 iyr:2016 byr:1966 ecl:oth pid:779435812 hcl:#733820
+
+pid:5052579 cid:268 hgt:193in
+hcl:z
+iyr:1942 eyr:1977
+
+eyr:2039 hgt:69cm cid:337
+iyr:2023 pid:568948965
+byr:2018 hcl:z ecl:amb
+
+byr:2014 eyr:2028
+cid:311
+pid:158cm ecl:#946399 hgt:99
+hcl:z
+iyr:1978
+
+pid:474742310 iyr:2015 eyr:2021 hcl:#14f5da
+hgt:163cm ecl:oth
+
+hcl:#efcc98
+ecl:blu
+hgt:178cm pid:815309025 byr:2024
+iyr:2008 eyr:1922
+
+byr:1946 eyr:2028 pid:364439229 iyr:2011 hgt:186cm cid:79 ecl:blu
+
+eyr:2028 hgt:157cm
+cid:59 iyr:2010 byr:1927
+ecl:brn
+pid:893074368
+
+hcl:#18171d ecl:#2defe4 hgt:128 byr:1940
+pid:181904523 iyr:2022 eyr:1937
+
+eyr:2023 hgt:172cm iyr:2012 hcl:#a97842 ecl:hzl byr:1982 pid:638759541
+
+cid:91 hcl:#623a2f
+byr:1996 eyr:2028 pid:181384347 hgt:175cm
+iyr:2020
+
+iyr:2017 eyr:2021 ecl:gry
+byr:1979 hgt:168cm hcl:#6b5442 pid:950995084
+
+ecl:blu iyr:2012 byr:1972
+hcl:#888785 eyr:2022 hgt:179cm pid:293827532
+
+hgt:179cm
+ecl:hzl iyr:2011
+byr:1982 eyr:2020 hcl:#efcc98 cid:209 pid:626732917
+
+byr:1989
+hcl:#6b5442 pid:679850983 iyr:2020
+hgt:192cm ecl:blu
+
+pid:333485773 hgt:167in ecl:zzz iyr:1945
+eyr:2035 cid:319 hcl:#341e13
+
+hgt:64in
+cid:202 eyr:2023 ecl:gry hcl:#c0946f pid:212611149 byr:1928 iyr:2010
+
+hgt:183cm hcl:#e8fa30 ecl:oth eyr:2021
+byr:1943 pid:667658434
+iyr:2010
+
+cid:117
+byr:2022 hcl:z ecl:#c6ae1f iyr:2028
+hgt:188cm
+pid:0883366415
+eyr:2030
+
+hcl:z
+pid:99347800 iyr:2030 eyr:2032 ecl:#cd1fd7 hgt:192cm byr:2019
+
+hgt:178cm byr:2013
+iyr:2026 hcl:ad3da1
+eyr:2020 pid:1626818790
+
+hgt:63cm
+iyr:1964
+eyr:2032
+cid:135 byr:2017 hcl:#a97842 pid:#1b83f5 ecl:gmt
+
+hcl:c352d2 byr:1927 ecl:gmt hgt:187cm
+eyr:2031 pid:170cm
+
+byr:2022 eyr:1958 ecl:zzz pid:3692521800 hcl:8b2b50 iyr:1946 hgt:155in
+
+ecl:#43f305 hcl:z byr:2028
+pid:63518738 cid:243 eyr:2037
+hgt:67cm iyr:1929
+
+ecl:brn hcl:#888785
+pid:495215177 byr:1962 eyr:2021
+cid:192
+hgt:151cm iyr:2012
+
+ecl:#dcca8e cid:64 eyr:2030 pid:380057616
+hcl:z iyr:2026 byr:1962
+
+hcl:z
+ecl:hzl eyr:2027 byr:2015 pid:302526406 hgt:175cm iyr:2017
+
+byr:1966
+cid:133 pid:9953651821 ecl:gry iyr:2020 hgt:152cm
+hcl:#fffffd eyr:2026
+
+hgt:191cm byr:1960 pid:752655640 hcl:#888785
+cid:249 ecl:blu
+iyr:2012 eyr:2028
+
+pid:#c8c988 eyr:2027 hgt:157in hcl:z iyr:2025 byr:2019 ecl:zzz cid:195
+
+hgt:96 pid:95381813 iyr:1950
+hcl:#fffffd eyr:2026
+byr:2010 cid:318
+ecl:#48a819
+
+eyr:2020
+ecl:oth byr:1951 pid:080392492
+iyr:2015 hcl:#6b5442 hgt:176cm
+
+hgt:162cm pid:897792747 byr:1968
+hcl:#ceb3a1 ecl:grn eyr:2026 iyr:2014
+
+eyr:2038 hcl:cc324a byr:1983 ecl:brn
+hgt:161 pid:#adf47f cid:208
+
+iyr:2013 ecl:blu hcl:#866857 byr:1981 hgt:157cm eyr:2025 pid:216910202
+
+hgt:152in byr:1990
+iyr:2027 hcl:a4a3ae
+ecl:#058ae2 eyr:2037 pid:646420120
+
+ecl:oth byr:1982 eyr:2027 hgt:65in iyr:2019
+hcl:#efcc98 cid:224
+pid:854228141
+
+pid:772612093
+iyr:2027
+hgt:175in byr:1981 hcl:c0b5a9 ecl:utc
+
+hcl:#888785 iyr:2014 byr:1975
+ecl:blu
+pid:461319017 cid:229 eyr:2030 hgt:154cm
+
+hgt:179cm eyr:2024
+pid:192cm
+iyr:2017 ecl:grt byr:1934 hcl:z cid:92
+
+hcl:9c9409 iyr:2020 eyr:2030 hgt:156in
+cid:189 pid:732321495
+byr:1937 ecl:xry
+
+eyr:2026 pid:092259220 byr:1943
+iyr:2010 hgt:153cm hcl:#602927
+
+byr:1925 hgt:180cm hcl:#888785 iyr:2014
+pid:402548656 eyr:2023 ecl:hzl
+cid:188
+
+eyr:2020 pid:874307939 hcl:#3f85a4
+ecl:gry hgt:167cm byr:1959 iyr:2014
+
+eyr:2026 hgt:183cm iyr:2011 byr:1940 ecl:blu pid:810026000
+cid:226 hcl:#866857
+
+cid:292 ecl:grt hgt:72cm
+byr:2009
+iyr:2000 eyr:1946 hcl:7be409 pid:996363336
+
+eyr:2027
+iyr:2021
+pid:632405666
+byr:2027
+ecl:#d83a36 hcl:z hgt:190in
+
+cid:80
+hgt:173cm
+pid:735853952 ecl:gry hcl:#fffffd eyr:2025 iyr:2020 byr:1923
+
+byr:1977
+hcl:#733820
+iyr:2020 ecl:#698d72 hgt:186cm pid:678869986 cid:67
+eyr:2021
+
+hgt:61cm iyr:2022 eyr:1972 hcl:979bcf byr:2023 pid:44037388 ecl:xry
+
+eyr:2032 pid:193cm hcl:z
+hgt:68cm byr:2016
+
+byr:2008 cid:239
+hcl:ddc745 eyr:2033 ecl:#6858b5 hgt:64cm iyr:2023
+pid:89867524
+
+iyr:2016 hgt:74in hcl:#18171d
+byr:1959
+ecl:blu
+pid:848487392
+eyr:2027
+
+hgt:165in ecl:grn
+byr:1960 eyr:2029
+iyr:2017
+hcl:#b6652a pid:096349067
+
+eyr:2025 ecl:brn
+pid:634481064 iyr:2015
+hcl:#7d3b0c
+byr:1943
+
+ecl:grn eyr:2021
+pid:34753212 cid:51 hgt:184 iyr:1970 byr:2012
+
+eyr:1973 iyr:2014 cid:225
+byr:2028 ecl:gmt
+hgt:158cm
+pid:#74f9b8 hcl:f6932a
+
+hgt:168cm
+hcl:#602927
+pid:622067991 ecl:amb eyr:2025 iyr:2018
+
+pid:791399958 byr:1956 eyr:2027 hcl:#602927
+ecl:brn
+iyr:2016 hgt:192cm
+
+hgt:168cm iyr:2015 cid:115 ecl:#3fa48b eyr:2037 hcl:#1bf77b byr:1980 pid:947370470
+
+iyr:2008
+byr:2021 ecl:zzz
+hcl:z hgt:109 pid:#fc2a91 cid:268 eyr:1957
+
+byr:2018 hcl:fef19c iyr:2014 ecl:blu eyr:2023 cid:259 pid:193cm hgt:156
+
+hcl:#b6652a
+iyr:2023 byr:2021 hgt:153cm pid:934391984 eyr:2021 ecl:brn
+
+pid:168cm hcl:b13f1e eyr:2038 iyr:2020 ecl:#7c0a6d hgt:169in
+
+ecl:amb cid:170
+pid:300188824 eyr:2024 byr:1954 hcl:#b6652a hgt:166cm
+iyr:2013
+
+ecl:brn
+eyr:2023
+hcl:#b6652a byr:1948 hgt:71in iyr:2015
+pid:575973478
+
+eyr:2026 hgt:180cm hcl:#866857 ecl:grn iyr:2013
+byr:1997 pid:864648034
+
+ecl:hzl
+iyr:2013 eyr:2024 hcl:#02e17f byr:1960
+hgt:163cm cid:338 pid:972201795
+
+iyr:1994 eyr:2035 ecl:xry
+hcl:z hgt:167in pid:159cm
+
+ecl:hzl
+byr:1952
+eyr:2024 hgt:191cm pid:229400637 iyr:2011 hcl:#122db6
+
+eyr:2022
+pid:467667316 iyr:2019 hcl:#623a2f
+hgt:161cm
+ecl:oth
+
+ecl:hzl eyr:2030 hcl:#733820 byr:1944
+hgt:193cm pid:819137596
+
+cid:321 hgt:184in ecl:hzl iyr:2018 byr:2010 eyr:2020 pid:171cm
+
+ecl:amb eyr:2025 hcl:#c0946f pid:360891963 byr:1925
+iyr:2017
+hgt:180cm
+
+hcl:#cfa07d byr:1949
+eyr:1931 cid:350
+ecl:#ff9943
+pid:7550350393 hgt:75
+
+eyr:2026 ecl:amb hcl:z pid:746919391 iyr:2014 hgt:179cm byr:1997
+
+pid:157cm iyr:2030
+hgt:152cm
+hcl:ce8aa7 eyr:1976 ecl:grt cid:160 byr:2011
+
+eyr:2022
+hgt:183cm
+byr:2000 iyr:2016 hcl:#a97842 ecl:blu pid:500935725
+
+cid:245 eyr:2026 iyr:2015 ecl:gry hcl:#cfa07d
+byr:1946
+
+eyr:2022 hgt:168cm
+pid:786361311 iyr:2013 hcl:#c0946f byr:1988 cid:244 ecl:hzl
+
+byr:2014 hgt:176in iyr:2021
+hcl:z pid:6361650130
+eyr:2039 cid:300
+ecl:#76310d
+
+ecl:amb hgt:170in byr:2013
+iyr:2024 eyr:2033 hcl:#888785
+
+eyr:2025
+iyr:1957 cid:182
+ecl:blu pid:253552114
+hgt:188cm hcl:z
+
+cid:83 ecl:amb
+eyr:2022 byr:1947
+iyr:2013 hcl:#cfa07d
+hgt:188cm pid:447734900
+
+iyr:2013 hcl:#602927 byr:1979 hgt:167cm cid:321 pid:978238277 eyr:2020
+ecl:grn
+
+hgt:73cm
+cid:199 ecl:amb iyr:2019
+hcl:#733820 eyr:2021
+byr:1939 pid:364966395
+
+hgt:168in ecl:lzr eyr:2031
+pid:#ff10ac byr:2014 iyr:2006
+
+hgt:164cm eyr:1994 iyr:2010
+ecl:amb hcl:#7d3b0c cid:240 pid:191cm
+byr:2025
+
+ecl:grn
+eyr:2029
+hcl:#7d3b0c hgt:158cm
+byr:1939 iyr:2012 pid:855145518
+
+iyr:2013 hcl:#ceb3a1
+hgt:163cm eyr:2023 pid:761215570
+
+hgt:154cm ecl:grn
+iyr:2019 byr:1981 eyr:2021 hcl:#602927
+cid:80 pid:427938374
+
+eyr:2026 hgt:154cm cid:102 iyr:2012 pid:6632346648 ecl:amb
+byr:2010 hcl:z
+
+cid:302 iyr:2014
+pid:161cm eyr:2037 byr:2026 ecl:gry hgt:60 hcl:9fb9e0
+
+ecl:brn iyr:2015 pid:041582949 cid:180 byr:1938
+hgt:158cm
+hcl:#602927 eyr:2026
+
+ecl:xry pid:#546891 hcl:#18171d hgt:71cm byr:1974
+iyr:2018 eyr:2026
+
+iyr:2015 eyr:2025 ecl:brn hgt:180cm hcl:#b6652a
+byr:1938
+pid:752379523
+
+iyr:2020 ecl:grn hgt:179cm byr:1929
+cid:103 hcl:#602927
+pid:212212232
+
+pid:262917603 ecl:gry iyr:2012 hcl:#fffffd hgt:165cm eyr:2022 byr:1965
+
+byr:1960
+eyr:2031 hgt:184in
+pid:#ac1606 iyr:2013 hcl:#888785
+cid:260 ecl:#7b2c3b
+
+byr:1987
+eyr:2025 cid:102
+hgt:74in ecl:brn hcl:#4a6c75 pid:20220733 iyr:2028
+
+eyr:2031 pid:823539963
+iyr:1957
+hgt:159cm byr:1953 ecl:oth cid:186 hcl:26d85f
+
+ecl:gry iyr:2011
+hgt:167cm hcl:#fffffd pid:001642707 eyr:2030 byr:1952
+
+iyr:2029 ecl:grt
+hcl:z byr:2011 hgt:64cm pid:37027672
+eyr:1923
+
+pid:021102096
+eyr:2024 hgt:66 hcl:#a97842 byr:1922 ecl:gry iyr:2013
+
+pid:166477382 ecl:oth byr:1982 iyr:2010 eyr:2020
+hcl:#866857 hgt:60in
+
+hcl:#7d3b0c
+iyr:2018 pid:065652921 byr:1939
+ecl:blu
+hgt:180cm eyr:2028
+
+ecl:amb iyr:2020 byr:1967 hcl:#fffffd eyr:2028 hgt:157cm
+
+eyr:2029 hgt:185cm cid:85 hcl:z iyr:2014 pid:#1f4787 ecl:grn byr:2010
+
+byr:1987 hcl:d397d9 iyr:2028
+hgt:158cm pid:686994921 ecl:hzl
+
+ecl:oth
+byr:2008
+pid:#db73d9 hgt:174cm hcl:#6b5442 iyr:1955 eyr:2028
+
+eyr:2020 ecl:amb pid:490866828 hcl:#cfa07d cid:113
+hgt:165cm
+
+iyr:2011
+pid:320518492
+eyr:2028 byr:1940 hgt:164cm cid:84
+hcl:#341e13 ecl:grn
+
+hgt:142
+hcl:z pid:152cm iyr:1953 eyr:2040 ecl:#e44f11 byr:2024
+
+ecl:gmt hcl:be7483 eyr:2027
+iyr:2026
+pid:396722617 hgt:153cm
+
+ecl:dne byr:2015
+pid:330208482
+hcl:#7d3b0c iyr:2014 eyr:2022 hgt:95
+
+byr:1925 hcl:#7d3b0c
+ecl:gry
+eyr:2024
+pid:694714722 hgt:158cm iyr:2015 cid:283
+
+eyr:2023
+hgt:183cm cid:345
+hcl:#6b5442 ecl:hzl iyr:2019 byr:1971 pid:458416257
+
+ecl:#dcae8b
+iyr:2027 eyr:1940 byr:2009 hcl:f024de pid:20713584
+hgt:169in
+
+hcl:#888785 eyr:2026
+byr:1984 iyr:2013 pid:935837461
+hgt:193cm
+ecl:gry
+
+pid:7343429 byr:2002
+hgt:191cm
+ecl:lzr iyr:1983
+eyr:1966 hcl:#623a2f
+cid:302
+
+hcl:#888785 iyr:2014 hgt:173cm
+byr:2002 pid:005350165 eyr:2022
+
+byr:2013 iyr:2028
+ecl:lzr pid:5426915565 eyr:2018 hcl:z hgt:70cm cid:142
+
+eyr:2021 hgt:157cm ecl:utc iyr:2014
+byr:1934 cid:348 hcl:#623a2f pid:607329117
+
+iyr:2015 hgt:167cm ecl:hzl
+pid:088516395 hcl:#efcc98 byr:1968 eyr:2029
+
+eyr:2028
+iyr:2019
+cid:199
+ecl:amb
+hgt:152cm byr:1928 pid:547112666 hcl:#623a2f
+
+pid:406202463
+byr:1950 cid:214
+eyr:2021 hcl:#fffffd hgt:177cm
+ecl:brn
+
+eyr:2029
+cid:210 byr:1982 pid:578085789 ecl:brn
+hgt:187cm iyr:2010 hcl:#c0946f
+
+byr:1980 hcl:#c0946f hgt:159cm pid:177650318 eyr:2024 ecl:amb iyr:2019
+
+pid:923359071 byr:1997 ecl:#faa530
+eyr:2028 iyr:2013 hcl:e6c902 hgt:177cm
+
+eyr:2040
+cid:98 hgt:156in
+ecl:oth
+iyr:1996 pid:81500971
+hcl:#6b5442
+byr:2017
+
+byr:2004 iyr:1941
+hcl:e1e4bb hgt:67cm pid:1143915351 ecl:#0d3e5d eyr:1972
+
+hgt:184cm hcl:#623a2f
+eyr:2028 pid:680951513 ecl:grn iyr:2014 byr:2001
+
+hcl:#866857 hgt:156cm
+eyr:2020
+ecl:grn iyr:2010 pid:589945116
+
+pid:599795227 iyr:2016 ecl:grn
+hcl:#cfa07d hgt:157cm byr:1967 eyr:2029
+
+hcl:#b6652a
+byr:1966 iyr:2017 pid:117232314 ecl:oth hgt:186cm eyr:2029
+
+pid:605019880
+iyr:2020
+hgt:169cm byr:1980 hcl:#623a2f
+ecl:hzl eyr:2030
+
+eyr:2019 hcl:#ceb3a1 pid:988269284
+iyr:2015 byr:1989 hgt:171cm ecl:oth
+
+cid:311 byr:1998 ecl:hzl
+eyr:2027 hgt:152cm pid:734870801 hcl:#7d3b0c
+iyr:2013
+
+hcl:#efcc98
+hgt:180cm iyr:2020
+pid:202682423 byr:2027 ecl:grn eyr:2030
+
+hcl:f0701f pid:161cm cid:291 hgt:160in iyr:2030
+ecl:#e12345
+
+cid:248 byr:1943 eyr:2024 hgt:181cm ecl:brn iyr:2010 hcl:#bf813e
+
+byr:2005 hgt:187in eyr:2034 iyr:2025 hcl:z ecl:gmt
+pid:78691465
+
+byr:2000
+hcl:#574f4e eyr:2024 iyr:2017 pid:#fec795 hgt:185cm ecl:gry
+
+hcl:#a97842 byr:1959
+iyr:2019 pid:690444949
+hgt:160in eyr:1978
+
+cid:236
+iyr:2010 eyr:2025 byr:1976 pid:398376853
+hcl:#341e13
+hgt:150cm
+
+hgt:182cm iyr:2019 hcl:#866857
+ecl:grn
+byr:1926 eyr:2029 pid:307880154 cid:94
+
+ecl:blu
+hgt:182cm pid:178cm byr:2019 eyr:2025
+iyr:2022 hcl:#a2117d
+
+eyr:2020 hcl:#c0946f ecl:amb pid:135511825 byr:1954 hgt:68in iyr:2017
+
+hgt:188cm ecl:amb iyr:2011
+pid:949021029 eyr:2028 hcl:#fffffd byr:1986
+
+iyr:1949 pid:#8a8d94 ecl:#922a92 byr:1925 hcl:#63c4a5
+
+hcl:#c0946f
+ecl:grn iyr:2013 eyr:2024 pid:420295283 hgt:181cm
+byr:1977
+
+byr:1941 pid:299186098 hcl:#f1fa72
+iyr:2013 ecl:amb eyr:2022 hgt:152cm
+cid:150
+
+ecl:blu eyr:2021 hgt:60in hcl:#623a2f
+byr:1930 iyr:2018
+
+eyr:2028 pid:663108638
+hgt:75in cid:217
+byr:1962 ecl:brn hcl:#733820
+
+hcl:#341e13 hgt:188cm ecl:blu
+pid:868930517
+eyr:2029
+iyr:2010 byr:1938
+
+pid:194376910 byr:1956
+hcl:#cd4ab4
+eyr:1940 iyr:2012 ecl:#396cc3
+
+pid:#c5da2a hgt:162cm
+hcl:#866857
+cid:95 ecl:#fa1f85
+iyr:1965 byr:1963 eyr:2039
+
+pid:44063430 hcl:289b20
+ecl:#77ddd9 eyr:1953
+iyr:1924 byr:2026 cid:267 hgt:180in
+
+ecl:brn pid:990171473
+eyr:2028 byr:1937
+hgt:165cm iyr:2015
+hcl:#fffffd cid:68
+
+iyr:1968 ecl:lzr pid:#05a4ab eyr:1944 hcl:z
+
+hgt:185cm hcl:#7d3b0c eyr:2029 ecl:oth
+iyr:2016 byr:1997 pid:349316183
+
+hcl:z
+ecl:gry
+hgt:192in pid:542996841 iyr:2019 cid:144 eyr:2028
+byr:2026
+
+eyr:2024
+hcl:#18171d
+ecl:grn hgt:160cm pid:399767457 byr:1979 iyr:2015
+
+ecl:#924147 pid:665314 cid:216 iyr:2026 hcl:z
+byr:2023 hgt:157
+eyr:1987
+
+eyr:1989 hcl:4f8779 ecl:#05ff52 iyr:1943 pid:3693010880 hgt:72cm
+byr:2009
+
+hcl:#c0946f eyr:2022
+iyr:2015 hgt:157cm byr:1928 ecl:grn pid:243566446
+
+eyr:2030
+hcl:#733820 byr:1988 iyr:2017 cid:125 hgt:193cm ecl:amb pid:939550667
+
+cid:161 hgt:157in
+hcl:#cfa07d eyr:2036 ecl:#4efa35
+iyr:2012 pid:3943280550 byr:1979
+
+ecl:lzr hcl:#341e13 hgt:69cm eyr:2026 cid:322 byr:2006 pid:827964469
+
+ecl:amb iyr:2012
+eyr:2020 hgt:178cm pid:590705772 cid:218
+hcl:#c0946f byr:1922
+
+hcl:632b01 cid:252 byr:1933 ecl:hzl
+iyr:2025 eyr:2040 hgt:191cm
+pid:406010613
+
+pid:711656819 ecl:blu eyr:2030 hgt:151cm
+byr:1999 cid:319
+hcl:#efcc98
+
+pid:294223216 iyr:2012
+hgt:171cm
+eyr:2027
+hcl:#ceb3a1 ecl:oth
+byr:1952 cid:58
+
+hcl:#888785 pid:457433756 eyr:2022 hgt:186cm
+cid:336
+byr:1923 iyr:2013 ecl:oth
+
+byr:2014 hcl:6ce7d6 eyr:2030 pid:190cm iyr:2018 hgt:63cm ecl:#5063b9
+
+cid:267 hgt:189cm
+eyr:2020 hcl:#ffeffd iyr:2014 byr:1989
+ecl:grn
+pid:571696542
+
+iyr:1953 hgt:160in
+ecl:grt cid:188 eyr:2034
+pid:179cm byr:2007
+hcl:6895eb
+
+hgt:165cm ecl:oth
+iyr:2020
+eyr:2028
+hcl:#18171d pid:111506895
+
+eyr:1957 cid:133 ecl:hzl pid:#e56ca2 byr:2003 hcl:8a9d65
+
+hcl:6c4ecd byr:1930 hgt:179cm
+eyr:2007 iyr:2028 ecl:#3d8705
+pid:#dbfeec
+
+eyr:2036
+byr:1991 ecl:#2202d0 hcl:#341e13 pid:85636989 hgt:61cm
+iyr:1930
+
+byr:1996 iyr:2027 hcl:z
+pid:780164868 ecl:zzz eyr:2026 hgt:73cm
+
+byr:1940
+iyr:1992 pid:132016954 eyr:2021
+cid:147 hcl:#d78bfd ecl:xry
+
+hgt:174cm
+byr:1970
+eyr:2021 hcl:#341e13 pid:086579106 iyr:2017 ecl:oth
+
+ecl:oth cid:207 byr:1998 pid:479696359
+hgt:174cm iyr:2017 eyr:2020 hcl:#6b5442
+
+ecl:hzl iyr:2014
+hcl:#cfa07d hgt:163cm eyr:2025
+byr:1951 pid:563337128
+
+ecl:gry hgt:172cm iyr:2013 hcl:#efcc98
+byr:1970
+pid:848996674
+eyr:2027
+
+hgt:163cm pid:583600660 iyr:2015 hcl:#18171d byr:1959 ecl:brn
+
+hcl:#efcc98 pid:353178375 cid:145
+iyr:2018 byr:1988 ecl:oth eyr:2029
+
+hgt:62in
+byr:1921 pid:125944934 hcl:#b6652a
+eyr:2025 cid:71 iyr:2018 ecl:blu
+
+iyr:2017 ecl:brn hcl:#602927 hgt:172cm pid:932690969 byr:1957 eyr:2026
+
+hcl:#efcc98 pid:709772213 cid:146 ecl:oth byr:1998 iyr:2010 hgt:74in
+eyr:2029
+
+byr:1965
+iyr:2011 hcl:#6b5442 cid:325 hgt:68in eyr:2028 pid:813272708 ecl:hzl
+
+pid:57223084 hcl:#602927 ecl:grn
+hgt:156cm eyr:1972 iyr:2017
+
+pid:21573000 byr:2030 cid:168
+hcl:baee61 eyr:2021 hgt:150cm
+iyr:1950 ecl:#acdd7e
+
+ecl:gry hgt:150cm hcl:#6b5442
+byr:1927
+iyr:2018 pid:161cm eyr:2021
+
+hgt:153cm
+iyr:2030 ecl:grn pid:575037626 byr:1921 eyr:2021 hcl:#866857
+
+hgt:175cm iyr:2014
+byr:1946 eyr:2025
+cid:159 hcl:#18171d
+ecl:oth pid:129913905
+
+pid:566885568
+hgt:157cm eyr:2021 ecl:gry byr:1933
+hcl:#623a2f cid:223
+
+ecl:blu byr:1981 cid:160
+iyr:2014
+hcl:#a97842 eyr:2021 hgt:172cm pid:714902414
+
+hcl:#b6652a eyr:2021
+hgt:168cm byr:1921 iyr:2018 ecl:oth pid:021318713
+
+hgt:168 pid:222439573
+cid:209
+hcl:z byr:2016 ecl:#26a0fb
+eyr:2031
+
+hgt:181cm
+byr:1970 eyr:2024
+pid:476171876 ecl:hzl
+hcl:#efcc98
+iyr:2019
+
+hcl:#18171d ecl:oth iyr:2018 byr:1949 hgt:165cm
+eyr:2029 pid:078204562
+
+byr:2021 ecl:blu iyr:1963
+pid:2911597977 hcl:#ceb3a1 eyr:2020
+hgt:154cm
+
+pid:159642237
+hcl:#81e94d ecl:gry eyr:2028 byr:1958
+
+hgt:90 hcl:#a97842 pid:#db1158
+iyr:1928 ecl:#c82a43 byr:1971 eyr:2036
+
+eyr:2020
+hgt:177cm iyr:2013
+cid:347 ecl:grn
+byr:1998 pid:455369144
+
+byr:1936
+pid:444305229 iyr:2013 eyr:2025 hcl:#733820
+ecl:gry
+hgt:175cm
+
+byr:2027 hcl:z
+hgt:61cm ecl:brn pid:836686228 eyr:2023 iyr:2030
+
+byr:1931
+ecl:hzl hgt:168cm eyr:2023 pid:956562488 hcl:#fffffd
+
+ecl:#4126e5 pid:182cm iyr:2021
+hgt:144 eyr:2039 hcl:z
+
+pid:321400085 hcl:#733820 hgt:189cm
+ecl:hzl byr:1923 eyr:2023 iyr:2016
+
+iyr:2011 hgt:192cm hcl:#b6652a byr:1988 pid:998875769
+ecl:#e612d9 eyr:2015
+
+eyr:2021 iyr:2011 pid:265966660
+byr:1934 hgt:180cm
+hcl:#7d3b0c
+ecl:gry cid:225
+
+pid:550612542 ecl:oth byr:1931
+iyr:2014 cid:99
+hcl:#cfa07d hgt:163cm eyr:2026
+
+ecl:gry hgt:156cm iyr:2018 hcl:#5d9d64 pid:295386055 byr:1996
+eyr:2025
+
+ecl:gry iyr:2013 pid:855457285 cid:309 eyr:2030
+hcl:#733820 byr:1973
+
+eyr:2030 pid:86472746 ecl:blu
+hgt:192cm
+iyr:2013 byr:1939 hcl:#b6652a
+
+hcl:#888785
+byr:1935
+iyr:2018
+hgt:155cm ecl:grn
+pid:612879095 cid:108 eyr:2027
+
+eyr:2016 hcl:z pid:025915371 iyr:2010 hgt:183cm ecl:gry
+byr:2010
+cid:228
+
+hcl:#38dbf4
+byr:1925 ecl:amb eyr:2020 pid:065102805 iyr:2018
+
+cid:244 hgt:171cm
+hcl:#cfa07d pid:466737179 eyr:2025
+byr:1937 iyr:2020 ecl:oth
+
+ecl:brn byr:1993 hgt:179cm hcl:#341e13 pid:855375268 eyr:2028
+iyr:2018
+
+pid:809135189 iyr:2020 hgt:162cm eyr:2027
+hcl:#888785 byr:1988 ecl:grn
+
+byr:2003 pid:4446708453
+hgt:188cm iyr:2013 hcl:#888785 ecl:blu eyr:2008
+
+hgt:165in ecl:#db642f iyr:2014
+eyr:2020
+byr:1955 hcl:371f72 pid:756089060
+
+ecl:lzr
+hgt:177in eyr:2037 pid:175cm
+byr:2023 hcl:03b398 iyr:2026
+
+iyr:2017 ecl:blu byr:1942 hcl:#733820 eyr:2023 hgt:151cm pid:289923625
diff --git a/2020/4/solve.c b/2020/4/solve.c
new file mode 100644
index 0000000..a613660
--- /dev/null
+++ b/2020/4/solve.c
@@ -0,0 +1,156 @@
+#include <assert.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+void normalize(char *data)
+{
+ for (char *p = data; *p; p++) {
+ if (*p == '\n' && *(p + 1) == '\n') {
+ *p = ' ';
+ p++;
+ } else if (*p == '\n') {
+ *p = ' ';
+ }
+ }
+}
+
+char *valid[] = { "byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid" };
+char *valid_colors[] = { "amb", "blu", "brn", "gry", "grn", "hzl", "oth" };
+
+int part_one(char *data)
+{
+ int res = 0;
+
+ int correct = 0;
+ for (char *p = data; *p; p++) {
+ if (*p == '\n') {
+ if (correct == 7)
+ res++;
+ correct = 0;
+ continue;
+ }
+
+ char key[4] = { 0 };
+ char value[16] = { 0 };
+ sscanf(p, "%3[^:]:%s ", key, value);
+
+ for (int i = 0; i < sizeof(valid) / sizeof(valid[0]); ++i) {
+ if (!strcmp(key, valid[i])) {
+ correct++;
+ break;
+ }
+ }
+
+ p += 3 + strlen(value) + 1;
+ if (*(p + 1) == '\0') {
+ if (correct == 7)
+ res++;
+ }
+ }
+
+ return res;
+}
+
+#define EQ(a, b) (!strcmp((a), (b))) // String equality
+#define BR(x) ((x) >= 1920 && (x) <= 2002) // Birth rule
+#define IR(x) ((x) >= 2010 && (x) <= 2020) // Issue rule
+#define ER(x) ((x) >= 2020 && (x) <= 2030) // Expiration rule
+#define HR(x) ((x) >= 150 && (x) <= 193) // Height rule
+#define CR(x) \
+ (EQ(x, "amb") || EQ(x, "blu") || EQ(x, "brn") || EQ(x, "gry") || EQ(x, "grn") || \
+ EQ(x, "hzl") || EQ(x, "oth")) // Eye color rule
+// BTW: I hate gotos
+int part_two(char *data)
+{
+ int res = 0;
+
+ int correct = 0;
+ for (char *p = data; *p; p++) {
+ if (*p == '\n') {
+ if (correct == 7)
+ res++;
+ correct = 0;
+ continue;
+ }
+ char key[4] = { 0 };
+ char value[16] = { 0 };
+ sscanf(p, "%3[^:]:%s ", key, value);
+
+ // General value verification/parsing
+ int y = 0;
+ if (EQ(key, "byr") || EQ(key, "iyr") || EQ(key, "eyr")) {
+ if (!sscanf(value, "%4d", &y))
+ goto invalid;
+ } else if (EQ(key, "hgt")) {
+ char last = value[strlen(value) - 1];
+ if (last == 'm') {
+ sscanf(value, "%dcm", &y);
+ } else if (last == 'n') {
+ sscanf(value, "%din", &y);
+ y = (int)roundf(((float)y * 2.54)); // lol
+ } else {
+ goto invalid;
+ }
+ } else if (EQ(key, "hcl") && (strlen(value) != 7 || !sscanf(value, "#%6x", &y))) {
+ goto invalid;
+ } else if (EQ(key, "ecl")) {
+ char c[4];
+ if (!sscanf(value, "%3s", c) || !CR(c))
+ goto invalid;
+ } else if (EQ(key, "pid")) {
+ if (!sscanf(value, "%9d", &y))
+ goto invalid;
+ }
+
+ // Number range verification
+ if (EQ(key, "byr") && !BR(y))
+ goto invalid;
+ else if (EQ(key, "iyr") && !IR(y))
+ goto invalid;
+ else if (EQ(key, "eyr") && !ER(y))
+ goto invalid;
+ else if (EQ(key, "hgt") && !HR(y)) {
+ goto invalid;
+ }
+
+ for (int i = 0; i < sizeof(valid) / sizeof(valid[0]); ++i) {
+ if (!strcmp(key, valid[i])) {
+ correct++;
+ break;
+ }
+ }
+
+ goto next;
+
+ invalid:
+ /* printf("Invalid: %s:%s (y=%d)\n", key, value, y); */
+ correct = -42; // Awesome fix!
+ next:
+ p += 3 + strlen(value) + 1;
+ if (*(p + 1) == '\0') {
+ if (correct == 7)
+ res++;
+ }
+ }
+
+ return res;
+}
+
+#define SIZE 20000
+int main(int argc, char *argv[])
+{
+ FILE *fp = fopen("input", "r");
+ if (!fp)
+ exit(EXIT_FAILURE);
+ char buf[SIZE] = { 0 };
+ fread(buf, SIZE, 1, fp);
+ normalize(buf);
+
+ printf("%d\n", part_one(buf));
+ printf("%d\n", part_two(buf));
+
+ fclose(fp);
+ return 0;
+}