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