diff options
Diffstat (limited to 'aoc24/src/day1p1.zig')
-rw-r--r-- | aoc24/src/day1p1.zig | 49 |
1 files changed, 0 insertions, 49 deletions
diff --git a/aoc24/src/day1p1.zig b/aoc24/src/day1p1.zig deleted file mode 100644 index fba4b8c..0000000 --- a/aoc24/src/day1p1.zig +++ /dev/null @@ -1,49 +0,0 @@ -const std = @import("std"); - -pub fn main() !void { - const input = @embedFile("1.txt"); - try std.fmt.format(std.io.getStdOut().writer(), "{}\n", .{try run(input)}); -} - -test { - std.debug.assert(try run( - \\3 4 - \\4 3 - \\2 5 - \\1 3 - \\3 9 - \\3 3 - ) == 11); -} - -pub fn run(input: []const u8) !u32 { - var lines = std.mem.split(u8, input, "\n"); - - var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); - defer arena.deinit(); - const allocator = arena.allocator(); - - var lefts = std.ArrayList(u32).init(allocator); - defer lefts.deinit(); - var rights = std.ArrayList(u32).init(allocator); - defer rights.deinit(); - - while (lines.next()) |line| { - if (line.len == 0) continue; - var words = std.mem.split(u8, line, " "); - const left = try std.fmt.parseInt(u32, words.next() orelse return error.InvalidInput, 10); - const right = try std.fmt.parseInt(u32, words.next() orelse return error.InvalidInput, 10); - try lefts.append(left); - try rights.append(right); - } - - std.mem.sort(u32, lefts.items, {}, std.sort.asc(u32)); - std.mem.sort(u32, rights.items, {}, std.sort.asc(u32)); - - var sum: u32 = 0; - for (lefts.items, rights.items) |l, r| { - sum += @max(l, r) - @min(l, r); - } - - return sum; -} |