diff options
| author | ame <[email protected]> | 2025-12-06 04:25:12 -0600 |
|---|---|---|
| committer | ame <[email protected]> | 2025-12-06 04:25:12 -0600 |
| commit | eb378f5ccdcf9a455d1a424e702bdd3cebf449f8 (patch) | |
| tree | 281756a98076980872055d843a327bc69de3a36b /src/day-6/part-1.zig | |
| parent | 610b11cc5d32b9d19acf0809535183852fb77fc9 (diff) | |
day 6
Diffstat (limited to 'src/day-6/part-1.zig')
| -rw-r--r-- | src/day-6/part-1.zig | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/day-6/part-1.zig b/src/day-6/part-1.zig new file mode 100644 index 0000000..9db35f3 --- /dev/null +++ b/src/day-6/part-1.zig @@ -0,0 +1,71 @@ +const std = @import("std"); + +const problem = struct {n: std.ArrayList(u64), mult: bool}; + +pub fn op(alloc: std.mem.Allocator, list: *std.ArrayList(problem), chunk: usize, count: u64, slice: []u8) !void { + if(slice[0] == '+' or slice[0] == '*'){ + list.items[chunk].mult = slice[0] == '*'; + } else { + const n: u64 = try std.fmt.parseInt(u64, slice, 10); + + if(count == 0) { + var l = std.ArrayList(u64).init(alloc); + try l.append(n); + try list.append(problem{.n = l, .mult = false}); + } + else try list.items[chunk].n.append(n); + } +} + +pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + const alloc = gpa.allocator(); + + const path = "input.txt"; + const fp = try std.fs.cwd().openFile(path, .{.mode = std.fs.File.OpenMode.read_only}); + defer fp.close(); + var reader = fp.reader(); + + var buffer: [8000]u8 = undefined; + + var list = std.ArrayList(problem).init(alloc); + defer list.deinit(); + defer for(list.items) |v| v.n.deinit(); + + var count: u64 = 0; + + while(try reader.readUntilDelimiterOrEof(&buffer, '\n')) |line| : (count += 1) { + var i: usize = 0; + var chunk: usize = 0; + while(i < line.len){ + while(i < line.len and line[i] == ' ') : (i += 1){} + + if(std.mem.indexOf(u8, line[i..], " ")) |ind| { + try op(alloc, &list, chunk, count, line[i..i + ind]); + i = i + ind; + chunk += 1; + } else { + if(line[i..].len != 0){ + try op(alloc, &list, chunk, count, line[i..]); + } + break; + } + } + } + + var total: u64 = 0; + + for(list.items) |v| { + var n: u64 = 0; + if(v.mult){ + n = 1; + for(v.n.items) |a| n *= a; + } else { + for(v.n.items) |a| n += a; + } + total += n; + } + + std.debug.print("{d}\n", .{total}); +} |
