1const std = @import("std");
2const days = .{
3 @import("./day1.zig"),
4 @import("./day2.zig"),
5 @import("./day3.zig"),
6 @import("./day4.zig"),
7 @import("./day5.zig"),
8};
9
10pub fn main() !void {
11 var args = std.process.args();
12 _ = args.skip();
13
14 const day_str = args.next() orelse {
15 std.debug.print("Needs day arg\n", .{});
16 std.process.exit(0);
17 };
18
19 const test_str = args.next() orelse "";
20
21 var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init;
22 const allocator = gpa.allocator();
23
24 const day_num = try std.fmt.parseInt(u4, day_str, 10);
25
26 const input_path = try std.fmt.allocPrint(allocator, "inputs/day{d}{s}.txt", .{ day_num, test_str });
27 defer allocator.free(input_path);
28
29 const input_file = try std.fs.cwd().openFile(input_path, .{});
30 defer input_file.close();
31
32 var buf: [4096]u8 = undefined;
33
34 var reader = input_file.reader(&buf);
35 const input_content = try reader.interface.allocRemaining(allocator, .unlimited);
36 defer allocator.free(input_content);
37
38 inline for (days, 1..) |day, i| {
39 if (i == day_num) {
40 std.debug.print("Day {d}\n\n", .{i});
41
42 const answer1, const answer2 = try day.run(allocator, input_content);
43
44 std.debug.print("Answer P1: {d}\n", .{answer1});
45 std.debug.print("Answer P2: {d}\n", .{answer2});
46 break;
47 }
48 }
49}