diff options
| author | xander <xander@biltopia.org> | 2025-12-07 13:12:06 +0100 |
|---|---|---|
| committer | xander <xander@biltopia.org> | 2025-12-07 13:12:06 +0100 |
| commit | 516e6ed4a9066fa43d6159b2a0ec58416ab28013 (patch) | |
| tree | 9925207e97b9e6e1fd83a55bdb878c43071cf73a /src/day06.zig | |
| download | aoc2025-516e6ed4a9066fa43d6159b2a0ec58416ab28013.tar.xz aoc2025-516e6ed4a9066fa43d6159b2a0ec58416ab28013.zip | |
solve up to day 7
Diffstat (limited to 'src/day06.zig')
| -rw-r--r-- | src/day06.zig | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/src/day06.zig b/src/day06.zig new file mode 100644 index 0000000..4105800 --- /dev/null +++ b/src/day06.zig @@ -0,0 +1,100 @@ +const std = @import("std"); +const print = std.debug.print; + +pub fn solve(part: []u8, reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + if (std.mem.eql(u8, part, "1")) { + try part1(reader, allocator); + } else { + try part2(reader, allocator); + } +} + +fn part1(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + var output: usize = 0; + var problems = try std.ArrayList(std.ArrayList(usize)).initCapacity(allocator, 0); + defer problems.deinit(allocator); + + while (reader.takeDelimiter('\n')) |line| { + if (line == null) { + break; + } + + var split = std.mem.splitScalar(u8, line.?, ' '); + var n: usize = 0; + while(split.next()) |part| { + if (part.len > 0){ + + if (part[0] == '+') { + for(problems.items[n].items) |number| { + output += number; + } + problems.items[n].deinit(allocator); + } else if (part[0] == '*') { + var tmp: usize = 1; + for(problems.items[n].items) |number| { + tmp *= number; + } + output += tmp; + problems.items[n].deinit(allocator); + } else { + const number = try std.fmt.parseInt(usize, part, 10); + + if (n >= problems.items.len) { + try problems.append(allocator, try std.ArrayList(usize).initCapacity(allocator, 0)); + } + + try problems.items[n].append(allocator, number); + } + + n += 1; + } + } + + } else |_| {} + + print("{d}\n", .{output}); +} + + +fn part2(reader: *std.Io.Reader, allocator: std.mem.Allocator) !void { + var output: usize = 0; + var problems = try std.ArrayList([]u8).initCapacity(allocator, 0); + defer problems.deinit(allocator); + + while (reader.takeDelimiter('\n')) |line| { + if (line == null) { + break; + } + + try problems.append(allocator, line.?); + } else |_| {} + + + var n: usize = 0; + var accum: usize = 1; + var operator = problems.items[problems.items.len - 1][0]; + while(n < problems.items[0].len) { + var number: usize = 0; + for (0..problems.items.len - 1) |i| { + if (problems.items[i][n] != ' ') { + number *= 10; + number += problems.items[i][n] - '0'; + } + } + + n += 1; + if (number == 0) { + if (operator == '*') { + output += accum; + } + operator = problems.items[problems.items.len - 1][n]; + accum = 1; + } else if (operator == '+') { + output += number; + } else { + accum *= number; + } + } + + print("{d}\n", .{output}); +} |
