const std = @import("std"); const Str = []const u8; const DAYS = 18; const aoc2015 = struct { const day01 = @import("day01.zig"); const day02 = @import("day02.zig"); const day03 = @import("day03.zig"); const day04 = @import("day04.zig"); const day05 = @import("day05.zig"); const day06 = @import("day06.zig"); const day07 = @import("day07.zig"); const day08 = @import("day08.zig"); const day09 = @import("day09.zig"); const day10 = @import("day10.zig"); const day11 = @import("day11.zig"); const day12 = @import("day12.zig"); const day13 = @import("day13.zig"); const day14 = @import("day14.zig"); const day15 = @import("day15.zig"); const day16 = @import("day16.zig"); const day17 = @import("day17.zig"); const day18 = @import("day18.zig"); }; test { _ = @import("day01.zig"); _ = @import("day02.zig"); _ = @import("day03.zig"); _ = @import("day04.zig"); _ = @import("day05.zig"); _ = @import("day06.zig"); _ = @import("day07.zig"); _ = @import("day08.zig"); _ = @import("day09.zig"); _ = @import("day10.zig"); _ = @import("day11.zig"); _ = @import("day12.zig"); _ = @import("day13.zig"); _ = @import("day14.zig"); _ = @import("day15.zig"); _ = @import("day16.zig"); _ = @import("day17.zig"); _ = @import("day18.zig"); } pub fn main() anyerror!void { var timer = try std.time.Timer.start(); var time_sum: usize = 0; var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); defer arena.deinit(); var buffer = std.io.bufferedWriter(std.io.getStdOut().writer()); const stdout = buffer.writer(); try stdout.print("{s:<8}{s:>45}{s:>20}\n", .{ "Day", "Result", "Time" }); comptime var day: u5 = 0; inline while (day < DAYS) : (day += 1) { comptime var buf: [5]u8 = undefined; const day_str = comptime try std.fmt.bufPrint(&buf, "day{d:0>2}", .{day + 1}); timer.reset(); const first_res = @field(aoc2015, day_str).first(arena.allocator()) catch unreachable; const first_time = timer.read() / std.time.ns_per_us; time_sum += first_time; if (@TypeOf(first_res) == Str) { try stdout.print("{s}a: {s:>45}{d:>20} us\n", .{ day_str, first_res, first_time }); } else { try stdout.print("{s}a: {d:>45}{d:>20} us\n", .{ day_str, first_res, first_time }); } if (day < 24) { timer.reset(); const second_res = @field(aoc2015, day_str).second(arena.allocator()) catch unreachable; const second_time = timer.read() / std.time.ns_per_us; time_sum += second_time; if (@TypeOf(second_res) == Str) { try stdout.print("{s}b: {s:>45}{d:>20} us\n", .{ day_str, second_res, second_time }); } else { try stdout.print("{s}b: {d:>45}{d:>20} us\n", .{ day_str, second_res, second_time }); } } } try stdout.print("Total time: {d} ms\n", .{time_sum / std.time.us_per_ms}); try buffer.flush(); }