~cricket/advent2020

58b373006836876285f7562db45ca8f9cf762245 — cricket 2 months ago c29a5fd
day 9+10: i forgot to push these

not gonna bother with cleaning up day 9; day 10 is already pretty clean i feel but i can clean it up more later
5 files changed, 1208 insertions(+), 1 deletions(-)

A 10/input
A 10/main.zig
M 8/main.zig
A 9/input
A 9/main.zig
A 10/input => 10/input +93 -0
@@ 0,0 1,93 @@
80
87
10
122
57
142
134
59
113
139
101
41
138
112
46
96
43
125
36
54
133
17
42
98
7
114
78
67
77
28
149
58
20
105
31
19
18
27
40
71
117
66
21
72
146
90
97
94
123
1
119
30
84
61
91
118
2
29
104
73
13
76
24
148
68
111
131
83
49
8
132
9
64
79
124
95
88
135
3
51
39
6
60
108
14
35
147
89
34
65
50
145
128
\ No newline at end of file

A 10/main.zig => 10/main.zig +56 -0
@@ 0,0 1,56 @@
const std = @import("std");
const input = @embedFile("input");
const mem = std.mem;
const fmt = std.fmt;
const sort = std.sort;
const print = std.debug.print;

var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const a = &gpa.allocator;
var list = std.ArrayList(usize).init(a);
var items: []usize = undefined;

fn maxKey(map: std.AutoHashMap(usize, usize)) usize {
    var res: usize = 0;
    var map_it = map.iterator();
    while (map_it.next()) |v| {
        if (v.key > res) res = v.key;
    }
    return res;
}

fn part1() usize {
    var diff1: usize = 1;
    var diff3: usize = 1;
    for (items) |v, k| {
        if (k == 0) continue;
        diff1 += @boolToInt(items[k - 1] + 1 == v);
        diff3 += @boolToInt(items[k - 1] + 3 == v);
    }
    return diff1 * diff3;
}

fn part2() usize {
    var ways = std.AutoHashMap(usize, usize).init(a);
    ways.put(0, 1) catch unreachable;
    for (items) |v| {
        const x = if (v < 1) 0 else ways.get(v - 1) orelse 0;
        const y = if (v < 2) 0 else ways.get(v - 2) orelse 0;
        const z = if (v < 3) 0 else ways.get(v - 3) orelse 0;
        ways.put(v, (x + y + z)) catch unreachable;
    }
    return ways.get(maxKey(ways)).?;
}

pub fn main() !void {
    var split = mem.split(input, "\n");
    while (split.next()) |str| {
        const num = try fmt.parseInt(usize, str, 0);
        try list.append(num);
    }
    items = list.items;
    sort.sort(usize, items, {}, comptime sort.asc(usize));

    print("part 1: {}\n", .{part1()});
    print("part 2: {}\n", .{part2()});
}

