A 10/input => 10/input +93 -0
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});
+}