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/day03.zig | |
| download | aoc2025-516e6ed4a9066fa43d6159b2a0ec58416ab28013.tar.xz aoc2025-516e6ed4a9066fa43d6159b2a0ec58416ab28013.zip | |
solve up to day 7
Diffstat (limited to 'src/day03.zig')
| -rw-r--r-- | src/day03.zig | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/day03.zig b/src/day03.zig new file mode 100644 index 0000000..c91e60a --- /dev/null +++ b/src/day03.zig @@ -0,0 +1,83 @@ +const std = @import("std"); +const print = std.debug.print; + +pub fn solve(part: []u8, reader: *std.Io.Reader, _: std.mem.Allocator) !void { + if (std.mem.eql(u8, part, "1")) { + try part1(reader); + } else { + try part2(reader); + } +} + + +fn part1(reader: *std.Io.Reader) !void { + var output: usize = 0; + while (reader.takeDelimiter('\n')) |line| { + if (line.?.len == 0){ + break; + } + + var max1: usize = 0; + var in1: usize = 0; + var max2: usize = 0; + + for (line.?, 0..) |b, index| { + const value: u8 = b - '0'; + if (value > max1) { + max2 = max1; + max1 = value; + in1 = index; + } else if (value > max2) { + max2 = value; + } + } + + if (in1 < line.?.len - 1){ + max2 = 0; + for (line.?[in1 + 1..]) |b| { + const value: u8 = b - '0'; + if (value > max2) { + max2 = value; + } + } + output += max1 * 10 + max2; + } else { + output += max2 * 10 + max1; + } + + } else |_| { + } + print("{d}\n", .{output}); +} + +fn part2(reader: *std.Io.Reader) !void { + var output: usize = 0; + while (reader.takeDelimiter('\n')) |line| { + var joltage: usize = 0; + if (line.?.len == 0){ + break; + } + + + var last_index: usize = 0; + for (0..12) |i| { + var max: usize = 0; + var max_index: usize = 0; + for (line.?[last_index .. line.?.len - 11 + i], 0..) |b, index| { + const value: u8 = b - '0'; + if (value > max) { + max = value; + max_index = index; + } + } + + last_index += max_index + 1; + joltage *= 10; + joltage += max; + } + output += joltage; + + } else |_| { + } + print("{d}\n", .{output}); +} |
