diff options
author | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2021-12-10 18:48:20 +0700 |
---|---|---|
committer | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2021-12-10 18:48:20 +0700 |
commit | f53ac491b1ec74ad9c44d20065517467c1877190 (patch) | |
tree | 33494f5bd7d8c72dade242c6862cb1bc7f095ab3 /aoc/2021/10/part-one.zig | |
parent | 1606066809130d544aaf722d617a1df5670602cb (diff) | |
download | cp-f53ac491b1ec74ad9c44d20065517467c1877190.tar.gz |
[aoc/2021] Finish day 10
Diffstat (limited to 'aoc/2021/10/part-one.zig')
-rw-r--r-- | aoc/2021/10/part-one.zig | 34 |
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(); + } +} |