diff options
Diffstat (limited to 'aoc24/src/day1p2.zig')
-rw-r--r-- | aoc24/src/day1p2.zig | 51 |
1 files changed, 0 insertions, 51 deletions
diff --git a/aoc24/src/day1p2.zig b/aoc24/src/day1p2.zig deleted file mode 100644 index 91b99fa..0000000 --- a/aoc24/src/day1p2.zig +++ /dev/null @@ -1,51 +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 - ) == 31); -} - -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.AutoHashMap(u32, u16).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); - const entry = try rights.getOrPut(right); - if (entry.found_existing) - entry.value_ptr.* += 1 - else - entry.value_ptr.* = 1; - } - - var sum: u32 = 0; - for (lefts.items) |x| { - const count: u32 = @intCast(rights.get(x) orelse 0); - sum += x * count; - } - - return sum; -} |