~cricket/advent2020

9ab808a21eae8e0c9a4d21c895405fec1a3d15e7 — cricket 9 months ago f2c5103
day 4: why

* ultra minification on day 3 lol
3 files changed, 1175 insertions(+), 7 deletions(-)

M 3/main.zig
A 4/input
A 4/main.zig
M 3/main.zig => 3/main.zig +5 -7
@@ 1,9 1,7 @@
const std = @import("std");
const input = @embedFile("input");
const w = 32;
fn slope(sx: usize, sy: usize) usize {var t:usize=0;var x=t;var y=t;var i=t;
    while (i<input.len):({y+=sy;x+=sx;i=(w*y)+(x%(w-1));}) t+=@boolToInt(input[i]=='#');
const std=@import("std");const input=@embedFile("input");const w=32;
fn slope(sx:usize,sy:usize)usize{var t:usize=0;var x=t;var y=t;var i=t;
    while (i<input.len):({y+=sy;x+=sx;i=(w*y)+(x%(w-1));})t+=@boolToInt(input[i]=='#');
    return t;}
pub fn main() void {var p1=slope(3, 1);var p2:usize=1;
pub fn main()void{var p1=slope(3,1);var p2:usize=1;
    for ([_][2]u8{.{1,1},.{3,1},.{5,1},.{7,1},.{1,2}})|s|p2*=slope(s[0],s[1]);
    std.debug.print("part 1: {}\npart 2: {}\n",.{p2,p2});}
\ No newline at end of file
    std.debug.print("part 1: {}\npart 2: {}\n",.{p2,p2});}

A 4/input => 4/input +1096 -0
@@ 0,0 1,1096 @@
eyr:2027
hcl:#602927
hgt:186cm byr:1939 iyr:2019 pid:552194973 ecl:hzl

pid:657988073 eyr:2020 byr:1996
ecl:brn
hcl:#866857 iyr:2015
hgt:164cm

hcl:#fffffd
byr:1951 cid:321 iyr:2017 eyr:2022 ecl:brn hgt:62in pid:#6ef4e1

eyr:2025 iyr:2011
byr:1980
hcl:#fffffd cid:129 pid:420023864
hgt:150cm
ecl:brn

eyr:2029
hcl:#ceb3a1 hgt:187cm
byr:1925 ecl:amb pid:223151011 iyr:2016

hcl:#cfa07d ecl:brn eyr:2022 pid:135392110 iyr:2010
hgt:190cm
byr:1959

eyr:2024 cid:225 iyr:2018
pid:522856696 byr:1961
hcl:#a97842 ecl:grn

eyr:2024 byr:1964 ecl:brn iyr:1976
hcl:#866857 hgt:190cm pid:562135232

hgt:193cm pid:#6e4342 iyr:2011 byr:1936 cid:296 hcl:z
ecl:#3b8ed3 eyr:2022

cid:154 byr:1985
pid:503255860 ecl:gry eyr:2023
hcl:#efcc98 iyr:2014

eyr:2026 iyr:2012 pid:631051435 byr:1986
ecl:amb
hgt:154cm hcl:#341e13

hcl:#623a2f
pid:318048681 ecl:brn
eyr:2035
hgt:155cm
cid:179
byr:1984
iyr:2019

iyr:2013 hcl:#733820
eyr:2024 hgt:189cm ecl:amb byr:1969 pid:185953891

hcl:#cfa07d
ecl:#38f2a6 iyr:2013 hgt:61cm eyr:2021
byr:2012 pid:33668114

pid:47030948 hcl:4946ca iyr:2019
hgt:189
ecl:#1d136d byr:2013 eyr:2024 cid:51

ecl:grn iyr:2011 hgt:162cm byr:1935 hcl:#c0946f
pid:883047970 cid:51
eyr:2020

pid:013760919
iyr:2018
byr:1942 ecl:blu hcl:#623a2f eyr:2020
cid:221 hgt:155cm

hgt:152cm eyr:2030 ecl:amb iyr:1986 hcl:#7d3b0c pid:29797863
byr:2000

hgt:176cm
byr:1995 pid:546676799 iyr:2013 ecl:brn hcl:#fffffd
eyr:2023

byr:1955 pid:634493767
eyr:2028 iyr:2015 ecl:oth

hcl:#7d3b0c iyr:2020 cid:150 hgt:174cm pid:893757190
eyr:2027 ecl:oth byr:2002

eyr:2029 pid:790648045 byr:1978
iyr:2012 hcl:#efcc98 ecl:blu hgt:66in cid:256

iyr:2020
byr:1945 hgt:155cm
cid:209
eyr:2027
hcl:#0eeb2d ecl:hzl pid:048725571

hcl:#cfa07d byr:2000 iyr:2011
pid:381372526 ecl:oth eyr:2023 hgt:162cm

ecl:blu pid:544462408 eyr:2030 hgt:171cm iyr:2018
hcl:#602927 byr:1994

hcl:#733820
iyr:2011 hgt:187cm ecl:hzl pid:533405863 byr:1962 cid:266
eyr:2025

byr:1975
hcl:#b6652a
iyr:2019 pid:967013712
eyr:2029 hgt:155cm
ecl:oth

iyr:2010
eyr:2022 ecl:amb pid:052112145 byr:1982 hgt:190cm hcl:#b6652a

iyr:2012 hgt:183cm hcl:#b6652a
byr:1950 ecl:hzl pid:946714779 eyr:2030

eyr:2027
pid:686010502
cid:103 byr:1993 hcl:#ceb3a1 ecl:gry hgt:70in iyr:2018

hcl:#733820 iyr:2012 hgt:157cm byr:1976
eyr:2030 ecl:gry

ecl:hzl byr:1955 hgt:180cm iyr:2017 eyr:2022 hcl:#6b5442
pid:732940101

cid:299 hgt:188cm byr:1924 ecl:oth pid:905274031 iyr:2010 eyr:2024 hcl:#18171d

eyr:2024
hgt:174cm byr:1999 iyr:2013
pid:021076124 hcl:#7f450a ecl:gry

hcl:#866857
iyr:2016 ecl:oth hgt:176cm
byr:1940
pid:398320693 eyr:2026

hgt:172cm eyr:2020
hcl:#733820 iyr:1931 ecl:#a0c290 pid:158cm

ecl:blu iyr:2018 eyr:2025
hcl:#341e13
byr:1990 pid:444561212 hgt:182cm

hcl:#602927 hgt:165cm pid:240732315 ecl:oth
eyr:2023 byr:1976

iyr:2016 ecl:brn pid:377612846 eyr:2021
byr:1967 hcl:#733820 hgt:153cm

hgt:187cm
iyr:2018
eyr:2030 ecl:blu byr:1925
hcl:#733820 cid:114
pid:207103786

hgt:184cm ecl:blu
cid:111 iyr:2018
pid:361909532 eyr:2025

ecl:grn byr:1968 iyr:2019
hgt:184cm
pid:381103495 hcl:#7d3b0c eyr:2026

iyr:2019 byr:1945
pid:727826617 hcl:#01adfd eyr:2020
hgt:151cm

cid:280
iyr:2011 hcl:#efcc98 ecl:hzl eyr:2029 byr:1924 hgt:171cm
pid:235809608

hcl:#602927 byr:1973 pid:599786261 eyr:2029 hgt:172cm iyr:2010 ecl:gry cid:97

iyr:2017
eyr:2027
pid:768895320 hgt:163cm hcl:#866857
byr:1940 ecl:oth

hgt:178cm hcl:#6b5442 iyr:2013 byr:1959 pid:823221334

iyr:2014 pid:534201972 ecl:hzl hgt:150cm
hcl:#da8af3 byr:1945 cid:263
eyr:2024

pid:469575516
hgt:189cm byr:1994 eyr:2025
iyr:2010 ecl:blu hcl:#efcc98
cid:341

cid:167 eyr:2024 byr:1999 pid:797138561 hcl:#888785
hgt:60in iyr:2015

iyr:2014 hcl:#866857 cid:103
pid:909549652 byr:1967 hgt:174cm ecl:amb
eyr:2023

pid:813003671 ecl:oth hgt:61in cid:95
iyr:2016 byr:1995 eyr:2027

eyr:2021
hcl:#fffffd
pid:000088706 iyr:2014 ecl:blu
hgt:166cm byr:1951

cid:287
ecl:grn byr:1941 iyr:2017 hcl:#18171d hgt:162cm pid:511728076 eyr:2022

pid:209898040 byr:1968 eyr:2025 hcl:#18171d
ecl:brn iyr:2017
hgt:191cm

byr:1932
hcl:z hgt:190cm
cid:201 iyr:2016 pid:#02dfcc ecl:#6b9341 eyr:2004

iyr:2013 hcl:#ceb3a1
hgt:191cm pid:501799813
ecl:hzl
byr:1993 eyr:2020

ecl:blu cid:315
pid:897450687 hgt:179cm byr:1984 eyr:2029 iyr:2012 hcl:#a97842

iyr:2011 ecl:gry hcl:#6b5442 pid:299193732 eyr:2020 byr:1945 hgt:190in

hgt:158cm eyr:2022 pid:090738381 byr:1992 iyr:2017
hcl:#fffffd ecl:oth

eyr:2028 cid:92 ecl:amb hcl:#573edf pid:765588435
iyr:2016
hgt:179cm
byr:2002

eyr:2025
pid:128081454 hcl:#967d2f hgt:190cm iyr:2015 ecl:oth

hgt:189cm eyr:2025
ecl:gry
hcl:#888785
byr:1993 pid:001825574 cid:239 iyr:2019

byr:2013 pid:0758189515 hcl:z eyr:2034 iyr:1971 ecl:gry hgt:100

eyr:2026 byr:1943 hcl:#3638a2 iyr:2011 pid:539139386
hgt:156cm ecl:hzl

eyr:2030 pid:016597738 iyr:2017
hgt:173cm ecl:brn hcl:#733820 byr:1956

eyr:2028
iyr:2018
pid:822607758 hcl:#cfa07d ecl:brn hgt:167cm byr:1974

eyr:2020
byr:1980
hgt:65in iyr:2020
ecl:oth hcl:#efcc98
pid:397182705

iyr:2015 byr:1954
hcl:#ceb3a1 eyr:2024 pid:398087239

cid:256 hcl:234fc4 ecl:zzz
hgt:177in eyr:2027 iyr:2015 pid:159cm byr:2022

iyr:2018 cid:209 hcl:#a928b0 byr:1976 ecl:hzl pid:920448637 eyr:2025 hgt:158cm

pid:96925844 iyr:2016 eyr:2030 hcl:#888785 ecl:gry
byr:1984 cid:223 hgt:165cm

byr:1964 pid:831479208 hgt:153cm iyr:2014
eyr:2024
ecl:brn hcl:#18171d

iyr:2019 ecl:brn
hgt:185cm
byr:1958 hcl:#ceb3a1
eyr:2026
pid:827043482

iyr:2020 hgt:67in cid:116
hcl:#733820 ecl:blu pid:426593479 byr:1922 eyr:2026

eyr:2022 hcl:#fffffd
cid:330 pid:951768959 byr:1969 iyr:2019 hgt:156cm

eyr:2030 ecl:oth byr:1929
hgt:151cm cid:223 hcl:#111544 pid:083495633
iyr:2019

eyr:2025
iyr:2016 ecl:blu hgt:166cm byr:1967
pid:739606431

eyr:2021 ecl:gry hcl:#ceb3a1
pid:788420638 byr:1922 iyr:2020 hgt:161cm

byr:1956 eyr:2025
hcl:#888785 ecl:oth
pid:705051840
hgt:158cm

pid:047851403 byr:1937 hcl:#cfa07d
iyr:2015
hgt:192cm eyr:2025

hgt:178cm cid:194
iyr:2019 byr:1923 hcl:#c0946f pid:411527076 ecl:gry eyr:2022

hgt:186cm
iyr:2014 byr:1956 eyr:2027 ecl:brn
pid:976268893 hcl:#341e13

iyr:2011 cid:81 hcl:#18171d hgt:183cm byr:1958 ecl:brn eyr:2025 pid:389943720

eyr:2028 byr:1972 ecl:amb hcl:#c0946f pid:593351635 hgt:165cm

iyr:2012 byr:1991 ecl:blu hcl:#341e13 hgt:169cm cid:156 pid:599766528

byr:2029
hgt:75cm
pid:319443119 iyr:2001 eyr:2020 cid:306 ecl:zzz

hcl:#866857 cid:273 ecl:grn byr:1948 hgt:167cm iyr:2014 pid:256331758 eyr:2021

iyr:2016 eyr:2024 ecl:oth hcl:#733820
byr:1977
pid:423680717 hgt:158cm cid:241

hcl:#341e13 pid:788619400 byr:1954 ecl:hzl cid:153 hgt:185cm eyr:2024 iyr:2017

hcl:#cfa07d ecl:blu hgt:161cm eyr:2026 pid:621023569 byr:1928 iyr:2016

cid:91
byr:2024 hgt:168in
iyr:1951
ecl:xry
eyr:1979
hcl:aa8fc8
pid:166cm

eyr:2028 cid:155 hgt:159cm
byr:1952
pid:875326712
ecl:brn
iyr:2012
hcl:#18171d

eyr:2026 hcl:#733820 byr:1990
hgt:163cm
ecl:amb iyr:2015 pid:162682954

iyr:2020 pid:936952728 byr:1969 ecl:brn
hgt:151cm hcl:#c0946f eyr:2029

hgt:189cm pid:132928469
ecl:amb hcl:#866857
byr:1928 eyr:2026 iyr:2013

ecl:grn pid:185240766 iyr:2012
hgt:190cm byr:1952 hcl:#623a2f
eyr:2020

byr:2021
eyr:2026 hgt:67cm ecl:#ef67e5 hcl:z iyr:1935
pid:4900748653 cid:64

hgt:69in hcl:#7d3b0c cid:248
eyr:2022 pid:076116194 byr:1979
ecl:gry iyr:2016

byr:1991 eyr:2021 hgt:180cm iyr:2020
cid:127 ecl:blu
hcl:#44e350

byr:1954 hcl:#733820 iyr:2018 pid:002868205
hgt:150cm
ecl:brn
eyr:2021

pid:524531652 hcl:#623a2f cid:80
ecl:amb
iyr:2017
eyr:2020 hgt:170cm byr:1927

pid:424660272 iyr:2018 hcl:#efcc98 eyr:2021 cid:238 hgt:187cm byr:1970 ecl:blu

byr:1923
pid:946014113 cid:273
iyr:2013 hgt:175cm ecl:brn hcl:#602927 eyr:2020

hcl:#6b5442 cid:88 ecl:gry iyr:2012 byr:1929
hgt:71in
eyr:2022 pid:581329373

eyr:1960
ecl:oth
iyr:2017 pid:022131529 cid:79
hgt:184
byr:2005 hcl:#6b5442

eyr:2030 pid:422677836 iyr:2011
hcl:#fffffd byr:1925 hgt:60in ecl:gry

cid:325 hgt:158cm byr:1971 ecl:hzl pid:517329528 hcl:#18171d eyr:2026 iyr:2011

byr:1937
cid:259
eyr:2030 hgt:176cm ecl:blu pid:321795494 iyr:2017

pid:551525002
ecl:grn
eyr:2026 iyr:2013 cid:230 hgt:74in hcl:#cfa07d byr:1954

pid:004366607
hcl:c39522 hgt:66cm
ecl:#21a3e9 eyr:2024 cid:139

ecl:xry
eyr:2037 byr:2016 iyr:1994 cid:98 pid:522572315
hgt:158cm hcl:0ee9d4

cid:70 eyr:2028 hgt:179cm
pid:073189127 ecl:grn iyr:2018 hcl:#142217
byr:1977

pid:045852463
cid:69 iyr:2020 ecl:brn byr:1948 eyr:2020 hgt:64in hcl:#733820

cid:268
byr:1970 eyr:2025 hgt:178cm pid:512594967 iyr:2011 ecl:brn hcl:#733820

eyr:2025 hcl:#18171d
iyr:2014 byr:1950 hgt:161cm
pid:329927551

byr:1956 eyr:2024 hgt:163cm pid:965746490
hcl:#a97842 ecl:brn
cid:100 iyr:2010

cid:112 eyr:2027 pid:864571411 hgt:190cm
iyr:2011 byr:1962 ecl:grn hcl:#602927

ecl:gry cid:54 iyr:2011 hcl:#6b5442 byr:1922
eyr:2025 pid:689641249
hgt:159cm

eyr:2028
cid:323 iyr:2020
hgt:158cm
ecl:hzl pid:876082513 byr:1941

hcl:#18171d hgt:160cm pid:910116712
ecl:oth iyr:2014 byr:1927
eyr:2023
cid:226

iyr:2030 hcl:#602927 eyr:2030 ecl:grn cid:183 hgt:186cm byr:1963
pid:706533329

cid:279
eyr:2026 iyr:2015 byr:1958 pid:120633047 hgt:150cm
ecl:hzl hcl:#866857

iyr:2019
byr:1989 hcl:#733820 ecl:hzl pid:470596304 hgt:187cm eyr:2022

eyr:2027 hcl:#888785 cid:346
iyr:2013 hgt:167cm ecl:hzl byr:1994 pid:528844948

hcl:#fffffd pid:969181309
iyr:2014
hgt:192cm eyr:2025 byr:1970
ecl:amb

eyr:2026 iyr:2012
hcl:#341e13 ecl:oth pid:053348609
byr:1931 hgt:167cm

eyr:2029 ecl:grn pid:030276279 iyr:2013 hgt:182cm hcl:#fffffd
byr:1967

byr:1949
eyr:2022
hcl:#ceb3a1 iyr:2016 ecl:oth hgt:177cm
cid:224 pid:745439371

iyr:2016 byr:1940 eyr:2028 pid:351021541 hcl:#341e13 ecl:amb hgt:64in

cid:309
hgt:74in pid:698666542
hcl:#866857 ecl:oth byr:1953
iyr:2019
eyr:2021

iyr:2013
byr:1979 eyr:2023 hgt:186cm ecl:brn
cid:236
pid:727367898
hcl:#733820

hgt:65cm byr:1956
eyr:2025 pid:371685442 iyr:2016 ecl:oth cid:245 hcl:#623a2f

hgt:155cm ecl:grn hcl:#888785
eyr:2027 iyr:2010 byr:1927
pid:916070590

hgt:179cm
ecl:blu hcl:#866857 byr:1993 iyr:2019 cid:332 eyr:2022 pid:354895012

iyr:2029 hgt:69cm
hcl:#efcc98
pid:179cm cid:216 byr:2007 ecl:oth
eyr:2025

iyr:1988 hgt:187 hcl:z
ecl:#30e67c byr:2020
pid:225115160 eyr:2037

eyr:2021 iyr:2011 hgt:188cm
ecl:hzl
byr:1965 pid:455044780

ecl:gry pid:750994177
byr:2002
iyr:2016
eyr:2023 hgt:61in
hcl:#fffffd

iyr:2020
ecl:gry pid:304482618
hcl:#18171d eyr:2027
byr:1955 hgt:177cm

hgt:187cm byr:1981 pid:795201673
eyr:2020
cid:154
hcl:#b6652a iyr:2017 ecl:oth

ecl:gry byr:1954 hgt:151cm iyr:2019
cid:101
eyr:2026 hcl:#cfa07d pid:930011749

ecl:zzz eyr:1955 pid:#d45ed4 cid:338 iyr:2030 hcl:z
byr:1999

eyr:2020 pid:861636258 hgt:166cm hcl:#7d3b0c ecl:brn
iyr:2018 cid:125 byr:1958

iyr:2014 eyr:2022
hgt:67
hcl:#7d3b0c ecl:brn byr:1935 pid:409864761

hcl:#866857 iyr:2012 cid:94
pid:483584137 byr:2000 ecl:blu hgt:178cm eyr:2022

byr:1946 ecl:hzl iyr:2015 eyr:2028 hgt:184cm
hcl:#602927
pid:947292495

byr:1974 cid:96 hgt:59in eyr:2028 pid:358779220 hcl:#6b5442 ecl:gry iyr:2014

hcl:#61154f byr:1932
hgt:167cm ecl:brn cid:126 eyr:2022

ecl:gry
iyr:2014 hgt:169cm
byr:1926 eyr:2020
hcl:#866857
pid:463772660

pid:654733578 ecl:hzl cid:111 iyr:2010
hcl:#fffffd eyr:2024 hgt:191cm byr:1943

eyr:2021
hgt:74cm hcl:#c0946f iyr:2026
pid:164776417 byr:1977

ecl:#6db74f iyr:1921 pid:442332495
byr:2018
hcl:z cid:101 eyr:1949

cid:332 byr:2022
ecl:blu
eyr:2038
iyr:1939
hcl:518816 hgt:191cm
pid:10107923

pid:168853141 iyr:2010 eyr:2021 byr:1996 ecl:hzl hgt:183cm
hcl:#733820

hgt:62in pid:556617728
hcl:336a3b eyr:2023
byr:2029
ecl:xry iyr:2016
cid:89

ecl:hzl hcl:#efcc98
iyr:2020 cid:297 hgt:181cm
pid:075811396 eyr:2023 byr:1960

eyr:2030 hcl:#602927 ecl:brn
iyr:2015 hgt:75in byr:1995

ecl:grn cid:237 hcl:#8936bb hgt:183cm eyr:2028
iyr:2015 byr:1998

pid:550427102 hgt:67in byr:1991 ecl:gry hcl:#efcc98

cid:274 hgt:70cm
iyr:2022 eyr:1961 hcl:00f05b
byr:1948 ecl:gmt

ecl:blu iyr:2018
hgt:153cm eyr:2020 pid:831302208 byr:1927 hcl:#18171d cid:150

iyr:2018
byr:1973 hcl:#ceb3a1
cid:215
hgt:192cm pid:770473271 eyr:2027 ecl:blu

iyr:2019 eyr:2021 hcl:#623a2f ecl:hzl hgt:174cm byr:1962
pid:589533254

iyr:2012 ecl:hzl
hgt:184cm cid:292 byr:1991 pid:677889195 hcl:#a97842

iyr:2010
pid:#4f47c3
hgt:154in
cid:69
hcl:z byr:2022
ecl:#e36a65

ecl:#5ff50c pid:499582878 hcl:#b6652a hgt:171cm iyr:2016
byr:1930 eyr:2024

hgt:159cm byr:1936 eyr:2028
hcl:#6b5442 ecl:amb iyr:2015 pid:658019126

byr:1928 pid:599970280 eyr:2026 ecl:grn hgt:158cm hcl:#18171d
cid:239 iyr:2013

pid:684820830 hgt:182cm ecl:oth hcl:#c0946f eyr:2023
iyr:2018

iyr:2019 ecl:blu pid:668361647 cid:348
byr:1952 hcl:#602927
eyr:2021 hgt:71in

hgt:165cm
ecl:grn eyr:2030 iyr:2010 pid:256350027 hcl:#7d5994 cid:193 byr:1947

hcl:#602927 iyr:2019 ecl:gry eyr:2029
byr:1931 cid:118 hgt:153cm pid:911300650

eyr:2025 hgt:154cm
hcl:#866857 iyr:2016 ecl:grn pid:515526226 byr:1936

hcl:#623a2f hgt:160cm iyr:2019 ecl:oth
pid:932621460
eyr:2030
byr:1990

hcl:#623a2f ecl:blu eyr:2027 cid:277 pid:662549708
byr:1949 iyr:2016 hgt:176cm

iyr:2010 eyr:2021
byr:1947
pid:223603325 ecl:gry

ecl:gry pid:145738978 eyr:2029 iyr:2020
hcl:#733820 byr:1949 hgt:183cm

hgt:63in eyr:2028 iyr:2011 hcl:#a97842 byr:1941 ecl:gry
pid:091089766

hcl:#fffffd
cid:275 hgt:157cm
eyr:2021 byr:1978
ecl:hzl iyr:2020 pid:242258232

pid:239061408 ecl:oth
eyr:2023 iyr:2011 hgt:192cm byr:1949 hcl:#733820 cid:132

byr:1954
hgt:152cm ecl:brn pid:667414305 eyr:2021
cid:282
iyr:2014
hcl:#341e13

iyr:2018
pid:745564182 hgt:186cm eyr:2028 hcl:#7d3b0c byr:1935 ecl:gry

iyr:2014
eyr:2026 hcl:d26483
byr:1972 pid:611712147 hgt:163cm ecl:#57d27c

cid:322 eyr:2025 byr:1937
iyr:2020
ecl:blu hcl:#cfa07d hgt:158cm
pid:150255302

eyr:2030 iyr:2011 hcl:#866857 byr:1974 ecl:blu pid:755213661 hgt:155cm
cid:116

hcl:#866857 pid:679616797
ecl:gry hgt:166cm byr:1999 iyr:2014 eyr:2025

iyr:2019 hcl:#fffffd
hgt:158cm
eyr:2028 pid:835993614 byr:1920

ecl:brn pid:742320152 iyr:2013
hgt:151cm eyr:2025 cid:63 byr:1931 hcl:#200aaa

byr:1950 cid:155 ecl:xry
hgt:150cm
iyr:2014
eyr:2027 hcl:#615954 pid:596469710

byr:1946 hgt:166cm ecl:gry
hcl:#18171d cid:261 iyr:2016 pid:267318602 eyr:2021

ecl:gry hgt:185cm iyr:2013 pid:092573029
eyr:2023 byr:1956 hcl:#b6652a

byr:1997 hgt:172cm eyr:2021 iyr:2014 pid:337403043
ecl:blu hcl:#efcc98

hgt:190cm iyr:2015 byr:1949 eyr:2023
pid:230935940

byr:1980 hgt:171cm eyr:2021 pid:9435249395
ecl:oth
hcl:#a97842
iyr:2017

byr:2011 hcl:#b6652a eyr:2039 ecl:hzl iyr:1923
hgt:186cm pid:239188418 cid:93

pid:791787662 cid:51 ecl:gry hcl:#602927 hgt:160cm iyr:2020
eyr:2028 byr:1975

ecl:amb pid:720900081 byr:1978 hcl:#a97842 hgt:183cm iyr:2016
eyr:2022

eyr:2027 hgt:157cm pid:628454234
hcl:#18171d ecl:gry iyr:2017 cid:345 byr:1988

byr:1985 pid:996422540
iyr:2013 hgt:66in ecl:grn
eyr:2020 hcl:#341e13

eyr:2022
pid:186cm
cid:214 iyr:2017 hcl:#866857 ecl:brn byr:1988 hgt:161cm

iyr:2019 eyr:2025 pid:752184592 hgt:154cm byr:1966 hcl:#18171d cid:119 ecl:grn

hcl:#b6652a cid:100 byr:1974 pid:477922277 eyr:2024 ecl:grn iyr:2011 hgt:59in

iyr:2013 ecl:brn
hgt:184cm eyr:2023 byr:1969
pid:514127885 hcl:#6b5442

hcl:#cfa07d
iyr:2020 byr:1923 ecl:gry hgt:64in eyr:2029 cid:111

byr:1921 hgt:73in pid:971490088 iyr:2016 eyr:2025 hcl:#866857 cid:271 ecl:blu

ecl:oth
eyr:2023 iyr:2019 hgt:179cm
byr:1953 pid:226869705 hcl:#602927
cid:63

hgt:175cm ecl:hzl iyr:2010 byr:1938 eyr:2021 pid:718683561 hcl:#341e13

iyr:2023 hgt:189in byr:2030 pid:171cm ecl:#447c00 hcl:z eyr:2022

ecl:blu eyr:2026
hgt:191cm iyr:2020 hcl:#888785 pid:128824091 cid:99 byr:1982

eyr:2026 pid:333173949 iyr:2017 ecl:oth byr:1928 hcl:#fffffd
hgt:151cm

hcl:#6b5442 ecl:grn byr:1945
pid:888990994
cid:168 eyr:2026 iyr:2016
hgt:158cm

ecl:grn iyr:2013
byr:1931 pid:716975878 hgt:168cm hcl:#cfa07d eyr:2023

pid:815050555
ecl:blu
hgt:161cm hcl:#888785 eyr:2025
iyr:2020 byr:1980

pid:470039281
byr:1967 iyr:2017
ecl:gry eyr:2021
hgt:171cm
hcl:#7d3b0c

hcl:#bdf8d6 iyr:2018 byr:1954 eyr:2030
ecl:blu hgt:184cm pid:694267794

hcl:#cfa07d byr:1971 ecl:brn
iyr:2016 hgt:167cm eyr:2027 pid:237865320

byr:1921 eyr:2028
iyr:2014 pid:186145415 cid:215 ecl:oth hgt:176cm
hcl:#a97842

pid:925805272
hcl:#7d3b0c
eyr:2030
hgt:65in ecl:blu

byr:1992
cid:278
ecl:oth hgt:65in hcl:#c0946f
iyr:2013
pid:092712496 eyr:2024

hgt:151cm
iyr:2018 hcl:#18171d
byr:1971 pid:599220575 cid:321
eyr:2030
ecl:brn

byr:1956 iyr:2016 hcl:#b6652a
pid:109381754
ecl:hzl cid:233

iyr:2015 byr:1988
hcl:#866857 ecl:amb
pid:274656754
hgt:152cm eyr:2022

eyr:2028 ecl:amb cid:285
byr:1947
hgt:186cm pid:165847317 hcl:#733820 iyr:2013

hcl:#866857 pid:601229952 eyr:2023 ecl:brn
hgt:191cm
cid:183

hgt:191cm iyr:2018 hcl:#b50bab byr:1936 eyr:2025 pid:422563929 ecl:oth

ecl:gry
eyr:2025 hgt:181cm
hcl:#a97842
byr:1971 iyr:2010 pid:267796608

hcl:#0fd3b0 eyr:2030
iyr:2014 ecl:oth pid:606512017 hgt:173cm cid:301
byr:1999

byr:1937 cid:277
pid:148179917 hgt:179cm hcl:#602927 iyr:2018
eyr:2029 ecl:grn

hcl:#7d3b0c
byr:1960
ecl:hzl hgt:162cm
iyr:2015 pid:014246579
eyr:2023

ecl:blu eyr:2020
iyr:2011 byr:1955 hcl:#777876 hgt:188cm pid:988764375

iyr:2012 ecl:amb hcl:#18171d
pid:524961020 byr:1983 hgt:173cm eyr:2028

hgt:153cm hcl:#efcc98 pid:127759635
iyr:2019 byr:1932
ecl:hzl eyr:2020

eyr:2025 pid:421725637
ecl:gry iyr:2013
hcl:#c0946f
byr:1971

iyr:2015 pid:654033544
cid:176
hgt:163cm
byr:1923 ecl:brn hcl:#866857

hcl:#623a2f byr:2013
hgt:76cm ecl:#5cd4a8 iyr:2007
eyr:2035 cid:128 pid:122621229

hcl:#927794 iyr:2019 byr:1964 hgt:158cm
ecl:oth pid:269737193 eyr:2025

iyr:2014 cid:181
ecl:blu byr:1949 hcl:#341e13 eyr:2026 pid:120077363 hgt:174cm

cid:161 eyr:2024 hcl:z
pid:638178037 hgt:151cm byr:1920 ecl:oth
iyr:2011

ecl:brn eyr:2023 hgt:161cm hcl:#a97842 byr:1977 cid:79 pid:177001463 iyr:2014

byr:1938 eyr:1967
ecl:grn pid:302413712 hcl:#888785 hgt:183cm iyr:2010

hgt:164cm
byr:1955 pid:772380994 iyr:2015 hcl:#c0946f eyr:2025 ecl:amb

hcl:#602927
eyr:2021 byr:1924 hgt:171cm cid:161 ecl:amb iyr:2019

hgt:119
hcl:7d1404 eyr:1957
pid:143311761 iyr:2027
byr:1939 ecl:#de1d21

hgt:182cm
iyr:2015 ecl:blu cid:205 pid:136552613 hcl:#ceb3a1 byr:1992

ecl:blu iyr:2013 cid:54 byr:1998
hcl:z hgt:172cm eyr:2034 pid:#ec3c3a

byr:1975 ecl:blu eyr:2025 hcl:#623a2f
pid:358585328
iyr:2012

pid:282306278
byr:1958 ecl:grn hgt:190cm iyr:2020 hcl:#18171d cid:276 eyr:2024

byr:1955 eyr:2028 iyr:2017
hgt:177cm ecl:grn
pid:111002386 hcl:#6b5442

eyr:2026 pid:694088201 hcl:#866857 hgt:169cm byr:1957 ecl:amb iyr:2018 cid:109

hgt:171cm ecl:blu iyr:2013
eyr:2021
hcl:#6b5442 byr:1965
pid:268169550

pid:803092066
eyr:2023 iyr:2010 hcl:#a97842 ecl:grn byr:1956 hgt:191cm cid:173

eyr:2024
iyr:2012 byr:1991 ecl:gry pid:946620993
hgt:190cm hcl:#b6652a cid:181

iyr:2019 hcl:#cfa07d cid:75 hgt:175cm
eyr:2022 pid:062548271 ecl:oth

cid:262
byr:1956
iyr:2014 pid:860561420 hcl:#888785 hgt:176cm

hcl:#efcc98 hgt:188cm pid:828180303 iyr:2013 byr:1932 ecl:gry eyr:2028

eyr:2029
hcl:#341e13 byr:1992 ecl:brn iyr:2012 cid:292
pid:644391775 hgt:150cm

ecl:grn hgt:182cm eyr:2026 hcl:#ceb3a1 byr:1982 pid:625704144 iyr:2013

byr:1926
iyr:2013 ecl:brn hcl:#812218 eyr:2025 hgt:150cm pid:610910806

hgt:61in byr:1926 iyr:2017 eyr:2020 ecl:oth
hcl:#623a2f pid:347974562

hgt:185cm eyr:2023 ecl:blu byr:1940 pid:123961293 iyr:2014
hcl:#a97842

iyr:2011 byr:1984 hgt:172cm eyr:2020 hcl:#692e6c ecl:grn pid:342962046

ecl:blu hcl:#b08932 pid:343331979
iyr:2019
hgt:193cm byr:1985
cid:269 eyr:2023

hcl:#fffffd ecl:blu
pid:483091240
iyr:2011 eyr:2022 byr:1988

iyr:2019
hgt:177cm
pid:516533115
cid:294 ecl:amb hcl:#ceb3a1 byr:1922

byr:1965 eyr:2023 hcl:#cfa07d
iyr:2013
hgt:193cm ecl:grn
pid:931305875

ecl:hzl
byr:1944 hgt:164cm
hcl:#fffffd
iyr:2019 eyr:2029 pid:141532765 cid:209

iyr:2013 hgt:189cm
ecl:brn
pid:604140631 eyr:2022 hcl:#ceb3a1
byr:1935

ecl:amb hcl:#888785 byr:1959
cid:287 pid:849438430 hgt:152cm
eyr:2027
iyr:2020

byr:1988 hcl:#623a2f eyr:2029 ecl:brn iyr:2018 hgt:167cm pid:470443459

cid:276
hcl:#341e13
eyr:2021
iyr:2012 ecl:hzl hgt:175cm
byr:2027 pid:271833606

eyr:2027
iyr:2010 pid:970527839 hgt:164cm byr:1974 hcl:#623a2f
ecl:amb

eyr:2020 ecl:grn byr:1932 iyr:2013 pid:104193512
hcl:#c0946f

eyr:2030
byr:1982 hgt:65in ecl:blu
hcl:#623a2f
pid:570953460 iyr:2020

eyr:2020 byr:1922
hcl:#602927 pid:803264417 iyr:2019
ecl:grn
hgt:169cm

ecl:amb hcl:#866857 byr:1963 hgt:170cm
eyr:2028
pid:762546796 iyr:2017

eyr:2035 pid:54291174
cid:184
iyr:1980 hgt:176cm ecl:gry hcl:#733820 byr:1974

iyr:2013 hcl:#c0946f pid:408646971 hgt:63in cid:84
byr:1951
ecl:amb eyr:2028

eyr:2021 hcl:#6b5442 byr:1994 hgt:170cm ecl:amb pid:348959147
iyr:2013

byr:1957
ecl:hzl hgt:156cm pid:890752588 eyr:2025
hcl:e7c520 cid:199 iyr:2017

hgt:169cm iyr:2016
cid:180 hcl:#733820 eyr:2024 ecl:hzl pid:661114936 byr:1928

iyr:2015 eyr:2020 byr:1941 hgt:179cm pid:148063033
hcl:#6b5442 ecl:brn

iyr:1935 pid:14292032 byr:2020
eyr:1956 ecl:#c9bc33
hgt:59cm hcl:#cfa07d

hgt:165cm iyr:2010
eyr:2023
hcl:#733820 pid:312465756
cid:112 byr:1993 ecl:amb

eyr:2032 ecl:grt iyr:1963
byr:1964
pid:#f5628c
hcl:z hgt:111

hgt:169cm iyr:2012
hcl:#623a2f cid:291 ecl:oth
pid:809080900 byr:1979 eyr:2023

iyr:2021 eyr:2033 ecl:gmt hgt:59cm byr:1967
pid:2498700612

byr:1953 ecl:oth iyr:2013
hcl:#b6652a pid:442586860

pid:095687847 eyr:2022 hgt:151cm byr:1967 iyr:2017 ecl:oth hcl:#866857

hcl:#866857 pid:983640144 hgt:61cm
ecl:hzl
byr:1991
iyr:1930 eyr:2024

ecl:oth hcl:#602927 eyr:2025 iyr:2013 hgt:151cm byr:1992 pid:812583062
\ No newline at end of file

A 4/main.zig => 4/main.zig +74 -0
@@ 0,0 1,74 @@
const std = @import("std");
const input = @embedFile("input");
const mem = std.mem;
const fmt = std.fmt;

const print = std.debug.print;

fn array_list(a: *mem.Allocator) !std.ArrayList([]const u8) {
    var strings = mem.split(input, "\n\n");
    var list = std.ArrayList([]const u8).init(a);
    while (strings.next()) |string| {
        try list.append(string);
    }
    return list;
}

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    const a = &gpa.allocator;
    var list = try array_list(a);
    const slice = list.items;
    
    var validp1: usize = 0;
    var v: usize = 0;
    for (slice) |entry| {
        var split = mem.tokenize(entry, "\n ");
        var valid: usize = 0;
        var vp1: usize = 0;
        while (split.next()) |s| {
            var colon_split = mem.tokenize(s, ":");
            const field = colon_split.next().?;
            const value = colon_split.next().?;
            if (mem.eql(u8, field, "byr")) blk: {
                vp1 += 1;
                const val = fmt.parseInt(usize, value, 0) catch break :blk;
                valid += @boolToInt(val >= 1920 and val <= 2002);
            } else if (mem.eql(u8, field, "iyr")) blk: {
                vp1 += 1;
                const val = fmt.parseInt(usize, value, 0) catch break :blk;
                valid += @boolToInt(val >= 2010 and val <= 2020);
            } else if (mem.eql(u8, field, "eyr")) blk: {
                vp1 += 1;
                const val = fmt.parseInt(usize, value, 0) catch break :blk;
                valid += @boolToInt(val >= 2020 and val <= 2030);
            } else if (mem.eql(u8, field, "hgt")) {
                vp1 += 1;
                const ms = value[value.len-2..value.len];
                if (mem.eql(u8, ms, "cm")) blk: {
                    const val = value[0..value.len-2];
                    const num = fmt.parseInt(usize, val, 0) catch break :blk;
                    valid += @boolToInt(num >= 150 and num <= 193);
                } else if (mem.eql(u8, ms, "in")) blk: {
                    const val = value[0..value.len-2];
                    const num = fmt.parseInt(usize, val, 0) catch break :blk;
                    valid += @boolToInt(num >= 59 and num <= 76);
                }
            } else if (mem.eql(u8, field, "hcl")) {
                vp1 += 1;
                valid += @boolToInt(value[0] == '#' and value.len == 7);
            } else if (mem.eql(u8, field, "ecl")) {
                vp1 += 1;
                valid += @boolToInt(mem.eql(u8, value, "amb") or mem.eql(u8, value, "blu") or mem.eql(u8, value, "brn") or mem.eql(u8, value, "gry") or mem.eql(u8, value, "grn") or mem.eql(u8, value, "hzl") or mem.eql(u8, value, "oth"));
            } else if (mem.eql(u8, field, "pid")) blk: {
                vp1 += 1;
                _ = fmt.parseInt(usize, value, 0) catch break :blk;
                valid += @boolToInt(value.len == 9);
            }
        }
        v += @boolToInt(valid >= 7);
        validp1 += @boolToInt(vp1 >= 7);
    }

    print("part 1: {}\npart 2: {}\n", .{validp1, v});
}
\ No newline at end of file