diff options
| author | Mathias Magnusson <mathias@magnusson.space> | 2025-12-01 14:04:18 +0100 |
|---|---|---|
| committer | Mathias Magnusson <mathias@magnusson.space> | 2025-12-01 14:04:18 +0100 |
| commit | fb98b90b7da6d13594b0292b635cb85498583eb9 (patch) | |
| tree | d576264c92888ca738725b23ccbb11b7636f74a3 /aoc25/tools | |
| parent | 2f31753057ab67f3a7ba9d25b83e01aefd90505b (diff) | |
| download | programming-problem-solving-fb98b90b7da6d13594b0292b635cb85498583eb9.tar.gz | |
aoc2025: copy zig project from 2024 & upgrade to 0.15.2
Diffstat (limited to 'aoc25/tools')
| -rw-r--r-- | aoc25/tools/download_input.zig | 41 | ||||
| -rw-r--r-- | aoc25/tools/generate_main.zig | 43 |
2 files changed, 84 insertions, 0 deletions
diff --git a/aoc25/tools/download_input.zig b/aoc25/tools/download_input.zig new file mode 100644 index 0000000..3fae78c --- /dev/null +++ b/aoc25/tools/download_input.zig @@ -0,0 +1,41 @@ +const std = @import("std"); + +pub fn main() !void { + std.debug.print("Downloading input from adventofcode.com\n", .{}); + + 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 day = 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(); + var output_buffer: [4096]u8 = undefined; + var output_writer = output_file.writer(&output_buffer); + var output = &output_writer.interface; + + const url = try std.fmt.allocPrint(allocator, "https://adventofcode.com/2025/day/{}/input", .{day}); + defer allocator.free(url); + const session_cookie_header = try std.fmt.allocPrint(allocator, "session={s}", .{ + std.posix.getenv("AOC_SESSION") orelse return error.MissingAocSession, + }); + defer allocator.free(session_cookie_header); + var client = std.http.Client{ .allocator = allocator }; + const result = try client.fetch(.{ + .location = .{ .url = url }, + .response_writer = output, + .extra_headers = &[_]std.http.Header{ + .{ .name = "Cookie", .value = session_cookie_header }, + }, + }); + if (result.status != .ok) return error.InvalidStatusCode; + + try output.flush(); + return std.process.cleanExit(); +} diff --git a/aoc25/tools/generate_main.zig b/aoc25/tools/generate_main.zig new file mode 100644 index 0000000..f2ba9d0 --- /dev/null +++ b/aoc25/tools/generate_main.zig @@ -0,0 +1,43 @@ +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(); + var output_buffer: [512]u8 = undefined; + var output_writer = output_file.writer(&output_buffer); + const output = &output_writer.interface; + + try output.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); + \\ var stdout_writer = std.fs.File.stdout().writer(&.{{}}); + \\ const stdout = &stdout_writer.interface; + \\ try stdout.print("{{}}\n", .{{output}}); + \\}} + , + .{part}, + ); + try output.flush(); + return std.process.cleanExit(); +} |
