diff options
author | Mathias Magnusson <mathias@magnusson.space> | 2024-12-03 14:26:04 +0100 |
---|---|---|
committer | Mathias Magnusson <mathias@magnusson.space> | 2024-12-03 14:36:12 +0100 |
commit | bf494891a715080dde14753b51befb463a6c246f (patch) | |
tree | a1be0795f4d3b8db29f0f5569183989d3d23f6fc /aoc24/tools/generate_main.zig | |
parent | 0c01b3924d55e0923cf895254b9412c9cedc9047 (diff) | |
download | programming-problem-solving-bf494891a715080dde14753b51befb463a6c246f.tar.gz |
aoc2024: make build tool download input & add shared main function
Diffstat (limited to 'aoc24/tools/generate_main.zig')
-rw-r--r-- | aoc24/tools/generate_main.zig | 37 |
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(); +} |