From eb378f5ccdcf9a455d1a424e702bdd3cebf449f8 Mon Sep 17 00:00:00 2001 From: ame Date: Sat, 6 Dec 2025 04:25:12 -0600 Subject: day 6 --- src/day-6/part-1.zig | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/day-6/part-1.zig (limited to 'src/day-6/part-1.zig') 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}); +} -- cgit v1.2.3