about summary refs log tree commit diff
path: root/aoc/2021/10/part-one.zig
diff options
context:
space:
mode:
Diffstat (limited to 'aoc/2021/10/part-one.zig')
-rw-r--r--aoc/2021/10/part-one.zig34
1 files changed, 34 insertions, 0 deletions
diff --git a/aoc/2021/10/part-one.zig b/aoc/2021/10/part-one.zig
new file mode 100644
index 0000000..27ac20c
--- /dev/null
+++ b/aoc/2021/10/part-one.zig
@@ -0,0 +1,34 @@
+const Stack = @import("stack.zig").Stack;
+const page_allocator = std.heap.page_allocator;
+const print = std.debug.print;
+const std = @import("std");
+const tokenize = std.mem.tokenize;
+
+pub fn main() !void {
+    var input = tokenize(@embedFile("input"), "\n");
+    var max_len: usize = 0;
+    while (input.next()) |line| {
+        if (line.len > max_len)
+            max_len = line.len;
+    }
+    var stack = try Stack(u8).alloc(page_allocator, max_len);
+    defer stack.free();
+
+    var sum: usize = 0;
+    defer print("{}\n", .{ sum });
+    input.reset();
+    while (input.next()) |line| {
+        for (line) |c|
+            switch (c) {
+                '(', '[', '{', '<' => stack.push(c),
+                else => if (stack.pop() ^ c > 6) {
+                    sum += @as(usize, switch (c) {
+                        ')' => 3, ']' => 57, '}' => 1197, '>' => 25137,
+                        else => unreachable,
+                    });
+                    break;
+                },
+            };
+        stack.reset();
+    }
+}