summaryrefslogtreecommitdiff
path: root/aoc24/tools/generate_main.zig
blob: e14912798c418291ffb9722f4f1b692abc9fba65 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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();
}