M 8/main.zig => 8/main.zig +1 -1
@@ 31,7 31,7 @@ fn part1(num: isize) void {
fn isLoop(num: isize) bool {
    const instruction = map.get(num) orelse return false;
    if (ran.contains(num)) return true;
    ran.put(num, true) catch return false; // ??
    ran.put(num, true) catch unreachable;
    switch (instruction.op[0]) {
        'a' => {
            acc += instruction.num;

A 9/input => 9/input +1000 -0
@@ 0,0 1,1000 @@
9
1
39
30
43
2
41
50
36
21
8
37
16
13
18
4
40
33
25
11
47
10
38
29
14
53
3
49
6
31
5
12
15
56
43
57
7
8
26
9
13
16
19
22
17
39
11
10
21
24
20
14
18
63
23
25
27
28
30
33
15
29
45
32
26
31
34
35
36
53
62
60
37
41
38
47
39
68
40
46
42
43
44
51
48
91
71
67
57
115
75
69
72
73
76
85
77
78
79
114
95
143
82
84
120
86
92
99
105
123
124
126
142
129
145
152
159
148
149
219
361
157
161
163
166
176
206
234
178
304
410
324
204
228
247
253
330
271
423
293
297
306
481
487
434
323
391
327
329
342
354
499
382
475
432
451
457
497
550
500
774
564
568
665
590
603
1064
650
681
677
652
656
1149
671
696
736
932
833
883
1140
997
954
1047
1678
1068
1342
1132
1662
1240
1584
1253
1302
1306
1329
1323
1308
1327
2631
2287
1432
2044
1765
1716
2561
1951
3259
2734
2115
2200
2308
2459
2372
3612
4036
2555
2559
2637
2614
5328
3995
2635
2759
3148
6151
3383
3481
3667
4066
4259
4315
8711
4487
4423
4508
5907
6454
8682
8767
5114
9013
6864
5251
17695
6950
5394
7143
6142
7642
15631
9759
7796
13026
12893
8802
8738
8910
12857
8931
10365
15910
12596
10508
12064
13190
10645
11536
11393
12344
14880
26216
13285
14944
22023
19103
19439
16534
17648
17540
17669
17841
35510
20467
19296
21010
24408
21153
23737
22038
23930
22181
22929
24678
25629
34182
53478
30825
36836
47607
34203
38572
40449
35188
35209
84443
54755
39763
40306
79433
55335
43191
44967
44219
45110
68897
75408
69412
64441
56454
91591
65028
67661
69391
70397
72775
122996
74951
123652
117742
109247
82954
80069
111789
203721
87410
88158
182186
143864
101564
125351
329072
126851
124115
121482
132689
134419
197811
139788
143172
210811
155020
157905
204436
181633
168227
379038
167479
175568
188974
220099
280371
223046
281871
293578
349897
261270
245597
254171
338855
290594
359456
310651
328762
298192
323247
416290
439776
335706
436838
412020
581303
343047
364542
409073
624918
578563
468643
698311
499768
582933
536191
755067
670461
621439
588786
608843
626954
737968
633898
848849
967965
957145
752120
776562
707589
931833
811690
773615
908841
1047206
968411
1004834
1757690
1088554
1119124
1553272
1482151
1222684
1937403
1707910
1858896
1584099
1341487
1682456
1459709
2020387
1588252
1481204
1484151
1519279
1585305
3072403
1913675
2131525
3772571
1973245
3068250
2207678
2311238
3522708
2703888
2564171
3227189
2801196
2822691
2860766
2825638
2926792
4846025
2940913
3003430
4556554
2965355
3397826
3104584
3498980
3886920
4121353
6813712
5434867
4875409
4911566
5033316
5015126
5365367
5268059
5386862
5623887
5965350
6045497
7620333
5752430
8008273
7950609
7086708
8119710
6502410
6069939
6603564
10663996
7385900
9154979
8996762
9890535
9786975
12995119
12010847
15200476
10380493
12888392
12115436
11432359
11376317
11717780
16382662
11822369
12254840
19501336
19535472
12572349
22778927
32530591
20271028
17979881
21219334
30911789
25110555
29426007
21812852
20167468
21756810
22098273
22202862
37481217
41924278
23491753
22808676
41292282
23540149
24827189
32073685
30234721
50053566
30552230
43090436
54287401
38147349
42369301
55461098
44015714
105514664
41980320
44565486
42265741
42370330
43855083
44301135
81237785
67346836
46300429
96656702
85996034
48367338
53774870
109748499
72922560
60786951
68699579
84739631
86831227
91922219
80127669
119222989
84246061
84350650
85835403
189876168
84636071
86120824
97629953
88156218
90601564
94667767
100075299
155530806
102142208
122474449
109154289
138125520
151388515
172666630
145423022
148827248
164373730
189281958
174952214
164478319
186492858
187977611
229773672
178757782
170756895
172792289
174277042
206784242
185269331
334288588
194743066
209229588
296885274
224616657
231628738
247279809
289514035
294250270
316179917
319700064
313200978
328852049
335235214
389094976
337270608
398893699
343549184
397408946
379986483
358061620
359546373
369020108
380012397
394498919
419359723
514130692
478908547
613950334
471896466
521142773
563459726
583764305
607451248
686913669
654935278
642053027
872192312
672505822
973496707
680819792
701610804
1034921761
717607993
727081728
728566481
1235965548
749032505
774511316
915641692
891256189
1608864182
1264584097
1085846800
993039239
1262386526
1256270127
1419218797
1588147514
1296988305
1314558849
1322872819
1399587550
2316713995
1806897881
1736532565
1428692532
1444689721
1446174474
2505065597
1477598986
1523543821
2865134309
2097384135
1492208709
1884295428
2249309366
2078886039
2408719619
2696575855
2553258432
2716207102
2611547154
2637431668
3631272844
2714146399
3556485025
3904282016
5108871830
3693999087
2968233542
2873382253
2890864195
6795146211
5515568272
3571094748
3620927956
6993167258
3376504137
3741518075
8231775374
4690433193
4487605658
5249834287
5308123009
5164805586
5684440644
5325693553
5351578067
5587528652
5605010594
5764246448
7598281103
8991352362
10172046302
15759574954
6249886390
15856486946
6947598885
6997432093
7118022212
12301290267
8066937330
7864109795
8229123733
9178038851
15226555826
10601412354
13316771617
13831183778
23623684749
14862479495
15523624369
10939106719
14479010123
11369257042
12014132838
13247318483
24432596132
13197485275
13367908602
13945030978
18057128931
14065621097
16093233528
18803216514
17042148646
15931047125
22375524126
26615227085
19779451205
21540519073
21970669396
35606140170
26079753935
22308363761
22953239557
23383389880
24186425202
24566742317
24616575525
25211618113
26444803758
57576809566
26565393877
27312939580
43121902581
29996668222
43486952404
32024280653
49568466642
32973195771
41750120601
47092390785
44493758630
67688644898
47519981874
46537411713
47950132197
45261603318
45691753641
47569815082
86243879231
48753167519
62969863993
49828193638
51656421871
53757743338
53878333457
56562062099
95042522982
74723316372
76460148175
64997476424
79116671438
114565943066
118875809881
92063573712
91799015031
97398008720
90953356959
92229165354
92831418400
105315229618
141627208669
161877291717
96322982601
116727607331
98581361157
260503018550
114825670062
105414165209
211148652663
146709751857
152885044700
359084379707
139720792796
163578837581
144114147862
170070028397
189461582432
222141772540
182752371990
203995526366
183182522313
185060583754
209559025731
189154401001
335864152858
194904343758
293485704915
201737147810
213407031219
220239835271
245134958005
249528313071
463555733312
331770335611
402413357771
283834940658
303299630377
307692985443
327296670175
417402557585
408311374977
365934894303
513725540186
444432656829
398713426732
368243106067
525018553859
503044730646
522201013933
396641491568
465374793276
587134571035
832711539302
433646866490
735608045152
720702187962
533363253729
630596300552
649769834961
591527926101
610992615820
634989655618
675936091510
693231564478
762576385871
764884597635
1114037346466
766956532799
795354918300
1198127186855
1064243167042
830288358058
862016284844
918842505501
1200982838428
899021659766
967010120219
1025174792591
1044639482310
1124891179830
1163959554281
1209299345239
1202520541921
1245982271438
1226517581719
1720575573820
1974183942874
1780858790345
1944017298092
1557931304171
1531841130434
1562311451099
1597244890857
1625643276358
1817864165267
1887191077435
1797298478277
2082802059782
1866031779985
1924196452357
1943661142076
2981823719548
2069814274901
2288850734111
2327411721751
2455281616677
2758358712153
4301595664625
2472499853157
3200701524593
3089772434605
3094152581533
3120242755270
3129086021291
4269798331434
4621613565039
3809692922061
3222888167215
4232511876187
3615162643544
3663330258262
3721494930634
3790228232342
6886218425477
3867857594433
6282192775218
4358665009012
6792416279553
4616262455862
4782693338428
4927781469834
5601585874448
5562272287762
6753102692867
6210015189875
6183925016138
6214395336803
6249328776561
6351974188506
7384825188896
6838050810759
7032581089276
6944383097849
7278492901806
7453558490604
13135547202038
10039557008903
7658085826775
8226522603445
8484120050295
8974927464874
14177241468449
9544043925696
9398955794290
16152058487157
10490053757596
13158778434652
11746197303900
12393940206013
12398320352941
12433253792699
12463724113364
14329208286745
13296357286355
28550378840098
21290241229596
13976964187125
14397941588453
14732051392410
15680081094049
15884608430220
49840620069694
16142205877070
25696102412853
17459047515169
39040432597694
21862679907654
24131007186700
19889009551886
33343655945389
22236251061496
24140137509913
35773617982106
33185366838241
24831574145640
27694298874808
85614238051800
52681386026798
28976438380404
50786629901594
37174849659816
28374905775578
31856989103622
39321727422823
31564689524269
32026814307290
33601253392239
47583308426694
57553091516475
65628067699529
41751689459540
56069204650386
57316374024941
42125260613382
90738458354716
48971711655553
51834436384721
53206479921218
52525873020448
76496577082639
88881063549210
\ No newline at end of file

A 9/main.zig => 9/main.zig +58 -0
@@ 0,0 1,58 @@
const std = @import("std");
const input = @embedFile("input");
const mem = std.mem;
const fmt = std.fmt;
const sort = std.sort;
const print = std.debug.print;

var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const a = &gpa.allocator;
var glist = std.ArrayList(usize).init(a);

fn addsto(x: usize, list: []usize) bool {
    for (list) |v| {
        for (list) |w| {
            if (v + w == x) return true;
        }
    }
    return false;
}

fn subslice(max: usize, list: []usize) []usize {
    var s: usize = 0;
    var k: usize = 1;
    var sum = list[0];
    while (k <= list.len) : (k += 1) {
        const v = list[k];
        while (sum > max and s < k - 1) : (s += 1) sum -= list[s];
        if (sum == max) return list[s .. k - 1];
        if (k < list.len) sum += v;
    }
    return list[0..1];
}

pub fn main() !void {
    var split = mem.split(input, "\n");
    var i: usize = 0;
    while (split.next()) |str| : (i += 1) {
        const val = try fmt.parseInt(usize, str, 0);
        try glist.append(val);

        var list = std.ArrayList(usize).init(a);
        if (i <= 25) continue;
        var k: usize = 0;
        while (k <= 25) : (k += 1) {
            const item = glist.items[i - k];
            try list.append(item);
        }

        if (!addsto(val, list.items)) break;
    }
    const items = glist.items;
    const end = items[i];
    print("part 1: {}\n", .{end});
    const range = subslice(end, items);
    const min = sort.min(usize, range, {}, comptime sort.asc(usize)).?;
    const max = sort.max(usize, range, {}, comptime sort.asc(usize)).?;
    print("part 2: {}\n", .{min + max});
}