main.zig
1 const std = @import("std"); 2 3 pub const std_options = std.Options{ 4 .log_level = .debug, 5 }; 6 7 const options = @import("build-options"); 8 const days = @import("days.zig"); 9 10 pub fn main() !void { 11 const day = blk: { 12 if (options.day) |d| break :blk d; 13 14 std.log.err("please specify which day to build with the `-Dday` flag", .{}); 15 return; 16 }; 17 18 var gpa = std.heap.GeneralPurposeAllocator(.{}){}; 19 const allocator = gpa.allocator(); 20 defer { 21 const deinit_status = gpa.deinit(); 22 if (deinit_status == .leak) @panic("Memory leak"); 23 } 24 25 const day_str = try std.fmt.allocPrint(allocator, "Day {} - Advent of Code 2022", .{day}); 26 defer allocator.free(day_str); 27 28 var progress = std.Progress.start(.{ .root_name = day_str }); 29 defer progress.end(); 30 31 var timer = try std.time.Timer.start(); 32 try days.run(allocator, &progress); 33 const excution_time = timer.lap(); 34 printTimerResult(excution_time); 35 } 36 37 fn printTimerResult(t: u64) void { 38 var rt = t; 39 40 const hours = rt / std.time.ns_per_hour; 41 rt = rt - (hours * std.time.ns_per_hour); 42 43 const minutes = rt / std.time.ns_per_min; 44 rt = rt - (minutes * std.time.ns_per_min); 45 46 const seconds = rt / std.time.ns_per_s; 47 rt = rt - (seconds * std.time.ns_per_s); 48 49 const ms = rt / std.time.ns_per_ms; 50 rt = rt - (ms * std.time.ns_per_ms); 51 52 std.log.info( 53 "Executed in: {}h {}m {}s {}ms (raw ms: {}ms)", 54 .{ hours, minutes, seconds, ms, t / std.time.ns_per_ms }, 55 ); 56 }