summaryrefslogtreecommitdiff
path: root/aoc24/tools/generate_main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'aoc24/tools/generate_main.zig')
-rw-r--r--aoc24/tools/generate_main.zig37
1 files changed, 37 insertions, 0 deletions
diff --git a/aoc24/tools/generate_main.zig b/aoc24/tools/generate_main.zig
new file mode 100644
index 0000000..e149127
--- /dev/null
+++ b/aoc24/tools/generate_main.zig
@@ -0,0 +1,37 @@
+const std = @import("std");
+
+pub fn main() !void {
+ var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
+ defer arena.deinit();
+ const allocator = arena.allocator();
+
+ const args = try std.process.argsAlloc(allocator);
+
+ if (args.len != 3) return error.InvalidArguments;
+
+ const part = try std.fmt.parseInt(u32, args[1], 10);
+ const output_file_path = args[2];
+
+ var output_file = try std.fs.cwd().createFile(output_file_path, .{});
+ defer output_file.close();
+
+ try output_file.writer().print(
+ \\const std = @import("std");
+ \\const solution = @import("solution");
+ \\
+ \\pub fn main() !void {{
+ \\ const data = @embedFile("input");
+ \\
+ \\ var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
+ \\ defer arena.deinit();
+ \\ const allocator = arena.allocator();
+ \\
+ \\ const input = try solution.parse(allocator, data);
+ \\ const output = try solution.part{}(allocator, input);
+ \\ try std.fmt.format(std.io.getStdOut().writer(), "{{}}\n", .{{output}});
+ \\}}
+ ,
+ .{part},
+ );
+ return std.process.cleanExit();
+}